1、二级 C 语言机试-268 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是:把形参 a 所指数组中的偶数按原顺序依次存放到 a0、a1、a2中,把奇数从数组中删除,偶数的个数通过函数值返回。例如,若 a 所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后 a 所指数组中的数据为:4、2、6、8,返回值为 4。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includescdio.h#
2、define N 9int fun(int a,int n)int i,j;j=0;for(i=0;in;i+)/*found*/if( (1) =0)/*found*/(2) =ai;j+;/*found*/return (3) ;main()int bN=(9,1,4,2,3,6,5,8,7),i,n;printf(“/nThe original data:/n“);for(i=0;iN;i+)printf(%4d“,bi);printf(“/n“);n=fun(b,N);printf(“/nThe number of even:%d/n“,n);printf(“/nThe even:/n
3、“);for(i=0;in;i+)printf(“%4d“,bi);printf(“/n“);(分数:30.00)_二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:按以下递归公式求函数的值。(分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.规定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:使字符串中尾部的*号不多于 n 个,若多于 n 个,则删除多余的*号;若少于或等于 n 个,则不做任何操作,字符串中间和前面的*号不删除。例如,字符串中的内容为“*A*BC*DEF*G*”,若 n 的值为 4,删除后,字符串中的内
4、容应为“*A*BC*DEF*G*”;若 n 的值为 7,则字符串中的内容仍为“*A*BE*DEF*G*”。n 的值在主函数中输入。编写函数时,不得使用 C 语言提供的字符串函数。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序:#includestdio.hvoid fun(char*a,int n)main()(char s81;int n;printf(“Enfer a spring:/n“);gets(s);printf(“Encer n:“);scanf(“%d“,fun(s,n);printf(“T
5、he string after deleted:/n“);puts(s);(分数:40.00)_二级 C 语言机试-268 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是:把形参 a 所指数组中的偶数按原顺序依次存放到 a0、a1、a2中,把奇数从数组中删除,偶数的个数通过函数值返回。例如,若 a 所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后 a 所指数组中的数据为:4、2、6、8,返回值为 4。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源
6、程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includescdio.h#define N 9int fun(int a,int n)int i,j;j=0;for(i=0;in;i+)/*found*/if( (1) =0)/*found*/(2) =ai;j+;/*found*/return (3) ;main()int bN=(9,1,4,2,3,6,5,8,7),i,n;printf(“/nThe original data:/n“);for(i=0;iN;i+)printf(%4d“,bi);printf(“/n“);n=fun(b,N);printf(“/nTh
7、e number of even:%d/n“,n);printf(“/nThe even:/n“);for(i=0;in;i+)printf(“%4d“,bi);printf(“/n“);(分数:30.00)_正确答案:(ai%2 (2)ai (3)i)解析:解析 本题关键字有:if 语句条件表达式;数组变量赋值;函数返回值。微分析填空 1:if 语句用来判断数组元素是否为偶数,模 2 为 O 的数为偶数,所以填入 ai%2。填空 2:保存为偶数的数组元素。填空 3:通过 return 语句将偶数个数作为函数值返回。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun
8、 的功能是:按以下递归公式求函数的值。(分数:30.00)_正确答案:(int fun(int n) (2)if(n=1)解析:解析 本题关键字有:函数定义;if 语句条件表达式中=与=的区别。微分析(1)有参函数要定义形参变量类型,由于主函数中传递的参数为 int 型,所以形参定义为 inc 型。(2)n=1 是赋值表达式,不能作为判断条件,=用于比较判断。三、程序设计题(总题数:1,分数:40.00)3.规定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:使字符串中尾部的*号不多于 n 个,若多于 n 个,则删除多余的*号;若少于或等于 n 个,则不做任何操作,字符串中间和前
9、面的*号不删除。例如,字符串中的内容为“*A*BC*DEF*G*”,若 n 的值为 4,删除后,字符串中的内容应为“*A*BC*DEF*G*”;若 n 的值为 7,则字符串中的内容仍为“*A*BE*DEF*G*”。n 的值在主函数中输入。编写函数时,不得使用 C 语言提供的字符串函数。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序:#includestdio.hvoid fun(char*a,int n)main()(char s81;int n;printf(“Enfer a spring:/n“);ge
10、ts(s);printf(“Encer n:“);scanf(“%d“,fun(s,n);printf(“The string after deleted:/n“);puts(s);(分数:40.00)_正确答案:(void fun(char*a,int n)int i=0,k=0;char*p,*t;p=t=a;/*将指针移动到字符串末尾*/while(*t)t+;t-;/*从后往前如果是。*则使 k+,找到最后一个*所在的位置,并记录*的个数*/while(*t=*)/*指针 t 指向前一个,同时标量 k 增加*/(k+;t-;)/*如果最后*的个数大于允许的个数*/if(kn)/*循环次数不大于前面的字符与最大允许*的个数之和*/(while(*pi+;p+;ai=/0;)解析:解析 本题关键字有:循环判断语句;字符串操作;指针型变量。微分析通过 while 循环统计字符串尾部*号的个数,然后通过 if 语句比较尾部*号数是否多于 n 个,若大于则保留 n 个*号和其余字符。