1、二级 C 语言-214 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中,将所有串长超过 k 的字符串中后面的字符删除,只保留前面的 k 个字符。ss 所指字符串数组中共有 N 个字符串,且串长小于 M。 请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意 :部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdio.h #include string.h #define N 5 #define M 10
2、/*found*/ void fun(char (*ss) 1,int k) int i=0; /*found*/ while(i 2) /*found*/ ssik= 3;i+; main() char xNM=“Create“,“Modify“,“Sort“,“skip“,“Delete“; int i; printf(“/nThe original string/n/n“); for(i=0;iN;i+)puts(xi); printf(“/n“); fun(x,4); printf(“/nThe string after deleted:/n/n“); for(i=0;iN;i+)pu
3、ts(xi); printf(“/n“); (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:根据以下公式求 值,并作为函数值返回。 例如,当给指定精度的变量 eps 输入 0.0005 时,应输出 Pi=3.140578。 (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.规定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:使字符串的前导*号不得多于 n 个,若多于 n 个,则删除多余的*号;若少于或等于 n 个,则不做处理。字符串中间和尾部的*号不删除。 例如,字符串中的内容为“*A*BC*DEF
4、*G*”,若 n 的值为 4,删除后,字符串中的内容应当是“*A*BC*DEF*G*”;若 n 的值为 8,则字符串中的内容仍为“*A*BC*DEF*G*”。n 的值在主函数中输入。在编写函数时,不得使用 C 语言提供的字符串函数。 注意 :部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #include stdio.h #include conio.h void fun(char *a,int n) void main() char s81;int n; printf(“Enter a string:/n
5、“); gets(s); printf(“Enter n:“); scanf(“%d“, fun(s,n); printf(“The string after deleted:/n“); puts(s); (分数:40.00)_二级 C 语言-214 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中,将所有串长超过 k 的字符串中后面的字符删除,只保留前面的 k 个字符。ss 所指字符串数组中共有 N 个字符串,且串长小于 M。 请在下划线处填入正确的内容并将下划线删除,
6、使程序得出正确的结果。 注意 :部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdio.h #include string.h #define N 5 #define M 10 /*found*/ void fun(char (*ss) 1,int k) int i=0; /*found*/ while(i 2) /*found*/ ssik= 3;i+; main() char xNM=“Create“,“Modify“,“Sort“,“skip“,“Delete“; int i; printf(“/nThe original string/n
7、/n“); for(i=0;iN;i+)puts(xi); printf(“/n“); fun(x,4); printf(“/nThe string after deleted:/n/n“); for(i=0;iN;i+)puts(xi); printf(“/n“); (分数:30.00)解析:M N “/0“ 解析 填空 1:根据 main 函数中函数调用语句,确定函数定义时的形式参数,所以填入M。 填空 2: while 循环语句需要对所有字符串进行操作,因此循环条件是 iN。 填空 3:字符串结尾加入字符串结束标识“/0“。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中
8、,函数 fun 的功能是:根据以下公式求 值,并作为函数值返回。 例如,当给指定精度的变量 eps 输入 0.0005 时,应输出 Pi=3.140578。 (分数:30.00)解析:t=1.0; return(s*2);解析 该题中,我们首先检查变量数据类型前后是否一致,因为变量 t 定义为 double 型,所以赋值时要赋以实型数值。return(s)是一个数学错误,应该返回 return(s*2)。三、程序设计题(总题数:1,分数:40.00)3.规定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:使字符串的前导*号不得多于 n 个,若多于 n 个,则删除多余的*号;若少于
9、或等于 n 个,则不做处理。字符串中间和尾部的*号不删除。 例如,字符串中的内容为“*A*BC*DEF*G*”,若 n 的值为 4,删除后,字符串中的内容应当是“*A*BC*DEF*G*”;若 n 的值为 8,则字符串中的内容仍为“*A*BC*DEF*G*”。n 的值在主函数中输入。在编写函数时,不得使用 C 语言提供的字符串函数。 注意 :部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #include stdio.h #include conio.h void fun(char *a,int n) vo
10、id main() char s81;int n; printf(“Enter a string:/n“); gets(s); printf(“Enter 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; int k=0; char *p,*t; p=t=a; /*开始时,p 与 t 同时指向数组的首地址*/ while(*t=“*“) /*用 k 来统计前部星号的个数*/ k+;t+; if(kn) /*如果 k 大于 n,则使 p 的前部保留 n 个星号,其后的字符依次存入数组 a 中*/ while(*p) ai=*(p+k-n); i+; p+; ai=“/0“; /*在字符串最后加上结束标识位*/ 解析 字符串中前导*号不能多于 n 个,多余的删除。首先需要通过 while 循环统计字符串前导*号的个数,然后通过 if 条件语句完成前导*号的个数和 n 的比较,如果前导*号多于 n 个,需要把 n 个*号和其余字符重新保留。