国家二级C语言机试(操作题)模拟试卷260
程序填空题
1.下列给定程序的功能是调用fun函数建立班级通信录。通信录中记录每位学生的编号、姓名和电话号码。班级人数和学生信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<stdlib.h>
#define N 5
typedef struer
{ int num;
char name [10];
char tel[10];
}STYPE;
void check();
/*********found*********/
int fun(【1】*std)
{
/*********found*********/
【2】*fp; int i;
if((fp=fopen(\\
(1)STYPE
(2)FILE
(3)fp
解析:填空1:根据主函数中的调用函数可知,函数的 形参应为结构体类型,因此填入STYPE。
填空2:fp是指向文件类型的指针变量,因此填 入FILE。
填空3:函数fwrite调用的一般形式为“fwrite (buffer,size,count,fp);”
buffer:是一个指针变量,在fread函数中它存放输入数据的首地址,在fwrite函数中,它存放输出数据的首地址。
size:表示数据块的字节数。
count:表示要读写的数据块数。
fp:表示文件指针。
程序修改题
2.下列给定程序中,函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数作为函数值返回,平均分存放在形参avet所指的存储单元中。
例如,输入8名学生的成绩:80.5、60、72、90.5、98、51.5、88、64
则低于平均分的学生人数为4(平均分为75.5625)。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#define N 20
int fun(float *s,int n,float*aver)
{ float ave,t=0.0;
int count=0,k,i;
for(k=0;k<n; k++)
/*********found*********/
t=S[k];
ave=t/n;
for(i=0,i<n;i++)
if(s[i]<ave)count++;
/*********found*********/
* aver=&ave;
return count;
}
void main()
{ float s[30],aver;
int m,i;
system(\\
(1)t+=s[k];
(2)*aver=ave;
解析:根据题目要求,可利用循环语句累计n个学生的总分,求得平均成绩后,再利用循环语句和条件选择语句进行后面的操作。若小于平均值,则将该值存放于aver存储单元中。t=s[k]是循环叠加错误,*aver=&ave为语法指向的错误。
程序设计题
3.请编写函数fun,函数的功能是查找x在s所指数组中下标的位置,并作为函数值返回,若x不存在,则返回-1。
注意:部分源程序在文件PROG1.C文件中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<stdio.h>
#include<stdlib.h>
#define N 15
void NONO();
int fun(int*s,int x)
{
}
main()
{int a[N]={29,13,5,22,10,9,
3,18,22,25,14,15,2,7,27),i,x,
index;
printf(\\
int fun(int*s,int x)
{ int i ;
for(i=0;i<N;i++)
if(x==s[i])return i;
return—1;
}
解析:要找出数组中指定数据的下标,首先定义变量i用于存放数组下标,然后使用循环语句对数组进行遍历,依次取出一个数组元素与指定的数进行比较,若相等,则返回该元素的下标,否则继续判断下一个元素,直到数组结束。若数组结束时仍没有找到与指定数相等的元素,则返回一1。
本文档预览:3600字符,共2710字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载