计算机二级C语言上机真题(13)【附详解】
【真题1】 请补充函数fun(),该函数的功能是:把一个整数转换成字符串,并倒序
保存在字符数组str 中。例如:当n=13572468 时,str=“86427531”。 注意:
部分源程序给出如下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数
fun 的横线上填入所编写的若干表达式或语句。 试题程序:
#include< stdio.h >
#include< conio.h >
#define N 80
char str[N];
void fun(long int n)
{ int i=0;
while(【1】)
{
str[i]=【2】;
n/=10;
i++;
}
【3】;
}
main()
{ long int n=13572468;
clrscr();
printf("*** the origial data ***\n");
printf("n=%ld",n);
fun(n);
printf("\n%s",str);
}
(2011年2月)
解析: 填空1:while循环的执行条件是n >0,当n 等于0 时,说明已经将
整数的各位数字都转换为数字字符并存入字符串中了。填空2:n对10 求余,
得到整数n的个位数字,在加上字符′0′的ASCII码,得到对应的数字字符,并
存入字符串str 中。填空3:将整数转换为字符串并倒序存放入字符数组str 中
后,还要在str 最后加上字符串结束标记符′\0′。
答案:【1】n >0 【2】n%10+'0' 【3】str[i]= ′\0′
【真题2】 给定程序modi.c 中,函数fun 的功能是:将s 所指字符串的正序和反
序进行连接,形成一个新串放在t 所指的数组中。 例如,当s 所指字符串为:
"ABCD"时,则t 所指字符串中的内容应为:"ABCDDCBA"。 请改正程序中的错
误,使它能得出正确结果。 注意:不要改动main 函数,
#include < conio.h >
#include < stdio.h >
#include < string.h >
/************found************/
void fun(char s,char t)
{ int i,d;
d=strlen(s);
for(i=0;i< d;i++) t[i]=s[i];
for(i=0;i< d;i++) t[d+i]=s[d-1-i];
/************found************/
t[2*d-1]='\0';
}
main()
{
char s[100],t[100];
clrscr();
printf("\nPlease enter string S:");scanf("%s",s);
fun(s,t);
printf("\nThe result is:%s\n",t);
}
(2011年2月)
解析: 本题着重考察考生对C 语言中指针及一维数组的用法与基本概念。
C 语言中,指针变量的定义:void fun (char *s, char *t),一维数组的定
义:fun(char s[], char t[])。源程序中的"void fun (char s, char t)"是定义
的简单变量s、t,按照程序的需要,这里应该定义为指针变量或一维数组,所
以应改为"void fun (char *s, char *t)"或"fun(char s[], char t[])"或相同
作用的语句。
按照题意的要求,字符串的结束符'\0'应放在2 倍字符串长度的位置上,所以源
程序"t[2*d-1] = '\0';"应改为"t[2*d] = '\0';"或相同作用的语句。
【真题3】 请编一个函数char * EXUL(char tt[]),它的功能是:将字符串tt 中的
大写字母都改为对应的小写字母,其它字符不变并返回修改后的字符串。 例如,若
输入字符串:"Ab, cD",则输出结果为:"ab, cd"。 注意:此程序存贮在prog.c
中。 请勿改动主程序main、函数WriteData 和函数compute 中的任何内容,仅
在函数EXUL 的花括号中填入你编写的若干语句。
#include < conio.h >
#include < stdio.h >
#include < string.h >
char* EXUL( char tt[] )
{……}
main()
{ int i;
char tt[81];
clrscr();
printf("\nPlease enter a string: ");
gets( tt );
printf( "\nThe result string is:%s\n", EXUL( tt ) );
compute();
}
/* 以下部分与考生答题无关, 考生不必阅读, 但不得进行任何修改 */
WriteData(char tt[])
{ FILE *fp;
fp = fopen("dat82.dat", "w") ;
fprintf(fp, "%s", tt);
fclose(fp);
}
compute()
{ int i;
char tt[81];
FILE *fp;
fp=fopen("c9670803.in","r");
fgets( tt, 80, fp );
fclose(fp);
EXUL(tt);
WriteData(tt);
}
(2011年2月)
解析: 本题的考核点是C语言中的指针、循环语句以及条件判断语句的使用。
提示思路:使用for 循环从头到尾扫描字符串tt,如果某一个字符为大写字母,
则把它改成小写。
char* EXUL( char tt[] )
{for(;*tt;tt++) /*使用for 循环从头到尾扫描字符串tt*/
if ((*tt >= 'A') && (*tt < = 'Z') ) /*判断某一个字符是否为大写字母*/
*tt -= 'A' - 'a'; /*将大写字母转换成小写字母*/
}
保存在字符数组str 中。例如:当n=13572468 时,str=“86427531”。 注意:
部分源程序给出如下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数
fun 的横线上填入所编写的若干表达式或语句。 试题程序:
#include< stdio.h >
#include< conio.h >
#define N 80
char str[N];
void fun(long int n)
{ int i=0;
while(【1】)
{
str[i]=【2】;
n/=10;
i++;
}
【3】;
}
main()
{ long int n=13572468;
clrscr();
printf("*** the origial data ***\n");
printf("n=%ld",n);
fun(n);
printf("\n%s",str);
}
(2011年2月)
解析: 填空1:while循环的执行条件是n >0,当n 等于0 时,说明已经将
整数的各位数字都转换为数字字符并存入字符串中了。填空2:n对10 求余,
得到整数n的个位数字,在加上字符′0′的ASCII码,得到对应的数字字符,并
存入字符串str 中。填空3:将整数转换为字符串并倒序存放入字符数组str 中
后,还要在str 最后加上字符串结束标记符′\0′。
答案:【1】n >0 【2】n%10+'0' 【3】str[i]= ′\0′
【真题2】 给定程序modi.c 中,函数fun 的功能是:将s 所指字符串的正序和反
序进行连接,形成一个新串放在t 所指的数组中。 例如,当s 所指字符串为:
"ABCD"时,则t 所指字符串中的内容应为:"ABCDDCBA"。 请改正程序中的错
误,使它能得出正确结果。 注意:不要改动main 函数,
#include < conio.h >
#include < stdio.h >
#include < string.h >
/************found************/
void fun(char s,char t)
{ int i,d;
d=strlen(s);
for(i=0;i< d;i++) t[i]=s[i];
for(i=0;i< d;i++) t[d+i]=s[d-1-i];
/************found************/
t[2*d-1]='\0';
}
main()
{
char s[100],t[100];
clrscr();
printf("\nPlease enter string S:");scanf("%s",s);
fun(s,t);
printf("\nThe result is:%s\n",t);
}
(2011年2月)
解析: 本题着重考察考生对C 语言中指针及一维数组的用法与基本概念。
C 语言中,指针变量的定义:void fun (char *s, char *t),一维数组的定
义:fun(char s[], char t[])。源程序中的"void fun (char s, char t)"是定义
的简单变量s、t,按照程序的需要,这里应该定义为指针变量或一维数组,所
以应改为"void fun (char *s, char *t)"或"fun(char s[], char t[])"或相同
作用的语句。
按照题意的要求,字符串的结束符'\0'应放在2 倍字符串长度的位置上,所以源
程序"t[2*d-1] = '\0';"应改为"t[2*d] = '\0';"或相同作用的语句。
【真题3】 请编一个函数char * EXUL(char tt[]),它的功能是:将字符串tt 中的
大写字母都改为对应的小写字母,其它字符不变并返回修改后的字符串。 例如,若
输入字符串:"Ab, cD",则输出结果为:"ab, cd"。 注意:此程序存贮在prog.c
中。 请勿改动主程序main、函数WriteData 和函数compute 中的任何内容,仅
在函数EXUL 的花括号中填入你编写的若干语句。
#include < conio.h >
#include < stdio.h >
#include < string.h >
char* EXUL( char tt[] )
{……}
main()
{ int i;
char tt[81];
clrscr();
printf("\nPlease enter a string: ");
gets( tt );
printf( "\nThe result string is:%s\n", EXUL( tt ) );
compute();
}
/* 以下部分与考生答题无关, 考生不必阅读, 但不得进行任何修改 */
WriteData(char tt[])
{ FILE *fp;
fp = fopen("dat82.dat", "w") ;
fprintf(fp, "%s", tt);
fclose(fp);
}
compute()
{ int i;
char tt[81];
FILE *fp;
fp=fopen("c9670803.in","r");
fgets( tt, 80, fp );
fclose(fp);
EXUL(tt);
WriteData(tt);
}
(2011年2月)
解析: 本题的考核点是C语言中的指针、循环语句以及条件判断语句的使用。
提示思路:使用for 循环从头到尾扫描字符串tt,如果某一个字符为大写字母,
则把它改成小写。
char* EXUL( char tt[] )
{for(;*tt;tt++) /*使用for 循环从头到尾扫描字符串tt*/
if ((*tt >= 'A') && (*tt < = 'Z') ) /*判断某一个字符是否为大写字母*/
*tt -= 'A' - 'a'; /*将大写字母转换成小写字母*/
}