1、二级 C 语言机试-181 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:33.00)1.请补充 main 函数,该函数的功能是:从字符串 str 中取出所有数字字符,并分别计数,然后把结果保存在数组 b 中并输出,把其他字符保存在 N10中。例如:当 str1=“ab123456789cde090”时,结果为:0: 2 1: 1 2: 1 3: 1 4: 1 5: 1 6: 1 7: 1 8: 1 9:2 other charactor:5注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的
2、若干表达式或语句。试题程序:#include stdio.h#include conio.hmain()int i,b11;char *str=“abl23456789cde090“;char *p=str;clrscr();printf(“*the origial data */n“);puts(str);for(i=0;i11;i+)bi=0;while(*p)switch( 【1】 )case 0:b0+;break;case 1:b1+;break;case 2:b2+;break;case 3:b3+;break;case 4:b4+;break;case 5:b5+;break;c
3、ase 6:b6+;break;case 7:b7+;break;case 8:b8+;break;case 9:b9+;break;【2】 【3】 printf(“* the result */n“);for(i=0;i10;i+)printf(“/n%d:%d“,i,bi);printf(“/nother charactor:%d“,bi);(分数:33.00)填空项 1:_二、改错题(总题数:1,分数:33.00)2.下列给定程序中,函数 fun()的功能是计算并输出 high 以内的素数之和。high 由主函数传给 fun()函数。若 high 的值为 100,则函数的值为 1060。
4、请改正程序中的错误,使它能得到正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conio.h#include stdio.h#include math.hint fun(int high)int sum=0,n=0,j,yes;while(high=2)yes=1;for(j=2;j=high/2;j+)/*found*/ifhigh%j=0yes=0;break;/*found*/if(yes=0)sum+=high;n+;high-;return sum;main()clrscr();printf(“%d/n“,fun(100);
5、(分数:33.00)填空项 1:_三、编程题(总题数:1,分数:34.00)3.请编写函数 void fun (int x,int pp,int *n),它的功能是求出能整除 x 且不是奇数的各整数,并按从小到大的顺序放在 pp 所指的数组中,这些除数的个数通过形参 n 返回。例如,若 x 中的值为 24,则有 6 个数符合要求,它们是 2, 4, 6, 8, 12, 24。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#includeconio.h#includestdio.hvoid fun(int
6、x,int PP,int *n)main ()int x,aa1000,n,i;clrscr() ;printf(“/nPlease enter an integer number:/n “) ;scanf(“%d“,&X);fun(x,aa,&n);for(i=0;in;i+)printf(“%d“,aai);printf(“/n“);(分数:34.00)_二级 C 语言机试-181 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:33.00)1.请补充 main 函数,该函数的功能是:从字符串 str 中取出所有数字字符,并分别计数,然后把结果保存在数组
7、b 中并输出,把其他字符保存在 N10中。例如:当 str1=“ab123456789cde090”时,结果为:0: 2 1: 1 2: 1 3: 1 4: 1 5: 1 6: 1 7: 1 8: 1 9:2 other charactor:5注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:#include stdio.h#include conio.hmain()int i,b11;char *str=“abl23456789cde090“;char *p=str;clrscr();printf(
8、“*the origial data */n“);puts(str);for(i=0;i11;i+)bi=0;while(*p)switch( 【1】 )case 0:b0+;break;case 1:b1+;break;case 2:b2+;break;case 3:b3+;break;case 4:b4+;break;case 5:b5+;break;case 6:b6+;break;case 7:b7+;break;case 8:b8+;break;case 9:b9+;break;【2】 【3】 printf(“* the result */n“);for(i=0;i10;i+)pri
9、ntf(“/n%d:%d“,i,bi);printf(“/nother charactor:%d“,bi);(分数:33.00)填空项 1:_ (正确答案:【1】*p 【2】default:b10+; 【3】p+;)解析:解析 填空 1:根据 switch 语句中 case 后面的常量表达式,可以看出,switch 后面括号中的表达式应该是字符串 str 中的各字符,而指针 p 就是指向字符串 str。填空 2:和各个 case 后面的常量表达式不匹配的都属于其他字符,保存在 b10中。填空 3:指针 p 指向字符串 s 仕,通过 p 自加 1 来移动指针,访问字符串中的所有字符。二、改错题(
10、总题数:1,分数:33.00)2.下列给定程序中,函数 fun()的功能是计算并输出 high 以内的素数之和。high 由主函数传给 fun()函数。若 high 的值为 100,则函数的值为 1060。请改正程序中的错误,使它能得到正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conio.h#include stdio.h#include math.hint fun(int high)int sum=0,n=0,j,yes;while(high=2)yes=1;for(j=2;j=high/2;j+)/*found*/ifhig
11、h%j=0yes=0;break;/*found*/if(yes=0)sum+=high;n+;high-;return sum;main()clrscr();printf(“%d/n“,fun(100);(分数:33.00)填空项 1:_ (正确答案:(1)错误:ifhigh%j0 正确:if(high%j=0)(2) 错误:if(yes=0) 正确:if(yes))解析:解析错误 1:if 语句的两侧要加括号。错误 2:yes 为 1 时,说明被判断的数为素数,要加入总和。三、编程题(总题数:1,分数:34.00)3.请编写函数 void fun (int x,int pp,int *n)
12、,它的功能是求出能整除 x 且不是奇数的各整数,并按从小到大的顺序放在 pp 所指的数组中,这些除数的个数通过形参 n 返回。例如,若 x 中的值为 24,则有 6 个数符合要求,它们是 2, 4, 6, 8, 12, 24。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#includeconio.h#includestdio.hvoid fun(int x,int PP,int *n)main ()int x,aa1000,n,i;clrscr() ;printf(“/nPlease enter an
13、integer number:/n “) ;scanf(“%d“,&X);fun(x,aa,&n);for(i=0;in;i+)printf(“%d“,aai);printf(“/n“);(分数:34.00)_正确答案:(void fun (int x, int pp, int *n)int i, j=0for(i=2;i=x;i=i+2) /*i 的初始值为 2,步长为 2,确保 i 为偶数*/if(x%i=0) /*将能整除 x 的数存入数细 pp 中*/ppj+=i*n=j /*传回满足条件的数的个数*/)解析:解析 本题题干信息是;能整除 x 且不是奇数的所有整数。循环语句中 i 从 2 开始且每次增 2,所以 i 始终是偶数。