1、二级 C语言机试-205 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:33.00)1.请补充 main函数,该函数的功能是:把一个字符串中的所有小写字母字符全部转换成大写字母字符,其他字符不变,结果保存原来的字符串中。例如:当 strN“123 abcdef ABCDEF!”,结果输出:“123ABCDEFABCDEF!”。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的横线上填入所编写的若干表达式或语句。试题程序:#includestdio.h#includestdlib.h#includeconio.h#d
2、efine N 80void main()int j;char strN=“123abcdef ABCDEF!“;char *pf=str;clrscr();printf(“* original string */n“);puts(str);【1】 ;while(*(pf+j)if(*(pf+j)=achar strN=“123abcdef ABCDEF!“;char *pf=str;clrscr();printf(“* original string */n“);puts(str);【1】 ;while(*(pf+j)if(*(pf+j)=a&* (pf+j)=z)*(pf+j)= 【2】
3、;j+;else【3】 ;printf(“* new string */n“);puts(str);system(“pause“);(分数:33.00)填空项 1:_ (正确答案:【1】j=0 【2】*(pf+j)-32 【3】j+)解析:解析填空 1:变量 j声明时没有初始化,而后面程序用到 j,所以在这里对 j初始化为 0。填空2:将小写字母转换为对应的大写字母的方法是,小写字母的 ASCII码减去 32,得到对应的大写字母的ASCII码。填空 3:如果当前字符不是小写字母,则不做任何处理,使指针指向下一个字符,准备进行判断。二、改错题(总题数:1,分数:33.00)2.下列给定程序中,函
4、数 fun()的功能是逐个比较 a,b 两个字符串对应位置中的字符,把 ASCII值小或相等的字符依次存放到 c数组中,形成一个新的字符串。例如:a 中的字符串为 fshADfg,b 中的字符串为 sdAEdi,则 c中的字符串应为 fdAADf。请改正程序中的错误,使它能得到正确结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include stdio.h#include strinq.hvoid fun(char *p,char *q,char *c)int k=0;while(*p | *q)/*found*/if (*p=*q)ck=*q;else
5、 ck:*p;if(*p) p+;if(*q) q+;/*+*found*/k+main()char a10=“fshADfg“,b10=“sdAEdi“,c80=/0);fun(a,b,c);printf(“The string a:“);puts (a);printf(“The string b:“);puts (b);printf(“The result:“);puts (c);(分数:33.00)填空项 1:_ (正确答案:(1)错误:if(*P=*q) 正确:if(*p=*q)(2)错误:k+ 正确:k+;)解析:解析错误 1:依题意,把 ASCII值小或相等的字符存放到 c数组中,
6、故 if语句的关系运算符应为“=”。错误 2:C 语言规定,每个语句要用分号结束。三、编程题(总题数:1,分数:34.00)3.请编写函数 fun,其功能是将两个两位数的正整数 a、b 合并形成一个整数放在 c中。合并的方式是:将 a数的十位和个位数依次放在 c数个位和十位上,b 数的十位和个位数依次放在 c数的百位和千位上。例如,当 a=16,b=35,调用该函数后,c=5361。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。试题程序:#includestdio.hvoid fun(int a,int b/long*
7、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);(分数:34.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数的百位和千位上。注意“/”和“%”的用法。