全国计算机二级C题库第41--50套 |
本题目如果下载后发现有错误的地方,请联系网站管理员:QQ121431055
考试时,上机操作题目有三套,基本操作题、简单应用题、综合应用题
第41套: 给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有 数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作 为函数值返回,在主函数中输出。 例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为: 30.500000 主函数中输出:m=30.0 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 10 double fun(double x[],double *av) { int i,j; double d,s; s=0; for(i=0; i /**********found**********/ __1__=s/N; d=32767; for(i=0; i if(x[i]<*av && *av - x[i]<=d){ /**********found**********/ d=*av-x[i]; j=__2__;} /**********found**********/ return __3__; } main() { int i; double x[N],av,m; for(i=0; i printf("\n"); m=fun(x,&av); printf("\nThe average is: %f\n",av); printf("m=% printf("\n"); } 解题思路: 第一处:计算好的平均值通过形参av返回,所以应填:*av。 第二处:计算小于平均值且最接近平均值的位置j,所以应填:i。 第三处:返回该数,所以应填:x[j]。 *************************************************** 给定程序MODI1.C中函数fun的功能是:根据整型形参n,计算如下公式的值。 例如,若 n=10,则应输出: 0.617977。 请改正程序中的语法错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程 序的结构! 给定源程序: #include /************found************/ int fun ( int n ) { float A=1; int i; /************found************/ for (i=2; i A = 1.0/(1+A); return A ; } main( ) { int n ; printf("\nPlease enter n: ") ; scanf("%d", &n ) ; printf("A%d=%f\n", n, fun(n) ) ; } 解题思路: 第一处:函数的返回是浮点型数,所以应改为:float fun(int n)。 第二处:for的终止条件应是i<=n。 *************************************************** 程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun,函数 的功能是:使数组右上三角元素中的值乘以m 。 例如:若m的值为2,a 数组中的值为 | 1 9 7 | | 2 18 14| a = | 2 3 8 | 则返回主程序后a数组中的值应为 | 2 6 16| | 4 5 6 | | 4 5 12| 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include #define N 5 int fun ( int a[][N], int m ) { } main ( ) { int a[N][N], m, i, j; printf("***** The array *****\n"); for ( i =0; i { for ( j =0; j { a[i][j] = rand() ; printf( "M", a[i][j] ); } printf("\n"); } do m = rand() ; while ( m>=3 ); printf("m = M\n",m); fun ( a ,m ); printf ("THE RESULT\n"); for ( i =0; i { for ( j =0; j printf("\n"); } NONO ( ); } 解题思路: 本题是利用两重循环给二维数组右上三角元素中的值乘以m。 参考答案: int fun ( int a[][N], int m ) { int i, j; for(i = 0 ; i < N ; i++) for(j = i ; j < N ; j++) a[i][j] *= m ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第42套: 给定程序中,函数fun的功能是: 将s所指字符串中的所有数字字符移到所有 非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,形 参s所指的字符串为:def35adh3kjsdf7。执行结果为:defadhkjsdf3537。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun(char *s) { int i, j=0, k=0; char t1[80], t2[80]; for(i=0; s[i]!='\0'; i++) if(s[i]>='0' && s[i]<='9') { /**********found**********/ t2[j]=s[i]; ___1___; } else t1[k++]=s[i]; t2[j]=0; t1[k]=0; /**********found**********/ for(i=0; i /**********found**********/ for(i=0; i<___3___; i++) s[k+i]=t2[i]; } main() { char s[80]="ba printf("\nThe original string is : %s\n",s); fun(s); printf("\nThe result is : %s\n",s); } 解题思路: t2是存放数字字符串,t1是存放非数字字符串。 第一处:t2存放数字字符串的位置是由j来控制的,每添加一个,j必须加1,所以应填:j++。 第二处:利用for循环把t1字符串添加到原字符串s中,所以应填:s[i]=t1[i]。 第三处:利用for循环把t2字符串添加到原字符串s的尾部,其中数字字符串的长度为j,所 以应填:j。 *************************************************** 给定程序MODI1.C中函数 fun 的功能是:用冒泡法对6个字符串按由小到大 的顺序进行排序。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define MAXLINE 20 fun ( char *pstr[6]) { int i, j ; char *p ; for (i = 0 ; i < 5 ; i++ ) { /**************found**************/ for (j = i + 1, j < 6, j++) { if(strcmp(*(pstr + i), *(pstr + j)) > 0) { p = *(pstr + i) ; /**************found**************/ *(pstr + i) = pstr + j ; *(pstr + j) = p ; } } } } main( ) { int i ; char *pstr[6], str[6][MAXLINE] ; for(i = 0; i < 6 ; i++) pstr[i] = str[i] ; printf( "\nEnter 6 string(1 string at each line): \n" ) ; for(i = 0 ; i < 6 ; i++) scanf("%s", pstr[i]) ; fun(pstr) ; printf("The strings after sorting:\n") ; for(i = 0 ; i < 6 ; i++) printf("%s\n", pstr[i]) ; } 解题思路: 第一处:for循环语句中缺少分号。 第二处:应该把pstr+j位置上的值赋值给*(pstr+i)上,所以应改为: *(pstr+i)=*(pstr+j);。 *************************************************** 请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回 此值。 例如,若输入字符串: 123412132,输入字符为: 1,则输出:3。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include #define M 81 int fun(char *ss, char c) { } main() { char a[M], ch; printf("\nPlease enter a string:"); gets(a); printf("\nPlease enter a char:"); ch = getchar(); printf("\nThe number of the char is: %d\n", fun(a, ch)); NONO ( ); }
解题思路: 本题是考察考生怎样从字符串中找出指定字符的个数。使用while循环语句来字符串是否结 束,如果没有结束,则判断当前字符是否是指定的字符,如果是指定的字符,则个数cnt加1, 直至字符串结束为止,最后由函数返回。 参考答案: int fun(char *ss, char c) { int cnt = 0 ; char *p = ss ; while(*p) { if(*p == c) cnt++ ; p++ ; } return cnt ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第43套: 给定程序中,函数fun的功能是:在形参ss所指字符串数组中查找与形参t所 指字符串相同的串,找到后返回该串在字符串数组中的位置(下标值),未找到 则返回-1。ss所指字符串数组中共有N个内容不同的字符串,且串长小于M。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 5 #define M 8 int fun(char (*ss)[M],char *t) { int i; /**********found**********/ for(i=0; i< __1__ ; i++) /**********found**********/ if(strcmp(ss[i],t)==0 ) return __2__ ; return -1; } main() { char ch[N][M]={"if","while","switch","int","for"},t[M]; int n,i; printf("\nThe original string\n\n"); for(i=0;i printf("\nEnter a string for search: "); gets(t); n=fun(ch,t); /**********found**********/ if(n== __3__) printf("\nDon't found!\n"); else printf("\nThe position is %d .\n",n); } 解题思路: 本题是考察在字符串查找指定的子串。 , 第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应 填:N。 第二处:在字符串已经找到,则返回字符串数组中的位置(下标值),所以应填:i。 第三处:如果没有发现,则显示没有找到信息,所以应填:-1。 *************************************************** 给定程序MODI1.C中函数fun的功能是:从整数1到55之间,选出能被3整除、 且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为 函数值返回。规定,函数中a1放个位数,a2放十位数。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include fun( int *b ) { int k,a1,a2,i=0; for(k=10; k<=55; k++) { /************found************/ a2=k/1O; a1=k-a2*10; if((k%3==0 && a2==5)||(k%3==0 && a1==5)) { b[i]=k; i++; } } /************found************/ return k; } main( ) { int a[100],k,m; m=fun( a ); printf("The result is :\n"); for(k=0; k } 解题思路: 第一处: 取当前变量k的十位数字上的数,所以应改为:a2=k/10;。 第二处: 要求统计个数并存入变量i中,最后返回i,所以应改为:return i;。 *************************************************** 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字 符串尾部的*号全部删除,前面和中间的*号不删除。 例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内 容应当是:****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun( char *a ) { } main() { char s[81]; printf("Enter a string:\n");gets(s); fun( s ); printf("The string after deleted:\n");puts(s); NONO(); } 解题思路: 本题是考察字符串的移动。 1. 使用while循环语句和字符串指针p扫描出尾部的*号。 2. 定义两个字符串中间变量s和t,其中s是存放*号后面的字符串,t是存放*号字符串。 3. 最后利用字符串拷贝和连接,重新组成字符串a。 参考答案: void fun( char *a ) { char *p = a ; while(*p) p++ ; p-- ; while(*p == '*') p-- ; p++ ; *p = 0 ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第44套: 函数fun的功能是进行数字字符转换。若形参ch中是数字字符'0'~'9', 则 '0'转换成'9','1'转换成'8','2'转换成'7',……,'9'转换成'0';若是其它 字符则保持不变;并将转换后的结果作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include /**********found**********/ ___1___ fun(char ch) { /**********found**********/ if (ch>='0' && ___2___) /**********found**********/ return '9'- (ch-___3___); return ch ; } main() { char c1, c2; printf("\nThe result :\n"); c1='2'; c2 = fun(c1); printf("c1=%c c2=%c\n", c1, c2); c1='8'; c2 = fun(c1); printf("c1=%c c2=%c\n", c1, c2); c1='a'; c2 = fun(c1); printf("c1=%c c2=%c\n", c1, c2); } 解题思路: 第一处:要求返回处理好的字符,所以应填:char。 第二处:判断该字符是否是数字,所以应填:ch<='9'。 第三处:只要减去'0'的ASCII值,即可得到要求的结果,所以应填:'0'。 *************************************************** 给定程序MODI1.C中函数fun的功能是:将p所指字符串中的所有字符复制到b 中,要求每复制三个字符之后插入一个空格。 例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK, 调用函数之后,字符数组b中的内容则为:ABC DEF GHI JK。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include 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'; } 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"); } 解题思路: 第一处:把指针p所指的值赋值给b[k]中。 第二处:把空格字符赋值给b[k++]中,而不是一个空格的字符串。 *************************************************** N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头 节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。 例如,若学生的成绩是:85,76,69,85,91,72,64,87, 则平均分应当 是:78.625。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include #define N 8 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 { q=(STREC*)malloc(sizeof(STREC)); q->s=s[i]; i++; p->next=q; p=q; } p->next=0; return h; } outlist( STREC *h) { STREC *p; p=h->next; printf("head"); do { printf("->% while(p!=0); printf("\n\n"); } 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= % NONO(); } 解题思路: 本题是计算链表结构中成绩的平均分。具体操作请看答案程序中的说明。 参考答案: #include #include double fun( STREC *h ) { STREC *p=h->next; /* 由于头结点中没有存放数据 */ double av=0.0; /* 对计算成绩平均值的变量进行初始化 */ int n = 0 ; while(p!=NULL) { /* 判断链表是否结束 */ av = av + p->s ; /* 对成绩进行累加 */ p=p->next; /* 到下一个结点位置 */ n++; /* 人数加1 */ } av /= n ; /* 计算成绩平均值 */ return av ; /* 返回成绩平均值 */ } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第45套: 函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、 a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回。例如: 若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后a 所指数组中的数据为:4、2、6、8,返回值为4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 9 int fun(int a[], int n) { int i,j; j = 0; for (i=0; i /**********found**********/ if (___1___== 0) { /**********found**********/ ___2___ = a[i]; j++; } /**********found**********/ return ___3___; } main() { int b[N]={9,1,4,2,3,6,5,8,7}, i, n; printf("\nThe original data :\n"); for (i=0; i n = fun(b, N); printf("\nThe number of even :%d\n", n); printf("\nThe even :\n"); for (i=0; i } 解题思路: 第一处:判断a[i]是否是偶数,若是,则仍保留在原数组中a[j],所以应填:a[i] % 2。 第二处:数组a中的元素位置由j来控制,每增加一个元素,则j加1,所以应填:a[j]。 第三处:返回删除奇数后a所指数组中数据的元素j,所以应填:j。 *************************************************** 给定程序MODI1.C中函数fun的功能是:按以下递归公式求函数值。 ┌ 10 (n=1) fun(n)=┥ └ fun(n-1)+2 (n>1) 例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include /************found************/ fun ( n ) { int c; /************found************/ if(n=1) c = 10 ; else c= fun(n-1)+2; return(c); } main() { int n; printf("Enter n : "); scanf("%d",&n); printf("The result : %d\n\n", fun(n)); } 解题思路: 第一处:形参n没有定义类型,所以应改为:fun (int n)。 第二处:判断相等的符号是==。 *************************************************** 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字 符串中尾部的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个, 则什么也不做, 字符串中间和前面的*号不删除。 例如,字符串中的内容为:****A*BC*DEF*G*******,若n的值为4,删除后, 字符串中的内容应当是:****A*BC*DEF*G****;若n的值为7,则字符串中的内容仍 为:****A*BC*DEF*G*******。n的值在主函数中输入。在编写函数时,不得使用C 语言提供的字符串函数。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun( char *a,int n ) { } main() { char s[81]; int n; printf("Enter a string:\n");gets(s); printf("Enter n : ");scanf("%d",&n); fun( s,n ); printf("The string after deleted:\n");puts(s); NONO(); } 解题思路: 本题是考察字符串的操作。 1. 使用while循环语句和字符串指针p扫描出尾部的*号。 2. 找出字符串最右边字母后出现'*'的第1位置。 3. 使用while循环来处理右边'*'是否大于n个,若大于,则取n个'*'。 4. 最后给字符串加上结束符。 参考答案: void fun( char *a,int n ) { char *p=a ; int j=0; while(*p) p++; p--; /* 字符串的长度 */ while(*p == '*') p--; /* 字符串右的'*' */ p++; while(j p++ ; j++; } *p = 0 ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第46套: 给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的 字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字 符串,且串长小于M。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 5 #define M 8 void fun(char (*ss)[M]) { char *ps[N],*tp; int i,j,k; for(i=0; i for(i=0; i /**********found**********/ k= __1__ ; for(j=i+1; j /**********found**********/ if(strlen(ps[k]) < strlen(__2__) ) k=j; /**********found**********/ tp=ps[i]; ps[i]=ps[k]; ps[k]= __3__ ; } printf("\nThe string after sorting by length:\n\n"); for(i=0; i } main() { char ch[N][M]={"red","green","blue","yellow","black"}; int i; printf("\nThe original string\n\n"); for(i=0;i fun(ch); } 解题思路: 本题是按字符串的长短进行排序。 第一处:外循环每循环一次,k应保存当前的i值,所以应填:i。 第二处:使用内循环对i+1后面的字符串长度进行比较,所以应填:ps[j]。 第三处:交换内容,所以应填:tp。 *************************************************** 已知一个数列从第0项开始的前三项分别为0,0,1,以后的各项都是其相邻 的前三项之和。给定程序MODI1.C中函数fun的功能是:计算并输出该数列前n项的 平方根之和。n的值通过形参传入。 例如,当n=10时,程序的输出结果应为:23.197745。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include /************found************/ fun(int n) { double sum, s0, s1, s2, s; int k; sum = 1.0; if (n <= 2) sum = 0.0; s0 = 0.0; s1 = 0.0; s2 = 1.0; for (k = 4; k <= n; k++) { s = s0 + s1 + s2; sum += sqrt(s); s0 = s1; s1 = s2; s2 = s; } /************found************/ return sum } main ( ) { int n; printf("Input N="); scanf("%d", &n); printf("%f\n", fun(n) ); } 解题思路: 第一处:由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽 略,其他必须定义返回的类型,所以要在此行前加上double或float。 第二处:该行缺少分号。 *************************************************** 编写函数fun,它的功能是计算下列级数和,和值由函数值返回。 例如,当n = 10,x=0.3时,函数值为1.349859。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。 给定源程序: #include #include double fun(double x , int n) { } main() { printf("%f\n", fun(0.3,10)); NONO(); } 解题思路: 本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并 把结果存入变量s中,最后把s作为函数值返回。其中,jc函数是计算阶乘的。 参考答案: #include #include long jc(int n) { long s = 1 ; int i ; for(i = 1 ; i <= n ; i++) s *= i ; return s ; } double fun(double x , int n) { double s = 1.0, y = x ; int i ; for(i = 1 ; i <= n ; i++) { s += y / (double)jc(i) ; y *= x ; } return s ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第47套: 给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字 母(不区分大小写),并统计出其出现的次数。 例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为: letter 'a' : 3 times letter 's' : 3 times 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #include void fun(char *s) { int k[26]={0},n,i,max=0; char ch; while(*s) { if( isalpha(*s) ) { /**********found**********/ ch=tolower(__1__); n=ch-'a'; /**********found**********/ k[n]+= __2__ ; } s++; /**********found**********/ if(max } printf("\nAfter count :\n"); for(i=0; i<26;i++) if (k[i]==max) printf("\nletter \'%c\' : %d times\n",i+'a',k[i]); } main() { char s[81]; printf("\nEnter a string:\n\n"); gets(s); fun(s); } 解题思路: 本题是找出字符串中出现频率最高的字母并统计出其次数。 第一处:将当前字母转换为小写字母,所以应填:*s。 第二处:把该字母出现的个数累加到指定的数组中,所以应填:1。 第三处:如果当前该字母出现次数大于最大次数max,那么把该次数赋值给max,所以应填: k[n]。 *************************************************** 给定程序MODI1.C中函数 fun 的功能是:求S的值。 例如,当k为10时,函数值应为:1.533852。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include /************found************/ void fun( int k ) { int n; float s, w, p, q; n = 1; s = 1.0; while ( n <= k ) { w = 2.0 * n; p = w - 1.0; q = w + 1.0; s = s * w *w/p/q; n++; } /************found************/ return s } main ( ) { printf("%f\n", fun (10)); } 解题思路: 第一处:由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽 略,其他必须定义返回的类型,所以要在此行前加上double或float。 第二处:缺少分号。 *************************************************** 编写函数fun,它的功能是:计算并输出下列级数和: 1 1 1 S = ── + ── + … + ─── 1×2 2×3 n(n+1) 例如,当n = 10时,函数值为:0.909091。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include double fun( int n ) { } main() /* 主函数 */ { printf("%f\n", fun(10)); NONO(); } 解题思路: 本题是根据公式计算结果。使用for循环语句进行计算。但要注意的是:在除法运算中,如 果除数和被除数都是整数,所以所除的结果也是整数,因此1应取实数或进行实型的类型转换。 参考答案: double fun( int n ) { double s = 0.0 ; int i ; for(i = 1 ; i <= n ; i++) s = s + 1.0 / (i * (i + 1)) ; return s ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第48套: 给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对 应的数值,计算出这些数值的累加和作为函数值返回。 例如,形参s所指的字符串为:abs5def126jkm8,程序执行后的输出结果为: 22。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #include int fun(char *s) { int sum=0; while(*s) { /**********found**********/ if( isdigit(*s) ) sum+= *s- __1__ ; /**********found**********/ __2__; } /**********found**********/ return __3__ ; } main() { char s[81]; int n; printf("\nEnter a string:\n\n"); gets(s); n=fun(s); printf("\nThe result is: %d\n\n",n); } 解题思路: 本题是把字符串中是数字字符转换成对应的数值并进行累加。 第一处:'0'字符对应的ASCII值是48,因此数字字符转换成对应数值时只要减去48,即是 该数字字符对应的数值,所以应填:48。 第二处:到字符串下一个位置,所以应填:s++。 第三处:返回累加和sum,所以应填:sum。 *************************************************** 给定程序MODI1.C中函数fun的功能是:计算小于形参k的最大的10个能被13或 17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include int fun( int k ) { int m=0, mc=0, j ; while ((k >= 2) && (mc < 10)) { /************found************/ if ((k = 0) || (k = 0)) { m = m+ k; mc++; } k--; } return m; /************found************/ _____ main ( ) { printf("%d\n", fun (500)); } 解题思路: 第一处:判断相等的条件是==,而不是=,所以只能在比较处再添加一个=。 第二处:经过编译可知,"{"和"}"没有配对,所以在横线处加上"}"。 *************************************************** 编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之 和的平方根,并作为函数值返回。 例如若n为1000时,程序输出应为:s = 153.909064。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include double fun( int n) { } main() /* 主函数 */ { printf("s =%f\n", fun ( 1000) ); NONO(); } 解题思路: 本题是求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。 参考答案: double fun( int n) { double sum=0.0; int i; for(i=21; i<=n; i++) if((i % 3==0) && (i % 7==0)) sum+=i; return sqrt(sum) ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第49套: 给定程序中,函数fun的功能是:将形参s所指字符串中所有ASCII码值小于97 的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数 作为函数值返回。 例如,形参s所指的字符串为:Abc@1x56*,程序执行后t所指字符数组中的字 符串应为:A@156*。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include int fun(char *s, char *t) { int n=0; while(*s) { if(*s < 97) { /**********found**********/ *(t+n)= __1__ ; n++; } /**********found**********/ __2__ ; } *(t+n)=0; /**********found**********/ return __3__ ; } main() { char s[81],t[81]; int n; printf("\nEnter a string:\n"); gets(s); n=fun(s,t); printf("\nThere are %d letter which ASCII code is less than 97: %s\n",n,t); } 解题思路: 本题是根据条件组成新的字符串并统计出符合条件的个数n。 第一处:把符合条件的当前字符存放到t字符串中,所以应填:*s。 第二处:到字符串下一个位置,所以应填:s++。 第三处:返回符合条件的字符个数n,所以应填:n。 *************************************************** 给定程序MODI1.C中函数 fun 的功能是:由形参给定n个实数,输出平均值, 并统计在平均值以上(含平均值)的实数个数。 例如,n=8时,输入:193.199,195.673,195.757,196.051,196.092,196.596, 196.579,196.763 所得平均值为:195.838745,在平均值以上的实数个数应为:5 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include int fun(float x[], int n) { /************found************/ int j, c=0, float xa=0.0; for (j=0; j xa += x[j]/n; printf("ave =%f\n",xa); for (j=0; j /************found************/ if (x[j] => xa) c++; return c; } main ( ) { float x[100] = {193.199, 195.673, 195.757, 196.051, 196.092, 196.596, 196.579, 196.763}; printf("%d\n", fun (x, 8)); } 解题思路: 第一处:两种类型变量定义之间应该用分号,所以应改为:int j, c=0; float xa=0.;。 第二处:在C语言中,大于等于应表达为>=。 *************************************************** 编写函数fun,其功能是:根据以下公式求P的值,结果由函数值带回。m与n 为两个正整数且要求m > n。 m! P = ─── n!(m-n)! 例如:m=12,n=8时,运行结果为495.000000。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include float fun(int m, int n) { } main() /* 主函数 */ { printf("P=%f\n", fun (12,8)); NONO(); } 解题思路: 本题是计算阶乘。 参考答案: #include long jc(int m) { long s=1; int i ; for(i=1;i<=m;i++) s=s*i ; return s; } float fun(int m, int n) { float p; p=1.0*jc(m)/jc(n)/jc(m-n) ; return p; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第50套: 给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元 素相加并将结果存放在左下三角元素中,右上三角元素置为0。例如,若N=3,有 下列矩阵: 1 2 3 4 5 6 7 8 9 计算结果为 1 0 0 6 5 0 10 14 9 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 4 /**********found**********/ void fun(int (*t)___1___ ) { int i, j; for(i=1; i { for(j=0; j { /**********found**********/ ___2___ =t[i][j]+t[j][i]; /**********found**********/ ___3___ =0; } } } main() { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; printf("\nThe original array:\n"); for(i=0; i { for(j=0; j } fun(t); printf("\nThe result is:\n"); for(i=0; i { for(j=0; j } } 解题思路: 第一处:形参t的定义,整数数组其宽度为N,所以应填:[N]。 第二处:对称元素相加,其结果仍存放在左下三角元素中,所以应填:t[i][j]。 第三处:右上三角元素置为0,所以应填:t[j][i]。 *************************************************** 给定程序MODI1.C中函数fun的功能是:计算函数 F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不等,z和y的值不等。 例如,当x的值为9、y的值为11、z的值为15时,函数值为 -3.50。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include #include #include /************found************/ #define FU(m,n) (m/n) float fun(float a,float b,float c) { float value; value=FU(a+b,a-b)+FU(c+b,c-b); /************found************/ Return(Value); } main() { float x,y,z,sum; printf("Input x y z: "); scanf("%f%f%f",&x,&y,&z); printf("x=%f,y=%f,z=%f\n",x,y,z); if (x==y||y==z){printf("Data error!\n");exit(0);} sum=fun(x,y,z); printf("The result is : % } 解题思路: 第一处:define定义错误,所以应改为:#define FU(m,n) ((m)/(n))。 第二处:return错写成Return,变量value错写成Value。 *************************************************** 规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字 符串中的前导*号全部删除,中间和尾部的*号不删除。 例如,字符串中的内容为:*******A*BC*DEF*G****,删除后,字符串中的内 容应当是:A*BC*DEF*G****。在编写函数时,不得使用C语言提供的字符串函数。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun( char *a ) { } main() { char s[81]; printf("Enter a string:\n");gets(s); fun( s ); printf("The string after deleted:\n");puts(s); NONO(); } 解题思路: 本题是考察字符串的操作。 1. 利用循环扫描出字符串左边第1个字符不是'*'的字符。 2. 再利用循环把以后的字符依次移动原字符串首地址开始存放。 3. 最后给字符串a加上结束符。 参考答案: void fun( char *a ) { int j=0; char *p = a ; while(*p == '*') p++ ; while(*p) { a[j++] = *p ; p++; } a[j]=0 ; } |