1、全国计算机二级 C语言上机试题 5+2015年及答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include void fun(char *s, int a, double f)
2、 /*found*/ _1_ fp; char str100, str1100, str2100; int a1; double f1; fp = fopen(“file1.txt“, “w“); fprintf(fp, “%s %d %f/n“, s, a, f); /*found*/ _2_ ; fp = fopen(“file1.txt“, “r“); /*found*/ fscanf(_3_,“%s%s%s“, str, str1, str2); fclose(fp); a1 = atoi(str1); f1 = atof(str2); printf(“/nThe result :/n
3、/n%s %d %f/n“, str, a1, f1); main() char a10=“Hello!“; int b=12345; double c= 98.76; fun(a,b,c); (分数:10.00)_2.给定程序 MODI1.C中函数 fun的功能是: 对 N名学生的学习成绩,按从高到低的顺序找出前 m(m10)名学生来, 并将这些学生数据存放在一个动态分配的连续存储区中, 此存储区的首地址作为函数值返回。 请改正函数 fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动 main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #
4、include #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; /*found*/ t=(STU *)calloc(sizeof(STU),m) for(i=0; i for(k=0; k for(i=j=0; i if(bi.s bj.s) j=i; /*found*/ t(k)=b(j); bj.s=0; return t; outresult(STU a, FILE *pf) int i; for(i=0; i fpr
5、intf(pf,“No = %s Mark = %d/n“, ai.num,ai.s); fprintf(pf,“/n/n“); main() STU aN= “A01“,81,“A02“,89,“A03“,66,“A04“,87,“A05“,77, “A06“,90,“A07“,79,“A08“,61,“A09“,80,“A10“,71 ; STU *pOrder; int i, m; printf(“* The Original data */n“); outresult(a, stdout); printf(“/nGive the number of the students who h
6、ave better score: “); scanf(“%d“, while( m10 ) printf(“/nGive the number of the students who have better score: “); scanf(“%d“, pOrder=fun(a,m); printf(“* THE RESULT */n“); printf(“The top :/n“); for(i=0; i printf(“ %s %d/n“,pOrderi.num , pOrderi.s); free(pOrder); (分数:10.00)_3.请编写函数 fun, 函数的功能是: 删去一
7、维数组中所有相同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如, 一维数组中的数据是: 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和其它函数中的任何内容, 仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #include #define N 80 int fun(int a, int n) main() int aN=2,2,2,3,4,4,5,6,6,
8、6,6,7,7,8,9,9,10,10,10,10,i,n=20; printf(“The original data :/n“); for(i=0; in=fun(a,n); printf(“/n/nThe data after deleted :/n“); for(i=0;i(分数:10.00)_全国计算机二级 C语言上机试题 5+2015年答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示
9、在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include void fun(char *s, int a, double f) /*found*/ _1_ fp; char str100, str1100, str2100; int a1; double f1; fp = fopen(“file1.txt“, “w“); fprintf(fp, “%s %d %f/n“, s, a, f); /*found*/ _2_ ;
10、 fp = fopen(“file1.txt“, “r“); /*found*/ 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); (分数:10.00)_正确答案:(第一处:定义文本文件类型变量,所以应填:FILE *。 第二处:关闭刚写
11、入的文件,所以应填:fclose(fp)。 第三处:从文件中读出数据,所以应填:fp。)解析:2.给定程序 MODI1.C中函数 fun的功能是: 对 N名学生的学习成绩,按从高到低的顺序找出前 m(m10)名学生来, 并将这些学生数据存放在一个动态分配的连续存储区中, 此存储区的首地址作为函数值返回。 请改正函数 fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动 main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include #include #define N 10 typedef struct ss char num10; i
12、nt s; STU; STU *fun(STU a, int m) STU bN, *t; int i,j,k; /*found*/ t=(STU *)calloc(sizeof(STU),m) for(i=0; i for(k=0; k for(i=j=0; i if(bi.s bj.s) j=i; /*found*/ t(k)=b(j); bj.s=0; return t; outresult(STU a, FILE *pf) int i; for(i=0; i fprintf(pf,“No = %s Mark = %d/n“, ai.num,ai.s); fprintf(pf,“/n/n
13、“); main() STU aN= “A01“,81,“A02“,89,“A03“,66,“A04“,87,“A05“,77, “A06“,90,“A07“,79,“A08“,61,“A09“,80,“A10“,71 ; STU *pOrder; int i, m; printf(“* The Original data */n“); outresult(a, stdout); printf(“/nGive the number of the students who have better score: “); scanf(“%d“, while( m10 ) printf(“/nGive
14、 the number of the students who have better score: “); scanf(“%d“, pOrder=fun(a,m); printf(“* THE RESULT */n“); printf(“The top :/n“); for(i=0; i printf(“ %s %d/n“,pOrderi.num , pOrderi.s); free(pOrder); (分数:10.00)_正确答案:(第一处: 语句最后缺少分号。 第二处: 应该使用方括号,而不是圆括号。 像此类,使用编译,即可发现。)解析:3.请编写函数 fun, 函数的功能是: 删去一维
15、数组中所有相同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如, 一维数组中的数据是: 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和其它函数中的任何内容, 仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #include #define N 80 int fun(int a, int n) main() int aN=2,2,2,3,4,4,5,6,6,6
16、,6,7,7,8,9,9,10,10,10,10,i,n=20; printf(“The original data :/n“); for(i=0; in=fun(a,n); printf(“/n/nThe data after deleted :/n“); for(i=0;i(分数:10.00)_正确答案:(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。如果相同,则取下一数。