第51套
1.程序填空题
给定程序中,函数fun的功能是将不带头结点的单向链表逆置。即若原链表从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <stdlib.h> #define N 5 typedef struct node { int data; struct node *next; } NODE; /**********found**********/ __1__ fun(NODE *h) { NODE *p, *q, *r; p = h; if (p == NULL) return NULL; q = p->next; p->next = NULL; /**********found**********/ while (__2__) { r = q->next; q->next = p; p = q; /**********found**********/ q = __3__ ; } return p; } NODE *creatlist(int a[]) { NODE *h,*p,*q; int i; h=NULL; for(i=0; i<N; i++) { q=(NODE *)malloc(sizeof(NODE)); q->data=a[i]; q->next = NULL; if (h == NULL) h = p = q; else { p->next = q; p = q; } } return h; } void outlist(NODE *h) { NODE *p; p=h; if (p==NULL) printf("The list is NULL!\n"); else { printf("\nHead "); do { printf("->%d", p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } } int main() { NODE *head; int a[N]={2,4,6,8,10}; head=creatlist(a); printf("\nThe original list:\n"); outlist(head); head=fun(head); printf("\nThe list after inverting :\n"); outlist(head); return 0; }
2.程序修改题
给定程序中,函数fun的功能是将字符串s中位于奇数位置的字符或ASCII码为偶数的字符放入字符串t中(规定第1个字符放在第0位中)。
例如,字符串中的数据为:AABBCCDDEEFF,则输出应为:ABBCDDEFF。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> #define N 80 void fun(char *s, char t[]) { int i, j=0; for(i=0; i<strlen(s); i++) /***********found**********/ if(i%2 && s[i]%2==0) t[j++]=s[i]; /***********found**********/ t[i]='\0'; } int main() { char s[N], t[N]; printf("\nPlease enter string s : "); gets(s); fun(s, t); printf("\nThe result is : %s\n",t); return 0; }
3.程序设计题
编写函数fun,其功能是将M行N列的二维数组中的按列的顺序依次存放到一维数组中。
例如,二维数组中的数据为
33 33 33 33
44 44 44 44
55 55 55 55
则一维数组中的内容应为:
33 44 55 33 44 55 33 44 55 33 44 55。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); void fun(int (*s)[10], int *b, int *n, int mm, int nn) { } int main() { int w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j; int a[100]={0}, n=0; printf("The matrix:\n"); for(i=0; i<3; i++) { for(j=0;j<4; j++) printf("%3d",w[i][j]); printf("\n"); } fun(w,a,&n,3,4); printf("The A array:\n"); for(i=0;i<n;i++) printf("%3d",a[i]); printf("\n\n"); NONO(); return 0; } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *rf, *wf ; int i, j, k ; int w[10][10], a[100], n = 0, mm, nn ; rf = fopen("in.dat", "r") ; wf = fopen("out.dat", "w") ; for(k = 0 ; k < 5 ; k++) { fscanf(rf, "%d %d", &mm, &nn) ; for(i = 0 ; i < mm ; i++) for(j = 0 ; j < nn ; j++) fscanf(rf, "%d", &w[i][j]) ; fun(w, a, &n, mm, nn) ; for(i = 0 ; i < n ; i++) fprintf(wf, "%3d", a[i]); fprintf(wf, "\n") ; } fclose(rf) ; fclose(wf) ; }
1.(1)NODE * (2)q!=NULL (3)r 2. if(i%2 || s[i]%2==0) t[j]='\0'; 3. void fun(int (*s)[10], int *b, int *n, int mm, int nn) { int i,j,k=0; for (j=0;j<nn;j++) for (i=0;i<mm;i++) b[k++]=s[i][j]; *n=k; }
第51套参考答案
第52套
1.程序填空题
给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为非负数),将所指数组中大于平均值的数据移至数组的前部,小于等于平均值的数据移至数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。
例如,有10个非负数:41 17 34 0 19 24 28 8 12 14,平均值为:19.700000
移动后的输出为:41 34 24 28 17 0 19 8 12 14。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdlib.h> #include <stdio.h> #define N 10 double fun(double *x) { int i, j; double s, av, y[N]; s=0; for (i=0; i<N; i++) s=s+x[i]; /**********found**********/ av=__1__; for(i=j=0; i<N; i++) if( x[i]>av ) { /**********found**********/ y[__2__]=x[i]; x[i]=-1; } for(i=0; i<N; i++) /**********found**********/ if( x[i]!= __3__) y[j++]=x[i]; for(i=0; i<N; i++)x[i] = y[i]; return av; } int main() { int i; double x[N]; for(i=0; i<N; i++) { x[i]=rand()%50; printf("%4.0f ",x[i]); } printf("\n"); printf("\nThe average is: %f\n",fun(x)); printf("\nThe result :\n",fun(x)); for(i=0; i<N; i++) printf("%5.0f ",x[i]); printf("\n"); return 0; }
2.程序修改题
在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。给定程序中,函数fun的功能是:计算数组元素中值为正数的平均值(不包括0)。
例如,数组中元素值依次为:39,-47,21,2,-8,15,0,则程序的运行结果为:19.250000。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> double fun ( int x[]) { /************found************/ int sum = 0.0; int c=0, i=0; while (x[i] != 0) { if (x[i] > 0) { sum += x[i]; c++; } i++; } /************found************/ sum \= c; return sum; } int main( ) { int x[1000]; int i=0; printf( "\nPlease enter some data (end with 0): " ); do { scanf("%d", &x[i]); } while (x[i++] != 0); printf("%f\n", fun(x)); return 0; }
3.程序设计题
编写函数fun,其功能是:根据以下公式计算S,计算结果作为函数值返回,n通过形参传入。
例如,若n=11,函数返回值为1.833333。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void) float fun(int n) { } int main() { int n; float s; printf("\nPlease enter N:"); scanf("%d", &n); s = fun(n); printf("the result is: %f\n", s); NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, n ; float s; fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(fp, "%d", &n) ; s = fun(n) ; fprintf(wf, "%f\n", s) ; } fclose(fp) ; fclose(wf) ; }
1.(1)s/N (2)j++ (3)-1 2. double sum = 0.0; sum /= c; 3. float fun(int n) { int i; float s=0,t=0; for (i=1;i<=n;i++) { t=t+i; s=s+1/t; } return s; }
第52套参考答案
第53套
1.程序填空题
给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形参t所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。
例如,形参s所指字符串为:abcdefgh,n的值为5,程序执行后t所指字符数组中的字符串应为:defgh。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <string.h> #define N 80 void fun(char *s, int n, char *t) { int len,i,j=0; len=strlen(s); /**********found**********/ if(n>=len) strcpy(__1__); else { /**********found**********/ for(i=len-n; i<=len-1; i++) t[j++]= __2__ ; /**********found**********/ t[j]= __3__ ; } } int main() { char s[N],t[N]; int n; printf("Enter a string: "); gets(s); printf( "Enter n:"); scanf("%d",&n); fun(s,n,t); printf("The string t : "); puts(t); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数,并把该整数中各位上最大的数字值作为函数值返回。
例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> int fun(unsigned n, int *zero) { int count=0,max=0,t; do { t=n%10; /**************found**************/ if(t=0) count++; if(max<t) max=t; n=n/10; }while(n); /**************found**************/ zero=count; return max; } int main() { unsigned n; int zero,max; printf("\nInput n(unsigned): "); scanf("%d",&n); max = fun( n,&zero ); printf("\nThe result: max=%d zero=%d\n",max,zero); return 0; }
3.程序设计题
编写函数fun,其功能是:判断字符串是否为回文。若是,函数返回1,否则返回0。回文是指顺读和倒读都一样的字符串。
例如,字符串LEVEL是回文,则字符串12312就不是回文。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #define N 80 void NONO(void); int fun(char *str) { } int main() { char s[N] ; printf("Enter a string: ") ; gets(s) ; printf("\n\n") ; puts(s) ; if(fun(s)) printf(" YES\n") ; else printf(" NO\n") ; NONO() ; return 0; } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *rf, *wf ; int i ; char s[N] ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(rf, "%s", s) ; if(fun(s)) fprintf(wf, "%s YES\n", s) ; else fprintf(wf, "%s NO\n", s) ; } fclose(rf) ; fclose(wf) ; }
1.(1)t,s (2)s[i] (3)'\0' 2. if(t==0) *zero=count; 3. int fun(char *str) { int i,j; for (j=0;str[j]!='\0';j++); j--; for (i=0;i<=j;i++,j--) if (str[i]!=str[j]) return 0; return 1; }
第53套参考答案
第54套
1.程序填空题
给定程序中,函数fun的功能是:计算下列多项式的值
例如,当n=10时,输出结果为:-0.204491。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> double fun(int n) { int i, k; double s, t; s=0; /**********found**********/ k=__1__; for(i=1; i<=n; i++) { /**********found**********/ t=__2__; s=s+k*(2*i-1)*(2*i+1)/(t*t); /**********found**********/ k=k*__3__; } return s; } int main() { int n=-1; while(n<0) { printf("Please input(n>0): "); scanf("%d",&n); } printf("\nThe result is: %f\n",fun(n)); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:根据形参m的值(2<=m<=9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。
例如,若输入2,则输出
1 2
2 4
若输入4,则输出
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #define M 10 int a[M][M] = {0} ; /**************found**************/ fun(int **a, int m) { int j, k ; for (j = 0 ; j < m ; j++ ) for (k = 0 ; k < m ; k++ ) /**************found**************/ a[j][k] = k * j ; } int main ( ) { int i, j, n ; printf ( " Enter n : " ) ; scanf ("%d", &n ) ; fun ( a, n ) ; for ( i = 0 ; i < n ; i++) { for (j = 0 ; j < n ; j++) printf ("%4d", a[i][j]) ; printf ( "\n" ) ; } return 0; }
3.程序设计题
程序定义了N*N的二维数组,并在主函数中自动赋值。编写函数fun,其功能是:使数组左下三角元素中的值乘以n。
例如,若n的值为3,a数组中的值为
1 9 7
2 3 8
4 5 6
则返回主函数后a数组中的值应为
3 9 7
6 9 8
12 15 18
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <stdlib.h> #define N 5 void NONO(void); void fun ( int a[][N], int n) { } int main ( ) { int a[N][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"); } do n = rand()%10 ; while ( n >=3 ); printf("n = %4d\n",n); fun ( a, n ); 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, n, 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]) ; fscanf(rf, "%d", &n) ; fun(a, n) ; 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)1 (2)2*i (3)(-1) 2. void fun(int a[][M], int m) a[j][k] = (k+1) * (j+1) ; 3. void fun ( int a[][N], int n) { int i,j; for (i=0;i<N;i++) for (j=0;j<=i;j++) a[i][j]=a[i][j]*n; }
第54套参考答案
第55套
1.程序填空题
给定程序中,函数fun的功能是:将a所指3*5矩阵中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原来左边的各列依次绕到右边。
例如,有下列矩阵
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
若k为2,程序执行结果为
3 4 5 1 2
3 4 5 1 2
3 4 5 1 2
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define M 3 #define N 5 void fun(int (*a)[N],int k) { int i,j,p,temp; /**********found**********/ for(p=1; p<= __1__; p++) for(i=0; i<M; i++) { temp=a[i][0]; /**********found**********/ for(j=0; j< __2__ ; j++) a[i][j]=a[i][j+1]; /**********found**********/ a[i][N-1]= __3__; } } int main( ) { int x[M][N]={{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}},i,j; printf("The array before moving:\n\n"); for(i=0; i<M; i++) { for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n"); } fun(x,2); printf("The array after moving:\n\n"); for(i=0; i<M; i++) { for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n"); } return 0; }
2.程序修改题
给定程序中,函数fun的功能是:从s所指字符串中,找出t所指子串的个数作为函数值返回。
例如,当s所指字符串中的内容为:abcdabfab,t所指字符串的内容为:ab,则函数返回值为3。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> int fun(char *s,char *t) { int n; char *p,*r; n=0; while (*s) { p=s;r=t; while (*r) /************found************/ if(*r==*p) {r++;p++} else break; /************found************/ if(r=='\0') n++; s++; } return n; } int main() { char s[100],t[100]; int m; printf("\nPlease enter string S:"); scanf("%s",s); printf("\nPlease enter substring t:"); scanf("%s",t); m=fun(s,t); printf("\nThe result is: m=%d\n",m); return 0; }
3.程序设计题
编写函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。
例如,分别输入两个字符串:FirstString- 和 SecondString,程序输出:FirstString-SecondString。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); void fun(char p1[], char p2[]) { } int main() { char s1[80], s2[40] ; printf("Enter s1 and s2:\n") ; scanf("%s%s", s1, s2) ; printf("s1=%s\n", s1) ; printf("s2=%s\n", s2) ; printf("Invoke fun(s1,s2):\n") ; fun(s1, s2) ; printf("After invoking:\n") ; printf("%s\n", s1) ; NONO() ; return 0; } void NONO(void) {/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/ int i ; FILE *rf, *wf ; char s1[80], s2[40] ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(rf, "%s", s1) ; fscanf(rf, "%s", s2) ; fun(s1, s2) ; fprintf(wf, "%s\n", s1) ; } fclose(rf) ; fclose(wf) ; }
1.(1)k (2)N (3)temp 2. if(*r==*p) {r++;p++;} if(*r=='\0') 3. void fun(char p1[], char p2[]) { int i,j; for (i=0;p1[i]!='\0';i++); for (j=0;p2[j]!='\0';j++) p1[i++]=p2[j]; p1[i]='\0'; }
第55套参考答案