1、二级 C 语言笔试操作题-5 及答案解析(总分: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。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.h
2、#define N9int fun(int a,int n)int i,j;j=0;for(i=0;in;i+)/*found*/if(_=0)/*found*/_=ai;+;/*found*/return_;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(“inThe even:/n“);for(i=0;i
3、n;i+)printf(“%4d“,bi);printf(“/n“);(分数:30.00)填空项 1:_二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:按以下递归公式求函数的值。(分数:30.00)填空项 1:_三、程序设计题(总题数:1,分数:40.00)3.规定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:使字符串中尾部的*号不多于 n 个,若多于 n 个,则删除多余的*号;若少于或等于 n 个,则不做任何操作,字符串中间和前面的*号不删除。例如,字符串中的内容为“*A*BC*DEF*G*”,若 n 的值为 4,删除后,字符串中的内
4、容应为“*A*BC*DEF*G*”;若 n 的值为 7,则字符串中的内容仍为“*A*BC*DEF*G*”。n 的值在主函数中输入。编写函数时,不得使用 C 语言提供的字符串函数。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序:#includestdio.hvoid fun(char*a,int n)main()char s81;int n;printf(“Enter a string:/n“);gets(s);printf(“Enter n:“);scanf(“%d“,n);fun(s,n);printf(
5、“The string after deleted:/n“);puts(s);(分数:40.00)_二级 C 语言笔试操作题-5 答案解析(总分: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、部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.h#define N9int fun(int a,int n)int i,j;j=0;for(i=0;in;i+)/*found*/if(_=0)/*found*/_=ai;+;/*found*/return_;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 o
7、f even:%d/n“,n);printf(“inThe even:/n“);for(i=0;in;i+)printf(“%4d“,bi);printf(“/n“);(分数:30.00)填空项 1:_ (正确答案:ai%2 aj j)解析:解析 填空 1:if 语句条件表达式,判断数组元素是否为偶数,对 2 求余,结果为 0,则为偶数;结果为 1 则为奇数。填空 2:如果该数组元素是偶数,则将其值保存。填空 3:最后按要求将偶数个数通过 return 语句返回给 main 函数。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:按以下递归公式求函数的值
8、。(分数:30.00)填空项 1:_ (正确答案:(1)int fun (int n)(2)if (n=1))解析:解析 (1)定义有参函数时,形参变量要分别定义其类型,根据主函数中的调用函数可知,此处形参变量应定义为 int 型。(2)if 条件判断表达式中,n1 是赋值表达式,表达式的值永远为真,不能形成判断条件,应将 n1 改为 n=1。三、程序设计题(总题数:1,分数:40.00)3.规定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:使字符串中尾部的*号不多于 n 个,若多于 n 个,则删除多余的*号;若少于或等于 n 个,则不做任何操作,字符串中间和前面的*号不删除。
9、例如,字符串中的内容为“*A*BC*DEF*G*”,若 n 的值为 4,删除后,字符串中的内容应为“*A*BC*DEF*G*”;若 n 的值为 7,则字符串中的内容仍为“*A*BC*DEF*G*”。n 的值在主函数中输入。编写函数时,不得使用 C 语言提供的字符串函数。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序:#includestdio.hvoid fun(char*a,int n)main()char s81;int n;printf(“Enter a string:/n“);gets(s);pri
10、ntf(“Enter n:“);scanf(“%d“,n);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(*ppt+n+1) ai=*p;i+;p+;ai=/0;)解析:解析 字符串中尾部*号不能多于 n 个,多余的要删除。首先需要通过 while 循环统计字符串尾部*号,然后通过 if 条件语句完成尾部*号数和 n 的比较,若尾部*号数多于 n 个,则需要把 n 个*号和其余字符重新保留。