计算机等级考试二级C语言上机题集(第36~40套)
第36套
1.程序填空题
给定程序中,函数fun的功能是:统计长整数n的各位上出现数字1、2、3的次数,并通过全局变量c1、c2、c3返回主函数。
例如,当n=123114350时,结果为:c1=3 c2=1 c3=2。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> int c1,c2,c3; void fun(long n) { c1 = c2 = c3 = 0; while (n) { /**********found**********/ switch(___1___) { /**********found**********/ case 1: c1++;___2___; /**********found**********/ case 2: c2++;___3___; case 3: c3++; } n /= 10; } } int main() { long n=123114350L; fun(n); printf("\nThe result :\n"); printf("n=%ld c1=%d c2=%d c3=%d\n",n,c1,c2,c3); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。
例如,当s所指字符串为:ABCDE时,则t中的字符串应为:ABCDEEDCBA。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> void fun (char *s,char *t) { int i,sl; sl=strlen(s); /************found************/ for (i=0;i<=sl;i++) t[i]=s[i]; for(i=0;i<sl;i++) t[sl+i]=s[sl-i-1]; /************found************/ t[sl]='\0'; } int main() { char s[100],t[100]; printf("\nPlease enter string s:"); scanf("%s",s); fun(s,t); printf("The result is:%s\n",t); return 0; }
3.程序设计题
编写函数fun,它的功能是:求出二维数组tt每列中的最小元素,并依此放入pp所指的一维数组中。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #define M 3 #define N 4 void NONO(void); void fun(int tt[M][N],int pp[N]) { } int main() { int t[M][N]={{22,45,56,30},{19,33,45,38},{20,22,66,40}}; int p[N],i,j,k; printf("The original data is:\n"); for (i=0;i<M;i++) { for (j=0;j<N;j++) printf("%6d",t[i][j]); printf("\n"); } fun(t,p); printf("\nThe result is:\n"); for(k=0;k<N;k++) printf("%4d",p[k]); printf("\n"); NONO( ); return 0; } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ int i, j, k, m, t[M][N], p[N] ; FILE *rf, *wf ; rf = fopen("in.dat", "r") ; wf = fopen("out.dat", "w") ; for(m = 0 ; m < 10 ; m++) { for( i=0; i<M; i++ ) { for( j=0; j<N; j++ ) fscanf (rf, "%6d", &t[i][j]); } fun ( t, p ) ; for ( k = 0; k < N; k++ ) fprintf (wf, " %4d ", p[ k ] ) ; fprintf(wf, "\n") ; } fclose(rf) ; fclose(wf) ; }
1.(1)n%10 (2)break (3)break 2. for (i=0;i<=sl-1;i++) 或 for (i=0;i<sl;i++) t[2*sl]='\0'; 3. void fun(int tt[M][N],int pp[N]) { int i,j,min; for (j=0;j<N;j++) { min=tt[0][j]; for (i=1;i<M;i++) if (min>tt[i][j]) min=tt[i][j]; pp[j]=min; } }
第37套
1.程序填空题
给定程序中,函数fun的功能是:在形参s所指字符串中每个数字字符之后插入一个*号。
例如,形参s所指的字符串为:def35adh3kjsdf7,执行结果为:def3*5*adh3*kjsdf7*。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> void fun(char *s) { int i, j, n; for(i=0; s[i]!='\0'; i++) /**********found**********/ if(s[i]>='0' ___1___ s[i]<='9') { n=0; /**********found**********/ while(s[i+1+n]!= ___2___) n++; for(j=i+n+1; j>i; j--) /**********found**********/ s[j+1]= ___3___; s[j+1]='*'; i=i+1; } } int main() { char s[80]="ba3a54cd23a"; printf("\nThe original string is : %s\n",s); fun(s); printf("\nThe result is : %s\n",s); return 0; }
2.程序修改题
某数列中,第1项值为3,后一项都比前一项的值增5。给定程序中,函数fun的功能是:计算前n(4<n<50)项的累加和,每累加一次把被4除后余2的当前累加值放入数组中,符合此条件的累计值的个数作为函数返回值。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #define N 20 int fun(int n,int *a) { int i,j,k,sum; /**************found**************/ sum=j==0; for(k=3,i=0;i<n;i++,k+=5) { sum=sum+k; /**************found**************/ if(sum%4=2) a[j++]=sum; } return j; } int main() { int a[N],d,n,i; printf("\nEnter n (4<n<=50): "); scanf("%d",&n); d=fun(n,a); printf("\n\nThe result :\n"); for(i=0; i<d; i++) printf("%6d",a[i]); printf("\n"); return 0; }
3.程序设计题
编写函数fun,它的功能是:计算
例如,在主函数中从键盘输入8后,输出为:s=0.662872。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); double fun(int n) { } int main() { int n; double s; printf("\nInput n: "); scanf("%d",&n); s=fun(n); printf("\ns=%f\n",s); NONO(); return 0; } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *rf, *wf ; int n, i ; double s ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(rf, "%d", &n) ; s = fun(n) ; fprintf(wf, "%f\n", s) ; } fclose(rf) ; fclose(wf) ; }
1.(1)&& (2)'\0' (3)s[j] 2. sum=j=0; if(sum%4==2) 3. double fun(int n) { double s=0.0; int i,t=1; for (i=1;i<=2*n;i++) { s+=1.0*t/i; t=-t; } return s; }
第38套
1.程序填空题
给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <stdlib.h> #define N 8 typedef struct list { int data; struct list *next; } SLIST; void fun(SLIST *h) { SLIST *p, *q; p=h->next; if (p!=NULL) { q=p->next; while(q!=NULL) { if (p->data==q->data) { p->next=q->next; /**********found**********/ free(___1___); /**********found**********/ q=p->___2___; } else { p=q; /**********found**********/ q=q->___3___; } } } } SLIST *creatlist(int *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i<N; i++) { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; p->next=q; p=q; } p->next=0; return h; } void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf("\nThe list is NULL!\n"); else { printf("\nHead"); do { printf("->%d",p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } } int main( ) { SLIST *head; int a[N]={1,2,2,3,4,4,4,5}; head=creatlist(a); printf("\nThe list before deleting :\n"); outlist(head); fun(head); printf("\nThe list after deleting :\n"); outlist(head); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:将m(1<=m<=10)个字符串连接起来,组成一个新串,放入pt所指字符串中。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> void fun(char str[][10], int m, char *pt) { /************found************/ Int k, q, i ; for ( k = 0; k < m; k++ ) { q = strlen ( str [k] ); for (i=0; i<q; i++) /************found************/ pt[i] = str[k,i] ; pt += q ; pt[0] = 0 ; } } int main() { int n, h ; char s[10][10], p[120] ; printf( "\nPlease enter n:" ) ; scanf("%d", &n) ; printf("\nPlease enter %d string:\n",n); for (h=0; h<n; h++) scanf("%s", s[h]); fun(s, n, p) ; printf( "\nThe result is : %s\n", p) ; return 0; }
3.程序设计题
程序定义了一个N*N的二维数组,并在主函数中自动赋值。编写函数fun,它的功能是:使数组左下角元素中的值全部置成0。
例如,N=3时,a数组中的值为
1 9 7
2 3 8
4 5 6
则返回主函数后a数组中的值应为
0 9 7
0 0 8
0 0 0
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <stdlib.h> #define N 5 void NONO(void); void fun(int a[][N]) { } int main() { int a[N][N], i, j; printf("***** The array *****\n"); for ( i =0; i<N; i++ ) { for ( j =0; j<N; j++ ) { a[i][j] = rand()%10; printf( "%4d", a[i][j] ); } printf("\n"); } fun(a); printf ("THE RESULT\n"); for ( i =0; i<N; i++ ) { for ( j =0; j<N; j++ ) printf( "%4d", a[i][j] ); printf("\n"); } NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *rf, *wf ; int i, j, a[5][5] ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 5 ; i++) for(j = 0 ; j < 5 ; j++) fscanf(rf, "%d ", &a[i][j]) ; fun(a) ; for ( i = 0; i < 5; i++ ) { for ( j = 0; j < 5; j++ ) fprintf(wf, "%4d", a[i][j]); fprintf(wf, "\n"); } fclose(rf) ; fclose(wf) ; }
1.(1)q (2)next (3)next 2. int k, q, i ; pt[i] = str[k][i] ; 3. void fun(int a[][N]) { int i,j; for (i=0;i<N;i++) for (j=0;j<=i;j++) a[i][j]=0; }
第39套
1.程序填空题
给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile2.txt中,用-1(独立一行)作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <string.h> #include <stdlib.h> void WriteText(FILE *); void ReadText(FILE *); int main() { FILE *fp; if((fp=fopen("myfile2.txt","w"))==NULL) { printf(" open fail!!\n"); exit(0); } WriteText(fp); fclose(fp); if((fp=fopen("myfile2.txt","r"))==NULL) { printf(" open fail!!\n"); exit(0); } ReadText(fp); fclose(fp); } /**********found**********/ void WriteText(FILE ___1___) { char str[81]; printf("\nEnter string with -1 to end :\n"); gets(str); while(strcmp(str,"-1")!=0) { /**********found**********/ fputs(___2___,fw); fputs("\n",fw); gets(str); } } void ReadText(FILE *fr) { char str[81]; printf("\nRead file and output to screen :\n"); fgets(str,81,fr); while( !feof(fr) ) { /**********found**********/ printf("%s",___3___); fgets(str,81,fr); } }
2.程序修改题
给定程序中,函数fun的功能是:从3个红球,5个白球,6个黑球中任取8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> int fun() { int i,j,k,sum=0; printf("\nThe result :\n\n"); /**************found**************/ for(i=0; i<=3; i++) { for(j=1; j<=5; j++) { k=8-i-j; /**************found**************/ if(K>=0 && K<=6) { sum=sum+1; printf("red:%4d white:%4d black:%4d\n",i,j,k); } } } return sum; } int main() { int sum; sum=fun(); printf("sum =%4d\n\n",sum); return 0; }
3.程序设计题
编写函数fun,它的功能是:计算下列多项式的值
S=1+1/1!+1/2!+…+1/n!
例如,n=15时,函数返回值为:2.718282。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); double fun(int n) { } int main() { int n; double s; printf("Input n: "); scanf("%d",&n); s=fun(n); printf("s=%f\n",s); NONO(); return 0; } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *rf, *wf ; int n, i ; double s ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(rf, "%d", &n) ; s = fun(n) ; fprintf(wf, "%f\n", s) ; } fclose(rf) ; fclose(wf) ; }
1.(1)*fw (2)str (3)str 2. for(i=1; i<=3; i++) if(k>=0 && k<=6) 3.double fun(int n) { double s=1.0,t=1.0; int i; for (i=1;i<=n;i++) { t=t/i; s+=t; } return s; }
第40套
1.程序填空题
给定程序中,函数fun的功能是:求ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。Ss所指字符串数组中共有M个字符串,且串长<N。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <string.h> #define M 5 #define N 20 /**********found**********/ int fun(char (*ss) ___1___, int *n) { int i, k=0, len=0; for(i=0; i<M; i++) { len=strlen(ss[i]); /**********found**********/ if(i==0) *n=___2___; if(len>*n) { /**********found**********/ ___3___; k=i; } } return(k); } int main() { char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"}; int n,k,i; printf("\nThe original strings are :\n"); for(i=0;i<M;i++)puts(ss[i]); k=fun(ss,&n); printf("\nThe length of longest string is : %d\n",n); printf("\nThe longest string is : %s\n",ss[k]); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求每复制3个字符之后插入一个空格。
例如,调用fun函数之前a字符串为:ABCDEFGHIJK,调用函数后,字符数组b中的内容为:ABC DEF GHI JK。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> void fun(char *p, char *b) { int i, k=0; while(*p) { i=1; while( i<=3 && *p ) { /**********found**********/ b[k]=p; k++; p++; i++; } if(*p) { /**********found**********/ b[k++]=" "; } } b[k]='\0'; } int main() { char a[80],b[80]; printf("Enter a string: "); gets(a); printf("The original string: "); puts(a); fun(a,b); printf("\nThe string after insert space: "); puts(b); printf("\n\n"); return 0; }
3.程序设计题
N名学生的成绩已在主函数中放入一个带头结点的链表中,h指向链表的头结点。编写函数fun,它的功能是:求出平均分,由函数值返回。
例如,若学生的成绩是:85,,7,69,85,91,72,64,87,则平均分为:78.625。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <stdlib.h> #define N 8 void NONO(void); struct slist { double s; struct slist *next; }; typedef struct slist STREC; double fun(STREC *h) { } STREC * creat(double *s) { STREC *h,*p,*q; int i=0; h=p=(STREC*)malloc(sizeof(STREC));p->s=0; while(i<N) { q=(STREC*)malloc(sizeof(STREC)); q->s=s[i]; i++; p->next=q; p=q; } p->next=0; return h; } void outlist(STREC *h) { STREC *p; p=h->next; printf("head"); do { printf("->%4.1f",p->s); p=p->next; } while(p!=0); printf("\n\n"); } int main() { double s[N]={85,76,69,85,91,72,64,87},ave; STREC *h; h=creat( s ); outlist(h); ave=fun( h ); printf("ave= %6.3f\n",ave); NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *in, *out ; int i,j ; double s[N],ave; STREC *h ; in = fopen("in.dat","r") ; out = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { for(j=0 ; j<N; j++) fscanf(in,"%lf,",&s[j]); h=creat( s ); ave=fun( h ); fprintf(out, "%6.3lf\n", ave) ; } fclose(in) ; fclose(out) ; }
1.(1)[N] (2)len (3)*n=len 2. b[k]=*p; b[k++]=' '; 3. double fun(STREC *h) { int n=0; double sum=0.0; STREC *p; p=h->next; while (p!=NULL) { sum+=p->s; n++; p=p->next; } return sum/n; }