计算机二级C语言上机真题(11)【附详解】
【真题1】 下列给定的程序中,fun()函数的功能是:将p 所指字符串中每个单词的
最后一个字母改成大写(这里的"单词"是指有空格隔开的字符串)。例如,若输入: I
am a student to take the examination 则应输出:I aM A studenT tO takE
thE examinatioN 试题程序:
#include < conio.h >
#include < ctype.h >
#include < stdio.h >
#include < string.h >
void fun(char *p)
{
int k=0;
for ( ;*p;p++)
if (k)
{
if (*p==' ')
{
____1_____;
___2____=toupper(*(p-1));
} }
else
k=1;
}
main()
{char chrstr[64];
int d;
printf("\nPlease enter an English sentence within 63
letters: ");
gets(chrstr);
d=strlen(chrstr);
chrstr[d]=' ';
chrstr[d+1]=0;
printf("\nBofore changing:\n %s",chrstr);
_____3____;
printf("\nAfter changing:\n %s",chrstr);
}
(2011年2月)
解析: 填空1:根据题目的意思,这里应该是以变量k作为判断标志,如果标
志为1 并且当前指针指向空格就应该把标志返回0,以便下一次检测。
填空2:根据题目的意思,此处进行的是将p所指单词的最后一个字母改成大
写,但是此时p已经循环到了单词后面的那个空格,所以应该对p-1进行操
作。
填空3:由算法可以看出,这里应该是进行函数调用,根据前面的子函数定义可
以知道,参数是一个指向向字符串的指针,所以应该把数组的名字(也可以认
为是指向数组首地址的指针)作为参数。
答案:【1】k=0 【2】*(p-1) 【3】fun(chrstr)
【真题2】 给定程序modi.c 中,fun 函数的功能是:交换主函数中两个字符串中的
内容。例如:若a 所指字符串中的内容原为:123456,b 所指字符串中的内容原
为:abcde;程序运行后,a 所指字符串中为:abcde,b 所指字符串中则为:
123456。 请改正程序中的错误或在横线处填上适当的内容并把横线删除,使它能得
出正确结果。 注意:不要改动main 函数,
#include < stdio.h >
#define N 80
void fun(char *a,char *b)
{ char c[N];int i;
for(i=0;a[i];i++)
/************found************/
___________;
c[i]=0;
for(i=0;b[i];i++) a[i]=b[i];
a[i]=0;
for(i=0;c[i];i++) b[i]=c[i];
b[i]=0;
}
main()
{ char s1[N]="123456",s2[N]="abcde";
printf("s1=%s\n",s1); printf("s2=%s\n",s2);
fun(s1,s2);
printf("\nThe result:\n");
printf("s1=%s\n",s1); printf("s2=%s\n\n",s2);
}
(2011年2月)
解析: 本题的主要解题思路是:通过一维数组c 作为中转点,交换字符串a和
字符串b的内容,首先,将串a赋给c,再将串b赋给a,最后将c 赋给串b。
根据这个思路,很容易得出,在横线处应填上"c[i]=a[i];"或具有相同作用的语
句。
【真题3】 请编写一个函数fun,它的功能是:将ss 所指字符串中所有下标为奇数
位置上的字母转换成大写(若该位置上不是字母,则不转换)。 例如,若输入
“abc4EFG”,则应输出“aBc4EFG”。 注意:部分源程序存在文件prog.c 中。 请勿
改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编写的
若干语句。
#include < conio.h >
#include < stdio.h >
#include < string.h >
void fun(char *ss)
{……}
main()
{ char tt[81];
clrscr();
printf("\nPlease enter an string within 80
characters:\n");gets(tt);
printf("\n\nAfter changing,the string\n \"%s\"",tt);
fun(tt);
printf("\nbecomes\n \"%s\"\n",tt);
}
(2011年2月)
解析: 本题的考核点是指针、ASCII码、数组和循环语句。
解题思路:通过循环语句依次判断数组下标为奇数的元素是否为小写字母,如
果是则通过字符运算将其转换为大写字母。
本评析仅供参考。
void fun ( char *ss )
{ int i,n=0;
char *p;
p=ss;
while(*p++!='\0') /*判断是否到了字符串的末尾*/
n++;
for(i=1;i< n;i+=2)
if(ss[i] >='a' && ss[i]< ='z') /*判断该字符是否为小写字母*/
ss[i]=ss[i]-'a'+'A'; /*若上述条件成立,则将其转换为大写字母*/
}
最后一个字母改成大写(这里的"单词"是指有空格隔开的字符串)。例如,若输入: I
am a student to take the examination 则应输出:I aM A studenT tO takE
thE examinatioN 试题程序:
#include < conio.h >
#include < ctype.h >
#include < stdio.h >
#include < string.h >
void fun(char *p)
{
int k=0;
for ( ;*p;p++)
if (k)
{
if (*p==' ')
{
____1_____;
___2____=toupper(*(p-1));
} }
else
k=1;
}
main()
{char chrstr[64];
int d;
printf("\nPlease enter an English sentence within 63
letters: ");
gets(chrstr);
d=strlen(chrstr);
chrstr[d]=' ';
chrstr[d+1]=0;
printf("\nBofore changing:\n %s",chrstr);
_____3____;
printf("\nAfter changing:\n %s",chrstr);
}
(2011年2月)
解析: 填空1:根据题目的意思,这里应该是以变量k作为判断标志,如果标
志为1 并且当前指针指向空格就应该把标志返回0,以便下一次检测。
填空2:根据题目的意思,此处进行的是将p所指单词的最后一个字母改成大
写,但是此时p已经循环到了单词后面的那个空格,所以应该对p-1进行操
作。
填空3:由算法可以看出,这里应该是进行函数调用,根据前面的子函数定义可
以知道,参数是一个指向向字符串的指针,所以应该把数组的名字(也可以认
为是指向数组首地址的指针)作为参数。
答案:【1】k=0 【2】*(p-1) 【3】fun(chrstr)
【真题2】 给定程序modi.c 中,fun 函数的功能是:交换主函数中两个字符串中的
内容。例如:若a 所指字符串中的内容原为:123456,b 所指字符串中的内容原
为:abcde;程序运行后,a 所指字符串中为:abcde,b 所指字符串中则为:
123456。 请改正程序中的错误或在横线处填上适当的内容并把横线删除,使它能得
出正确结果。 注意:不要改动main 函数,
#include < stdio.h >
#define N 80
void fun(char *a,char *b)
{ char c[N];int i;
for(i=0;a[i];i++)
/************found************/
___________;
c[i]=0;
for(i=0;b[i];i++) a[i]=b[i];
a[i]=0;
for(i=0;c[i];i++) b[i]=c[i];
b[i]=0;
}
main()
{ char s1[N]="123456",s2[N]="abcde";
printf("s1=%s\n",s1); printf("s2=%s\n",s2);
fun(s1,s2);
printf("\nThe result:\n");
printf("s1=%s\n",s1); printf("s2=%s\n\n",s2);
}
(2011年2月)
解析: 本题的主要解题思路是:通过一维数组c 作为中转点,交换字符串a和
字符串b的内容,首先,将串a赋给c,再将串b赋给a,最后将c 赋给串b。
根据这个思路,很容易得出,在横线处应填上"c[i]=a[i];"或具有相同作用的语
句。
【真题3】 请编写一个函数fun,它的功能是:将ss 所指字符串中所有下标为奇数
位置上的字母转换成大写(若该位置上不是字母,则不转换)。 例如,若输入
“abc4EFG”,则应输出“aBc4EFG”。 注意:部分源程序存在文件prog.c 中。 请勿
改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编写的
若干语句。
#include < conio.h >
#include < stdio.h >
#include < string.h >
void fun(char *ss)
{……}
main()
{ char tt[81];
clrscr();
printf("\nPlease enter an string within 80
characters:\n");gets(tt);
printf("\n\nAfter changing,the string\n \"%s\"",tt);
fun(tt);
printf("\nbecomes\n \"%s\"\n",tt);
}
(2011年2月)
解析: 本题的考核点是指针、ASCII码、数组和循环语句。
解题思路:通过循环语句依次判断数组下标为奇数的元素是否为小写字母,如
果是则通过字符运算将其转换为大写字母。
本评析仅供参考。
void fun ( char *ss )
{ int i,n=0;
char *p;
p=ss;
while(*p++!='\0') /*判断是否到了字符串的末尾*/
n++;
for(i=1;i< n;i+=2)
if(ss[i] >='a' && ss[i]< ='z') /*判断该字符是否为小写字母*/
ss[i]=ss[i]-'a'+'A'; /*若上述条件成立,则将其转换为大写字母*/
}