国家二级C语言机试(操作题)模拟试卷644
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回给主函数,将小于平均值且最接近平均值的数作为函数值返回,并在主函数中输出。
例如,有10个正数:46、30、32、40、6、17、45、15、48、26,平均值为30.500000。
主函数中输出m=30。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdlib.h>
#include<stdio.h>
#define N10
double fun(double x[],double*av)
{int i,j;double d,s;
s=0;
for(i=0;i<N;i++)s=s+x[i];
/*********found*********/
【1】=s/N;
d=32767;
for(i=0;i<N;i++)
if(x[i]<*av&&av-x[i]<=d){
/*********found*********/
d=*av-x[i];
j=【2】;
}
/*********found*********/
return【3】;
}
main()
{int i;double x[N],av,m;
for(i=0;i<N;i++)
{x[i]=rand()%50;
printf(\\
(1)*av
(2)i
(3)x[j]
解析:填空1:从原程序中可以看出*av代表的是平均值,而s/N表示的就是平均值,因此本空应该填*av。
填空2:if语句来判断找最接近平均值的数,因而此空应该填i。
填空3:题目要求将小于平均值且最接近平均值的数作为函数返回,而j表达的是最接近平均值的数在数组中的下标,因而本空应该填写x[j]。
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:先从键盘上输入一个3行、3列的矩阵的各个元素的值,然后输出主对角线元素之和。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
void fun()
{
int a[3][3],sum;
int i,j;
/*********found*********/
sum=1;
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
/*********found*********/
scanf(\\
(1)sum=0;
(2)scanf(\\
解析:该题考查对循环语句的掌握和对数组概念的理解。本题的解题思路为:先从键盘输入一个3×3矩阵,然后循环累加,执行循环语句中的sum=sum+a[i][i];。因为变量sum用来存放累加后的结果,所以应对其初始化为0。第二处错误考查标准输入函数scanf的格式,被赋值的变量前要加上取地址符\\
程序设计题
3.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编函数fun,其功能是将一个数字字符串转换成与其面值相同的长整型整数。可调用strlen函数求字符串的长度。例如:在键盘输入字符串2345210,函数返回长整型数2345210。
注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun指定的部位填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<string.h>
void NONO();
long fun(char*s)
{
}
main()
{char s[10];long r;
printf(\\
long fun(char*s)
{
int i,len;
long sum=0;
len=strlen(s);
for(i=0;i<len;i++)
{
sum=sum*10+*s-’0’;
s++;
}
return sum;
}
解析:要把一个数字字符转为相应的数字,只要用它的ASCII码减去48即可。要把数字字符串转为相应的数字,则要从左到右依次取出字符转为相应数字,乘10再加上下一位数字。
本文档预览:3600字符,共2648字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载