1、二级 C 语言机试 29 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:把字符下标为非素数的字符从字符串 sb 中删除,把字符下标为素数的字符重新保存在字符串 e 口中。字符串 sb 从键盘输入,其长度作为参数传入函数 fun()。 例如,输入“abcdefghijkl”,输出“cdfhl”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。 试题程序: #include stdio.h #define N 8
2、0 void fun(char s,int n) int i, j, k, flag; U【1】 /U; for(i=0; in; i+) if (i1) s k+ =s i; flag=I; for(U 【2】 /U; ji j+) if (i%j=0) flag=0; U 【3】 /U s k=/0; main() int i=0, strlen=0; char strN; clrscr (); printf(“/n Input a string:/n“); gets (str); while (str i !=/0) strlen+; i+; fun (str, strlen); pri
3、ntf(“/n* display string */n“); puts (str); (分数:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量 a 中的值原为 8,b 中的值原为 3,程序运行后 a 中的值为 3, b 中的值为 8。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includeconio.h #include stdio.h int fun(int *x
4、,int y) int t; /*found*/ t=x;x=y; /*found*/ return(y); main() int a=3,b=8; clrscr(); printf(“%d %d/n“,a, b); b=fun( fun ( i+) printf(“%4.1f/n“, s.si); /*输出各科成绩*/ printf(“/nave=%7.3f/n“,s.ave); /*输出平均分*/ (分数:40.00)_二级 C 语言机试 29 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:把
5、字符下标为非素数的字符从字符串 sb 中删除,把字符下标为素数的字符重新保存在字符串 e 口中。字符串 sb 从键盘输入,其长度作为参数传入函数 fun()。 例如,输入“abcdefghijkl”,输出“cdfhl”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。 试题程序: #include stdio.h #define N 80 void fun(char s,int n) int i, j, k, flag; U【1】 /U; for(i=0; in; i+) if (i1) s k+ =s i
6、; flag=I; for(U 【2】 /U; ji j+) if (i%j=0) flag=0; U 【3】 /U s k=/0; main() int i=0, strlen=0; char strN; clrscr (); printf(“/n Input a string:/n“); gets (str); while (str i !=/0) strlen+; i+; fun (str, strlen); printf(“/n* display string */n“); puts (str); (分数:30.00)填空项 1:_ (正确答案:1k=0 2j=2 3k-)解析:解析
7、填空 1:变量 k 声明时没有初始化,所以要在使用前初始化为 0。填空 2:如果一个数能被除了 1 和其自身之外的数整除,即余数为 0,则这个数不是素数。所以除数 j 从 2 开始取数。填空 3:如果当前字符的下标为非素数,则应将此字符删除,所以变量 k 减 1,使下一个字符覆盖它,达到删除的目的。二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量 a 中的值原为 8,b 中的值原为 3,程序运行后 a 中的值为 3, b 中的值为 8。 请改正程序中的错误,使它能得出正确的结果。
8、 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includeconio.h #include stdio.h int fun(int *x,int y) int t; /*found*/ t=x;x=y; /*found*/ return(y); main() int a=3,b=8; clrscr(); printf(“%d %d/n“,a, b); b=fun( fun ( i+) printf(“%4.1f/n“, s.si); /*输出各科成绩*/ printf(“/nave=%7.3f/n“,s.ave); /*输出平均分*/ (分数:40.00)_正确答案:()解析:void fun(STREC *p) int i; p-ave=0.0; for(i=0;iN;i+) p-ave=p-ave+p-si;/*求各门成绩的总和*/ p-ave=p-ave/N; /*求平均分*/ 解析 本题考查自己定义形参的相关知识点,程序流程是这样的,在 fun()函数中求出平均分后,返回到主函数时平均分也要带回,所以只能定义一个指针类型的形参 STREC *p,此时,引用成员的方式可以是用指向运算符即 p-ave 和 p-si,当然,也可用(*p).ave 和(*p).si。