1、二级 C 语言-308 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.函数 fun()的功能是:从 3 个形参 a,b,c 中找出中间的那个数,作为函数值返回。 例如,当 a=3,b=5,c=4 时,中问的数为 4。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在 fun()函数的横线上填入所编写的若干表达式或语句。试题程序: #includestdio.h int fun(int a, int b, int c) int t; t=(ab)?(bc? b:(ac? c: 1); (ac)? 2
2、: (hc)? c: 3); return t; void main() int a1=3, a2=5, a3=4, r; r=fun(a1, a2, a3); printf(“/nThe middle number is: %d/n“, r); (分数:30.00)二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 fun()的功能是:将 p 所指字符串中的所有字符复制到 b 中,要求在每复制 3 个字符之后插入 1 个空格。 例如,若给 a 输入字符串:“ABCDEFGHIJK”,调用函数后,字符数组 b 中的内容为:“ABC DEF GHI JK”。 请改正程序中的错
3、误,使它能得出正确结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h void fun(char*p, char*b) int i, k=0; while(*p) i=1; while(i=3 k+; p+; i+; if(*p) /*found* bk+=“ “; bk=“/0“; void main() char a80, b80; printf(“Enter a string:“); gets(a); printf(“The original string:“); puts(a); fun(a, b); print
4、f(“/nThe string after insert space:“); puts(b); printf(“/n/n“); (分数:40.00)_三、程序设计题(总题数:1,分数:30.00)3.编写函数 fun(),其功能是:求 ss 所指字符串中指定字符的个数,并返回此值。 例如,若输入字符串“123412132”,输入字符为“1”,则输出 3。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 fun()的花括号中填入你编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h
5、#define M 81 int fun(char*ss, char c) void main() char aM, ch; system(“CLS“); printf(“/n Please enter a string:“); gets(a); printf(“/nPlease enter a char:“); ch=getchar(); printf(“/nThe number of the char is:%d/n“, fun(a, ch); (分数:30.00)_二级 C 语言-308 (1)答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.0
6、0)1.函数 fun()的功能是:从 3 个形参 a,b,c 中找出中间的那个数,作为函数值返回。 例如,当 a=3,b=5,c=4 时,中问的数为 4。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在 fun()函数的横线上填入所编写的若干表达式或语句。试题程序: #includestdio.h int fun(int a, int b, int c) int t; t=(ab)?(bc? b:(ac? c: 1); (ac)? 2: (hc)? c: 3); return t; void main() int a1=3, a2=5, a3=4, r; r
7、=fun(a1, a2, a3); printf(“/nThe middle number is: %d/n“, r); (分数:30.00)解析:a a b解析 考查条件运算符嵌套构成复杂的条件表达式的能力。条件运算符规则为:表达式?a:b,首先判断表达式值,若为真(即非零)则取 a 值作为整条语句的值,否则取 b 作为整条语句的值。其中条件 fun()函数的功能是:从 3 个形参 a,b,c 中找出中间的那个数,作为函数值返回。fun()函数中复杂的表达式可以转换成 ifelse 语句,则可以清楚地判断出第一处填“a”,第二处填“a”,第三处填“b”。二、程序改错题(总题数:1,分数:40
8、.00)2.下列给定程序中,函数 fun()的功能是:将 p 所指字符串中的所有字符复制到 b 中,要求在每复制 3 个字符之后插入 1 个空格。 例如,若给 a 输入字符串:“ABCDEFGHIJK”,调用函数后,字符数组 b 中的内容为:“ABC DEF GHI JK”。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h void fun(char*p, char*b) int i, k=0; while(*p) i=1; while(i=3 k+; p+; i+; if(*p)
9、/*found* bk+=“ “; bk=“/0“; void main() char a80, b80; printf(“Enter a string:“); gets(a); printf(“The original string:“); puts(a); fun(a, b); printf(“/nThe string after insert space:“); puts(b); printf(“/n/n“); (分数:40.00)_正确答案:()解析:(1)错误:bk=p; 正确:bk=*p; (2)错误:bk=“/0“; 正确:bk=“; k+ 解析 此题,首先要知道函数的参数类型可
10、以是整型、实型、字符型和指针型。此处正是指针类型变量作为函数的参数,因此应该是“bk=*p”,而不是“bk=p”;题目要求在 3 个字符后加 1 个空格,通过条件表达式“i=3 k+”,继续执行直到处理到字符串 p 的最后一个字符。三、程序设计题(总题数:1,分数:30.00)3.编写函数 fun(),其功能是:求 ss 所指字符串中指定字符的个数,并返回此值。 例如,若输入字符串“123412132”,输入字符为“1”,则输出 3。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 fun()的花括号中填入你编写的若干语句。 试题程序: #include
11、stdlib.h #includeconio.h #includestdio.h #define M 81 int fun(char*ss, char c) void main() char aM, ch; system(“CLS“); printf(“/n Please enter a string:“); gets(a); printf(“/nPlease enter a char:“); ch=getchar(); printf(“/nThe number of the char is:%d/n“, fun(a, ch); (分数:30.00)_正确答案:()解析:int fun(char*ss, char c) int i=0; for(; *ss!=“/0“; ss+) if(*ss=c) i+; /求出 ss 所指字符串中指定字符的个数 return i; 解析 此题考查用 for 循环遍历字符串和通过条件表达式*ss!=“/0“来判断字符串是否结束。给字符串加上结束标识“/0“,通过 for 循环遍历字符串中每一个字符,在遇到结束标识前,如果遇到指定(即用户输入)字符,变量 i 加 1,最后将变量 i 返回,即用户输入字符在字符串中出现的次数。