1、二级 C 语言-303 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中,将所有串长超过 k 的字符串中右边的字符删除,只保留左边的 k 个字符。ss 所指字符串数组中共有 N 个字符串,且串长小于 M。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 不得增行或删行,也不得更改程序的结构! 给定源程序: #includestdio.h #includestring.h #define N 5 #define M 10 /*found*/ void
2、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+)puts(xi);printf(“/n
3、“); (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.给定程序中函数 fun 的功能是:根据以下公式求 值,并作为函数值返回。 例如,给指定精度的变量 eps 输入 0.0005 时,应当输出 Pi=3.140578。 (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是:使字符串的前导*号不得多于 n个;若多于 n 个,则删除多余的*号;若少于或等于 n 个,则什么也不做,字符串中间和尾部的*号不删除。函数 fun 中给出的语句仅供参考。 例如,字符串中的内容为:*A*BC*DEF*G
4、*,若 n 的值为 4,删除后,字符串中的内容应当是:*A*BC*DEF*G*;若 n 的值为 8,则字符串中的内容仍为:*A*BC*DEF*G*。n 的值在主函数中输入。在编写函数时,不得使用 C 语言提供的字符串函数。 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #includestdio.h void fun(char*a,int n) /*以下代码仅供参考*/ int i=0,j,k=0; while(ak=“*“)k+;/*k 为统计*字符个数*/ if(kn) i=n;j=k; /*以下完成将下标为 k 至串尾
5、的字符前移 k-n 个位置*/ main() char s81;int n; printf(“Enter a string:/n“);getg(s); printf(“Enter n:“);seanf(“%d, fun(s,n); printf(“The string after deleted:/n“);puts(s); (分数:40.00)_二级 C 语言-303 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中,将所有串长超过 k 的字符串中右边的字符删除,只保留左边的
6、 k 个字符。ss 所指字符串数组中共有 N 个字符串,且串长小于 M。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 不得增行或删行,也不得更改程序的结构! 给定源程序: #includestdio.h #includestring.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“,“Del
7、ete“; 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+)puts(xi);printf(“/n“); (分数:30.00)解析:(1)M (2)N (3)0 解析 填空 1:根据 main 函数中函数调用语句,确定函数定义时的形式参数,所以填入M。 填空 2:while 循环语句需要对所有字符串进行操作,因此循环条件是 iN。 填空 3:字符串结
8、尾加入字符串结束标识 0。二、程序改错题(总题数:1,分数:30.00)2.给定程序中函数 fun 的功能是:根据以下公式求 值,并作为函数值返回。 例如,给指定精度的变量 eps 输入 0.0005 时,应当输出 Pi=3.140578。 (分数:30.00)解析:(1)t=1.0; (2)retum(s*2); 解析 该题中,我们首先检查变量数据类型前后是否一致,因为变量 t 定义为 double型,所以赋值时要赋以实型数值。return(s)是一个数学错误,应该返回 return(s*2)。三、程序设计题(总题数:1,分数:40.00)3.假定输入的字符串中只包含字母和*号。请编写函数
9、fun,它的功能是:使字符串的前导*号不得多于 n个;若多于 n 个,则删除多余的*号;若少于或等于 n 个,则什么也不做,字符串中间和尾部的*号不删除。函数 fun 中给出的语句仅供参考。 例如,字符串中的内容为:*A*BC*DEF*G*,若 n 的值为 4,删除后,字符串中的内容应当是:*A*BC*DEF*G*;若 n 的值为 8,则字符串中的内容仍为:*A*BC*DEF*G*。n 的值在主函数中输入。在编写函数时,不得使用 C 语言提供的字符串函数。 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #includestd
10、io.h void fun(char*a,int n) /*以下代码仅供参考*/ int i=0,j,k=0; while(ak=“*“)k+;/*k 为统计*字符个数*/ if(kn) i=n;j=k; /*以下完成将下标为 k 至串尾的字符前移 k-n 个位置*/ main() char s81;int n; printf(“Enter a string:/n“);getg(s); printf(“Enter n:“);seanf(“%d, fun(s,n); printf(“The string after deleted:/n“);puts(s); (分数:40.00)_正确答案:()解析:while(aj!=“/0“) ai+=aj+; ai=“/0“; 解析 找到前面几个*号,赋值给 k,然后判断 k 如果大于 n,向后移动,从 k 开始重新赋值给 n 的位置直到字符串结束,最后为修改后的字符串赋结束字符“/0“。