2017年全国计算机等级考试C语言上机考试题库-1-20套.doc
《2017年全国计算机等级考试C语言上机考试题库-1-20套.doc》由会员分享,可在线阅读,更多相关《2017年全国计算机等级考试C语言上机考试题库-1-20套.doc(76页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、优质文本2017年全国计算机等级考试C语言上机考试题库 学生练习用第一套至第二十套第一套:1、程序填空程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:局部源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!-#include #define N 5typedef struct student long sno; char name1
2、0; float score3; STU;void fun(char *, STU n) FILE *fp;/*found*/ fp = fopen(_1_, rb+);/*found*/ fseek(_2_, -(long)sizeof(STU), SEEK_END);/*found*/ fwrite(&n, sizeof(STU), 1, _3_); fclose(fp);main() STU tN= 10001,MaChao, 91, 92, 77, 10002,CaoKai, 75, 60, 88, 10003,LiSi, 85, 70, 78, 10004,FangFang, 90,
3、 82, 87, 10005,ZhangSan, 95, 80, 88; STU n=10006,ZhaoSi, 55, 70, 68, ssN; int i,j; FILE *fp; fp = fopen(student.dat, wb); fwrite(t, sizeof(STU), N, fp); fclose(fp); fp = fopen(student.dat, rb); fread(ss, sizeof(STU), N, fp); fclose(fp); printf(nThe original data :nn); for (j=0; jN; j+) printf(nNo: %
4、ld Name: %-8s Scores: ,ssj.sno, ssj.name); for (i=0; i3; i+) printf(%6.2f , ssj.scorei); printf(n); fun(student.dat, n); printf(nThe data after modifing :nn); fp = fopen(student.dat, rb); fread(ss, sizeof(STU), N, fp); fclose(fp); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,ssj.sno, ssj.na
5、me); for (i=0; i3; i+) printf(%6.2f , ssj.scorei); printf(n); -【参考答案】(1)(2)fp(3)fp【解题思路】填空1:本空是对文本文件的翻开,所指的文件中的最后数据要进行重写,因此首先是要翻开,因而本空填写。填空2:fseek功能是重定位流上的文件指针。用法:intfseek(FILE*stream,longoffset,intfromwhere);本空应该填写fp。填空3:因为题目中要对所有学生数据均以二进制方式输出到文件中,因此本空填写fp。知识点讲解:函数名:fseek功能:重定位流上的文件指针。用法:intfseek(F
6、ILE*stream,longoffset,intfromwhere)。描述:函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。如果执行失败(比方offset超过文件自身大小),那么不改变stream指向的位置。返回值:成功,返回0;否那么返回非0值。2、程序改错以下给定程序中函数Creatlink的功能是:创立带头结点的单向链表,并为各结点数据域赋0到m-1的值。请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。注意:局部源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改
7、程序的结构!-#include #include typedef struct aa int data; struct aa *next; NODE;NODE *Creatlink(int n, int m) NODE *h=NULL, *p, *s; int i;/*found*/ p=(NODE )malloc(sizeof(NODE); h=p; p-next=NULL; for(i=1; idata=rand()%m; s-next=p-next; p-next=s; p=p-next; /*found*/ return p;outlink(NODE *h) NODE *p; p=h-
8、next; printf(nnTHE LIST :nn HEAD ); while(p) printf(-%d ,p-data); p=p-next; printf(n);main() NODE *head; head=Creatlink(8,22); outlink(head);-【参考答案】1p=(NODE*)malloc(sizeof(NODE);2returnh;【考点分析】此题考查:变量赋初值;for循环语句;函数返回值。【解题思路】1由变量定义可知p为指向结点的指针。指向刚分配的结构指针,所以应改为p(NODE*)malloc(sizeof(NODE)。2在动态分配内存的下一行语句
9、是,使用临时结构指针变量h保存p指针的初始位置,最后返回不能使用p,是因为p的位置已经发生了变化,所以应改为returnh。3、程序设计请编写函数fun,该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有假设干个空格隔开,一行的开始没有空格。注意:局部源程序在文件PROG1.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的假设干语句。-#include#include#define N 80int fun(char *s) void main() FILE *wf; char lineN
10、; int num=0; printf(Enter a string:n ); gets(line); num=fun(line); printf(The number of word is:%dnn ,num);/*/ wf=fopen(out.dat,w); fprintf(wf,%d,fun(a big car); fclose(wf);/*/-【参考答案】intfun(char*s)inti,j=0;for(i=0;si!=0;i+)if(si!=&(si+1=|si+1=0)/*如果一个字母的下一个字符为空格或者结束标记,那么表示一个单词结束*/j+;returnj;/*返回单词个数
11、*/【解题思路】要判断单词的个数,首先想到的是程序怎样识别出一个单词,如果一个字母的下一个字符为空格或者结束标记,那么表示一个单词结束,因此程序使用for循环语句遍历整个字符串,用if条件语句判断当前字符是否表示一个单词的结束,如果当前字符表示一个单词结束,那么存放单词个数的变量加1,最后返回单词的个数。第二套1、程序填空给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回,并将大于平均值的数放在形参y所指数组中,在主函数中输出。例如,有10个正数:46、30、32、40、6、17、45、15、48、26,其平均值为30.500000。主函数
12、中输出:4632404548。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:局部源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!-#include #include #define N 10double fun(double x,double *y) int i,j; double av;/*found*/ av=_1_;/*found*/ for(i=0; iN; i+) av=av+_2_; for(i=j=0; iav) y_3_= xi; yj=-1; return av;main() int i; double xN,yN; for
13、(i=0; i=0; i+) printf(%5.1f ,yi); printf(n);-【参考答案】10.02xi/N3j+【解题思路】填空1:通过读上面的程序可以看出此空考的是给变量赋初值,av代表的是平均值,因此av的初值应该是0.0。填空2:通过for循环可知,此空代表求平均值,因此应该填写xi/N。填空3:先把大于平均值的数放在形参y所指数组中,然后使下标值加1,因此此空应该填j+。2、程序改错以下给定程序中,函数fun的功能是:根据整型参数m,计算如下公式的值。例如,假设m2000,那么应输出0.000160。请改正程序中的错误,使它能得出正确的结果。注意:局部源程序在文件MODI
14、1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!-#include #include #include /*found*/fun (int m) double y=0, d; int i;/*found*/ for(i=100,i=m,i+=100) d=(double)i*(double)i; y+=1.0/d; return(y);void main() int n=2000; system(CLS); printf(nThe result is %1fn,fun(n);-【参考答案】(1)doublefun(intm)(2)for(i=100;i=m;i+=100)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2017 全国 计算机等级考试 语言 上机 考试 题库 20
限制150内