计算机二级C语言上机真题(1)【附详解】
【真题1】 函数fun 的功能是进行数字字符转换。若形参ch 中是数字字符'0'~
'9',则'0'转换成'9','1'转换成'8','2'转换成'7',……,'9'转换成'0';若是其它字符
则保持不变;并将转换后的结果作为函数值返回。 请在程序的下划线处填入正确的
内容并把下划线删除,使程序得出正确的结果。 注意:源程序存在考生文件夹下的
BLANK1.C 中。不得增行或删行,也不得更改程序的结构!
#include < stdio.h >
/**********found**********/
___【1】___ fun(char ch)
{
/**********found**********/
if (ch>='0' && ___【2】___)
/**********found**********/
return '9' - (ch - ___【3】___ );
return ch;
}
main()
{ char c1, c2;
printf("\nThe result :\n");
c1='2'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
c1='8'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
c1='a'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
}
解析: 由主函数中的语句"c2=fun(c1);"可知:函数fun 的返回类型为字符,
故第一个空应填char;在题面中要求对数字字符进行转换,故第二空的目的是
判断字符ch 是否为一数字字符,即ch 是否在'0'~'9'之间所以第二个空应填
ch<='9'或其等效形式;第三空处语句的目的是返回转换后的结果,即返回一字
符,其所对应的数字与转换前字符所对应的数字的和为9,故第三空应填'0'或
其等效形式。
答案:【1】char 【2】ch<='9' 【3】'0'
【真题2】 给定程序modi.c 中函数fun的功能是:首先将大写字母转换为对应小
写字母;若小写字母为a~u,则将其转换为其后的第5 个字母;若小写字母为v~
z,使其值减21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转
换为小写字母f;若形参是字母W,则转换为小写字母b。 请改正函数fun 中指定
部位的错误,使它能得出正确的结果。 注意:不要改动main 函数,不得增行或
删行,也不得更改程序的结构!
#include < stdio.h >
#include < ctype.h >
char fun(char c)
{ if(c>='A' && c<='Z')
/**************found**************/
c=c-32;
if(c>='a' && c<='u')
/**************found**************/
c=c-5;
else if(c>='v' && c<='z')
c=c-21;
return c;
}
main()
{ char c1, c2;
printf("\nEnter a letter(A-Z): "); c1=getchar();
if(isupper(c1))
{ c2=fun(c1);
printf("\n\nThe letter '%c' change to '%c'\n", c1,c2);
}
else printf("\nEnter (A-Z)!\n");
}
(2011年2月)
解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。
提示思路:先判断输入的字母是否是大写字母,若是大写字母,将其转化为
相应的小写字母,方法是该大写字母对应的ASCII码值加上32就是其小写字
母的ASCII码值,再判断该小写字母是否是a~u,若是转化其后的第5 个字
母,即c=c+5;。若该小写字母是v~z,则将其ACSII码值减去21,转换后
的小写字母作为函数值返回。
本题中的第一个错误:C 语言中,大写字母的ASCII码值比相应的小写字母
的ASCII码值小32,所以程序中语句"c=c-32;"应改为"c=c+32;"或相同作
用的语句。
本题中的第二个错误:C 语言中,字母从a~z 或A~Z 的ASCII码值是依次递
增的,所以将其转换为其后的第5 个字母应该是"c=c+5;"或相同作用的语句。
【真题3】 请编写一个函数fun(char *s),函数的功能是把字符串中所有的字母改
写在该字母的下一个字母,最后一个字母z 改写成字母a。大写字母仍为大写字母,
小写字母仍为小写字母,其他的字符不变。 例如,原有的字符串为:Mn.123xyZ,
则调用该函数后,串中的内容为:No.123yzA。 注意:部分源程序存在文件prog.c
中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填
入你编写的若干语句。
#include < conio.h >
#include < string.h >
#include < stdio.h >
#include < ctype.h >
#define N 81
fun(char *s)
{……}
main()
{ char a[N];
clrscr();
printf("Enter a string:");gets(a);
printf("The original string is :");puts(a);
fun(a);
printf("The string after modified: ");
puts(a);
}
(2011年2月)
解析: 本题的考核点是c语言中的循环语句和条件判断语句的使用。 提示
思路:从本题的要求来看,我们应该采用外循环内条件判断的算法。本参考函
数使用for 循环从头到尾扫描字符串,并在扫描时进行条件判断,对'z','Z'和
其它字符进行不同的处理。
fun (char *s)
{ int i, length;
length = strlen(s);/*求得字符串s 的长度*/
for(i = 0; i<length; i++)
{ if(!((s[i] >='a' && s[i]< ='z') || (s[i]>='A' &&
s[i]<='Z')))
/*判断字符s[i]是否为大小写的英文字母*/
continue;
switch(s[i]){
case 'z':/*假如s[i]为小写字母z,则改写成小写字母a*/
s[i] = 'a'; break;
case 'Z':/*假如s[i]为大写字母Z,则改写成大写字母A*/
s[i] = 'A'; break;
default:
/*假如s[i]为除大小写字母Z 和z 以外字母,则直接改写成该
字母的下一个字母*/
s[i] = s[i] + 1; break;
}
}
}
'9',则'0'转换成'9','1'转换成'8','2'转换成'7',……,'9'转换成'0';若是其它字符
则保持不变;并将转换后的结果作为函数值返回。 请在程序的下划线处填入正确的
内容并把下划线删除,使程序得出正确的结果。 注意:源程序存在考生文件夹下的
BLANK1.C 中。不得增行或删行,也不得更改程序的结构!
#include < stdio.h >
/**********found**********/
___【1】___ fun(char ch)
{
/**********found**********/
if (ch>='0' && ___【2】___)
/**********found**********/
return '9' - (ch - ___【3】___ );
return ch;
}
main()
{ char c1, c2;
printf("\nThe result :\n");
c1='2'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
c1='8'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
c1='a'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
}
解析: 由主函数中的语句"c2=fun(c1);"可知:函数fun 的返回类型为字符,
故第一个空应填char;在题面中要求对数字字符进行转换,故第二空的目的是
判断字符ch 是否为一数字字符,即ch 是否在'0'~'9'之间所以第二个空应填
ch<='9'或其等效形式;第三空处语句的目的是返回转换后的结果,即返回一字
符,其所对应的数字与转换前字符所对应的数字的和为9,故第三空应填'0'或
其等效形式。
答案:【1】char 【2】ch<='9' 【3】'0'
【真题2】 给定程序modi.c 中函数fun的功能是:首先将大写字母转换为对应小
写字母;若小写字母为a~u,则将其转换为其后的第5 个字母;若小写字母为v~
z,使其值减21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转
换为小写字母f;若形参是字母W,则转换为小写字母b。 请改正函数fun 中指定
部位的错误,使它能得出正确的结果。 注意:不要改动main 函数,不得增行或
删行,也不得更改程序的结构!
#include < stdio.h >
#include < ctype.h >
char fun(char c)
{ if(c>='A' && c<='Z')
/**************found**************/
c=c-32;
if(c>='a' && c<='u')
/**************found**************/
c=c-5;
else if(c>='v' && c<='z')
c=c-21;
return c;
}
main()
{ char c1, c2;
printf("\nEnter a letter(A-Z): "); c1=getchar();
if(isupper(c1))
{ c2=fun(c1);
printf("\n\nThe letter '%c' change to '%c'\n", c1,c2);
}
else printf("\nEnter (A-Z)!\n");
}
(2011年2月)
解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。
提示思路:先判断输入的字母是否是大写字母,若是大写字母,将其转化为
相应的小写字母,方法是该大写字母对应的ASCII码值加上32就是其小写字
母的ASCII码值,再判断该小写字母是否是a~u,若是转化其后的第5 个字
母,即c=c+5;。若该小写字母是v~z,则将其ACSII码值减去21,转换后
的小写字母作为函数值返回。
本题中的第一个错误:C 语言中,大写字母的ASCII码值比相应的小写字母
的ASCII码值小32,所以程序中语句"c=c-32;"应改为"c=c+32;"或相同作
用的语句。
本题中的第二个错误:C 语言中,字母从a~z 或A~Z 的ASCII码值是依次递
增的,所以将其转换为其后的第5 个字母应该是"c=c+5;"或相同作用的语句。
【真题3】 请编写一个函数fun(char *s),函数的功能是把字符串中所有的字母改
写在该字母的下一个字母,最后一个字母z 改写成字母a。大写字母仍为大写字母,
小写字母仍为小写字母,其他的字符不变。 例如,原有的字符串为:Mn.123xyZ,
则调用该函数后,串中的内容为:No.123yzA。 注意:部分源程序存在文件prog.c
中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填
入你编写的若干语句。
#include < conio.h >
#include < string.h >
#include < stdio.h >
#include < ctype.h >
#define N 81
fun(char *s)
{……}
main()
{ char a[N];
clrscr();
printf("Enter a string:");gets(a);
printf("The original string is :");puts(a);
fun(a);
printf("The string after modified: ");
puts(a);
}
(2011年2月)
解析: 本题的考核点是c语言中的循环语句和条件判断语句的使用。 提示
思路:从本题的要求来看,我们应该采用外循环内条件判断的算法。本参考函
数使用for 循环从头到尾扫描字符串,并在扫描时进行条件判断,对'z','Z'和
其它字符进行不同的处理。
fun (char *s)
{ int i, length;
length = strlen(s);/*求得字符串s 的长度*/
for(i = 0; i<length; i++)
{ if(!((s[i] >='a' && s[i]< ='z') || (s[i]>='A' &&
s[i]<='Z')))
/*判断字符s[i]是否为大小写的英文字母*/
continue;
switch(s[i]){
case 'z':/*假如s[i]为小写字母z,则改写成小写字母a*/
s[i] = 'a'; break;
case 'Z':/*假如s[i]为大写字母Z,则改写成大写字母A*/
s[i] = 'A'; break;
default:
/*假如s[i]为除大小写字母Z 和z 以外字母,则直接改写成该
字母的下一个字母*/
s[i] = s[i] + 1; break;
}
}
}