全国计算机二级C题库第81--90套 |
本题目如果下载后发现有错误的地方,请联系网站管理员:QQ121431055
考试时,上机操作题目有三套,基本操作题、简单应用题、综合应用题
第81套: 给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后 插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为: def3*5*adh3*kjsdf7*。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include 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; } } main() { char s[80]="ba printf("\nThe original string is : %s\n",s); fun(s); printf("\nThe result is : %s\n",s); } 解题思路: 第一处:判断是数字,应该使用“与”,所以应填:&&。 第二处:判断字符串是否是字符串结束符,所以应填:'\0'。 第三处:如果当前字符是数字字符,则把当前字符以后的所有字符往后一个位置,所以应 填:s[j]。 *************************************************** 给定程序MODI1.C中函数fun的功能是:根据整型形参m,计算如下公式的值。 1 1 1 1 y = 1 + ----- + ----- + ----- + …… + ----- 2*2 3*3 4* 例如,若 m 中的值为: 5,则应输出:1.463611。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include double fun ( int m ) { double y = 1.0 ; int i; /**************found**************/ for(i = 2 ; i < m ; i++) /**************found**************/ y += 1 / (i * i) ; return( y ) ; } main( ) { int n = 5 ; printf( "\nThe result is %lf\n", fun ( n ) ) ; } 解题思路:
第一处:使用for循环计算公式,必须计算到m,所以应改为for(i=2; i<=m; i++)。 第二处:在除法运算中,如果除数和被除数都是整数,所以所除结果也是整数,因此应改 为y+=1./(i*i)。 *************************************************** 请编写函数fun, 函数的功能是:实现B=A+A', 即把矩阵A加上A的转置, 存放 在矩阵B中。计算结果在 main 函数中输出。 例如,输入下面的矩阵: 其转置矩阵为: 1 2 3 1 4 7 4 5 6 2 5 8 7 8 9 3 6 9 程序输出: 2 6 10 6 10 14 10 14 18 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun ( int a[3][3], int b[3][3]) { } main( ) /* 主程序 */ { int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, t[3][3] ; int i, j ; fun(a, t) ; for (i = 0 ; i < 3 ; i++) { for (j = 0 ; j < 3 ; j++) printf("}", t[i][j]) ; printf("\n") ; } NONO () ; } 解题思路: 本题考察考生如何实现矩阵的转置,然后执行两个矩阵中的元素值相加生成一个新的矩阵。 矩阵转置实现上就是原行元素值变为列元素值,原列元素值变为行元素值。 参考答案: void fun ( int a[3][3], int b[3][3]) { int c[3][3] ; int i, j ; for(i = 0 ; i < 3 ; i++) for(j = 0 ; j < 3 ; j++) { c[i][j] = a[j][i] ; /* 矩阵的转置 */ b[i][j] = a[i][j] + c[i][j] ; } } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第82套: 给定程序中,函数fun的功能是:找出100~999之间(含100和999)所有整数 中各位上数字之和为x(x为一正整数)的整数,然后输出;符合条件的整数个数作 为函数值返回。 例如,当x值为5时,100~999之间各位上数字之和为5的整数有:104、113、 122、131、140、203、212、221、230、302、311、320、401、410、500。共有15 个。当x值为27时,各位数字之和为27的整数是:999。只有1个。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include fun(int x) { int n, s1, s2, s3, t; n=0; t=100; /**********found**********/ while(t<=__1__){ /**********found**********/ s1=t; s2=(__2__); s3=t/100; /**********found**********/ if(s1+s2+s3==__3__) { printf("%d ",t); n++; } t++; } return n; } main() { int x=-1; while(x<0) { printf("Please input(x>0): "); scanf("%d",&x); } printf("\nThe result is: %d\n",fun(x)); } 解题思路: 第一处:使用while循环找出100~999之间所有整数,所以应填:999。 第二处:s2是求十位数字,所以应填:t/10。 第三处:各位数字之和为x,所以应填:x。 *************************************************** 给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位 上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。 例如,当s中的数为:7654321时,t中的数为:642。 请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include /************found************/ void fun (long s, long t) { long sl=10; s /= 10; *t = s % 10; /************found************/ while ( s < 0) { s = s/100; *t = s*sl + *t; sl = sl * 10; } } main() { long s, t; printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t); printf("The result is: %ld\n", t); } 解题思路: 第一处:在函数fun体中,t是一个指针型变量,因此定义形参时也应定义指针。 第二处:条件应该s>0,所以应改为:while(s>0)。 *************************************************** 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组 s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #define N 16 typedef struct { char num[10]; int s; } STREC; int fun( STREC a[] ) { } main() { STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85}, \TAB \TAB {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87}, \TAB \TAB {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91}, \TAB \TAB {"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}}; int i;FILE *out ; fun( s );
printf("The data after sorted :\n"); for(i=0;i { if( (i)%4==0 )printf("\n"); printf("%s M ",s[i].num,s[i].s); } printf("\n"); out = fopen("c:\\test\\out.dat","w") ; for(i=0;i { if( (i)%4==0 && i) fprintf(out, "\n"); fprintf(out, "M ",s[i].s); } fprintf(out,"\n"); fclose(out) ; } 解题思路: 本题是按结构体中成绩s进行降序排列,其结果仍存入当前结构体中。 参考答案: #include #define N 16 typedef struct { char num[10]; int s; } STREC; int fun( STREC a[] ) { STREC tmp; int i,j; for(i = 0; i < N; i++) for(j = i+1; j < N; j++) if(a[i].s < a[j].s) { tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第83套: 给定程序中,函数fun的功能是:找出100至x(x≤999)之间各位上的数字之 和为15的所有整数,然后输出;符合条件的整数个数作为函数值返回。 例如,当n值为500时,各位数字之和为15的整数有:159、168、177、186、 195、249、258、267、276、285、294、339、348、357、366、375、384、393、 429、438、447、456、465、474、483、492。共有26个。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include fun(int x) { int n, s1, s2, s3, t; /**********found**********/ n=__1__; t=100; /**********found**********/ while(t<=__2__) { s1=t; s2=(t/10); s3=t/100; if(s1+s2+s3==15) { printf("%d ",t); n++; } /**********found**********/ __3__; } return n; } main() { int x=-1; while(x>999||x<0) { printf("Please input(0 printf("\nThe result is: %d\n",fun(x)); } 解题思路: 第一处:符合条件的整数个数n,必须进行初始化,所以应填:0。
第二处:找出x≤999,所以应填:x。 第三处:循环控制变量t每循环一次t要加1,所以应填:t++。 *************************************************** 给定程序MODI1.C中函数fun的功能是:先将s所指字符串中的字符按逆序存放 到t所指字符串中,然后把s所指串中的字符按正序连接到t所指串的后面。 例如:当s所指的字符串为:"ABCDE"时, 则t所指的字符串应为:"EDCBAABCDE"。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include void fun (char *s, char *t) { /************found************/ int i; sl = strlen(s); for (i=0; i /************found************/ t[i] = s[sl-i]; for (i=0; i \TAB t[sl+i] = s[i]; t[2*sl] = '\0'; } main() { char s[100], t[100]; printf("\nPlease enter string s:"); scanf("%s", s); fun(s, t); printf("The result is: %s\n", t); } 解题思路: 第一处:变量sl没有定义。 第二处:在C语言中,字符串开始位置从0开始的,所以应改为:t[i] = s[sl-i-1];。 *************************************************** 函数fun的功能是: 将a、b中的两个两位正整数合并形成一个新的整数放在 c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中 的十位和个位数依次放在变量c的千位和十位上。 例如,当a=45,b=12。调用该函数后,c=1425。 注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun(int a, int b, long *c) { } main() /* 主函数 */
{ int a,b; long c; printf("Input a, b:"); scanf("%d%d", &a, &b); fun(a, b, &c); printf("The result is: %ld\n", c); NONO(); } 解题思路: 本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。 取a十位数字的方法:a/10 取a个位数字的方法:a 参考答案: void fun(int a, int b, long *c) { *c=(b/10)*1000+(a/10)*100+(b)*10+(a); } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第84套: 函数fun的功能是:从三个形参a,b,c中找出中间的那个数,作为函数值返 回。 例如,当a=3, b=5, c=4时,中数为4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include int fun(int a, int b, int c) { int t; /**********found**********/ t = (a>b) ? (b>c? b :(a>c?c:___1___)) : ((a>c)?___2___ : ((b>c)?c:___3___)); return t; } main() { int a1=3, a2=5, a3=4, r; r = fun(a1, a2, a3); printf("\nThe middle number is : %d\n", r); } 解题思路: 第一处:给三个数进行比较大小,所以应填:a。 第二处:给三个数进行比较大小,所以应填:a。 第三处:给三个数进行比较大小,所以应填:b。 *************************************************** 给定程序MODI1.C中函数fun的功能是: 首先将大写字母转换为对应小写字母; 若小写字母为a~u,则将其转换为其后的第5个字母;若小写字母为v~z, 使其值减 21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母 f; 若形参是字母W,则转换为小写字母b。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include char fun(char c) { if( c>='A' && c<='Z') /**************found**************/ C=C+32;
if(c>='a' && c<='u') /**************found**************/ c=c-5; else if(c>='v'&&c<='z') c=c-21; return c; } main() { char c1,c2; printf("\nEnter a letter(A-Z): "); c1=getchar(); if( isupper( c1 ) ) { c2=fun(c1); printf("\n\nThe letter \'%c\' change to \'%c\'\n", c1,c2); } else printf("\nEnter (A-Z)!\n"); } 解题思路: 第一处:变量c错写成大写C了。 第二处:要求转换为其后的第5个字母,所以应改为:c=c+5;。 *************************************************** 请编写函数fun, 其功能是: 计算并输出 例如, 在主函数中从键盘给n输入20后,输出为:s=534.188884。 注意: 要求n的值大于1但不大于100。 部分源程序在文件PROG1.C中。 请勿改动主函数main和其他函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include double fun(int n) { } main() { int n; double s; printf("\n\nInput n: "); scanf("%d",&n); s=fun(n); printf("\n\ns=%f\n\n",s); NONO(); } 解题思路: 本题是根据公式计算多项式的值。注意变量的取值范围。 参考答案: double fun(int n) { int i; double fac=1.0; double sum=1.0; for(i=2;i<=n;i++) { fac+=sqrt(i); sum+=fac; } return sum; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第85套: 给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的 编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作 为一个数据块写到名为myfile5.dat的二进制文件中。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 5 typedef struct { int num; char name[10]; char tel[10]; }STYPE; void check(); /**********found**********/ int fun(___1___ *std) { /**********found**********/ ___2___ *fp; int i; if((fp=fopen("myfile5.dat","wb"))==NULL) return(0); printf("\nOutput data to file !\n"); for(i=0; i /**********found**********/ fwrite(&std[i], sizeof(STYPE), 1, ___3___); fclose(fp); return (1); } main() { STYPE s[10]={ {1,"aaaaa","111111"},{1,"bbbbb","222222"},{1,"ccccc","333333"}, {1,"ddddd","444444"},{1,"eeeee","555555"}}; int k; k=fun(s); if (k==1) { printf("Succeed!"); check(); } else printf("Fail!"); } void check() { FILE *fp; int i; STYPE s[10]; if((fp=fopen("myfile5.dat","rb"))==NULL) { printf("Fail !!\n"); exit(0); } printf("\nRead file and output to screen :\n"); printf("\n num name tel\n"); for(i=0; i { fread(&s[i],sizeof(STYPE),1, fp); printf("m %s %s\n",s[i].num,s[i].name,s[i].tel);
} fclose(fp); } 解题思路: 本题是要求把指定的学生记录输出到指定的文件中。程序中共有三处要填上适当的内容, 使程序能运行出正确的结果。 第一处:结构定义自变量,因此应填写STYPE。 第二处:在所填行的下面一行,使用fopen来创建一个二进制文件,但文件流的变量名fp 已经给出,这样,此处只能填写FILE。 每三处:fwrite是把变量中的内容写入指定文件中,再根据fwrite参数的使用要求,所以 只能填写文件流变量fp。 *************************************************** 给定程序MODI1.C中函数fun的功能是:先将在字符串s中的字符按正序存放 到t串中,然后把s中的字符按逆序连接到t串的后面。 例如:当s中的字符串为:"ABCDE"时, 则t中的字符串应为:"ABCDEEDCBA"。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include void fun (char *s, char *t) { int i, sl; sl = strlen(s); /************found************/ for( i=0; i<=s1; i ++) t[i] = s[i]; for (i=0; i \TAB t[sl+i] = s[sl-i-1]; /************found************/ t[sl] = '\0'; } main() { char s[100], t[100]; printf("\nPlease enter string s:"); scanf("%s", s); fun(s, t); printf("The result is: %s\n", t); } 解题思路: 第一处:变量sl错写成了s1。 第二处:新串t的字符串结束位置不正确,应该是两倍的sl距离。 *************************************************** 函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。 合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上, b数的十位 和个位数依次放在c数的百位和个位上。 例如,当a=45,b=12时,调用该函数后,c=4152。 注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填 入你编写的若干语句。 给定源程序: #include void fun(int a, int b, long *c) { } main() { int a,b; long c; printf("Input a, b:"); scanf("%d,%d", &a, &b); fun(a, b, &c); printf("The result is: %d\n", c); NONO(); } 解题思路: 本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。 取a十位数字的方法:a/10 取a个位数字的方法:a 参考答案: void fun(int a, int b, long *c) { *c=(a/10)*1000+(b/10)*100+(a)*10+(b); } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第86套: 甲乙丙丁四人同时开始放鞭炮,甲每隔t1秒放一次,乙每隔t2秒放一次, 丙 每隔t3秒放一次,丁每隔t4秒放一次,每人各放n次。函数fun的功能是根据形参 提供的值,求出总共听到多少次鞭炮声作为函数值返回。注意,当几个鞭炮同时 炸响,只算一次响声,第一次响声是在第0秒。 例如,若t1=7,t2=5,t3=6,t4=4,n=10,则总共可听到28次鞭炮声。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include /**********found**********/ #define OK(i, t, n) ((___1___%t==0) && (i/t int fun(int t1, int t2, int t3, int t4, int n) { int count, t , maxt=t1; if (maxt < t2) maxt = t2; if (maxt < t3) maxt = t3; if (maxt < t4) maxt = t4; count=1; /* 给count赋初值 */ /**********found**********/ for(t=1; t< maxt*(n-1); ___2___) { if(OK(t, t1, n) || OK(t, t2, n)|| OK(t, t3, n) || OK(t, t4, n) ) count++; } /**********found**********/ return ___3___; } main() { int t1=7, t2=5, t3=6, t4=4, n=10, r; r = fun(t1, t2, t3, t4, n); printf("The sound : %d\n", r); }
解题思路: 第一处:根据定义的要求,所以应填:i。 第二处:for循环语句的增量,所以应填:t++。 第三处:返回统计次数,所以应填:count。 *************************************************** 给定程序MODI1.C中函数fun的功能是: 根据输入的三个边长(整型值), 判断 能否构成三角形; 构成的是等边三角形, 还是等腰三角形。若能构成等边三角形 函数返回3,若能构成等腰三角形函数返回2, 若能构成一般三角形函数返回1, 若 不能构成三角形函数返回0。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include /**************found**************/ void fun(int a,int b,int c) { if(a+b>c && b+c>a && a+c>b) { if(a==b && b==c) return 3; else if(a==b||b==c||a==c) return 2; /**************found**************/ else retrun 1 } else return 0; } main() { int a,b,c,shape; printf("\nInput a,b,c: "); scanf("%d%d%d",&a,&b,&c); printf("\na=%d, b=%d, c=%d\n",a,b,c); shape =fun(a,b,c); printf("\n\nThe shape : %d\n",shape); } 解题思路: 第一处:函数有返回值,不能定义为void,所以应改为:int fun(int a,int b,int c)。 第二处:语句后缺少分号。 *************************************************** 请编写函数fun, 其功能是: 计算并输出3到n之间(含3和n)所有素数的平方根 之和。 例如, 在主函数中从键盘给n输入100后,输出为: sum=148.874270。 注意: 要求n的值大于2但不大于100。 部分源程序在文件PROG1.C中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include
double fun(int n) { } main() { int n; double sum; printf("\n\nInput n: "); scanf("%d",&n); sum=fun(n); printf("\n\nsum=%f\n\n",sum); NONO(); } 解题思路: 本题是计算并输出3到n之间(含3和n)所有素数的平方根之和。 参考答案: double fun(int n) { int i,j=0; double s=0; for (i=3; i<=n; i++) { for (j=2; j if (i%j == 0) break; if (j == i) s=s+sqrt(i); } return s; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第87套: 函数fun的功能是:统计长整数n的各个位上出现数字1、2、3的次数,并通过 外部(全局)变量c1,c2,c3返回主函数。例如:当n=123114350时,结果应该为: c1= 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include 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; } } main() { long n= fun(n); printf("\nThe result :\n"); printf("n=%ld c1=%d c2=%d c3=%d\n",n,c1,c2,c3); } 解题思路: 第一处:取个位数上的数,所以n就可以得到个位数。 第二处:switch条件判断中,满足条件做好后,必须使用break语句跳出选择体,所以应填: break。
第三处:同第二处。 *************************************************** 给定程序MODI1.C中函数fun的功能是: 统计一个无符号整数中各位数字值为 零的个数, 通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值 返回。例如, 若输入无符号整数30800, 则数字值为零的个数为3, 各位上数字值 最大的是8。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include int fun(unsigned n, int *zero) { int count=0,max=0,t; do { t=n; /**************found**************/ if(t=0) count++; if(max n=n/10; }while(n); /**************found**************/ zero=count; return max; } 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); } 解题思路: 第一处:条件相等符号为==。 第二处:由于zero是一个指针型变量,所以给它进行赋值时应带指针,因此应改为: *zero=count;。 *************************************************** 请编写函数fun, 其功能是: 计算并输出下列多项式的值: 1 1 1 S = 1 + ── + ─── + … + ───── 1*2 1*2*3 1*2*3*…50 例如, 在主函数中从键盘给n输入50后,输出为:s=1.718282。 注意: 要求n的值大于1但不大于100。 部分源程序在文件PROG1.C中。 请勿改动主函数main和其他函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include double fun(int n)
{ } main() { int n; double s; printf("\nInput n: "); scanf("%d",&n); s=fun(n); printf("\n\ns=%f\n\n",s); NONO(); } 解题思路: 本题是根据公式计算多项式的值。注意变量的取值范围。 参考答案: double fun(int n) { double s=0, t=1; int i ; for(i=1; i<=n; i++) { t *= i; s += 1./t; } return s; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第88套: 函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所 指数组中的最小值放在a[1]中;再把a所指数组元素中的次大值放在a[2]中,把 a数组元素中的次小值放在a[3]中;其余以此类推。例如:若a所指数组中的数据 最初排列为:1、4、2、3、9、6、5、8、7,则按规则移动后,数据排列为: 9、1、8、2、7、3、6、4、5。形参n中存放a所指数组中数据的个数。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 9 /**********found**********/ void fun(int ___1___, int n) { int i, j, max, min, px, pn, t; /**********found**********/ for (i=0; i { max = min = a[i]; px = pn = i; /**********found**********/ for (j=___3___; j { if (max < a[j]) { max = a[j]; px = j; } if (min > a[j]) { min = a[j]; pn = j; } } if (px != i) { t = a[i]; a[i] = max; a[px] = t; if (pn == i) pn= px; } if (pn != i+1) { t = a[i+1]; a[i+1] = min; a[pn] = t; } } } main() { int b[N]={1,4,2,3,9,6,5,8,7}, i; printf("\nThe original data :\n"); for (i=0; i printf("\n"); fun(b, N); printf("\nThe data after moving :\n"); for (i=0; i } 解题思路: 第一处:形参a应定义指针整型变量,所以应填:*a。 第二处:外for循环每次增量应该加2。 第三处:内for循环的初始值应为:i+1。 *************************************************** 给定程序MODI1.C中函数fun的功能是:按顺序给s所指数组中的元素赋予从2 开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在 w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。 例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个 元素求平均值。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include #define SIZE 20 fun(double *s, double *w) { int k,i; double sum; for(k=2,i=0;i { s[i]=k; k+=2; } /**********found**********/ sun=0.0; for(k=0,i=0;i { sum+=s[i]; /**********found**********/ if(i+1%5==0) { w[k]=sum/5; sum=0; k++; } } return k; } main( ) { double a[SIZE],b[SIZE/5]; int i, k; k = fun(a,b); printf("The original data:\n"); for(i=0; i { if(i%5==0) printf("\n"); printf("% } printf("\n\nThe result :\n"); for(i=0; i printf("\n\n");
} 解题思路: 第一处:变量名书写错误,应为sum。 第二处:由于%的优先级比+优先,所以必须加上括号,因此改为:if((i+1)%5==0)。 *************************************************** 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组 s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中, 低于平均分的学生人数通过形参n传回,平均分通过函数值返回。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #define N 8 typedef struct { char num[10]; double s; } STREC; double fun( STREC *a, STREC *b, int *n ) { } main() { STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85}, {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}}; STREC h[N],t;FILE *out ; int i,j,n; double ave; ave=fun( s,h,&n ); printf("The %d student data which is lower than % for(i=0;i printf("%s % printf("\n"); out = fopen("c:\\test\\out.dat","w") ; fprintf(out, "%d\n% for(i=0;i for(j=i+1;j if(h[i].s>h[j].s) {t=h[i] ;h[i]=h[j]; h[j]=t;} for(i=0;i fprintf(out,"% fclose(out); } 解题思路: 本题是利用循环计算出记录结构中学生成绩的平均值,再把低于平均值的记录存放到b所指 的数组中。具体操作请看答案程序中的说明。 参考答案: #include #define N 8 typedef struct
{ char num[10]; double s; } STREC; double fun( STREC *a, STREC *b, int *n ) { int i ; double ave = 0.0 ; *n = 0 ; for(i = 0 ; i < N ; i++) ave = ave + a[i].s ; ave /= N ; /* 计算平均值 */ for(i = 0 ; i < N ; i++) if(a[i].s < ave) { /* 把低于平均值的记录存放到b所指的数组中 */ b[*n]=a[i] ; (*n)++; /* 人数加1 */ } return ave ; /* 返回平均值 */ } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第89套: 给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的 长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中共 有M个字符串,且串长 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include
#include #define M 5 #define N 20 void fun(char (*ss)[N]) { int i, j, k=0, n, m, len; for(i=0; i { len=strlen(ss[i]); if(i==0) n=len; if(len>n) { /**********found**********/ n=len; ___1___=i; } } for(i=0; i if (i!=k) { m=n; len=strlen(ss[i]); /**********found**********/ for(j=___2___; j>=0; j--) ss[i][m--]=ss[i][j]; for(j=0; j /**********found**********/ ___3___='*'; } } main() { char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"}; int i; printf("\nThe original strings are :\n"); for(i=0; i printf("\n"); fun(ss); printf("\nThe result:\n"); for(i=0; i } 解题思路: 第一处:使用变量k来保存第几个字符串是最长的字符串,所以应填:k。 第二处:利用for循环把原字符串右移至最右边存放,字符串的长为len,所以应填:len。 第三处:左边用字符*补齐,所以应填:ss[i][j]。 *************************************************** 给定程序MODI1.C中函数fun的功能是: 计算整数n的阶乘。请改正程序中的错 误或在下划线处填上适当的内容并把下划线删除,使它能计算出正确的结果。 注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include double fun(int n) {
double result=1.0; while (n>1 && n<170) /*********found*********/ result*=--n; /*********found*********/ return _____; } main() { int n; printf("Enter an integer: "); scanf("%d",&n); printf("\n\n%d!=%lg\n\n",n,fun(n)); } 解题思路: 第一处:--n是先减1,n--是后减1。本题应该先乘以n,再减1,才正确。 第二处:返回计算结果,所以应填:result。 *************************************************** 编写函数fun,函数的功能是: 从s所指的字符串中删除给定的字符。同一字 母的大、小写按不同字符处理。 若程序执行时输入字符串为: turbo c and borland c++ 从键盘上输入字符:n, 则输出后变为: turbo c ad borlad c++ 如果输入的字符在字符串中不存在, 则字符串照原样输出。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include int fun(char s[],char c) { } main() { static char str[]="turbo c and borland c++"; char ch; printf("原始字符串:%s\n", str); printf("输入一个字符:"); scanf("%c",&ch); fun(str,ch); printf("str[]=%s\n",str); NONO(); } 解题思路: 本题是考察考生怎样在字符串中删除指定的字符,结果仍存放在原字符串中。给出的程序 是引用字符串指针p和while循环语句以及if条件判断语句进行处理的,新字符串的位置是由i 来控制的,循环结束后,再给新字符串置字符串结束符,最后产生的新字符串形参s返回到主程 序中。 参考答案: int fun(char s[],char c) { char *p = s ; int i = 0 ; while(*p) { if(*p != c) s[i++] = *p ; p++ ; } s[i] = 0 ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第90套: 函数fun的功能是:统计所有小于等于n(n>2)的素数的个数,素数的个数作 为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include int fun(int n) { int i,j, count=0; printf("\nThe prime number between 3 to %d\n", n); for (i=3; i<=n; i++) { /**********found**********/ for (___1___; j /**********found**********/ if (___2___%j == 0) break; /**********found**********/ if (___3___>=i) { count++; printf( count? "]":"\n]",i); } } return count; } main() { int n=20, r; r = fun(n); printf("\nThe number of prime is : %d\n", r); } 解题思路: 第一处:素数的条件是除1和其本身外不能整除该数,所以应填:2。 第二处:判断i是否素数,所以应填:i。 第三处:如果内循环for中所有数都不能整除i,那么i是素数且j大于等于i,所以应填:j。 *************************************************** 数列中,第一项值为3, 后一项都比前一项的值增5;给定程序MODI1.C中函数 fun的功能是: 计算前n(4 加值放入数组中, 符合此条件的累加值的个数作为函数值返回主函数。 例如, 当n的值为20时,该数列为3,8,13,18,23,28,……,93,98。符合此条件 的累加值应为42,126,366,570,1010。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #define N 20 int fun(int n,int *a) { int i,j,k,sum; /**************found**************/ sum=j==0; for(k=3,i=0;i { sum=sum+k; /**************found**************/ if(sum%4=2) a[j++]=sum; } return j; } main() { int a[N],d,n,i; printf("\nEnter n (4 d=fun(n,a); printf("\n\nThe result :\n"); for(i=0; i } 解题思路: 第一处:连续赋初值为0,中间使用条件相等符号了,所以应改为:sum=j=0;。 第二处:条件相等符号为==。 *************************************************** 请编写函数fun, 其功能是: 计算并输出下列多项式的值: 例如, 在主函数中从键盘给n输入8后, 输出为: s=0.662872。 注意: 要求n的值大于1但不大于100。 部分源程序在文件PROG1.C中。 请勿改动主函数main和其他函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include double fun(int n) { } main() { int n; double s; printf("\nInput n: "); scanf("%d",&n); s=fun(n); printf("\ns=%f\n",s); NONO(); } 解题思路: 本题是根据公式计算多项式的值。 参考答案: double fun(int n) { int i; double sum=0.0; if (n>1 && n<=100) { for(i=1; i<=n; i++) sum+=1.0/(2*i-1)-1.0/(2*i); } return sum; } |