1、全国计算机二级 C语言上机试题 16+2015年及答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun的功能是:求出形参 ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符*补齐,使其与最长的字符串等长。ss 所指字符串数组中共有 M个字符串,且串长。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define M 5 #define N 20 void fun(char (*ss)N) i
2、nt i, j, n, len=0; for(i=0; i len=strlen(ssi); if(i=0) n=len; if(lenn)n=len; for(i=0; i /*found*/ n=strlen(_1_); for(j=0; j /*found*/ ssi _2_=*; /*found*/ ssin+j+ _3_=/0; main() char ssMN=“shanghai“,“guangzhou“,“beijing“,“tianjing“,“cchongqing“; int i; printf(“The original strings are :/n“); for(i=0
3、; i printf(“/n“); fun(ss); printf(“The result is :/n“); for(i=0; i (分数:10.00)_2.给定程序 MODI1.C中 fun 函数的功能是:将 p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。 例如, 若输入 “I am a student to take the examination.“, 则应输出 “I aM A studenT tO takE thE examination.“。 请修改程序中的错误之处, 使它能得出正确的结果。 注意: 不要改动 main 函数, 不得删行,
4、也不得更改程序的结构! 给定源程序: #include #include void fun( char *p ) int k = 0; for( ; *p; p+ ) if( k ) /*found*/ if( p = ) k = 0; /*found*/ * (p-1) = toupper( *( p - 1 ) ) else k = 1; main() char chrstr64; int d ; printf( “/nPlease enter an English sentence within 63 letters: “); gets(chrstr); d=strlen(chrstr)
5、 ; chrstrd = ; chrstrd+1 = 0 ; printf(“/n/nBefore changing:/n %s“, chrstr); fun(chrstr); printf(“/nAfter changing:/n %s“, chrstr); (分数:10.00)_3.请编写函数 fun, 对长度为 7个字符的字符串, 除首、尾字符外,将其余 5个字符按 ASCII码降序排列。例如,原来的字符串为 CEAedca,排序后输出为 CedcEAa 。 注意: 部分源程序在文件 PROG1.C中。请勿改动主函数 main和其它函数中的任何内容, 仅在函数 fun的花括号中填入你编写
6、的若干语句。 给定源程序: #include #include #include int fun(char *s,int num) main() char s10; printf(“输入 7个字符的字符串:“); gets(s); fun(s,7); printf(“/n%s“,s); NONO(); (分数:10.00)_全国计算机二级 C语言上机试题 16+2015年答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun的功能是:求出形参 ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符*补齐,使其与最长的字符串等长。ss 所指字符串数组中共有 M个字符
7、串,且串长。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define M 5 #define N 20 void fun(char (*ss)N) int i, j, n, len=0; for(i=0; i len=strlen(ssi); if(i=0) n=len; if(lenn)n=len; for(i=0; i /*found*/ n=strlen(_1_); for(j=0; j /*found*/ ssi
8、_2_=*; /*found*/ ssin+j+ _3_=/0; main() char ssMN=“shanghai“,“guangzhou“,“beijing“,“tianjing“,“cchongqing“; int i; printf(“The original strings are :/n“); for(i=0; i printf(“/n“); fun(ss); printf(“The result is :/n“); for(i=0; i (分数:10.00)_正确答案:(第一处:利用 for循环语句取当前字符串的长度,所以应填:ssi。 第二处:在字符串的右边填字符*,其开始位
9、置是 n+j,其中 n是该字符串本身的长度,j 是循环控制变量,所以应填:n+j。 第三处:字符串处理结束应置字符串结束符,其位置是 n+j+1,所以应填:1。)解析:2.给定程序 MODI1.C中 fun 函数的功能是:将 p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。 例如, 若输入 “I am a student to take the examination.“, 则应输出 “I aM A studenT tO takE thE examination.“。 请修改程序中的错误之处, 使它能得出正确的结果。 注意: 不要改动 main 函数,
10、不得删行, 也不得更改程序的结构! 给定源程序: #include #include void fun( char *p ) int k = 0; for( ; *p; p+ ) if( k ) /*found*/ if( p = ) k = 0; /*found*/ * (p-1) = toupper( *( p - 1 ) ) else k = 1; main() char chrstr64; int d ; printf( “/nPlease enter an English sentence within 63 letters: “); gets(chrstr); d=strlen(c
11、hrstr) ; chrstrd = ; chrstrd+1 = 0 ; printf(“/n/nBefore changing:/n %s“, chrstr); fun(chrstr); printf(“/nAfter changing:/n %s“, chrstr); (分数:10.00)_正确答案:(第一处:关键字 int错写成 INT。 第二处:该行括号没有配对,所以只要加上一个右括号即可。)解析:3.请编写函数 fun, 对长度为 7个字符的字符串, 除首、尾字符外,将其余 5个字符按 ASCII码降序排列。例如,原来的字符串为 CEAedca,排序后输出为 CedcEAa 。 注意
12、: 部分源程序在文件 PROG1.C中。请勿改动主函数 main和其它函数中的任何内容, 仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #include #include #include int fun(char *s,int num) main() char s10; printf(“输入 7个字符的字符串:“); gets(s); fun(s,7); printf(“/n%s“,s); NONO(); (分数:10.00)_正确答案:(int fun(char *s,int num) char ch ; int i, j ; for(i = 1 ; i 6 ; i+) for(j = i + 1 ; j 6 ; j+) if(*(s + i) *(s + j) ch = *(s + j) ; *(s + j) = *(s +i) ; *(s + i) = ch ; )解析: