1、全国计算机等级考试二级 C语言上机题库试卷五 2013年 3月及答案解析(总分:3.00,做题时间:90 分钟)1.给定程序中,函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本 文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include void fun(char *s, int a, dou
2、ble f) _1_ fp; char str100, str1100, str2100; int a1; double f1; fp = fopen(“file1.txt“, “w“); fprintf(fp, “%s %d %f/n“, s, a, f); _2_ ; fp = fopen(“file1.txt“, “r“); fscanf(_3_,“%s%s%s“, str, str1, str2); fclose(fp); a1 = atoi(str1); f1 = atof(str2); printf(“/nThe result :/n/n%s %d %f/n“, str, a1,
3、f1); main() char a10=“Hello!“; int b=12345; double c= 98.76; fun(a,b,c); (分数:1.00)_2.给定程序 MODI1.C中函数 fun的功能是: 对 N名学生的学习成绩,按从高到低的顺序找出前 m(m10)名学生来, 并将这些学生数据存放在一个动态分配的连续存储区中, 此存储区的首地址作为函数值返回。 请改正函数 fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动 main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include #include #define
4、N 10 typedef struct ss char num10; int s; STU; STU *fun(STU a, int m) STU bN, *t; int i,j,k; t=(STU *)calloc(sizeof(STU),m) for(i=0; i bj.s) j=i; t(k)=b(j); bj.s=0; return t; outresult(STU a, FILE *pf) int i; for(i=0; i10 ) printf(“/nGive the number of the students who have better score: “); scanf(“
5、%d“, pOrder=fun(a,m); printf(“* THE RESULT */n“); printf(“The top :/n“); for(i=0; i_3.请编写函数 fun, 函数的功能是: 删去一维数组中所有相同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如, 一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。 删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。 注意:部分源程序在文件 PROG1.C中。 请勿改动主函数 main和其它函数中的任何内容,
6、仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #include #define N 80 int fun(int a, int n) main() int aN=2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10,i,n=20; printf(“The original data :/n“); for(i=0; i_全国计算机等级考试二级 C语言上机题库试卷五 2013年 3月答案解析(总分:3.00,做题时间:90 分钟)1.给定程序中,函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本 文件中,再用字符串方式从此文本文件中逐个
7、读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include void fun(char *s, int a, double f) _1_ fp; char str100, str1100, str2100; int a1; double f1; fp = fopen(“file1.txt“, “w“); fprintf(fp, “%s %d %
8、f/n“, s, a, f); _2_ ; fp = fopen(“file1.txt“, “r“); fscanf(_3_,“%s%s%s“, str, str1, str2); fclose(fp); a1 = atoi(str1); f1 = atof(str2); printf(“/nThe result :/n/n%s %d %f/n“, str, a1, f1); main() char a10=“Hello!“; int b=12345; double c= 98.76; fun(a,b,c); (分数:1.00)_正确答案:()解析:本题是考察先把给定的数据写入到文本文件中,再
9、从该文件读出并转换成相应的整数、浮点数显示在屏幕上。 第一处:定义文本文件类型变量,所以应填:FILE *。 第二处:关闭刚写入的文件,所以应填:fclose(fp)。 第三处:从文件中读出数据,所以应填:fp。2.给定程序 MODI1.C中函数 fun的功能是: 对 N名学生的学习成绩,按从高到低的顺序找出前 m(m10)名学生来, 并将这些学生数据存放在一个动态分配的连续存储区中, 此存储区的首地址作为函数值返回。 请改正函数 fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动 main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #in
10、clude #include #define N 10 typedef struct ss char num10; int s; STU; STU *fun(STU a, int m) STU bN, *t; int i,j,k; t=(STU *)calloc(sizeof(STU),m) for(i=0; i bj.s) j=i; t(k)=b(j); bj.s=0; return t; outresult(STU a, FILE *pf) int i; for(i=0; i10 ) printf(“/nGive the number of the students who have be
11、tter score: “); scanf(“%d“, pOrder=fun(a,m); printf(“* THE RESULT */n“); printf(“The top :/n“); for(i=0; i_正确答案:()解析:第一处: 语句最后缺少分号。 第二处: 应该使用方括号,而不是圆括号。 像此类,使用编译,即可发现。3.请编写函数 fun, 函数的功能是: 删去一维数组中所有相同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如, 一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。
12、 删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。 注意:部分源程序在文件 PROG1.C中。 请勿改动主函数 main和其它函数中的任何内容, 仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #include #define N 80 int fun(int a, int n) main() int aN=2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10,i,n=20; printf(“The original data :/n“); for(i=0; i_正确答案:(int fun(int a, int n) int i, j = 1, k = a0 ; for(i = 1 ; i n ; i+) if(k != ai) aj+=ai ; k = ai ; aj = 0 ; return j ; )解析:本题是删除已排序过数组中的相同数。 1. 取出数组中的第 1个数存放在临时变量 k中,再利用for循环来依次判断所有的数。 2. 如果取出的数和 k相比,如果不相同,则仍存放在原数组中,其中存放的位置由 j来控制,接着把这个数重新存入 k。如果相同,则取下一数。