1、二级 C 语言-578 及答案解析(总分:28.00,做题时间:90 分钟)一、填空题(总题数:1,分数:-1.00)1.请补充 main 函数,该函数的功能是:从键盘输入一个字符串并保存在字符 str1 中,把字符串 str1 中下标为偶数的字符保存在字符串 str2 中并输出。例如,当 str1=“cdefghij”,则 str2=“cegi”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h #includeconio.h #define LEN 80 m
2、ain() char str1LEN,str2 LEN; char *p1=str1,*p2=str2; int i=0,j=0; clrscr(); printf(“Enter the string:/n“); scanf( _ 1_ ); printf(“*the origial string*/n“); while(*(p1+j) printf(“ _ 2_ “,*(p1+j); j+; for(i=0;ij;i+=2) *p2+=*(str1+i); *p2=“/0“; printf(“/nThe new string is:%s/n“, _ 3_ ); (分数:-1.00)二、改错题
3、(总题数:1,分数:30.00)2.下列给定程序中,函数 proc()的功能是:在字符串的最前端加入 m 个*号,形成新串,并且覆盖原串。 例如,用户输入字符串 abcd(以回车键结束),然后输入 m 值为 3,则结果为*abcd。 注意:字符串的长度最长允许 79。 请修改函数 proc()中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdlib.h #includestdio.h) #includestring.h #includeconio.h void proc(char str, int m)
4、 char a80, *p; int i; /*found* str=p; for(i=0; im; i+)ai=“*“; do ai=*p; /*found* i+; while(*p); /*found* ai=0; strcpy(str, a); void main() int m; char str so; system(“CLS“); printf(“/nEnter a string: “); gets(str); printf(“/nThe string: %s/n“, str); printf(“/nEnter n(number of *): “); scanf(“%d“, pr
5、oc(str, m); printf(“/nThe string after inster: %s/n“, str); (分数:30.00)三、编程题(总题数:1,分数:-1.00)3.请编写函数 fun,其功能是将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。合并的方式是:将 a 数的十位和个位数依次放在 c 数个位和十位上,b 数的十位和个位数依次放在 c 数的百位和千位上。 例如,当 a=16,b=35,调用该函数后,c=5361。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #
6、includestdio.h void fun(int a,int b/long*c) main() int a,b; long c; clrscr(); printf(“Input a,b;“); scanf(“%d%d“, int i; /*found* str=p; for(i=0; im; i+)ai=“*“; do ai=*p; /*found* i+; while(*p); /*found* ai=0; strcpy(str, a); void main() int m; char str so; system(“CLS“); printf(“/nEnter a string: “
7、); gets(str); printf(“/nThe string: %s/n“, str); printf(“/nEnter n(number of *): “); scanf(“%d“, proc(str, m); printf(“/nThe string after inster: %s/n“, str); (分数:30.00)解析:(1)错误:str=p; 正确:p=str; (2)错误:i+; 正确:i+; P+; (3)错误:ai=0; 正确:ai=“/0“; 解析 由函数 proc 可知,变量 p 是指向字符串的指针,初始化应为字符串首地址。因此,“str=p;”应改为“p=s
8、tr;”将 p 指向的字符串中的每一个字符插在 m 个*之后并存放在字符串数组 a 中。因此,“i+;”应改为“i+;p+;”操作完成后要为字符串数组添加结束符因此“ai=0;”应改为“ai=“/0“”。三、编程题(总题数:1,分数:-1.00)3.请编写函数 fun,其功能是将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。合并的方式是:将 a 数的十位和个位数依次放在 c 数个位和十位上,b 数的十位和个位数依次放在 c 数的百位和千位上。 例如,当 a=16,b=35,调用该函数后,c=5361。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅
9、在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #includestdio.h void fun(int a,int b/long*c) main() int a,b; long c; clrscr(); printf(“Input a,b;“); scanf(“%d%d“,&a,&b); fun(a,b,&c); printf(“The result is:%ld/n“,c); (分数:-1.00)_正确答案:()解析:void fun(int a,int b,long*c) *c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10; 解析 语句“*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;”是将 a 数的十位和个位数依次放在 c数个位和十位上,b 数的十位和个位数依次放在 c 数的百位和千位上。注意“/”和“%”的用法。