1、二级 C 语言-63 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:把从键盘输入的 3 个整数按从小到大输出。 例如:输入“33 78 25”,结果输出“25 33 78”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。 试题程序: # includestdio. h # includeconio. h main() int x,y, z,t; clrscr (); printf (“Input x, y,
2、 z/n“); scanf (“%d%d%d“, if(U U /U /U) t=x; x=y; y=t; /*变换 x, y 的值*/ if(U U /U /U) t=z; z=x; x=t; /*交换 x, z 的值*/ if(U U /U /U) t=y; y=z; z=t; /*变换 z, y 的值*/ printf(“*the result*/n“); printf(“from small to big: %d %d %d/n“, x, y, z); (分数:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 proc()的功能是:依次
3、取出字符串中所有的字母字符,形成新的字符串,并取代原字符串。 例如,若输入的字符串是:ab232bd34bkw,则输出结果是:abbdbkw。 请修改程序中的错误,使它能得到正确结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdlib.h #includestdio.h #includeconio.h void proc(char * str) int i, j; for(i=0, j=0; stri!=/0; i+) /*found* if(stri=A /*found* strj=“/0“; void main() char
4、 item80; system(“CLS“); printf(“/nEnter a string: “); gets(item); printf(“/n/nThe string is:%s/n“, item); proc(item);printf(“/n/nThe string of changing is: %sin“, item); (分数:30.00)三、B编程题/B(总题数:1,分数:40.00)3.请编写一个函数 void fun(cbara , charb , int n),其功能是:删除一个字符申中指定下标的字符。其中,a 指向原字符串,删除后的字符串存放在 b 所指的数组中,n
5、 中存放指定的下标。 例如,输入一个字符串 world,然后输入 3,则调用该函数后的结果为 word。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: # include stdioh # include conioh # define LEN 20 void fun (char a, char b , int n) main () char str1 LEN, str2 LEN; int n ; clrscr (); printf (“Enter the string : /n“) ; gets
6、(str1) ; printf (“Enter the position of the string deleted: “); scanf (“%d“, fun (str1, str2, n) ; printf (“The new string is : %s /n“, str2) ; (分数:40.00)_二级 C 语言-63 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:把从键盘输入的 3 个整数按从小到大输出。 例如:输入“33 78 25”,结果输出“25 33 78”。 注意:部分源程序
7、给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。 试题程序: # includestdio. h # includeconio. h main() int x,y, z,t; clrscr (); printf (“Input x, y, z/n“); scanf (“%d%d%d“, if(U U /U /U) t=x; x=y; y=t; /*变换 x, y 的值*/ if(U U /U /U) t=z; z=x; x=t; /*交换 x, z 的值*/ if(U U /U /U) t=y; y=z; z=t; /*变换
8、 z, y 的值*/ printf(“*the result*/n“); printf(“from small to big: %d %d %d/n“, x, y, z); (分数:30.00)填空项 1:_ (正确答案:1 xy 2 xz 3 yz)解析:解析 填空 1:由最后的输出函数 printf ()可以推测,变量 x 中存放最小的数,变量 y 中其次,变量 z 中存放最大的数。如果 x 大于 y,则将两数进行交换。填空 2:如果 x 大于 z,则将两数进行交换。填空 3:如果 y 大于 z,则将两数进行交换。二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 p
9、roc()的功能是:依次取出字符串中所有的字母字符,形成新的字符串,并取代原字符串。 例如,若输入的字符串是:ab232bd34bkw,则输出结果是:abbdbkw。 请修改程序中的错误,使它能得到正确结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdlib.h #includestdio.h #includeconio.h void proc(char * str) int i, j; for(i=0, j=0; stri!=/0; i+) /*found* if(stri=A /*found* strj=“/0“; void
10、 main() char item80; system(“CLS“); printf(“/nEnter a string: “); gets(item); printf(“/n/nThe string is:%s/n“, item); proc(item);printf(“/n/nThe string of changing is: %sin“, item); (分数:30.00)解析:解析 判断一个字符是字母字符,只要这个字符符合是大写字母或小写字母其中一种情况即可。因此 if(si=Asi=Z)(si=asi=z)应改为 if(si=Asi=Z)|(si=asi=z);在程序的最后要为新的
11、字符串加上结束符,在 C 语言中,字符串的结束符为/0。因此“sj=“/0“;”应改为“sj=/0;”。三、B编程题/B(总题数:1,分数:40.00)3.请编写一个函数 void fun(cbara , charb , int n),其功能是:删除一个字符申中指定下标的字符。其中,a 指向原字符串,删除后的字符串存放在 b 所指的数组中,n 中存放指定的下标。 例如,输入一个字符串 world,然后输入 3,则调用该函数后的结果为 word。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: # in
12、clude stdioh # include conioh # define LEN 20 void fun (char a, char b , int n) main () char str1 LEN, str2 LEN; int n ; clrscr (); printf (“Enter the string : /n“) ; gets (str1) ; printf (“Enter the position of the string deleted: “); scanf (“%d“, fun (str1, str2, n) ; printf (“The new string is : %s /n“, str2) ; (分数:40.00)_正确答案:(void fun char a, char b,int n) int i,k=0; for(i=0;ai!=/0;i+) if (i!=n) /*将不是指定下标的字符存入数组 b 中*/ bk+=ai; bk=/0; /*在字符串最后加上结束标记*/ )解析:解析 本题要求删除字符串中指定下标的字符,即相当于把不是指定下标的字符留下。所以要用if(i!=n),注意不能写成“”运算。