1、二级 C 语言机试-287 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:把字符下标为非素数的字符从字符串 sb 中删除,把字符下标为素数的字符重新保存在字符串 e 口中。字符串 sb 从键盘输入,其长度作为参数传入函数 fun()。例如,输入“abcdefghijkl”,输出“cdfhl”。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。试题程序:#include stdio.h#define N 80void fu
2、n(char s,int n)int i, j, k, flag;【1】 ;for(i=0; in; i+)if (i1)s k+ =s i;flag=I;for( 【2】 ; ji j+)if (i%j=0)flag=0;【3】 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);
3、(分数:30.00)填空项 1:_二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量 a 中的值原为 8,b 中的值原为 3,程序运行后 a 中的值为 3, b 中的值为 8。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#includeconio.h#include stdio.hint fun(int *x,int y)int t;/*found*/t=x;x=y;/*found*/return(y);mai
4、n()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 语言机试-287 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:把字符下标为非素数的字符从字符串 sb 中删除,把字符下标为素数的字符重新保存在字符串 e 口中。字符串 sb 从键盘输入,其长度作为参数传入
5、函数 fun()。例如,输入“abcdefghijkl”,输出“cdfhl”。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。试题程序:#include stdio.h#define N 80void fun(char s,int n)int i, j, k, flag;【1】 ;for(i=0; in; i+)if (i1)s k+ =s i;flag=I;for( 【2】 ; ji j+)if (i%j=0)flag=0;【3】 s k=/0;main()int i=0, strlen=0;char str
6、N;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-)解析:解析 填空 1:变量 k 声明时没有初始化,所以要在使用前初始化为 0。填空 2:如果一个数能被除了 1 和其自身之外的数整除,即余数为 0,则这个数不是素数。所以除数 j 从 2 开始取数。填空 3:如果当前字符的下标为非素数
7、,则应将此字符删除,所以变量 k 减 1,使下一个字符覆盖它,达到删除的目的。二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量 a 中的值原为 8,b 中的值原为 3,程序运行后 a 中的值为 3, b 中的值为 8。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#includeconio.h#include stdio.hint fun(int *x,int y)int t;/*found*/t=x;x=y;
8、/*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。