计算机二级C语言上机真题(29)【附详解】
【真题1】 下列给定程序中,函数fun()的功能是:将s 所指字符串中的字母转换为
按字母序列的后续字母(但Z 转化为A,z 转化为a),其他字符不变。
试题程序:
#include < stdio.h >#include < ctype.h >#include < conio.h >void
fun(char *s)
{while(__1__)
{ if(*s >='A'&&*s< ='Z'||*s >='a'&&*s< ='z')
{if(*s=='Z') *s='A';
else if(*s=='z') *s='a';
else *s+=__2__;
}
__3__;
}
}
main()
{ char s[80];
printf("\n Enter a string with length< 80:\n\n"); gets (s);
printf("\n The string:\n\n"); puts(s);
fun(s);
printf("\n\n The Cords :\n\n"); puts(s);
}
(2011年2月)
解析: 填空1:从C 语言的学习中我们知道,while语句的结束条件是括号中
的式子结果为0,而一个字符串的结尾标志为'\0',即满足循环的结束条件,所
以一般情况下C 语言中使用字符串的结尾作为结束循环的标志;s为指向一个数
组的指针,*s 为取出s指向的内容。
填空2:根据题目的意思,若该字母不是'z'或'Z',则该字母的ASCII码值加
1。
填空3:根据题目的意思,要对字符串所有字母进行遍历,使用指针进行这一过
程应该使用循环,即每次都对该指针进行加一操作。
答案:【1】*s 【2】1 【3】s++
【真题2】 下列给定程序中,函数fun()的功能是:从字符串s 中,删除所有大写字
母'F'。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < stdio.h >void fun(char *s)
{int i, j;
/**********************found***********************/
for(i=j=0; s[i]!= '0';i++)
if(s[i]!= 'F')
/**********************found***********************/
s[j]=s[i];
s[j]='\0';
}
main()
{ char s[80];
printf("\nEnter a string: ");
gets(s);
printf("The original string: ");
puts(s);
fun(s);
printf("The string after deleted: ");
puts(s);
printf("\n\n ");
}
(2011年2月)
解析: (1)错误:for(i=j=0; s[i]!= '0';i++) 正确:for(i=j=0; s[i]!=
'\0';i++)
(2)错误:s[j]=s[i]; 正确:s[j++]=s[i];
错误1:本题考查是否掌握字符串的最后一个字符是结束标志符'\0 '。
错误2:在循环中,新字符串的下标也要递增,这样最终产生一个新的字符串。
【真题3】 要求程序的功能是:把20 个随机数存入一个数组,然后输出该数组中的
最小值。其中确定最小值的下标的操作在fun 函数中实现,请给出该函数的定义。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < stdio.h >#include < conio.h >#define VSIZE 20
int vector[VSIZE];
int fun(int list[],int size)
{……}
main()
{ int i;
clrscr();
for (i=0;i< VSIZE;i++)
{ vector[i]=rand();
printf("Vector[%d]=%6d\n",i,vector[i]);
}
i=fun(vector,VSIZE);
printf("\nMininum:Vector[%d]=%6d\n",i,vector[i]);
}
(2011年2月)
解析: 本题的考核点是在组数中找出最小数及其下标算法。
提示思路:通过一个循环来实现,方法是:将下标0赋给一个变量,如在循环
中有比变量下标所对应的数还要小,那么就将这个数的下标赋给变量,直至找
到最小数的下标。
int fun(int list[],int size)
{ int x,i;
x=0;
for (i=1;i< size;i++)
if (list[x] >list[i]) x=i;/*从前到后顺序比较list数组中的数,并将每次比较
过程中较小的那个数的下标赋值给x*/
return x;
}
按字母序列的后续字母(但Z 转化为A,z 转化为a),其他字符不变。
试题程序:
#include < stdio.h >#include < ctype.h >#include < conio.h >void
fun(char *s)
{while(__1__)
{ if(*s >='A'&&*s< ='Z'||*s >='a'&&*s< ='z')
{if(*s=='Z') *s='A';
else if(*s=='z') *s='a';
else *s+=__2__;
}
__3__;
}
}
main()
{ char s[80];
printf("\n Enter a string with length< 80:\n\n"); gets (s);
printf("\n The string:\n\n"); puts(s);
fun(s);
printf("\n\n The Cords :\n\n"); puts(s);
}
(2011年2月)
解析: 填空1:从C 语言的学习中我们知道,while语句的结束条件是括号中
的式子结果为0,而一个字符串的结尾标志为'\0',即满足循环的结束条件,所
以一般情况下C 语言中使用字符串的结尾作为结束循环的标志;s为指向一个数
组的指针,*s 为取出s指向的内容。
填空2:根据题目的意思,若该字母不是'z'或'Z',则该字母的ASCII码值加
1。
填空3:根据题目的意思,要对字符串所有字母进行遍历,使用指针进行这一过
程应该使用循环,即每次都对该指针进行加一操作。
答案:【1】*s 【2】1 【3】s++
【真题2】 下列给定程序中,函数fun()的功能是:从字符串s 中,删除所有大写字
母'F'。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < stdio.h >void fun(char *s)
{int i, j;
/**********************found***********************/
for(i=j=0; s[i]!= '0';i++)
if(s[i]!= 'F')
/**********************found***********************/
s[j]=s[i];
s[j]='\0';
}
main()
{ char s[80];
printf("\nEnter a string: ");
gets(s);
printf("The original string: ");
puts(s);
fun(s);
printf("The string after deleted: ");
puts(s);
printf("\n\n ");
}
(2011年2月)
解析: (1)错误:for(i=j=0; s[i]!= '0';i++) 正确:for(i=j=0; s[i]!=
'\0';i++)
(2)错误:s[j]=s[i]; 正确:s[j++]=s[i];
错误1:本题考查是否掌握字符串的最后一个字符是结束标志符'\0 '。
错误2:在循环中,新字符串的下标也要递增,这样最终产生一个新的字符串。
【真题3】 要求程序的功能是:把20 个随机数存入一个数组,然后输出该数组中的
最小值。其中确定最小值的下标的操作在fun 函数中实现,请给出该函数的定义。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < stdio.h >#include < conio.h >#define VSIZE 20
int vector[VSIZE];
int fun(int list[],int size)
{……}
main()
{ int i;
clrscr();
for (i=0;i< VSIZE;i++)
{ vector[i]=rand();
printf("Vector[%d]=%6d\n",i,vector[i]);
}
i=fun(vector,VSIZE);
printf("\nMininum:Vector[%d]=%6d\n",i,vector[i]);
}
(2011年2月)
解析: 本题的考核点是在组数中找出最小数及其下标算法。
提示思路:通过一个循环来实现,方法是:将下标0赋给一个变量,如在循环
中有比变量下标所对应的数还要小,那么就将这个数的下标赋给变量,直至找
到最小数的下标。
int fun(int list[],int size)
{ int x,i;
x=0;
for (i=1;i< size;i++)
if (list[x] >list[i]) x=i;/*从前到后顺序比较list数组中的数,并将每次比较
过程中较小的那个数的下标赋值给x*/
return x;
}