二级C语言模拟题2018年(63) (总分100,考试时间90分钟)
一、程序填空题
1. 给定程序中,函数fun的功能是:将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构! 试题程序:
#include<stdio.h> #include<stdlib.h>
void fun(char *s, int a, double f) {
/**********found**********/ ______ fp;
char str[100], str1[100], str2[100]; int a1; double f1;
fp=fopen(\"file1.txt\
fprintf(fp, \"%s %d %f\\n\ /**********found**********/ ______;
fp=fopen(\"file1.txt\
/**********found**********/
fscanf(______, \"%s%s%s\ fclose(fp); a1=atoi(str1); f1=atof(str2);
printf(\"\\nThe result:\\n\\n%s %d %f\\n\ }
main()
{char a[10]=\"Hello!\"; int b=12345; double c=98.76; fun(a, b, c); }
二、程序改错题
1. 下列给定程序中,函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生的数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! #include <stdlib.h> #include <conio.h> #include <string.h> #include <stdio.h> #include <malloc.h> #define N 10 typede* struct ss {
char num[10]; int s; }STU;
STU *fun(STU a[], int m) {
STU b[N], *t; int i, j, k;
/**********found**********/ *t=calloc(m, sizeof(STU)); for(i=0; i<N; i++) b[i]=a[i];
for(k=0; k<m; k++) {
for(i=j=0; i<N; i++) if(b[i].s>b[j].s) j=i;
/**********found**********/ t[k].num=b[j].num; t[k].s=b[j].s; b[j].s=0; }
return t; }
outresult(STU a[], FILE*pf) { int i;
for(i=0; i<N; i**)
fprintf(pf, \"No=%s Mark=%d\\n\ fprintf(pf, \"\\n\\n\");
}
void main() {
STU a[N]={{\"A01\81}, {\"A02\}, {\"A03\66},{\"A04\87}, {\"A05\77}, {\"A06\90}, {\"A07\ STU *pOrder; int i, m;
system(\"CLS\");
printf(\"****THE EESULT****\\n\"); outresult(a, stdout);
printf(\"\\nGive the number of the students who have better score:\"); scanf(\"%d\ while(m>10) {
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<m; i++)
printf{\"%s %d\\n\ free(pOrder); }
三、程序设计题
1. 请编写函数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
注意:部分源程序给出如下。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 试题程序:
#include<stdio.h> #define N 80
int fun(int a[], int n) { }
void main() {
in\\a[N]={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<n; i++) printf{\"%3d:, a[i]}; n=fun(a, n);
printf(\"\\n\\nThe data after deleted:\\n\"); for(i=0; i<n; i++) printf(\"%3d\ printf(\"\\n\\n\"); }