计算机二级C语言上机真题(81)【附详解】
【真题1】 请补充main 函数,该函数的功能是:计算三名学生学科的平均成绩。
例如,当score[N][M]={{83.5,82,86,65,67},{80,91.5,84,
99,95},{90,95,86,95,97}}时,五门学科的平均分为:84.5 89.5 85.3 86.3
86.3。
注意:部分源程序给出如下。
请勿改动主函数main 和其他函数中的任何内容,仅在main 函数的横线上填入所编
写的若干表达式或语句。
试题程序:
#include< stdio.h >#define N 3
#define M 5
main()
{ int i,j;
static float score[N][M]= {{83.5,82,86,
65,67},{80,91.5,84,99,95},
{90,95,86,95,97}};
static float bb[N];
clrscr();
for(i=0;i< M;i++)
bb[i]=0.0;
for(i=0;i< 【1】;i++)
{
for(j=0;j< 【2】;j++)
bb[j]+=score[i][j];
}
for(i=0;i< M;i++)
printf("\nsubject%d\taverage=%5.1f",
i+1,【3】);
return 0;
}
(2011年2月)
解析: 填空1:由循环体中的score[i][j]可以推断出,变量i的取值范围是从
0 到N-1。填空2:由循环体中的score[i][j]也可以推断出,变量j的取值范
围是从0 到M-1。填空3:各科的平均分等于各科的总分除以学生人数,此时
数组bb中保存的是各科的总分,所以要除以N得到各科的平均分。
答案:【1】N 【2】M 【3】bb[i]/N
【真题2】 下列给定程序中函数fun()的功能是:将长整型数中每一位上为偶数的数
依次逆向取出,构成一个新数放在t中。高位在低位,低位在高位。例如当s 中的数
为25846513 时,t 中的数为6482。
请改正函数fun()中的错误,使它能得出正确的结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < stdio.h >#include < conio.h >void fun(long s,long *t)
{int d;
long s1=1,i=1;
*t=0;
while(s/i >0)
i=i*10;
i=i/10;
while(s >0)
{
d=s/i;
/**********************found***********************/
if(d%2!=0)
{
/**********************found***********************/
t=d*s1+t;
s1*=10;
}
s=s%i;
i=i/10;
}
}
main()
{long s, t;
clrscr();
printf("\nPlease enter s: ");
scanf("%ld",&s);
fun(s,&t);
printf("The result is :%ld\n",t);
}
(2011年2月)
解析: (1)错误:if(d%2!=0) 正确:if(d%2==0)
(2)错误:t=d*s1+t; 正确:*t=d*s1+*t;
错误1:偶数是能被2整除,而奇数是不能被2 整除,题目要求找出偶数。
错误2:t为指针类型,所以进行运算时要加'*'号。
【真题3】 请编写函数fun(),其功能是:将s所指字符串中下标为奇数的字符删
除,串中剩余字符形成的新串放在t所指数组中。
例如,当s 所指字符串中的内容为siegAHdied,则在t 所指数组中的内容应是
seAde。
注意:部分源程序给出如下。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编
写的若干语句。
试题程序:
#include< conio.h >#include< stdio.h >#include< string.h >void
fun(char *s,char t[])
{……}
main()
{ char s[100],t[100];
clrscr();
printf("\nPlease enter string S: ");
scanf("%s",s);
fun(s,t);
printf("\nThe result is:%s\n ",t);
}
(2011年2月)
解析: void fun(char *s,char t[])
{ int i,j=0,k=strlen(s); /*k 为字符串的长度*/
for(i=0;i< k;i=i+2) /*将s 所指字符串中下标为偶数的字符存入t所指字符
串中*/
t[j++]=s[i];
t[j]='\0'; /*在字符串最后加上结束标志*/
}
本题使用了一种i永远是偶数的循环方法,即for(i=0;i< k;i=i+2),因为开始
时i的值为0,当i+2 循环时,此值永远是偶数。
例如,当score[N][M]={{83.5,82,86,65,67},{80,91.5,84,
99,95},{90,95,86,95,97}}时,五门学科的平均分为:84.5 89.5 85.3 86.3
86.3。
注意:部分源程序给出如下。
请勿改动主函数main 和其他函数中的任何内容,仅在main 函数的横线上填入所编
写的若干表达式或语句。
试题程序:
#include< stdio.h >#define N 3
#define M 5
main()
{ int i,j;
static float score[N][M]= {{83.5,82,86,
65,67},{80,91.5,84,99,95},
{90,95,86,95,97}};
static float bb[N];
clrscr();
for(i=0;i< M;i++)
bb[i]=0.0;
for(i=0;i< 【1】;i++)
{
for(j=0;j< 【2】;j++)
bb[j]+=score[i][j];
}
for(i=0;i< M;i++)
printf("\nsubject%d\taverage=%5.1f",
i+1,【3】);
return 0;
}
(2011年2月)
解析: 填空1:由循环体中的score[i][j]可以推断出,变量i的取值范围是从
0 到N-1。填空2:由循环体中的score[i][j]也可以推断出,变量j的取值范
围是从0 到M-1。填空3:各科的平均分等于各科的总分除以学生人数,此时
数组bb中保存的是各科的总分,所以要除以N得到各科的平均分。
答案:【1】N 【2】M 【3】bb[i]/N
【真题2】 下列给定程序中函数fun()的功能是:将长整型数中每一位上为偶数的数
依次逆向取出,构成一个新数放在t中。高位在低位,低位在高位。例如当s 中的数
为25846513 时,t 中的数为6482。
请改正函数fun()中的错误,使它能得出正确的结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < stdio.h >#include < conio.h >void fun(long s,long *t)
{int d;
long s1=1,i=1;
*t=0;
while(s/i >0)
i=i*10;
i=i/10;
while(s >0)
{
d=s/i;
/**********************found***********************/
if(d%2!=0)
{
/**********************found***********************/
t=d*s1+t;
s1*=10;
}
s=s%i;
i=i/10;
}
}
main()
{long s, t;
clrscr();
printf("\nPlease enter s: ");
scanf("%ld",&s);
fun(s,&t);
printf("The result is :%ld\n",t);
}
(2011年2月)
解析: (1)错误:if(d%2!=0) 正确:if(d%2==0)
(2)错误:t=d*s1+t; 正确:*t=d*s1+*t;
错误1:偶数是能被2整除,而奇数是不能被2 整除,题目要求找出偶数。
错误2:t为指针类型,所以进行运算时要加'*'号。
【真题3】 请编写函数fun(),其功能是:将s所指字符串中下标为奇数的字符删
除,串中剩余字符形成的新串放在t所指数组中。
例如,当s 所指字符串中的内容为siegAHdied,则在t 所指数组中的内容应是
seAde。
注意:部分源程序给出如下。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编
写的若干语句。
试题程序:
#include< conio.h >#include< stdio.h >#include< string.h >void
fun(char *s,char t[])
{……}
main()
{ char s[100],t[100];
clrscr();
printf("\nPlease enter string S: ");
scanf("%s",s);
fun(s,t);
printf("\nThe result is:%s\n ",t);
}
(2011年2月)
解析: void fun(char *s,char t[])
{ int i,j=0,k=strlen(s); /*k 为字符串的长度*/
for(i=0;i< k;i=i+2) /*将s 所指字符串中下标为偶数的字符存入t所指字符
串中*/
t[j++]=s[i];
t[j]='\0'; /*在字符串最后加上结束标志*/
}
本题使用了一种i永远是偶数的循环方法,即for(i=0;i< k;i=i+2),因为开始
时i的值为0,当i+2 循环时,此值永远是偶数。