2011年计算机二级考试C语言十套上机题(9)
1.填空题
请补充main函数,该函数的功能是:从一个字符串中截取前面若干个给定长度的子字符串。其中,str1指向原字符串,截取后的字符存放在str2所指的字符数组中,n中存放需截取的字符个数。
例如:当str1=“cdefghij”,然后输入4,则str2=“cdef”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#define LEN 80
main()
{
char str1[LEN],str2[LEN];
int n,i;
clrscr();
printf("Enter the string:
");
gets(str1);
printf("Enter the position of the string
deleted:");
scanf(【1】);
for(i=0;i
str2[i]=’ ’;
printf("The new string is:%s
",【3】);
}
答案及评析:【1】″%d″,&n 【2】str2[i]=str1[i]; 【3】str2
【解析】填空1:本题考查对标准输入函数scanf()的调用格式,由后面的程序可以知道,变量n保存了要截取的字符数,注意在n前面不要忘了取址符‘ &’。填空2:截取前n个字符,就是将字符串str1的前n个字符依次赋给字符串str2的前n个字符。填空3:本题考查对标准输出函数printf()的调用格式,根据题意,应输出截取后的字符串,即字符串str2。
2. 改错题
下列给定程序中,函数fun()的功能是:依次取出字符串中所有的字母,形成新的字符串,并取代原字符串。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
void fun(char *s)
{int i,j;
for(i=0,j=0; s[i]!= ’ ’; i++)
/**********************found***********************/
if((s[i]>= ’A’&&s[i]<= ’Z’)&&(s[i]>= ’a’&&s[i]<= ’z’))
s[j++]=s[i];
/**********************found***********************/
s[j]= " ";
}
main()
{
char item[80];
clrscr();
printf("
Enter a string: ");
gets(item);
printf("
The string is:%s
",item);
fun(item);
printf("
The string of changing is :%s
",item);
}
答案及评析:(1)错误:if((s[i]>= ’A’&&s[i]<= ’Z’)&&(s[i]>= ’a’&&s[i]<= ’z’))
正确:if((s[i]>= ’A’&&s[i]<= ’Z’)||(s[i]>= ’a’&&s[i]<= ’z’))(2)错误:s[j]= " ";正确:s[j]=’ ’;
【解析】错误1:字母包括小写字母和大写字母,这里是"或"的关系,所以用"||"运算符。
错误2:字符串的结束标志符为字符,而不是字符串。
3. 编程题
下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),该函数的功能是:使数组右上半三角元素中的值全部置成0。例如a数组中的值为
a=4 5 6
1 7 9
3 2 6,
则返回主程序后a数组中的值应为
0 0 0
1 0 0
3 2 0
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
#include
#define N 5
int fun (int a[][N])
{
}
main()
{
int a[N][N],i,j;
clrscr();
printf("*****The array*****
");
for(i=0;i
printf("%4d", a[i][j]);
}
printf("
");
}
fun(a);
printf("THE RESULT
");
for(i=0;i
printf("
");
}
}
答案及评析:
int fun (int a[][N])
{
int i,j;
for(i=0;i
}
【解析】本题旨在考查控制数组中右上半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。