1、二级 C 语言-234 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充 main()函数,该函数的功能是:把一个字符串中的所有小写字母字符全部转换成大写字母字符,其他字符不变,结果保存在原来的字符串中。 例如,当 strM=”abcdef123ABCD”,结果输出为“ABCDEF123ABCD”。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h #includestdlib.h #includeconio.h #de
2、fine M 80 void main() int j; char strM=“abcdef123ABCD“; char * f=str; system(“CLS“); printf(“*original string*/n“); puts(str); 1 while(*(pf+j) if(*(pf+j)=“a“ 3; else j+; printf(“*new string*/n“); puts(str); system(“pause“); (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 proc()的功能是:根据输入的 3 个边长(整型值),判断
3、能否构成三角形:若能构成等边三角形,则返回 3;若是等腰三角形,则返回 2;若能构成三角形则返回 1;若不能,则返回 0。 例如,输入 3 个边长为 3,4,5,实际输入时,数与数之间以 Enter 键分隔而不是逗号。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h #includemath.h int proc(int a,int b,int c) if(a+bc else if(a=b|b=c|a=c) return 2; /*found* else return 3; els
4、e return 0; void main() int a,b,c,shape; printf(“/nInput a,b,c:“); scanf(“%d%d%d“, printf(“/na=%d,b=%d,c=%d/n“,a,b,c); shape=proc(a,b,c); printf(“/n/nThe shape:%d/n“,shape); (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.请编写函数 proc(),其功能是:将 str 所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在 t 所指数组中。 例如,当 str 所指字符串中的内容为 abcdefg
5、,则在 t 所指数组中的内容应是 bdf。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h #includestring.h void proc(char*str,char t) void main() char str100,t100; system(“CLS“); printf(“/nPlease enter string str:“); scanf(“%s“,str); proc(str,t);
6、 printf(“/nThe result is:%s/n“,t); (分数:40.00)_二级 C 语言-234 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充 main()函数,该函数的功能是:把一个字符串中的所有小写字母字符全部转换成大写字母字符,其他字符不变,结果保存在原来的字符串中。 例如,当 strM=”abcdef123ABCD”,结果输出为“ABCDEF123ABCD”。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。 试题程序: #includ
7、estdio.h #includestdlib.h #includeconio.h #define M 80 void main() int j; char strM=“abcdef123ABCD“; char * f=str; system(“CLS“); printf(“*original string*/n“); puts(str); 1 while(*(pf+j) if(*(pf+j)=“a“ 3; else j+; printf(“*new string*/n“); puts(str); system(“pause“); (分数:30.00)解析:j=0 *(pf+j)-32 j+解
8、析 由程序中可知,变量 j 为字符数组的下标,其初始值为 0。因此,第一处填“j=0”;大写字母的 ASCII 码值比小写字母的小 32,要将小写字母变为大写字母,因此,第二处填“*(pf+j)-32”;要将字符串数组中的所有小写字母变为大写字母,需要检查其中的每一个字符,因此,第三处填“j+”。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 proc()的功能是:根据输入的 3 个边长(整型值),判断能否构成三角形:若能构成等边三角形,则返回 3;若是等腰三角形,则返回 2;若能构成三角形则返回 1;若不能,则返回 0。 例如,输入 3 个边长为 3,4,5,实际输入
9、时,数与数之间以 Enter 键分隔而不是逗号。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h #includemath.h int proc(int a,int b,int c) if(a+bc else if(a=b|b=c|a=c) return 2; /*found* else return 3; else return 0; void main() int a,b,c,shape; printf(“/nInput a,b,c:“); scanf(“%d%d%d“, pr
10、intf(“/na=%d,b=%d,c=%d/n“,a,b,c); shape=proc(a,b,c); printf(“/n/nThe shape:%d/n“,shape); (分数:30.00)解析:错误:return 1; 正确:return 3; 错误:return 3; 正确:return 1; 解析 三条边都相等的三角形为等边三角形,按题目中要求,等边三角形返回 3,若不是等边三角形也不是等腰三角形则返回 1,因此,“return 1;”应改为“return 3;”;“return 3;”应改为“return 1;”。三、程序设计题(总题数:1,分数:40.00)3.请编写函数 p
11、roc(),其功能是:将 str 所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在 t 所指数组中。 例如,当 str 所指字符串中的内容为 abcdefg,则在 t 所指数组中的内容应是 bdf。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h #includestring.h void proc(char*str,char t) void main() char str100,t100
12、; system(“CLS“); printf(“/nPlease enter string str:“); scanf(“%s“,str); proc(str,t); printf(“/nThe result is:%s/n“,t); (分数:40.00)_正确答案:()解析:void proc(char *sir,char t) int i,j=0,k=strlen(str); /k 是放字符串的长度的变量 for(i=1;ik;i=i+2)/i=i+2,表示为奇数 tj+=stri; /把下标为奇数的数放到 t 数组中 tj=“/0“;/因为 t 是字符串,因此必须用“/0“作为结束标志 解析 题目要求将下标为偶数的字符删除,其余字符放在新的字符数组 t 中。首先取出字符串 str 中下标为奇数的字符,将其赋值给新的字符串 t,最后用“/0“作为字符串结束的标志。