double md {static t=29.c=217.=1024.-=0. (%m retum(double)r/m). ※※※※※※※※※※※※※※※※※※※※※※※※※ 第05套 给定程序中函数u的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本 文件中逐个读入,并调用库函数0i和0f将字符申转换成相应的整数、浮点数,然后将其显示在屏幕上, 请在程序的下划线处填入正确的内容并把下划线别除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANKI.C中. 不得增行或删行,也不得更改程序的结构! 给定源程序: #include<stdio.h≥ void fun(char 's.int a.double f) 4*found _1_p charst100,st11001.st2100 int al double fl. fp=fopen("filel.txt"."w"): fprintfr fp."%s %d %fn".s.a.n): 作found _2 fp=fopen("filel.txt"," found fscanf3"%%s%s".str.strl.str2). fclose(fp); al=atoi(strl) f1 atof(str2). printft"nThe result :nin%s %d %fn",str.al,fl): main() {char ]"Hello!"int b=12345 double c=98.76: fu(a.b.c). 16
- 16 - double rnd() { static t=29,c=217,m=1024,r=0; r=(r*t+c)%m; return((double)r/m); } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第 05 套: 给定程序中,函数 fun 的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本 文件中逐个读入,并调用库函数 atoi 和 atof 将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> #include <stdlib.h> void fun(char *s, int a, double f) { /**********found**********/ _1_ fp; char str[100], str1[100], str2[100]; 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\n%s %d %f\n", str, a1, f1); } main() { char a[10]="Hello!"; int b=12345; double c= 98.76; fun(a,b,c);
解题思路: 本题是考察先把给定的数据写入到文本文件中,再从该文件读出并转换成相应的整数、浮点数显示在屏幕上, 第一处:定义文本文件类型变量,所以应填:FLE*。 第二处:关闭刚写入的文件,所以应填:fosp) 第三处:从文件中读出数据,所以应填:印。 本家家率中水家来家神车家家非率本客中水家球车市中家华中华华水家中车中水水市华华中水家华市球水家中容华 给定程序MODI1.C中函数fn的功能是:对N名学生的学习成绩,按从高到低的顺序找出前mm≤1O)名学生来, 并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为两数值返回。 请政正函数u中指定部位的错误,使它能得出正确的结果。 注意:不要改动min函数,不得增行或别行,也不得更改程序的结构 给定源程序: #include <stdio.h> nclude <alloc.h include<string h> (char num[10]. int s. STU: STU*fun(STU all,int m) STUbIN].* int iik (STU*)alloc(sizeof(STU).m) for(i=0.iN:i++)ba for(k=0.k<m:k++) for(i=j=0.i<N:it+) ib可.s>bl1s)=t t(k)=b(j): b0.s=0: outresult(STU an],FILE *pf) -17
- 17 - } 解题思路: 本题是考察先把给定的数据写入到文本文件中,再从该文件读出并转换成相应的整数、浮点数显示在屏幕上。 第一处:定义文本文件类型变量,所以应填:FILE *。 第二处:关闭刚写入的文件,所以应填:fclose(fp)。 第三处:从文件中读出数据,所以应填:fp。 *************************************************** 给定程序 MODI1.C 中函数 fun 的功能是: 对 N 名学生的学习成绩,按从高到低的顺序找出前 m(m≤10)名学生来, 并将这些学生数据存放在一个动态分配的连续存储区中, 此存储区的首地址作为函数值返回。 请改正函数 fun 中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include <stdio.h> #include <alloc.h> #include <string.h> #define N 10 typedef struct ss { char num[10]; int s; } STU; STU *fun(STU a[], int m) { STU b[N], *t; int i,j,k; /**********found**********/ t=(STU *)calloc(sizeof(STU),m) 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)=b(j); b[j].s=0; } return t; } outresult(STU a[], FILE *pf)
(inti fo(=0:iN,i++) fprintf(pf,"No=%s Mark=%dvn"anum) ."in"): main( {STUa[N)={"A01",8I,{"A02",89,A03°,66,"A04,87},"A05",77 "A06901."A07.791.{"A08".611."A09"801."A10.71}1: int i,m; printfThe Original datan) printf"nGive the number of the students whohave better score") while(m>10) printf"nGive the number of the students who have better score:") scanf"%d"&m) pOrder=fur(a.m). printTHE RESULT) printf"The top :n"): for(i=,i<m;++) printf%s%dnpOrderi]num,pOrder]s). free(pOrder), 解趣思路: 第一处:语句最后缺少分号。 第二处:应该使用方括号。而不是圆括号 像此类,使用编译,即可发现. 请编写函数u,函数的功能是:刷去一维数组中所有相同的数,使之只剩一个.数组中的数已按由小到大的顺序 排列,函数返回剧除后数组中数据的个数。 例如,一维数组中的数据是:2223445666677899101010 删除后,数组中的内容应该是:2345678910. 注意:部分源程序在文件PROG1.C中。 请勿改动主函数mai和其它函数中的任何内容,仅在函数un的花括号中填入你编写的若干语句. 给定源程序: -18
- 18 - { int i; for(i=0; i<N; i++) fprintf(pf,"No = %s Mark = %d\n", a[i].num,a[i].s); fprintf(pf,"\n\n"); } main() { STU a[N]={ {"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",&m); while( m>10 ) { printf("\nGive the number of the students who have better score: "); scanf("%d",&m); } pOrder=fun(a,m); printf("***** THE RESULT *****\n"); printf("The top :\n"); for(i=0; i<m; i++) printf(" %s %d\n",pOrder[i].num , pOrder[i].s); free(pOrder); } 解题思路: 第一处: 语句最后缺少分号。 第二处: 应该使用方括号,而不是圆括号。 像此类,使用编译,即可发现。 *************************************************** 请编写函数 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 和其它函数中的任何内容, 仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序:
include<stdio.h> #define N 80 int fun() } main() {int a[N={2,2,23,4,4.5.6.6.6.6,7,7,8,9,9,1010,10,101,in=20 for(i<n;+)printf("%3d); n=fun(a.n). printfThe data afer deleted) for(=:i<n+)printf(d):printf"n") 解趣思路: 本愿是别除已排序过数组中的相同数。 1.取出数组中的第1个数存放在临时变量k中,再利用or循环来依次判断所有的数。 2.如果取出的数和k相比,如果不相同,则仍存放在原数组中,其中存放的位置由j来控制,接着把这个数重 新存入k。如果相同,则取下一数。 参考答案: int fun() int i j=1,k=] for(i=1:i<n:it+) iffk !=afil){ a++a] k=a可: a0=0 return j; 强※※※※※※※※※※※※※※※※※※※强※※※※ 第06套: 给定程序中,函数的功能是根据形参i的值返国某个函数的值。当调用正确时,程序输出 x1=5.000000.x2=3.000000,x1*x1+x1x2=40.000000 请在程序的下划线处填入正确的内容并把下划线利除,使程序得出正确的结果。 -19
- 19 - #include <stdio.h> #define N 80 int fun(int a[], int n) { } main() { int 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",a[i]); printf("\n\n"); NONO(); } 解题思路: 本题是删除已排序过数组中的相同数。 1. 取出数组中的第 1 个数存放在临时变量 k 中,再利用 for 循环来依次判断所有的数。 2. 如果取出的数和 k 相比,如果不相同,则仍存放在原数组中,其中存放的位置由 j 来控制,接着把这个数重 新存入 k。如果相同,则取下一数。 参考答案: int fun(int a[], int n) { int i, j = 1, k = a[0] ; for(i = 1 ; i < n ; i++) if(k != a[i]) { a[j++]=a[i] ; k = a[i] ; } a[j] = 0 ; return j ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第 06 套: 给定程序中,函数 fun 的功能是根据形参 i 的值返回某个函数的值。当调用正确时, 程序输出: x1=5.000000, x2=3.000000, x1*x1+x1*x2=40.000000 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果
注意:源程序存放在考生文件夹下的BLANKIC中 不得增行或删行,也不得更政程序的结构: 给定源程序: include<stdio.h double f1(double x】 double f2(double x.double v) {return x*y; I fun(int i,double x,double y) 【f0=) retum2_(x). /体年年车中单华华单中Und单单单季华年单单 retum3_(x.y). maino {double x1=5,x=3 r=fun(1,xl,x2). r+=fun(2,xl,x2) printfl"nx1=%f.x2=%fx1*xl+x1*x2=%fnin".xI.x2.r): 解愿思路: 本题是根据给定的公式来计算函数的值。 第一处:程序中使用双精度double类型进行计算,所以函数的返回值类型也为doube,所以应填:double 第二处:当等于1时,则返国1函数的值,所以应填:门。 第三处:如果1不等于1,则返回2函数的值,所以应填:卫. 给定程序MODI1.C中函数n的功能是:比较两个字符串,将长的那个字符串的首地址作为两数值返回, 请政正函数fn中指定部位的错误,使它能得出正确的结果。 注意:不要政动min函数,不得增行或别行,也不得更改程序的结枸 给定源程序: 作华率率率华来率率率Ou门d修率车率率华率来华中 char fun(chars,char) 20
- 20 - 注意:源程序存放在考生文件夹下的 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> double f1(double x) { return x*x; } double f2(double x, double y) { return x*y; } /**********found**********/ _1_ fun(int i, double x, double y) { if (i==1) /**********found**********/ return _2_(x); else /**********found**********/ return _3_(x, y); } main() { double x1=5, x2=3, r; r = fun(1, x1, x2); r += fun(2, x1, x2); printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n\n",x1, x2, r); } 解题思路: 本题是根据给定的公式来计算函数的值。 第一处:程序中使用双精度 double 类型进行计算,所以函数的返回值类型也为 double,所以应填:double。 第二处:当 i 等于 1 时,则返回 f1 函数的值,所以应填:f1。 第三处:如果 i 不等于 1,则返回 f2 函数的值,所以应填:f2。 *************************************************** 给定程序 MODI1.C 中函数 fun 的功能是: 比较两个字符串,将长的那个字符串的首地址作为函数值返回。 请改正函数 fun 中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include <stdio.h> /**********found**********/ char fun(char *s, char *t)