计算机等级考试二级C语言内部教材
r2 = (*f)(a, b); return r1 + r2; } main()
{ double x1=5, x2=3, r; r = fun(x1, x2);
printf(\}
解题思路:
本题主要是考察用函数指针指向要调用的函数。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。
第一处:定义函数指针的类型,所以应填:double。 第二处:使f指向函数f1,所以应填:f1。 第三处:使f指向函数f2,所以应填:f2。
第15套
程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到student.dat文件中。函数fun的功能是从指定文件中找出指定学号的学生数据,读入此学生数据,对该生的分数进行修改,使每门课的分数加3分,修改后重写文件中该学生的数据,即用该学生的新数据覆盖原数据,其它学生数据不变;若找不到,则什么都不做。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include
typedef struct student { long sno; char name[10]; float score[3]; } STU;
void fun(char *filename, long sno) { FILE *fp; STU n; int i;
fp = fopen(filename,\/**********found**********/
while (!feof(__1__)) fp { fread(&n, sizeof(STU), 1, fp); /**********found**********/
if (n.sno__2__sno) break; == }
if (!feof(fp))
{ for (i=0; i<3; i++) n.score[i] += 3; /**********found**********/
fseek(__3__, -1L*sizeof(STU), SEEK_CUR); fp fwrite(&n, sizeof(STU), 1, fp);
16
计算机等级考试二级C语言内部教材
}
fclose(fp); } main()
{ STU t[N]={ {10001,\{10003,\{10005,\int i,j; FILE *fp;
fp = fopen(\fwrite(t, sizeof(STU), N, fp); fclose(fp);
printf(\fp = fopen(\fread(ss, sizeof(STU), N, fp); fclose(fp);
for (j=0; j { printf(\for (i=0; i<3; i++) printf(\printf(\} fun(\fp = fopen(\fread(ss, sizeof(STU), N, fp); fclose(fp); printf(\for (j=0; j { printf(\for (i=0; i<3; i++) printf(\printf(\} } 解题思路: 本题是考察如何从指定文件中找出指定学号的学生数据,并进行适当的修改,修改后重新写回到文件中该学生的数据上,即用该学生的新数据覆盖原数据。 第一处:判断读文件是否结束,所以应填:fp。 第二处:从读出的数据中判断是否是指定的学号,其中学号是由形参sno来传递的,所以应 填:==。 第三处:从已打开文件fp中重新定位当前读出的结构位置,所以应填:fp。 第16套 给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符*补齐,使其与最长的字符串等长。ss所指字符串数组中共有M个字符串,且串长 17 计算机等级考试二级C语言内部教材 #include void fun(char (*ss)[N]) { int i, j, n, len=0; for(i=0; i for(i=0; i n=strlen(___1___); ss[i] for(j=0; j ss[i][ ___2___]='*'; n+j /**********found**********/ ss[i][n+j+ ___3___]='\\0'; 1 } } main() { char ss[M][N]={\int i; printf(\for(i=0; i printf(\ for(i=0; i 解题思路: 第一处:利用for循环语句取当前字符串的长度,所以应填:ss[i]。 第二处:在字符串的右边填字符*,其开始位置是n+j,其中n是该字符串本身的长度,j是循环控制变量,所以应填:n+j。 第三处:字符串处理结束应置字符串结束符,其位置是n+j+1,所以应填:1。 第17套 程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和3门课的成绩。函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大)排序。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include 18 计算机等级考试二级C语言内部教材 struct student { long sno; char name[10]; float score[3]; }; void fun(struct student a[], int n) { /**********found**********/ __1__ t; struct student int i, j; /**********found**********/ for (i=0; i<__2__; i++) n-1 for (j=i+1; j if (strcmp(__3__) > 0) a[i].name,a[j].name { t = a[i]; a[i] = a[j]; a[j] = t; } } main() { struct student s[4]={{10001,\{10003,\int i, j; printf(\for (j=0; j<4; j++) { printf(\for (i=0; i<3; i++) printf(\printf(\} fun(s, 4); printf(\for (j=0; j<4; j++) { printf(\for (i=0; i<3; i++) printf(\printf(\} } 解题思路: 本题是对结构体数组中的姓名按升序进行排列。 第一处:t是一个临时变量,主要是存放学生数据的结构变量,所以应填:struct student。 第二处:利用两重for循环进行排序操作,排序的终止条件应该是总人数减1,所以应填:n-1。 第三处:对姓名进行比较大小,所以应填:a[i].name,a[j].name。 第18套 给定程序中,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。 例如,s所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 19 计算机等级考试二级C语言内部教材 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include { int i, j, k, n; char *p, *t; n=strlen(s)+1; t=(char*)malloc(n*sizeof(char)); p=(char*)malloc(n*sizeof(char)); j=0; k=0; for(i=0; i { if(((s[i]>='a')&&(s[i]<='z'))||((s[i]>='A')&&(s[i]<='Z'))) { /**********found**********/ t[j]=__1__; j++;} s[i] else { p[k]=s[i]; k++; } } /**********found**********/ for(i=0; i<__2__; i++) t[j+i]=p[i]; k /**********found**********/ t[j+k]= __3__; '\\0' return t; } main() { char s[80]; printf(\printf(\} 解题思路: 第一处:函数中申请了两个内存空间,其p是存放字母字符串,t是存放非字母字符串,根据条件可知,p依次存放字母字符串,其位置由j来控制,所以应填:s[i]。 第二处:利用for循环再把t中的内容依次追加到p中,其中t的长度为k,所以应填:k。 第三处:字符串处理好后必须添加字符串结束符,所以应填:'\\0'。 第19套 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是将形参a所指结构体变量s中的数据进行修改,并把a中地址作为函数值返回主函数,在主函数中输出修改后的数据。 例如:a所指变量s中的学号、姓名、和三门课的成绩依次是:10001、\ZhangSan \、95、80、88,修改后输出t中的数据应为:10002、\、96、 81、89。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include 20