全国计算机等级考试三级C编程93套真题.docx

上传人:文*** 文档编号:68228467 上传时间:2022-12-27 格式:DOCX 页数:113 大小:230.93KB
返回 下载 相关 举报
全国计算机等级考试三级C编程93套真题.docx_第1页
第1页 / 共113页
全国计算机等级考试三级C编程93套真题.docx_第2页
第2页 / 共113页
点击查看更多>>
资源描述

《全国计算机等级考试三级C编程93套真题.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试三级C编程93套真题.docx(113页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、三级C(93套)1、已知数据文件INLDAT中存有200个4位数,并已调用读函数readDat。把这些数存入数组a中,请编 制一函数jsVal(),其功能是:如果4位数各位上的数字均是0或2或4或6或8,则统计出满足此条件的数的个 数ent,并把这些4位数按从大到小的顺序存入数组b中,最后调用写函数writeDat。把结果ent及数组b中符合 条件的4位数输出到OUT1.DAT文件中。注意:部分源程序已给出。程序中已定义数组:a200, b200,已定义变量:ent。请勿改动主函数main。、读函数readDat ()和写函数writeDat ()的内容。试题程序:#include #defi

2、ne MAX 200int aMAXt bMAX, ent = 0;void jsVal()void readDat() (int i;FILE *fp;fp = fopen(nINl.DAT, r);for (i = 0; i MAX; i+) fscanf (fp, M%dn, &a i); fclose(fp);main ()(int i;readDat();jsVal();printf (满足条件的数=%dn”,ent);for(i = 0; i ent; i+) printf(M%d ”, bi);printf(Mnw);writeDat();writeDat() (FILE *fp

3、;int i;fp = fopen(OUT1.DATU, w);fprintf(fp, dn,ent);for(i = 0; i ent; i+) fprintf(fp, M%dnM, bi); fclose(fp);)答案void jsVal()int bb4;int i, j,k,flag;for (i=0;i200;i+) ( bb0=ai/1000;/*求四位数的千位数字*/bbl=ai%1000/100; /*求四位数的百位数字*/ bb2=ai%100/10;/*求四位数的十位数字*/bb3=ai%10;/*求四位数的个位数字*/for (j=0;j4;j+) (if (bb j%

4、2=0)/*如果各位上的数字均是。或2或4或6或8*/flag=l;/*则置标志位flag为1*/else flag=O;break; /*否贝ij置flag为0,退出循环*/ if (flag=l)/*将满足条件的数存入数组b中,并统计满足条件的个数ent*/ bent=ai;cnt+; ) for (i=0;icnt-l;i+)/*把数组b中的数按从大到小的顺序排序*/for(j=i+l;jcnt;j+) if (bibj) k=bi; bi=bj;bj=k;2、函数ReadDat()的功能是实现从文件IN2.DAT中读取篇英文文章存入到字符串数组xx中;请编制 函数StQLO,该函数的功

5、能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把 已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数WriteDatO把结果xx输 出到文件OUT2.DAT中。例如,原文:You He MeI am a student.结果:Me He You student a am I原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。注意:部分源程序已给出。请勿改动主函数main。、读函数ReadDat。和写函数WriteDatO的内容。试题程序:#include #include #include #include char xx 5

6、0 80;int maxline = 0; /*文章的总行数*/int ReadDat(void);void WriteDat(void);void StrOL(void) (main () clrscr ();if (ReadDat () printf (数据文件 1N2.DAT不能打开! n007); return;StrOLO ;WriteDat();)int ReadDat(void) (FILE *fp;int i = 0;char *p;if(fp = fopen(工N2.DAT, r) = NULL) return 1; while(fgets(xxi, 80, fp) != N

7、ULL) (p = strchr(xx i, *n1);if(p) *p = 0;i+;?maxline = i;fclose(fp);return 0;void WriteDat(void) |FILE*fp;int i;clrscr ();fp = fopen(OUT2.DAT, nwM);for(i = 0; i maxline; i+)printf (M%sn, xx i); fprintf(fp, w%sn, xxi);fclose (fp);答案void StrOL(void)int i,strl,l;char c;for(i=0;imaxline;i+)/*把各行中多余的标点符号

8、去掉*/for(j=0;j=A & c=Z) | | (c=fa & c=,z,) | | c=* * | | (0=0& c=T 9,);else xxi j =1 1;)for(1=0;l= aT & xx 1 i =1 Ar & xxl i-,0, & xxl i=0) /*处理字母和数字*/(for(j=k; j=0; j - )/*从当前行的最后一个字符开始取字符,直到遇到空格ppj+l=ppj;pp0=xx(li;k+;i;strcat (chr pp) ;/*把该单词存放到数组ch中*/strcpy (pp, T, ) ;/* 清空数组 pp*/k-1;if (1=-1) bre

9、ak;/*如果处理完了一行,则退出循环*/while ( (xxl i 9 r &xx 1 iTz) & i=0)/*处理空格*/for(j=k;j=0;j一)pp j + UPPt j;pp0=xx1i;k+;strcat (ch, pp) ;/*把空格加到数组ch中*/strcpy (pp, nn ) ;/*清空数组pp*/k=0;if (i=-l) break;/*如果处理完了一行,则退出循环率/)strcpy (xxl, ch) ;/*把一处理的字符串仍按行重新存入字符串数组xx中*/)3、在文件IN3.DAT中仃200个正整数,且每个数均在1000至9999之间.函数readDat(

10、)的功能是读取这 200个数存放到数组aa中。请编制函数jsSort。,该函数的功能是:要求按每个数的后3位的大小进行降序排 列,将排序后的前10个数存入数组b中,如果数组b中出现后3位相等的数,则对这些数按原始4位数据进行 升序排列。最后调用函数writeDat。把结果bb输出到文件OUT3.DAT中-例如:处理前 9012 5099 6012 7025 8088处理后 5099 8088 7025 6012 9012注意:部分源程序已给出。请勿改动主函数main。、读函数代adDat。和写函数writeDat()的内容.试题程序:#include #include #include int

11、 aa200, bb10;void jsSort()main () (readDat();jsSort ();writeDat();readDat() (FILE *in;int i;in = fopen(nIN3.DATMr r);for(i = 0; i 200; i+) fscanf(in, d,”, &aai); fclose(in);)writeDat() (FILE *out;int i;out = fopen(MOUT3.DAT, wn);clrscr ();for (i = 0; i 10; i+) (printf (ni=%dr%dnnr i + 1, bbi);fprint

12、f(out, n%dn, bbi);fclose (out);答案案】void jsSort()int i,j,data;/*对数组中的4位数按后3位进行从大到小的排序*/for(i=0;i199;i+)for(j=i+l;j200;j+)if (aai%1000aaj)/*则要按原4位数的值进行从小到大的排序data=aai;aai=aaj;aaj=data; )for (i=0; i10; i+)/*将排序后的前10个数存入数组b中*/bbi=aai;4、函数RcadDatO的功能是实现从文件ENG4.IN中读取篇英文文章,存入到字符串数组xx中。请编 制函数encryptChar(),按

13、给定的替代关系对数组xx中的所有字符进行替代,结果仍存入数组xx对应的位置上, 最后调用函数WriteDat。把结果xx输出到文件PS4.DAT中.杵代关系:f(p)=p*ll mod256 (p是数组xx中某一个字符的ASCII值,f(p)是计算后新字符的ASCH值), 如果计算后f(p)的值小丁等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。注意:部分源程序已给出。原始数据文件存放的格式是:每行的宽度均小于80个字符.请勿改动主函数main。、读函数ReadDaK)和写函数WriteDat。的内容。 试题程序: include #include #include #

14、include unsigned char xx5080;int maxline = 0; /*文章的总行数*/ int ReadDat(void); void WriteDat(void);void encryptChar() (main ()(clrscr ();if(ReadDat()(printf (数据文件ENG4 .工N不能打开! n007M ); return;encryptChar();WriteDat();int ReadDat(void)FILE *fp;int i = 0;unsigned char *p;if(fp = fopen(ENG4.INnz “r) =NULL

15、) return 1; while (fgets(xxi, 80, fp) !=NULL) p = strchr(xxiz 1n *);if(p) *p = 0;i+;)maxline = i;fclose(fp);return 0;void WriteDat(void)(FILE *fp;int i;fp = fopen(PS4.DAT, nwn);for(i = 0; i maxline; i+) print f (%snn, xx i);fprintf(fp, %sn, xxi);!fclose(fp);答案 void encryptChar() (int i; char *pf; fo

16、r (i=0;i130 | | *pf*ll%256=32) /*如果计算后的值小于等于32 或大于130*/;/*则该字符不变*/else*pf=*pf*ll%256;/*否则将所对应的字符进行替代*/pf+;/*指针pf指向下一个字符*/5、函数ReadDaK)的功能是实现从文件IN5.DAT中读取一篇英文文章存入到字符串数组xx41。请编制 函数ConvertCharAO,该函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的下一个字母, 如果是字母z,则改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。把已处 理的字符串仍按行重新存入字符串数组xx中,最

17、后调用函数WriteDat。把结果xx输出到文件OUT5.DAT中。例如,原文:Adb.Bcdzaabck.LLhj结果:Aec.Bdeabbcdl.LLik原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。注意:部分源程序已给出。请勿改动主函数main。、读函数ReadDat。和写函数WriteDat。的内容。试题程序:#include #include #include char xx 50 80;int maxline = 0;/*文章的总行数*/int ReadDat(void);void WriteDat(void);void ConvertCharA(void

18、) (main() (clrscr ();if(ReadDat() (printf (数据文件IN5.DAT不能打开!n007”); return;!ConvertCharA();WriteDat ();)int ReadDat(void)(FILE *fp;int i =0;char *p;if(fp = fopen(IN5.DAT, wrw) = NULL) return 1; while(fgets(xxi, 80, fp) !=NULL) p = strchr(xxi, 1n);if(P) *P - 0;i+;maxline = i;fclose (fp);return 0;void

19、WriteDat(void)FILE *fp;int i;clrscr ();fp = fopen(nOUT5.DAT, nwn); for(i = 0; i maxline; i+) (printf (%snr xx i);fprintf(fp, sn”, xxi);?fclose(fp);答案void ConvertCharA(void)int i,j,str;for(i=0;imaxline; i+)(str=strlen(xxi ) ;/*求得当前行的字符串的长度*/for(j=0;j= * a & xxi j=1y1)xxi j+=l; /*如果该字符是从a到y的小写字母则改写为该字

20、母的下个字母*/6、已知在文件IN6.DAT中存有100个产品销售记录,每个产品销件记录由产品代码dm (字符型4位)、 产品名称me (字符型10位)、单价dj (整型)、数量si (整型)、金额je (长整型)几部分组成。其中:金 额=单价X数量。函数ReadDat。的功能是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat。, 其功能要求:按产品名称从小到大进行排列,若产品名称相同,则按金额从小到大进行排列,最终排列结 果仍存入结构数组sell中,最后调用函数WriteDat。把结果输出到文件OUT6.DAT中。注意:部分源程序已给出。请勿改动主函数main。、读函

21、数ReadDat。和写函数WriteDat。的内容。试题程序:#include#include#include#include#include#define 1MAX 100typedefstructchar dm5 ; /*产品代码 */ char me 11 ; /* 产品名称 */ int dj; /* 单价/int si; /* 数量 */ long je; /* 金额*/ PRO;PRO sell MAX;void ReadDat();void WriteDat();void SortDat () (main ()(memset(sell, 0, sizeof (sell);Read

22、Dat();SortDat();WriteDat();void ReadDat() (FILE *fp;char str80, ch11;int i;fp = fopen(IN6.DAT, r); for (i = 0; i 100; i+)fgets(str, 80, fp);memcpy(sei1i.dm, str, 4);memcpy(selli.me, str + 4, 10);memcpy(chz str + 14, 4); ch4 = 0; selli.dj = atoi(ch);memcpy(chz str +18, 5); ch5 = 0;selli.si = atoi(ch)

23、;selli.je = (long)selli.dj * sell i.si; fclose (fp);)void WriteDat() (FILE *fp;int i;fp = fopenLOUT6.DAT,w); for(i = 0; i 100; i+) fprintf(fp, ”s %s %4d %5d %101dnz selli.dm, selli.me, selli.djz selli.si, selli.je);)fclose (fp);答案 int i,j;PRO xy;for(i=0;i99;i+)for(j=i+l;j0) /*按产品名称从小到大进行排列 米/xy=sell

24、i;sell i=sellj;sellj=xy;else if (strcmp (sell i .me, sell j .me) =0)/*若产品名称相同*/if (sell i . jesell j . je)/*则按金额从小到大进行排列*/xy=selli;selli=sellj;sellj=xy; )7、已知IN7.DAT中存有200个4位数,并已调用读函数readDat。把这些数存入数组a中,请编制一函数 jsVal(),其功能是:依次从数组a中取出一个数,如果该4位数连续大于该4位数以后的5个数且该数是奇数, 则统计出满足此条件的数的个数cm,并把这些4位数按从小到大的顺序存入数组b

25、中,最后调用写函数 writeDatO把结果ent及数组b中符合条件的4位数输出到OUT7.DAT文件中。注意:部分源程序已给出。程序中已定义数组:a200, b200,已定义变量:ent。请勿改动主函数main。、读函数readDat。和写函数writeDat。的内容。 试题程序: #include #define MAX 200 int aMAX, bMAX, ent = 0; void writeDat ();void jsVal() (void readDat () (int i;FILE *fp;fp = fopen(wIN7.DATM, n r M);for(i = 0; i MA

26、X; i+) fscanf(fp, d”, &ai); close(fp);main () (int i;readDat();jsVal();printf (满足条件的数=%dn”,ent);for (i = 0; i ent; i + + ) printf (%d , b i);printf (nn);writeDat();void writeDat() (FILE *fp;int i;fp = fopen(OUT7.DATM, w);fprintf (fp, dn,ent);for (i = 0; i ent; i+) fprintf (fp, %dn, b i); fclose(fp);

27、答案 void jsVal() (int i,j,flag=0; int k;for(i=0;iMAX-5;i+) (for(j=i+l; jaj) flag=l;else flag=0;break; /*否则给标志变量flag赋值。并退出循环*/if (ai%2=0)/*如果该数是偶数,也给标志变量flag赋值0*/flag=0; )if (flag=l)/*将满足条件的数存入数组b中,并统计满足条件的数的个数*/bent=ai;cnt+; for(i=0; icnt-l;i+)/*利用选择法对b数组中的元素进行从小到大的排序*/for(j=i+l;jbj) k=bi;bi=bj;bj=k;

28、8、函数ReadDat。的功能是实现从文件IN8.DAT中读取篇英文文章存入到字符串数组xx中;请编制 函数SuCharJPO,该函数的功能是:以行为单位把字符串中的所有字符的ASCH值右移4位,然后把右移后 的字符的ASCII值再加上原字符的ASCII值,得到新的字符,并存入原字符串对应的位置上。最后把已处理 的字符串按行重新存入字符串数组xx中,并调用函数WriteDat。把结果xx输出到文件OUT8.DAT中。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。注意:部分源程序已给出。请勿改动主函数main。、读函数ReadDat。和写函数WriteDat。的内容。试

29、题程序:#include#include#ir)cludechar xx50 80;int maxline = 0; /*文章的总行数*/ int ReadDat(void);void WriteDat(void);void StrCharJR(void)(main () (clrscr ();if(ReadDat() (printf (数据文件IN8 .DAT不能打开! n007 return;StrCharJR();WriteDat();int ReadDat(void) (FILE *fp;int i= 0;char *p;return 1;if (fp = fopen(MIN8.DAT

30、M,wrw) =NULL) while (fgets(xxi, 80, fp) !=NULL) p = strchr(xxi, 1n1);if(p) *p = 0;i+;?maxline = i;fclose (fp);return 0;void WriteDat(void) (FILE *fp;int i;clrscr();fp = fopen(OUTS.DAT, nw);for(i = 0; i maxline; i+) printf (%snM, xx i);fprintf(fp, %snM, xxi);fclose (fp);int i,j,strl;for(i=0;imaxline;

31、i+)strl=strlen (xx i ) ;/*计算各行字符串的长度*/for(j=0;j4;/*字符的ASCII值右移4位再加上原字符的ASCII 值,得到新字符*/9、函数ReadDatO的功能是实现从文件ENG9.IN中读取篇英文文章,存入到字符串数组xx中。请编 制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行杵代,仍存入数组xx的对应的位置上, 最后调用函数WriteDat()把结果xx输出到文件PS9.DAT中。替代关系:f(p)=p*U mod256 (p是数组xx中某一个字符的ASCH值,f(p)是计算后新字符的ASCII值), 如果原字符的AS

32、CII值是偶数或计算后f(p)的值小于等了32,则该字符不变,否则将f(p)所对应的字符进行替 代。注意:部分源程序已给出,原始数据文件存放的格式是:每行的宽度均小于80个字符。请勿改动主:函数main。、读函数RcadDatO和写函数WriteDat。的内容。试题程序:#include #include #include #include unsigned char xx5080;int maxline = 0; /*文章的总行数*/int ReadDat(void);void WriteDat(void);void encryptChar ()main()(clrscr ();if(Rea

33、dDat()(printf (”数据文件ENG9.IN不能打开! n007”); return;encryptChar();WriteDat();int ReadDat(void)(FILE *fp;int i= 0;unsigned char *p;if (fp = fopen(MENG9.IN,r) =NULL) return 1;while(fgets(xxi, 80, fp) !=NULL)p = strchr(xxi, 1n1);if(p) *p = 0; i+;maxline = i;fclose(fp);return 0;)void WriteDat(void) (FILE *f

34、p;int i;fp = fopen(PS9.DAT, nwM);for(i = 0; i maxline; i+) (printf(%snM, xxi);fprintf(fp, %snn, xxi); fclose(fp);答案void encryptChar ()int i;char *pf;for(i=0;imaxline; i+)(pf=xxi;/*指针pf指向当前行的首地址*/while(*pf!=0)if (*pf%2=0 | | *pf*ll%256=32) ; /*如果原字符的ASCII值是偶数或 计算后的值小于等于32,则该字符 不变*/else*pf=*pf*ll%256;

35、 /*否则将所对应的字符进行替代*/pf+;/*指针pf指向下一个字符*/)10、编写函数jsVakieO,它的功能是求Fibonacci数列中大于1的最小的一个数,结果由函数返回,其中 Fibonacci数列F(n)的定义为:F(0)=0, F(l)=lF(n)=F(n-l)+F(n-2)最后调用函数writeDal。,把结果输出到文件OUT 10.DAT中。例如:当t= 1000时,函数值为1597。注意:部分源程序已给出。请勿改动主函数main。和写函数WriteDat。的内容。试题程序:#include int jsValue(int t) ()main () (int n;n=100

36、0;printf (n=%d, f=%dn, n, jsValue (n); writeDat ();)writeDat () (FILE *in, *out;int n, s;out = fopen(MOUT10.DAT, nw);s = jsValue(1000); printf(n%d, s); fprintf (out, %dn, s);fclose(out);答案int jsValue(int t) (int f1=0,f2=1,fn;fn=fl+f2;while (fn=t) f l = f2; f2=fn; fn=f l + f2; /*如果当前的Fibonacci数不大于t,

37、贝ij计算下个Fibonacci数*/return fn;/*返回Fibonacci数歹ij中大于t的最小的个数*/1k请编写函数countVakieO,它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和 的平方根s,并作为函数值返回,最后结果s输出到文件OUT11.DAT中。例如,若n为1000时,函数值应为s= 153.909064。注意:部分源程序已给出。请勿改动主函数main。和输入输出函数progRcad W rite()的内容。试题程序:#include#include# includedouble countvalue(int n)main()(clrscr();

38、printf (自然数之和的平方根=%fn”,countvalue (1000);progReadWrite(); -progReadWrite()(FILE *wf;int i, n;float s;wf = fopen(WOUT11.DAT, nwn);s = countvalue(1000);fprintf (wf z ”fn”,s);fclose(wf);答案 double countvalue(int n) ( double xy=0.0; int i;for(i=l;in;i+)if (i%3=0 & i%7=0) xy+=i; /*求n以内(不包括n)同时能被3与7整除的所 有自

39、然数之和*/xy=sqrt ( (double) xy) ;/*再对总和求平方根*/ return xy;12、卜.列程序的功能是:在3位整数(100至999)中寻找符合卜面条件的整数,并依次从小到大存入 数组b中:它既是完全平方数,又有两位数字相同,例如144, 676等。请编制函数intjsValue(intbbD)实现此功能,满足该条件的整数的个数通过所编制的函数返回。最后调用函数writeDat。把结果输出到文件OUT 12.DAT中。注意:部分源程序已给出。请勿改动生函数main。和写函数writeDat()的内容。试题程序:#include int jsValue(int bb)m

40、ain ()int b20, num;num = jsValue(b); writeDat(num, b); ) writeDat (int num, int b) FILE *out; int i; out = fopen(nOUT12.DAT, nw); fprintf (out, %dn, num); for(i = 0; i num; i+) fprintf(out, %dn, bi); fclose (out); )答案 int jsValue(int bb) ( int i,j,k=0; int hun,ten,data; for(i=100;i=999;i+) j=10; while (j*j=i)if (i=j*j)/*如果该数是完全平方数*/( hun=i/100;/*求该数的百位数字*/data=i-hun*100; /*得到后两位数*/ ten=data/10;/*求该数的十位数字*/data=data-ten*10;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁