[计算机类试卷]国家二级C语言机试(操作题)模拟试卷268及答案与解析.doc

上传人:赵齐羽 文档编号:498199 上传时间:2018-11-28 格式:DOC 页数:6 大小:31KB
下载 相关 举报
[计算机类试卷]国家二级C语言机试(操作题)模拟试卷268及答案与解析.doc_第1页
第1页 / 共6页
[计算机类试卷]国家二级C语言机试(操作题)模拟试卷268及答案与解析.doc_第2页
第2页 / 共6页
[计算机类试卷]国家二级C语言机试(操作题)模拟试卷268及答案与解析.doc_第3页
第3页 / 共6页
[计算机类试卷]国家二级C语言机试(操作题)模拟试卷268及答案与解析.doc_第4页
第4页 / 共6页
[计算机类试卷]国家二级C语言机试(操作题)模拟试卷268及答案与解析.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、国家二级 C语言机试(操作题)模拟试卷 268及答案与解析 一、程序填空题 1 程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数 fun的功能是从形参 filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到 filename所指的文件中,覆盖原来的文件内容。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改 程序的结构 ! 试题程序: #include stdio h #define N

2、 5 typedef struct student long sno; char name10; float score3; STU; void fun(char*filename) FILE*fp; int i, j; STU sN, t ; *found* fp=fopen(filename, 【 1】 )j fread(s, sizeof(STU), N, fp); fclose(fp); for(i=0; i N一 1; i+) for(j=i+1; j N; j+) *found* if(si sno【 2】 sj sno) t=si; si=sj; sj=t; fp=fopen(f

3、ilename, “wb“); *found* 【 3】 (s, sizeof(STU), N, fp); fclose(fp); main() STU tN= 10005, “ZhangSan“, 95, 80, 88, 10003, “LiSi“, 85, 70,78, 10002, “CaoKai“, 75, 60, 88, 10004, “FangFang“, 90, 82, 87,10001, “MaChao“, 91, 92, 77, ssN; int i, j; FILE* fp; fp=fopen(“student dat“, “wb“); fwrite(t, sizeof(S

4、TU), 5, fp); fclose(fp); printf(“ n nThe original data : n n); for(j=0; j N; j+) printf(“ nNo: id Name:一 8s Scores: “, tJ sno, tj name); for(i=0; i 3; i+) printf(“ 6 2 f“, tj scorei); printf(“ n“); fun(“student dat“); printf(“ n nThe data after sorting: n n“); fp=fopen(“student dat“, “rb“); fread(ss

5、, sizeof(STU), 5, fp); fclose(fp); for(j=0; j N; j+) printf(“ nNo: ld Name: 8s Scores: “, ssj sno, ssj name); for(i=0; i 3; i+) printf(“ 6 2 f“, ssj scoEei); printf(“ n“); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:将十进制正整数 m转换成 k(2k9)进制数,并按位输出。例如,若输入 8和 2,则应输出 1000(即十进制数 8转换成二进制表示是 1000)。 请改正程序中的错误,使它能得出正确的结果。 注意

6、:部分源程序在文件 MODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 #include conio h 3 *found* 4 void fun(int m, int k); 5 int aa20, i; 6 for(i=0; m; i+) 7 8 *found* 9 aai=m k; 10 m =k; 11 12 for(; i; i-) 13 *found* 14 printf(“ d“, aai); 15 16 main() 17 18 int b, n; 19 printf(“ nplease en

7、ter a number and a base: n“); 20 scanf(“ d d“, n, b); 21 fun(n, b); 22 printf(“ n“); 23 三、程序设计题 3 编写函数 fun,其功能是:将两个两位数的正整数 a、 b合并成一个整数放在 c中。合并的方式是:将 a数的十位和个位数依次放在 c数的个位和百位上, b数的十位和个位数依次放在 12数的千位和十位上。 例如,当 a=45, b=12时,调用该函数后, c=1524。 注意:部分源程序给出如下。数据文件 IN DAT中的数据不得修改。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的

8、花括号中填入你编写的若干语句。 试题程序: #include conio h #include stdio h void fun(int a, int b, long*c) main() int a, b; long c; printf(“Input a, b: “); scanf(“ d d“, a, b); fun(a, b, c); printf(“The result is: id n“, c); 国家二级 C语言机试(操作题)模拟试卷 268答案与解析 一、程序填空题 1 【正确答案】 (1)“rb“ (2) (3)fwrite 【试题解析】 填空 1:题目中要求从形参 filena

9、me所指的文件中读入学生的数据,以此可以看出本空应该填写 “rb“。 填空 2:此处的 if语句是比较学号的大小,如果学号大就和学号小的换位,以此本空填写。 填空 3: 题目要求所有的学生数据均以二进制方式输出到文件中,因此本空填写fwrite。 二、程序修改题 2 【正确答案】 (1)void fun(int m, int k) (2)aai=m k; (3)pfinff(“ d“, aai 1); 【试题解析】 (1)函数定义的格式错误,不应带有 “; “。 (2)将十进制正整数转换为任意进制的数与十进制正整数转换成二进制的数的方法是一样的。从整数 n译出它的各位 k进制数值,需采用除 k

10、取余的方法,即求 n除 k的余数,得到它的 k进制的个位数,接着将 n除以 k。在 n不 等于 0的状况下循环,能顺序求出 n的 k进制的各个位上的数。 (3)在进行 for(i=0; m; i+)循环结束时, i已经多加了一个 1,所以这里要减去1。 三、程序设计题 3 【正确答案】 void fun(int a, int b, long*c) *b 10获取 b的个位, a 10获取 a的十位, a 10获取 a的个位, b 10获取b的十位 * *c=a 10+(b 10)*10+(a 10)*100+(b 10)*1000; 【试题解析】 本题主要的问题是如何取出 a和 b的个位数和 十位数,取出后如何表示成 c中相应的位数。由于 a和 b都是只有两位的整数,所以分别对它们除以10可得到它们的十位数,分别用 10对它们求余可得到它们的个位数。得到后对应乘以 1000、 100、 10、 1即可得到 c的千位数、百位数、十位数和个位数。注意使用 c时要进行指针运算。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1