1、国家二级( C语言)机试模拟试卷 164及答案与解析 一、程序填空题( 30分) 1 请补充函数 proc(),其功能是:计算并输出给定 10个数的方差。 例如,给定的 10个数为 12 0, 9 0, 26 0, 5 0, 6 0, 31 0, 9 0,3 0, 8 0, 18 0,输出为 s=8 877500。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的横线上填人所编写的若干表达式或语句。 试题程序: #include #include double proc(double x10) int i; double avg=0 0;
2、double sum=0 0; double abs=0 0; double sd; for(i=0; i void proc(char * str) int i, j; /*found* for(i=j=0; stri!=0; i+) if(stri!=F) /*found* strj=stri; strj=0; void main() char str80; printf(”nEnter a string: ”); gets(str); printf(”The original string: ”); puts(str); proc(str); printf(”The string aft
3、er deleted: ”); puts(str); printf(”nn”); 三、程序设计题( 40分) 3 假定输入的字符串中只包含字母和 *号。请编写函数 proc(),它的功能是:将字符串中的前导 *号全部删除,中间和后面的 *号不删除。 例如,若字符串中的内容为 *a*bc*def*g*,删除后,字符串中的内容则应当是 a*bc*def*g*。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填人所编写的若干语句。 试题程序: #include #include void proc(char*str) void main
4、() char str81; printf(“Enter a string: n“); gets(str); proc(str); printf(“The string after deleted: n“); puts(str); 国家二级( C语言)机试模拟试卷 164答案与解析 一、程序填空题( 30分) 1 【正确答案】 【 1】 sum+=x【 i】【 2】 abs+=(xi;一 avg)*(xi一 avg)【 3】sqrt(abs 10) 【试题解析】 由函数 proc()可知,变量 sum中存放 n个数的和,因此,【 1】处填 “sum+=xi”;然后求其平方差,因此,【 2】处填
5、 “abs+=(xi avg)*(xiavg)”;最后求 10个数的方差,因此,【 3】处填 “sqrt(abs 10)”。 二、程序修改题( 30分) 2 【正确答案】 (1)错误: for(i=j=0; stri!=0; i+) 正确: for(i=j=0; stri!:0; i+) (2)错误: strj=stri; 正确: strj+=stri; 【试题解析】 根据题目中的要求,从字符串 str中删除 所有大写字母 F,需要检查字符串 str中的每一个字符,直到字符串结束,因此, “for(i=j=0; stri!=0;i+)”应改为 “for(i=j=0; stri!=0; i+)”
6、;将每一个不是 F的字符放入原来的字符串中,形成新的字符串,因此, “strj=stri; ”应改为 “strj+=stri; ”。 三、程序设计题( 40分) 3 【正确答案】 void proc(char * str) char * p=str; while(*p=*)p+; 通过 P的移动来达到使 P指向第一个不是 *号的字符 for(; *p!=0; p+, str+) 把从第一个不是 *号的字符放到 a中 *str=*P; *str=0; 最后用 0作为字符串结束标志 【试题解析】 题目中要求将字符串中的前导 *号全部删除,首先将指针 P移动到第一个不是 *的字符,将指针 p之后的字符放入原来的字符串中,并为新的字符串添加结束符。