《全国计算机等级考试C语言上机考试题库套5157.pdf》由会员分享,可在线阅读,更多相关《全国计算机等级考试C语言上机考试题库套5157.pdf(84页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2017 年全国计算机等级考试 C 语言上机考试题库 学生练习用第 41 套至第 60 套 第四十一套 1、程序填空 下列给定程序中,函数 fun 的功能是:将形参 s 所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后将新字符串的首地址作为函数值返回。例如,若 s 所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序在文件 BLANK1.C 中。不得增行或删行,也不得更改程序的结构!-#include#include#include char*fun(cha
2、r *s)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=a)&(si=A)&(si=Z)/*found*/tj=_1_;j+;else pk=si;k+;/*found*/for(i=0;i_2_;i+)tj+i=pi;/*found*/tj+k=_3_;return t;main()char s80;printf(Please input:);scanf(%s,s);printf(nThe result i
3、s:%sn,fun(s);-【参考答案】(1)si (2)k (3)0或 0【考点分析】本题考查:数组元素赋值操作;for 循环语句中循环变量的取值范围;字符串结束标识0。【解题思路】填空 1:将字符串 s 中所有字母元素赋给数组 t。填空 2:字符串中所有非字母元素放到字母元素后面,所以取值范围是 0k。填空 3:最后给字符串加入结束标识0。2、程序修改 下列给定程序中函数 fun 的功能是:将 s 所指字符串中最后一次出现的与 t1 所指字符串相同的子串替换成 t2 所指字符串,所形成的新串放在 w 所指的数组中。要求 t1 和 t2 所指字符串的长度相同。例如,当 s 所指字符串中的内容
4、为:abcdabfabc,t1 所指串中的内容为ab,t2 所指子串中的内容为99时,结果在 w 所指的数组中的内容应为abcdabf99c。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MODI1.C 中,不得增行或删行,也不得更改的程序的结构!-#include#include void fun(char *s,char*t1,char*t2,char*w)char *p,*r,*a;strcpy(w,s);/*found*/while(w)p=w;r=t1;while(*r)/*found*/IF(*r=*p)r+;p+;else break;if(*r=0)a=w;
5、w+;r=t2;while(*r)*a=*r;a+;r+;main()char s100,t1100,t2100,w100;printf(nPlease enter string S:);scanf(%s,s);printf(nPlease enter substring t1:);scanf(%s,t1);printf(nPlease enter substring t2:);scanf(%s,t2);if(strlen(t1)=strlen(t2)fun(s,t1,t2,w);printf(nThe result is:%sn,w);else printf(nError:strlen(t1
6、)!=strlen(t2)n);-【参考答案】(1)while(*w)(2)if(*r=*p)【考点分析】本题考查:while 循环语句,C 语言中的关键字。【解题思路】(1)这里要判断的是值的真假,而不是地址,所以改为 while(*w)。(2)C 语言中关键字区分大小写,只需运行程序,就可以根据错误提示找到。3、程序设计 编写函数 fun,其功能是:将 s 所指字符串中 ASCII 值为奇数的字符删除,剩余字符形成的新串放在 t 所指数组中。例如,若 s 所指字符串中的内容为:ABCDEFG12345,其中字符 A 的 ASCII 码值为奇数,字符 1 的 ASCII 码值也为奇数,都应当
7、删除,其它依此类推。最后 t 所指的数组中的内容应是:BDF24。注意:部分源程序在文件 PROG1.C 中。请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。-#include#include void fun(char *s,char t)main()char s100,t100;void NONO();printf(nPlease enter string S:);scanf(%s,s);fun(s,t);printf(nThe result is:%sn,t);NONO();void NONO()/*本函数用于打开文件,输入数据,调用函
8、数,输出数据,关闭文件。*/char s100,t100;FILE*rf,*wf;int i;rf=fopen(in.dat,r);wf=fopen(out.dat,w);for(i=0;i 10;i+)fscanf(rf,%s,s);fun(s,t);fprintf(wf,%sn,t);fclose(rf);fclose(wf);#include#include void fun(char *s,char t)main()char s100,t100;void NONO();printf(nPlease enter string S:);scanf(%s,s);fun(s,t);printf
9、(nThe result is:%sn,t);NONO();void NONO()/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/char s100,t100;FILE*rf,*wf;int i;rf=fopen(in.dat,r);wf=fopen(out.dat,w);for(i=0;i 10;i+)fscanf(rf,%s,s);fun(s,t);fprintf(wf,%sn,t);fclose(rf);fclose(wf);-【参考答案】void fun(char*s,char t)int i,j=0,n;n=strlen(s);for(i=0;in;i+)/*找出
10、 ASCII 码值为偶数的字符依次存入数组中*/if(si%2=0)tj=si;j+;tj=0;【考点分析】本题考查:ASCII 码值为奇数或偶数的判定方法,同时掌握删除字符的思想,即重新保留非删除字符。【解题思路】要删除 ASCII 码值为奇数的字符,也就是要保留 ASCII 码值为偶数的字符,由于最终是要求出剩余字符形成的新串,所以本题的算法是对原字符串从头到尾扫描,并找出 ASCII 码值为偶数的字符依次存入数组中。第四十二套 1、程序填空 给定程序中,函数 fun 的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi 和 a
11、tof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件 BLANK1.C 中。请勿改动 main 函数和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。-#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%fn,s,a,f)
12、;/*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:nn%s%d%fn,str,a1,f1);main()char a10=Hello!;int b=12345;double c=98.76;fun(a,b,c);-【参考答案】(1)FILE*(2)fclose(fp)(3)fp【解题思路】填空 1:从使用 fp=fopen(file1.txt,w)可知 fp 应该是文件类型指
13、针,因此本空因该填写 FILE*。填空 2:当对 fp 作打开操作的时候,并进行不同的操作前,应该对其关闭,因为在第一次打开时是对 fp 进行写操作,而在第二次打开后进行的是读操作,因此应该先对 fp 进行关闭,本空填 fclose(fp)。填空 3:fscanf()是把文本文件输出,因此本空只能填写 fp。2、程序修改 下列给定程序中,函数 fun 的功能是:对 N 名学生的学习成绩,按从高到低的顺序找出前 m(m10)名学生来,并将这些学生的数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MODI1.C
14、 中,不得增行或删行,也不得更改程序的结构。-#include#include#include#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=calloc(m,sizeof(STU);for(i=0;iN;i+)bi=ai;for(k=0;km;k+)for(i=j=0;ibj.s)j=i;/*found*/tk.num=bj.num;tk.s=bj.s;bj.s=0;return t;outresult
15、(STU a,FILE*pf)int i;for(i=0;i10)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;im;i+)printf(%s%dn,pOrderi.num,pOrderi.s);free(pOrder);-【参考答案】(1)t=calloc(m,sizeof(STU);(2)tk=bj;【解题思路】(1)calloc 应用于分配内存空间。调用形
16、式为(类型说明符*)calloc(n,size),功能:在内存动态存储区中分配 n 块长度为size字节的连续区域,函数的返回值为该区域的首地址,(类型说明符*)用于强制类型转换。calloc 函数与 malloc 函数的区别在于 calloc 函数一次可以分配 n 块区域。例如,ps=(struct stu*)calloc(2,sizeof(struct stu);,其中的sizeof(struct stu)是求 stu 的结构长度。该语句的意思是:按 stu 的长度分配两块连续区域,强制转换为 stu 类型,并把其首地址赋予指针变量 ps。在本题中不用考虑那么复杂,根据定义类型 STU b
17、N,*t;就可以看出*t=calloc(m,sizeof(STU)中的错误。(2)tk.num=bj.num 的错误旨在考查对结构体概念的掌握和灵活应用程度。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 函数和其他函数中的任何内容,仅在函数 fun
18、 的花括号中填入所编写的若干语句。-#include#define N 80 int fun(int a,int n)void main()FILE*wf;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;in;i+)printf(%3d,ai);n=fun(a,n);printf(nnThe data after deleted:n);for(i=0;in;i+)printf(%3d,ai);printf(nn);/*/wf=fopen(out.dat,w
19、);for(i=0;in;i+)fprintf(wf,%3d,ai);fclose(wf);/*/-【参考答案】int fun(int a,int n)int i,j=1;for(i=1;in;i+)if(aj-1!=ai)/*若该数与前一个数不相同,则要保留*/aj+=ai;return j;/*返回不相同数的个数*/【解题思路】该程序的流程是:定义变量 i 和 j,其中 j 用于控制删除后剩下的数在数组中的下标,i 用于搜索原数组中的元素。j 始终是新数组中最后一个元素的下一个元素的下标,所以 if 语句中的条件是 aj-1!=ai,其中 aj-1就是新数组中的最后一个元素,若条件成立,则
20、表示出现了不同的值,所以 ai要保留到新数组中。注意本题中 i 和 j 的初值都要从 1 开始,该算法只能用于数组已排序的题目中。第四十三套 1、程序填空 下列给定程序中,函数 fun 的功能是:计算 NN 矩阵的主对角线元素和反向对角线元素之和,并作为函数值返回。要求先累加主对角线元素中的值,再累加反向对角线元素中的值。例如,若 N3,有下列矩阵:首先累加 1、5、9,然后累加 3、5、7,函数返回值为 30。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序在文件 BLANK1.C 中。不得增行或删行,也不得更改程序的结构!-#include#defin
21、e N 4 fun(int tN,int n)int i,sum;/*found*/_1_;for(i=0;in;i+)/*found*/sum+=_2_;for(i=0;in;i+)/*found*/sum+=tin-i-_3_;return sum;main()int tN=21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10,i,j;printf(nThe original data:n);for(i=0;iN;i+)for(j=0;jN;j+)printf(%4d,tij);printf(n);printf(The result is:%d,fun
22、(t,N);-【参考答案】(1)sum=0 (2)tii (3)1【考点分析】本题考查:变量初始化;NN 矩阵对角线下标如何表示;累加操作。【解题思路】填空 1:变量 sum 用来储存和结果,所以将其初始化为 0。填空 2:从题目中我们可以了解到,主对角线元素的行和列下标是相同的,所以应填入 tii。填空 3:对于反向对角线元素的行和列的下标,它们的关系是相加和为 n1,所以应填入 1。2、程序修改 下列给定程序中函数 fun 和 funx 的功能是:用二分法求方程 的一个根,并要求绝对误差不超过0.001。例如,若给 m 输入-100,n 输入 90,则函数求得的一个根为 2.000。请改正
23、程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MODI1.C 中,不得增行或删行,也不得更改程序的结构。-#include#include double funx(double x)return(2*x*x*x-4*x*x+3*x-6);double fun(double m,double n)/*found*/int r;r=(m+n)/2;/*found*/while(fabs(n-m)0.001)if(funx(r)*funx(n)0.001)【考点分析】本题考查:变量数据类型;while 循环语句。【解题思路】(1)程序中我们会发现 r(mn)/2,而 m 和 n 都是
24、double 型的,并且根据题意可知,变量 r 需要定义为 double 型。(2)绝对误差不超过 0.001,所以循环条件应为 fabs(nm)0.001。3、程序设计 规定输入的字符串中只包含字母和*号。编写函数 fun,其功能是:除了字符串前导和尾部的*号外,将串中其它的*号全部删除。形参 h 已指向字符串中第一个字母,形参 p 指向字符串的中最后一个字母。在编写函数时,不得使用 C 语言提供的字符串函数。例如,若字符串中的内容为*A*BC*DEF*G*,删除后,字符串中的内容应当是:*ABCDEFG*。在编写函数时,不得使用 C 语言提供的字符串函数。注意:部分源程序在文件 PROG1
25、.C 中。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。-#include void fun(char*a,char*h,char*p)main()char s81,*t,*f;void NONO();printf(Enter a string:n);gets(s);t=f=s;while(*t)t+;t-;while(*t=*)t-;while(*f=*)f+;fun(s,f,t);printf(The string after deleted:n);puts(s);NONO();void NONO()/*本函数用于打开文件,输入数据,调
26、用函数,输出数据,关闭文件。*/FILE*in,*out;int i;char s81,*t,*f;in=fopen(in.dat,r);out=fopen(out.dat,w);for(i=0;i 10;i+)fscanf(in,%s,s);t=f=s;while(*t)t+;t-;while(*t=*)t-;while(*f=*)f+;fun(s,f,t);fprintf(out,%sn,s);fclose(in);fclose(out);-【参考答案】void fun(char*a,char*h,char*p)int i=0;char*q=a;while(qh)ai=*q;q+;i+;w
27、hile(qp)if(*q!=*)ai=*q;i+;q+;while(*q)ai=*q;i+;q+;ai=0;【考点分析】本题考查:while 循环语句,注意循环条件的设定;指针型变量。【解题思路】本题的重点是要选择好判断条件,首先是需要判断前导*的结束,然后判断是否指向最后一个字母,最后补充尾部*,只要思路对了就可正确解答。第四十四套 1、程序填空 下列给定程序中,函数 fun 的功能是:找出 100 到 x(x999)之间各位上的数字之和为 15 的所有整数,并在屏幕输出;将符合条件的整数的个数作为函数值返回。例如,当 n 值为 500 时,各位数字之和为 15 的整数有:159、168、
28、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492。共有 26 个。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序在文件 BLANK1.C 中。不得增行或删行,也不得更改程序的结构!-#include int fun(int x)int n,s1,s2,s3,t;/*found*/n=_1_;t=100;/*found*/while(t999|x0)printf(Please input(0 x=999):);sca
29、nf(%d,&x);printf(nThe result is:%dn,fun(x);-【参考答案】(1)0 (2)x (3)t+【考点分析】本题考查:变量赋初值;while 循环语句。【解题思路】填空 1:变量 n 用于存放符合条件的整数的个数,应赋初值为 0。填空 2:根据题目要求,确定循环变量 t 的取值范围 tx。填空 3:循环变量 t 自增 1 操作。2、程序修改 下列给定程序中函数 fun 的功能是:先将 s 所指字符串中的字符按逆序存放到 t所指字符串中,然后把 s 所指串中的字符按正序连接到 t 所指串之后。例如:当 s 所指的字符串为ABCDE时,t 所指的字符串应为EDCB
30、AABCDE。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MODI1.C 中,不得增行或删行,也不得更改程序的结构!-#include#include void fun(char *s,char *t)/*found*/int i;sl=strlen(s);for(i=0;isl;i+)/*found*/ti=ssl-i;for(i=0;i=sl;i+)tsl+i=si;t2*sl=0;main()char s100,t100;printf(nPlease enter string s:);scanf(%s,s);fun(s,t);printf(The result is
31、:%sn,t);-【参考答案】(1)int i,sl;(2)ti=ssl-i-1;【考点分析】本题考查:变量定义;字符串操作。【解题思路】(1)变量 s1 没有定义。(2)该循环实现将 s 串中的字符逆序存入 t 串中,ti对应 s 串中的 ssl-i-1。3、程序设计 函数 fun 的功能是:将 a、b 的两个两位正整数合并成一个新的整数放在 c 中。合并的方式是:将 a 中的十位和个位数依次放在变量 c 的百位和个位上,b 中的十位和个位数依次放在变量 c 的千位和十位上。例如,当 a45,b12,调用该函数后 c1425。注意:部分源程序在文件 PROG1.C 中。数据文件 IN.DAT
32、 中的数据不得修改。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。-#include#include float fun(float num)int s;float n,t,pi;t=1;pi=0;n=1;s=1;/*found*/while(t=num)pi=pi+t;n=n+2;s=-s;/*found*/t=s%n;pi=pi*4;return pi;main()float n1,n2;printf(Enter a float number:);scanf(%f,&n1);n2=fun(n1);printf(%6.4fn,n2);-【
33、参考答案】void fun(int a,int b,long*c)*c=a%10+(b%10)*10+(a/10)*100+(b/10)*1000;【考点分析】本题考查:如何取出数值 n 的各个位;知道数值 n 的各个位,又如何表示该数值;指针型变量的使用。【解题思路】本题的主要问题是如何取出 a 和 b 的个位数和十位数,取出后如何表示成 c 中相应的位数。由于 a 和 b 都是只有两位的整数,所以分别对它们除 10 可得到它们的十位数,分别用 10 对它们求余可得到它们的个位数。得到后对应乘以 1000、100、10、1 就可得到 c 的千位数、百位数、十位数和个位数。注意:使用 c 时要
34、进行指针运算。第四十五套 1、程序填空 下列给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中,将所有串长超过 k 的字符串中后面的字符删除,只保留前面的 k 个字符。ss 所指字符串数组中共有 N 个字符串,且串长小于 M。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序在文件 BLANK1.C 中。不得增行或删行,也不得更改程序的结构!-#include#include#define N 5#define M 10/*found*/void fun(char (*ss)_1_,int k)int i=0 ;/*found*/while(
35、i _2_)/*found*/ssik=_3_;i+;main()char xNM=Create,Modify,Sort,skip,Delete;int i;printf(nThe original stringnn);for(i=0;iN;i+)puts(xi);printf(n);fun(x,4);printf(nThe string after deleted:nn);for(i=0;iN;i+)puts(xi);printf(n);-【参考答案】(1)M (2)N (3)0【考点分析】本题考查:函数定义;while 循环语句;字符串结束标识0。【解题思路】填空 1:根据 main 函数
36、中函数调用语句,确定函数定义时的形式参数,所以填入M。填空 2:while 循环语句需要对所有字符串进行操作,因此循环条件是 iN。填空 3:字符串结尾加入字符串结束标识0。2、程序修改 下列给定程序中函数 fun 的功能是:根据以下公式求 值,并作为函数值返回。例如,当给指定精度的变量 eps 输入 0.0005 时,应输出 Pi3.140578。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MODI1.C 中,不得增行或删行,也不得更改的程序的结构!-#include#include double fun(double eps)double s,t;int n=1;s=
37、0.0;/*found*/t=0;while(teps)s+=t;t=t*n/(2*n+1);n+;/*found*/return(s);main()double x;printf(nPlease enter a precision:);scanf(%lf,&x);printf(neps=%lf,Pi=%lfnn,x,fun(x);-【参考答案】(1)t=1.0;(2)return(s*2);【考点分析】本题考查:根据给定公式求值,因此需要确定变量定义的数据类型以及如何对其进行初始化;函数返回值。【解题思路】该题中,我们首先检查变量数据类型前后是否一致,因为变量 t 定义为 double型,所
38、以赋值时要赋以实型数值。return(s)是一个数学错误,应该返回return(s*2)。3、程序设计 规定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:使字符串的前导*号不得多于 n 个,若多于 n 个,则删除多余的*号;若少于或等 n 个,则不做处理,字符串中间和尾部的*号不删除。例如,字符串中的内容为:*A*BC*DEF*G*,若 n 的值为 4,删除后,字符串中的内容应当是:*A*BC*DEF*G*;若 n 的值为 8,则字符串中的内容仍为:*A*BC*DEF*G*。n 的值在主函数中输入。在编写函数时,不得使用 C 语言提供的字符串函数。请勿改动主函数 main 和其
39、他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。-#include void fun(char*a,int n)main()char s81;int n;void NONO();printf(Enter a string:n);gets(s);printf(Enter n:);scanf(%d,&n);fun(s,n);printf(The string after deleted:n);puts(s);NONO();void NONO()/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;int i,n;char s81;in=
40、fopen(in.dat,r);out=fopen(out.dat,w);for(i=0;i n)/*如果 k 大于 n,则使 p 的前部保留 n 个星号,其后的字符依次存入数组 a 中*/while(*p)ai=*(p+k-n);i+;p+;ai=0;/*在字符串最后加上结束标识位*/【考点分析】本题考查:循环判断语句;字符串的操作。【解题思路】字符串中前导*号不能多于 n 个,多余的删除。首先需要通过 while 循环统计字符串前导*号的个数,然后通过 if 条件语句完成前导*号的个数和 n 的比较,如果前导*号多于 n 个,需要把 n 个*号和其余字符重新保留。第四十六套 1、程序填空
41、下列给定程序中,函数 fun 的功能是:将自然数 110 及其平方根写到名为myfile3.txt 的文本文件中,然后再顺序读出显示在屏幕上。请在程序下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件 BLANK1.C 中。不得增行或删行,也不得更改程序的结构!-#include#include int fun(char *fname)FILE *fp;int i,n;float x;if(fp=fopen(fname,w)=NULL)return 0;for(i=1;i=10;i+)/*found*/fprintf(_1_,%d%fn,i,sqrt(doubl
42、e)i);printf(nSucceed!!n);/*found*/_2_;printf(nThe data in file:n);/*found*/if(fp=fopen(_3_,r)=NULL)return 0;fscanf(fp,%d%f,&n,&x);while(!feof(fp)printf(%d%fn,n,x);fscanf(fp,%d%f,&n,&x);fclose(fp);return 1;main()char fname=myfile3.txt;fun(fname);-【参考答案】(1)fp (2)fclose(fp)(3)fname【考点分析】本题考查:文件的相关操作,fp
43、rintf 函数与前 printf 功能相似,区别在于fprintf 函数的对象不是键盘和显示器,而是磁盘文件;文件打开和关闭函数fopen 和 fclose 的使用。【解题思路】填空 1:fprintf 函数的形式是:fprintf(文件指针,格式字符串,输出表列);,所以填入文件指针 fp。填空 2:文件一旦使用完毕,应使用关闭函数 fclose()将文件关闭,以避免发生文件数据丢失等错误。填空 3:fopen 函数用来打开一个文件,其一般形式为:文件指针名fopen(文件名,使用文件方式);因此应填入文件名 fname。2、程序修改 下列给定程序中 fun 函数功能是:将 n 个无序整数
44、从小到大排序。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MODI1.C 中,不得增行或删行,也不得更改程序的结构!-#include#include fun(int n,int *a)int i,j,p,t;for(j=0;jn-1;j+)p=j;/*found*/for(i=j+1;iai)/*found*/t=i;if(p!=j)t=aj;aj=ap;ap=t;putarr(int n,int *z)int i;for(i=1;i=n;i+,z+)printf(%4d,*z);if(!(i%10)printf(n);printf(n);main()int aa20=
45、9,3,0,4,1,2,5,6,8,10,7,n=11;printf(nnBefore sorting%d numbers:n,n);putarr(n,aa);fun(n,aa);printf(nAfter sorting%d numbers:n,n);putarr(n,aa);-【参考答案】(1)for(i=j+1;in;i+)(2)p=i;【考点分析】本题考查:for 循环语句;需明确各个变量含义。【解题思路】该程序是对 n 个无序数实现从小到大的排序,先找出整数序列的最小项,置于指针第 1 个元素的位置;再找出次小项,置于第 2 个元素的位置;之后顺次处理后续元素。(1)数组的长度为 n
46、,所以最后一个元素的下标值为 n1,i 的取值范围应该包括此下标值。(2)p 是中间变量,存放值较小的元素下标。3、程序设计 编写函数 fun,其功能是:将两个两位数的正整数 a、b 合并成一个整数放在 c中。合并的方式是:将 a 数的十位和个位数依次在 c 数的个位和百位上,b 数的十位和个位数依次放在 c 数的十位和千位上。例如,当 a45,b12 时,调用该函数后 c2514。注意:部分源程序在文件 PROG1.C 中。数据文件 IN.DAT 中的数据不得修改。请勿动改主函数的 main 和其它函数中的任何内容,仅在函数 fun 的花括号填入你编写的若干语句。-#include void
47、 fun(int a,int b,long*c)main()int a,b;long c;void NONO();printf(Input a,b:);scanf(%d%d,&a,&b);fun(a,b,&c);printf(The result is:%ldn,c);NONO();void NONO()/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;int i,a,b;long c;rf=fopen(in.dat,r);wf=fopen(out.dat,w);for(i=0;i 10;i+)fscanf(rf,%d,%d,&a,&b);fun(a,
48、b,&c);fprintf(wf,a=%d,b=%d,c=%ldn,a,b,c);fclose(rf);fclose(wf);-【参考答案】void fun(int a,int b,long*c)*c=a/10+(b/10)*10+(a%10)*100+(b%10)*1000;【考点分析】本题考查:如何取出数值 n 的各个位;知道数值 n 的各个位,又如何表示该数值;指针型变量的使用。【解题思路】本题的主要问题是如何取出 a 和 b 的个位数和十位数,取出后如何表示成 c 中相应的位数。由于 a 和 b 都是只有两位的整数,所以分别对它们除 10 可得到它们的十位数,分别用 10 对它们求余可
49、得到它们的个位数。得到后对应乘以 1000、100、10、1 就可得到 c 的千位数、百位数、十位数和个位数。注意:使用 c 时要进行指针运算。第四十七套 1、程序填空 下列给定程序中,函数 fun 的功能是:将形参 n 所指变量中,各位上为偶数的数去掉,剩余的数按原来从高位到低位的顺序组成一个新数,并通过形参指针n传回所指变量。例如,若输入一个数 27638496,则新数为 739。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序在文件 BLANK1.C 中。不得增行或删行,也不得更改程序的结构!-#include void fun(unsigned l
50、ong *n)unsigned long x=0,i;int t;i=1;while(*n)/*found*/t=*n%_1_;/*found*/if(t%2!=_2_)x=x+t*i;i=i*10;*n=*n/10;/*found*/*n=_3_;main()unsigned long n=-1;while(n99999999|n0)printf(Please input(0n100000000):);scanf(%ld,&n);fun(&n);printf(nThe result is:%ldn,n);-【参考答案】(1)10 (2)0 (3)x【考点分析】本题考查:求余运算;if 语句条