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