1、二级 C 语言机试 33 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充 main 函数,该函数的功能是:从键盘输入一个字符串并保存在字符 str1 中,把字符串 str1 中下标为偶数的字符保存在字符串 str2 中并输出。例如,当 str1=“cdefghij”,则 str2=“cegi”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h #includeconio.h #define LEN
2、 80 main() char str1LEN,str2 LEN; char *p1=str1,*p2=str2; int i=0,j=0; clrscr(); printf(“Enter the string:/n“); scanf(U 【1】 /U); printf(“*the origial string*/n“); while(*(p1+j) printf(“U 【2】 /U“,*(p1+j); j+; for(i=0;ij;i+=2) *p2+=*(str1+i); *p2=/0; printf(“/nThe new string is:%s/n“,U 【3】 /U); (分数:30
3、.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.在主函数中从键盘输入若干个数放入数组中,用 0 结束输入并放在最后一个元素中。下列给定程序中,函数 fun()的功能是计算数组元素中值为负数的平均值(不包括 0)。 例如:数组中元素的值依次为43,47,-21,53,-8,12, 0,则程序的运行结果为-25.333333。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include conio.h #include stdio.h double fun(int x) double su
4、m=0.0; int c=0,i=0; /*found*/ while(xi0) if(xi0) sum=sum+xi; c+; i+; /*found*/ sum=sum/c; return sum; main() int x1000; int i=0; clrscr(); printf(“/nPlease enter some data(end with 0) :”); do scanf(“%d“, 正确:sum=sum/c; 解析错误 1:此处考查的是对循环条件的理解,当被判断的数组元素为 0 时,说明这是数组的最后一个元素,此时要跳出循环。错误 2:C 语言中的除法运算符是“/”,而不
5、是“/”。三、B编程题/B(总题数:1,分数:40.00)3.请编写一个函数 int fun (int *s,int t,int *k),用来求出数组的最小元素在数组中的下标并存放在 k 所指的存储单元中。 例如,输入如下整数: 234 345 753 134 436 458 100 321 135 760 则输出结果为 6,100。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。 试题程序: #includeconio.h #includestdio.h int fun(int *s,int t,int *k) main() int a10=234,345,753,134,436,458, 100,321, 135,760),k; clrscr(); fun(a,10, *k=0 /*k 所指的数是数组的下标值*/ for(i=0;it;i+) if(s*ksi) *k=i; /*找到数组的最小元素,把该元素的下标赋给 k 所指的数*/ return s*k; /*返回数组的最小元素*/ 解析本题中直接使用指针变量 k,但在使用时要注意对 k的指针运算,此外,一开始应让*k 的值为数组中的某一下标值勤,即*k=0。