1、二级 C 语言机试-291 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充 main 函数。该函数的功能是:求 1100(不包括 100)以内所有素数的平均值。程序运行后的结果为 42.40。注意:部分源程序给出如下请勿改动主函数 main 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。试题程序:#includestdio.hmain()int i, j, n=0,flag;float aver=0;clrscr();for(j=2;j100;i+)flag=1;for(i=2;ij;i+)if(
2、【1】 )flag=0;break;if( 【2】 )n+;aver+=j;printf(“/n/n average=%4.2f“, 【3】 );(分数:30.00)填空项 1:_二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是;将 s 所指字符串中的字母转换为按字母序列的后续字母(但 Z转化为 A,z 转化为 a),其他字符不变。请改正函数 fun()中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include stdio.h#include ctype.h#include conio.
3、hvoid fun(char *s)/*found*/while(*s!=)if(*s=A clrscr();printf(“/n Enter a string with length 80:/n/n“);gets(s);printf(“/n The string:/n/n“);puts(s);fun(s);printf(“/n/n The Cords:/n/n“);puts(s);(分数:30.00)_三、编程题(总题数:1,分数:40.00)3.请编写函数 fun(),其功能是:将 s 所指字符串中除了下标为偶数、同时 ASCII 值也为偶数的字符外,其余的全部删除,串中剩余字符所形成的一
4、个新中放在 t 所指的数组中。例如,若 s 所指字符串中的内容为 ABCDEFG123456,其中字符 A 的 ASCII 码值为奇数,因此应当删除;其中字符 B 的 ASCII 码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符 2 的 ASCII 码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后 t 所指的数组中的内容应是246。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#includeconio.h#includestdio.h#includestring.hvo
5、id fun(char*s,char t)main()char s100,t100;clrscr();printf(“/nPlease enter string S:“);scanf(“%s“,s);fun(s,t);printf(“/nThe result is:%s/n“,t);(分数:40.00)_二级 C 语言机试-291 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充 main 函数。该函数的功能是:求 1100(不包括 100)以内所有素数的平均值。程序运行后的结果为 42.40。注意:部分源程序给出如下请勿改动主函数 ma
6、in 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。试题程序:#includestdio.hmain()int i, j, n=0,flag;float aver=0;clrscr();for(j=2;j100;i+)flag=1;for(i=2;ij;i+)if( 【1】 )flag=0;break;if( 【2】 )n+;aver+=j;printf(“/n/n average=%4.2f“, 【3】 );(分数:30.00)填空项 1:_ (正确答案:1 j%i=0 2flag=1 3aver/n)解析:解析 填空 1:如果一个数能被除了 1 和其自身
7、之外的数整除,即余数为 0,则这个数不是素数,将标记 flag 置 0。填空 2: flag 用来标记当前数是否为素数,当 flag 为 0 时表示非素数,当 flag 为 1时表示素数。所以此空,如果 flag 为 1,说明当前数是素数,则将这个数累加到 aver 中。填空 3:变量n 记录 100 以内所有素数的个数,变量 aver 保存这些素数的总和,所以平均值等于总和除以个数。二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是;将 s 所指字符串中的字母转换为按字母序列的后续字母(但 Z转化为 A,z 转化为 a),其他字符不变。请改正函数 fun(
8、)中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include stdio.h#include ctype.h#include conio.hvoid fun(char *s)/*found*/while(*s!=)if(*s=A clrscr();printf(“/n Enter a string with length 80:/n/n“);gets(s);printf(“/n The string:/n/n“);puts(s);fun(s);printf(“/n/n The Cords:/n/n“);puts(s);(分数
9、:30.00)_正确答案:(1)错误:while(*s!=) 正确:while(*s)(2)错误:(*s)+; 正确:s+;)解析:解析 根据题目要求,可对字符串所有字母进行遍历。对每一个字母,若该字母为z或Z,将该字母改成a或A,即 ASCII 码值减 25,当然也可以用题目中的 if 语句来实现转换。若该字母不是z或Z,则该字母的 ASCII 码值加 1;对字符串所有字符重复以上过程即可得到题目要求的结果,可用循环语句和条件语句来实现。三、编程题(总题数:1,分数:40.00)3.请编写函数 fun(),其功能是:将 s 所指字符串中除了下标为偶数、同时 ASCII 值也为偶数的字符外,其
10、余的全部删除,串中剩余字符所形成的一个新中放在 t 所指的数组中。例如,若 s 所指字符串中的内容为 ABCDEFG123456,其中字符 A 的 ASCII 码值为奇数,因此应当删除;其中字符 B 的 ASCII 码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符 2 的 ASCII 码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后 t 所指的数组中的内容应是246。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#includeconio.h#includestdio.h
11、#includestring.hvoid fun(char*s,char t)main()char s100,t100;clrscr();printf(“/nPlease enter string S:“);scanf(“%s“,s);fun(s,t);printf(“/nThe result is:%s/n“,t);(分数:40.00)_正确答案:(void fun(char*s,char t)int i,j=0;for(i=0;si!=/0;i+)if(i%2=0 /*在字符串最后加上结束标志位*/tj=/0; )解析:解析 本题要求除了下标为偶数同时 ASCII 值也为偶数的字符之外,其他字符都删除。题目要求留下下标为偶数同时 ASCII 值也为偶数的字符。C 语言中并没有直接删除字符的算法,请大家在做题的时候注意。