计算机二级C语言上机真题(5)【附详解】
【真题1】 给定程序的功能是:从键盘输入若干行文件(每行不超过80 个字符),
写到文件myfile4.txt 中,用-1 作为字符串输入结束的标志。然后将文件的内容读
出显示在屏幕上。文件的读写分别由自定义函数ReadText 和WriteText 实现。
#include < stdio.h >
#include < string.h >
#include < stdlib.h >
void WriteText(FILE *);
void ReadText(FILE *);
FILE *fp;
main()
{ if((fp=fopen("myfile4.txt", "w"))==NULL)
{printf("open fail!!\n"); exit(0);}
WriteText(fp);
fclose(fp);
if((fp=fopen("myfile4.txt","r"))==NULL)
{printf(" open fail!!\n"); exit(0);}
ReadText(fp);
fclose(fp);
}
/**********found**********/
void WriteText(FILE __【1】__ )
{ char str[81];
printf("\nEnter string with -1 to end :\n");
gets(str);
while(strcmp(str,"-1")!=0) {
/**********found**********/
fputs( __【2】__ ,fw); fputs("\n",fw);
gets(str);
}
}
void ReadText(FILE *fr)
{ char str[81];
printf("\nRead file and output to screen :\n");
fgets(str, 81, fr);
while(!feof(fr)) {
/**********found**********/
printf("%s", ___【3】___);
fgets(str,81,fr);
}
}
(2011年2月)
解析: 本题考核点为:文件的读写函数等。
题中第一个空填"*fw":fw 是一个文件指针,从键盘上读入数据,输入其所指
向的文件中。
题中第二空填"str":fputs 函数向文件中写数据,其函数原型为:fputs(ch,fp)
其中ch 是要输出的字符,它可以是一个字符常量,也可以是一个字符变量。fp
是文件指针变量。
题中第三个空填"str":printf函数的一般格式为: printf(格式控制,输出表列)
1、"格式控制"是用双引号括起来的字符串,也称"转换控制字符串",它包括两
种信息:
格式说明:由"%"和格式字符组成,如%d,%f等。它的作用是将输出的数据
转换为指定的格式输出。格式说明总是由"%"字符开始的。普通字符,即需要
原样输出的字符。
2、"输出表列":是需要输出的一些数据,可以是表达式。
答案:【1】*fw 【2】str 【3】str
【真题2】 给定程序modi.c 中,函数fun 的功能是:将字符串tt 中的小写字母改
为对应的大写字母,其它字符不变。例如,若输入"Ab,cD",则输出"AB,CD"。 请
改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数,
#include < conio.h >
#include < stdio.h >
#include < string.h >
char *fun(char tt[])
{ int i;
for(i=0;tt[i];i++)
/************found************/
if(('a'<=tt[i]) || (tt[i]<='z'))
/************found************/
tt[i]+=32;
return(tt);
}
main()
{ int i;
char tt[81];
clrscr();
printf("\nPlease enter a string:");
gets(tt);
printf("\nThe result string is:\n%s", fun(tt));
}
(2011年2月)
解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。
本题中的第一个错误:由题意可知,当字符串中的字符大于a且小于z 时(即
为小写字母时),将其替换成大写字母。在C语言中,&&表示逻辑与,||表示
逻辑或,所以程序中语句"if(('a'<=tt[i]) || (tt[i]<='z'))"应改为"if(('a'<
=tt[i]) && (tt[i]< ='z'))"或相同作用的语句。
本题中的第二个错误:小写字母转换成大写字母,应将其ASCII值减去32,所
以程序中语句"tt[i]+=32;"应改为"tt[i]-=32;"或相同作用的语句。
【真题3】 请编写函数fun,函数的功能是:将s所指字符串中下标为奇数位置上的
大写字母转换为字母序列中的下一个小写字母;若该位置上是小写字母,则不转换;
若该位置上是大写字母Z,则仅转换成小写字母z。 例如,输入:ABCdXZZZZ,则
输出为:AcCdXzZz。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数
main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。
#include < stdio.h >
#define N 80
void fun(char *s)
{……}
main()
{ char s[N];
printf("Enter a string: "); scanf("%s",s);
fun(s);
printf("The result:%s",s);
}
(2011年2月)
解析: 本题的考核点是字符转换算法。 解题思路:将s 所指字符串中下标为奇
数位置上的大写字母转换为字母序列中的下一个小写字母,若该位置上是小写
字母,则不转换;若该位置上是大写字母Z,则仅转换成小写字母z。判断字符
为大写字母的方法是:判断字符的ASCII值是否大于A小于Z。判断下标为奇
数,用i%2 等于1来判断。
void fun(char *s)
{ int i=0;
/*假如s[i]不为字符串结束符,则继续循环,否则退出循环*/
while (s[i]!='\0')
/*假如s[i]为大写字母Z 且在字符串中下标为奇数的位置上,则转换成
小写字母z*/
{ if ((s[i]=='Z') && (i%2==1)) s[i]='z';
/*假如s[i]为除大写字母Z 以外的字母,则直接转换成该字母的小写
字母状态的下一个字母*/
else if ((s[i]>='A' && s[i]<'Z') && (i%2==1))
s[i]=s[i]+33;
i++;
}
}
写到文件myfile4.txt 中,用-1 作为字符串输入结束的标志。然后将文件的内容读
出显示在屏幕上。文件的读写分别由自定义函数ReadText 和WriteText 实现。
#include < stdio.h >
#include < string.h >
#include < stdlib.h >
void WriteText(FILE *);
void ReadText(FILE *);
FILE *fp;
main()
{ if((fp=fopen("myfile4.txt", "w"))==NULL)
{printf("open fail!!\n"); exit(0);}
WriteText(fp);
fclose(fp);
if((fp=fopen("myfile4.txt","r"))==NULL)
{printf(" open fail!!\n"); exit(0);}
ReadText(fp);
fclose(fp);
}
/**********found**********/
void WriteText(FILE __【1】__ )
{ char str[81];
printf("\nEnter string with -1 to end :\n");
gets(str);
while(strcmp(str,"-1")!=0) {
/**********found**********/
fputs( __【2】__ ,fw); fputs("\n",fw);
gets(str);
}
}
void ReadText(FILE *fr)
{ char str[81];
printf("\nRead file and output to screen :\n");
fgets(str, 81, fr);
while(!feof(fr)) {
/**********found**********/
printf("%s", ___【3】___);
fgets(str,81,fr);
}
}
(2011年2月)
解析: 本题考核点为:文件的读写函数等。
题中第一个空填"*fw":fw 是一个文件指针,从键盘上读入数据,输入其所指
向的文件中。
题中第二空填"str":fputs 函数向文件中写数据,其函数原型为:fputs(ch,fp)
其中ch 是要输出的字符,它可以是一个字符常量,也可以是一个字符变量。fp
是文件指针变量。
题中第三个空填"str":printf函数的一般格式为: printf(格式控制,输出表列)
1、"格式控制"是用双引号括起来的字符串,也称"转换控制字符串",它包括两
种信息:
格式说明:由"%"和格式字符组成,如%d,%f等。它的作用是将输出的数据
转换为指定的格式输出。格式说明总是由"%"字符开始的。普通字符,即需要
原样输出的字符。
2、"输出表列":是需要输出的一些数据,可以是表达式。
答案:【1】*fw 【2】str 【3】str
【真题2】 给定程序modi.c 中,函数fun 的功能是:将字符串tt 中的小写字母改
为对应的大写字母,其它字符不变。例如,若输入"Ab,cD",则输出"AB,CD"。 请
改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数,
#include < conio.h >
#include < stdio.h >
#include < string.h >
char *fun(char tt[])
{ int i;
for(i=0;tt[i];i++)
/************found************/
if(('a'<=tt[i]) || (tt[i]<='z'))
/************found************/
tt[i]+=32;
return(tt);
}
main()
{ int i;
char tt[81];
clrscr();
printf("\nPlease enter a string:");
gets(tt);
printf("\nThe result string is:\n%s", fun(tt));
}
(2011年2月)
解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。
本题中的第一个错误:由题意可知,当字符串中的字符大于a且小于z 时(即
为小写字母时),将其替换成大写字母。在C语言中,&&表示逻辑与,||表示
逻辑或,所以程序中语句"if(('a'<=tt[i]) || (tt[i]<='z'))"应改为"if(('a'<
=tt[i]) && (tt[i]< ='z'))"或相同作用的语句。
本题中的第二个错误:小写字母转换成大写字母,应将其ASCII值减去32,所
以程序中语句"tt[i]+=32;"应改为"tt[i]-=32;"或相同作用的语句。
【真题3】 请编写函数fun,函数的功能是:将s所指字符串中下标为奇数位置上的
大写字母转换为字母序列中的下一个小写字母;若该位置上是小写字母,则不转换;
若该位置上是大写字母Z,则仅转换成小写字母z。 例如,输入:ABCdXZZZZ,则
输出为:AcCdXzZz。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数
main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。
#include < stdio.h >
#define N 80
void fun(char *s)
{……}
main()
{ char s[N];
printf("Enter a string: "); scanf("%s",s);
fun(s);
printf("The result:%s",s);
}
(2011年2月)
解析: 本题的考核点是字符转换算法。 解题思路:将s 所指字符串中下标为奇
数位置上的大写字母转换为字母序列中的下一个小写字母,若该位置上是小写
字母,则不转换;若该位置上是大写字母Z,则仅转换成小写字母z。判断字符
为大写字母的方法是:判断字符的ASCII值是否大于A小于Z。判断下标为奇
数,用i%2 等于1来判断。
void fun(char *s)
{ int i=0;
/*假如s[i]不为字符串结束符,则继续循环,否则退出循环*/
while (s[i]!='\0')
/*假如s[i]为大写字母Z 且在字符串中下标为奇数的位置上,则转换成
小写字母z*/
{ if ((s[i]=='Z') && (i%2==1)) s[i]='z';
/*假如s[i]为除大写字母Z 以外的字母,则直接转换成该字母的小写
字母状态的下一个字母*/
else if ((s[i]>='A' && s[i]<'Z') && (i%2==1))
s[i]=s[i]+33;
i++;
}
}