2011年计算机二级考试C语言十套上机题(8)
1.填空题
请补充函数fun(),该函数的功能是判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回“yes!”,否则返回“no!”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
char *fun(int n)
{
int g,s,b;
g=n%10;
s=n/10%10;
b=【1】;
if((g+b)==s)
return【2】;
else
return【3】;
}
main()
{
int num=0;
clrscr();
printf("******Input data *******
");
scanf("%d",&num);
printf("
");
printf("****** The result *******
");
printf("
%s",fun(num));
}
答案及评析:【1】n/100%10 【2】″yes!″ 【3】″no!″
【解析】填空1:由程序可以知道,变量g保存了整数的个位数,变量s保存了整数的十位数,所以变量b应该保存整数的百位数。将整数除以100再对10取余,则得到这个整数的百位数。填空2:当个位数字和百位数字之和等于十位数字时,则返回″yes!″。填空3:当个位数字和百位数字之和不等于十位数字时,则返回″no!″。
2. 改错题
下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从大到小的顺序进行排序。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#define N 20
void fun(int a[],int n)
{
int i,j,t,p;
/**********************found***********************/
for(j=0;j
p=j;
for(i=j;i
p=i;
t=a[p];
a[p]=a[j];
/**********************found***********************/
a[p]=t;
}
}
main()
{
int a[N]={11,32,-5,2,14},i,m=5;
printf("排序前的数据:");
for(i=0;i
printf("
");
fun(a,m);
printf("排序后的顺序:");
for(i=0;i
printf("
");
}
答案及评析:(1)错误:for(j=0;j
错误2:将两数进行交换的常用语句,借助第三个变量。
3. 编程题
下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能是:求出数组周边元素的平方和并作为函数值返回给主函数中的s。例如:若a 数组中的值为
a=0 1 2 7 9
1 11 21 5 5
2 21 6 11 1
9 7 9 10 2
5 4 1 4 1
则返回主程序后s的值应为310。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
#include
#define N 5
int fun (int w[][N])
{
}
main()
{int a[N][N]={0,1,2,7,9,1,11,21,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1};
int i, j;
int s;
clrscr();
printf("*****The array*****
");
for (i=0; i
printf("
");
}
s=fun(a);
printf("*****THE RESULT*****
");
printf("The sum is : %d
",s);
}
答案及评析:
int fun (int w[][N])
{
int i,j,k=0;
int s=0;
for(i=0;i
{s=s+w[i][j]*w[i][j]; /*将周边元素求平方和*/
}
return s; /*返回周边元素的平方和*/
}
【解析】该题采用逐一判断的方式,周边元素的下标一定有一个是0或N-1,且只要下标中有一个为0或N-1,则它一定是周边元素。