《国家计算机三级考试C语言上机练习册.docx》由会员分享,可在线阅读,更多相关《国家计算机三级考试C语言上机练习册.docx(156页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、全国计算机等级考试(NCRE)为中国教育部考试中心主办,各地市承办的社会类计算 机认证考试。NCRE自1994年开考至2010年底,近2000万人获取证书。NCRE考试是我国范围内最权威的计算机认证考试,NCRE证书已经成为求职者计算机 水平的重要凭证,更成为政府机关、企事业单位招聘员工的重要依据之一。泽天计算机职业学校自2003年开设NCRE培训以来,至今已经成为牡丹江地区办学规 模最大、师资力量最强、通过比例最高的计算机专业培训机构。20n年3月份第33次全国计算机等级考试中,牡丹江地区共1629名二级考生(含泽 天283人),其中398人获取证书(含泽天146人),牡丹江地区二级通过率为
2、24.43%,泽 天二级通过率为51.59%,泽天考生三级过级率高于牡丹江地区三级考生过级率27.16个百 分点。2011年3月份第33次全国计算机等级考试中,牡丹江地区共2170名三级考生(含泽 天803人),其中897人获取证书(含泽天509人),牡丹江地区三级过级率为41.34%,泽 天通过率为63.39%,泽天考生三级过级率高于牡丹江地区三级考生过级率22.05个百分点。本书针对“国家三级网络技术”考生复习上机部分而编写的,书中包含考试题库中所有 考试真题,所有习题均附有参考答案。编者2011年6月第001套1第026套38第002套2第027套40第003套3第028套41第004套
3、 4第029套43第005套 5第030套44第006套7第031套46第007套9第032套47第008套11第033套50第009套12第034套51第010套14第035套53第011套16第036套55第012套18第037套57第013套19第038套58第014套21第039套60第015套 22第040套 62第016套24第041套63第017套25第042套64第018套26第043套65第019套27第044套66第020套29第045套68第021套 30第046套 70第022套32第047套72第023套33第048套73第024套35第049套75第025套36第0
4、50套77第051套78第052套79第053套80第054套82第055套84第056套85第057套87第058套89第059套90第060套92第061套94第062套96第063套98第064套99第 065 套101第 066 套103第 067 套104第 068 套106第 069 套107第 070 套109第 071 套111第 072 套112第 073 套114第 074 套116第 075 套117第 076 套119第 077 套120第 078 套121第 079 套123第 080 套124第 081 套126第 082 套128第 083 套129第 084 套
5、131第 085 套133第 086 套135第 087 套137第 088 套139第 089 套140第 090 套142第 091 套143第 092 套144第 093 套146第 094 套147第 095 套149第 096 套151第 097 套152第 098 套154第 099 套156第 100 套157第1套【试题要求】程序progl.c的功能是:计算500-800区间内素数的个数ent,并按所求素数的值从大到小的顺序, 计算其间隔减、加之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数的值sum。 请编写countValue()实现程序的要求,最后mai
6、n。函数调用函数writeDAT()把结果ent和sum,输出 到文件out.dat中。注意:部分源程序存放在文件progl.c中请勿改动主函数main ()和输出数据函数writeDAT的内容【源程序】#include int ent, sum;void writeDATO;void countValueOvoid mainOent = sum = 0 ;countValueO ;printf(素数的个数=%(11, ent);printf(按要求计算的值=%dn,sum);writeDATO ;void writeDATOFILE *fp ;fp = fopen(c:wexam359900
7、01out.dat”,w);fprintf(fp, %dn%dn”, ent, sum);fclose(fp);)【标准答案】void countValueOint n,i;for(n=800;n=500;n-)for(i=2;in-l)cnt+ + ;if(cnt%2!=0)sum=sum+ n;elsesum=sum-n; 第2套【试题要求】程序progl.c的功能是:计算出自然数six和nine满足条件six+ six+ six=nine+ nine的个数ent, 以及满足条件所有的six与nine的和sum。请编写函数countValue()实现程序的要求,最后main()函 数调用函
8、数writeDAT()把结果ent和sum,输出到文件out.dat中。其中的s,Lx,n,e各代表一个十进制数字,允许代表的数字相同,但s和n不能为0。例如: 944+944+ 944=1416+ 1416注意:部分源程序存放在文件progl.c中请勿改动主函数main ()和输出数据函数writeDAT的内容【源程序】#include int ent, sum ;void writeDATO ;void countValueOvoid mainOent = sum = 0 ;countValueO ;printf(满足条件的个数=%dn, ent);printf(满足条件所有的SIX与NI
9、NE的和二%dn,sum);writeDATO ;void writeDATOFILE *fp ;fp = fopen(c:wexam35990001out.dat,w);fprintf(fp, M%dn%dn ent, sum);fclose(fp);【标准答案】void countValueOint six,nine,int m,n,p,q;for(six=100;six=1000&nine=9999&3*six=2*nine) sum=sum+ six+ nine;cnt+ + ; 第3套【试题要求】请编写函数void countValue(int *a,int *n),它的功能是:求出
10、1到1000之间能被7或11整除但不 能同时被7和11整除的所有整数,其结果按从小到大的顺序放在数组a中,并通过形式参数n传递这些 数的个数。注意:部分源程序存放在文件progl.c中请勿改动主函数main ()和输出数据函数writeDAT的内容【源程序】#include #include void writeDATO ;void countValue(int *a, int *n)main()int aa1000, n, k ;countValue( aa, &n );for( k = 0;kn;k+ )if(k + 1) % 10 = 0) printf(M%5dnM, aak);els
11、e printf(H%5dM, aak);writeDATO ;)void writeDATOint aa1000, n, k ;FILE *fp ;fp = fopen(c:wexam35990001out.dat, w);countValue(aa, &n);for ( k = 0 ; k n ; k+ + )if(k + 1) % 10 = 0) fprintf(fp, M%5dnM, aak);else fprintf(fp, %5d, aak);fclose(fp);【标准答案】void countValue(int *a, int *n) int m,cnt=0;for(m=l;m
12、1000;m+ + )if(m%7=0l I m%l l=0)&m%77!=0) (acnt=m;cnt+ + ; )*n=cnt;第4套【试题要求】已知数据文件in.dat中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请 编制一函数jsValue(),其功能是:求出千位数上的数加百位数上数等于十位数上的数加个位数上的数的个 数ent,再把所有有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从大到小的顺序进 行排序。最后main()函数调用写函数writeDat()把数组b中的数输出到文件out.dat中.例如:7153, 7+1=5+3,则该数满足条
13、件存放数组b中,且个数cnt=cnt+L8129, 8+1!=2+9,则该数不满足条件忽略。注意:部分源程序存在文件progl.c文件中。程序中已定义数组:a300,b300,已定义变量:ent请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readDat()和写函数writeDat() 的内容。【试题要求】#include int a300, b300, cnt=0 ;void readDatO;void writeDatO;jsValueOmainOint i ireadDatO ;jsValueO ;writeDatO ;printf(Hcnt=%dnH, ent);
14、for(i = 0 ; i ent ; i+ + ) printf(nb%d=%dn, i, bi);)void readDatOFILE *fp ;int i ;fp = fopen(c:wexam35990001in.dat,r);ford = 0 ; i 300 ; i+ + ) fscanf(fp, u%d,H, &ai); fclose(fp);void writeDatOFILE *fp ;int i ;fp = fopen(c:wexam35990001out.dat,w);fprintf(fp, M%dnM, ent);for(i = 0 ; i ent ; i+ +) fpr
15、intf(fp, H%dn, bi); fclose(fp);【标准答案】 jsValueOint i,m,n,p,q;for(i=0;i300;i+ + )m=ai/1000; n=ai%1000/100; p=ai%100/10; q=ai%10;if(m+ n=p+ q)bcnt=ai;cnt+ + ;for(i=0;icnt-l;i+ +)for(m=0;mcnt-l-i;m+ +)if(bm0,则该数满足条件,参加计算平均值pjzl,且个数cnt=cnt+l.8129,9-8-1-2X),则该数不满足条件,参加计算平均值pjz2.注意:部分源程序存在文件PROGLC文件中。程序中已定
16、义数组:a300,已定义变量:cnt,pjzl,pjz2请勿改动数据文件IN.DAT中的任何数据,主函数main。,读函数readDatO和写函数WriteDatO的 内容。【源程序】#include int a300, cnt=O ;double pjzl=O.O, pjz2=0.0 ;void readDatO;void writeDatO;jsValueOmainOreadDatO ;jsValueO ;writeDatO ;printf(ncnt=%dn 满足条件的平均值 pzjl=%7.21fn 不满足条件的平均值 pzj2=%7.21fn”,cnt,pjzl,pjz2); )voi
17、d readDatOFILE *fp ;int i ;fp = fopen(,cAwexam35990001in.datn,rn);for(i = 0 ; i 300 ; i+ + ) fscanf(fp, &ai);fclose(fp);void writeDatOFILE *fp ;fp = fopen(c:wexam35990001out.dat,w);fprintfCfp, M%dn%7.21fn%7.21fnM, ent, pjzl, pjz2);fclose(fp);【标准答案】 jsvalueO int i,m,n,p,q;double suml=0,sum2=0;for(i=0
18、;i0) (suml=suml+ ai;cnt+ + ;elsesum2=sum2+ ai;pjzl=suml/cnt;pjz2=sum2/(300-cnt);第6套【试题要求】函数ReadDatO实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数 SortCharAO,其函数的功能是:以行为单位对字符按从小到大的顺序进行排序,排序后的结果仍按行重新 存入字符串数组xx中。最后main。函数调用函数WriteDatO把结果xx输出到文件OUT.DAT中.例:原文:dAe.BfC.CCbbAA结果:,.ABCdefAACCbb原始数据文件存放的格式是:每行的宽度均小于80
19、个字符,含标点符号和空格。注意:部分源程序存放在PORG1.C中.请勿改动主函数main。,读数据函数ReadDatO和输出数据函数WriteDatO的内容.【源程序】#include #include char xx50 80;unsigned int maxline = 0 ; /* 文章的总行数*/int ReadDat(void);void WriteDat(void);void SortCharA(void)void mainOif(ReadDatO) printf(数据文件IN.DAT不能打开!n007”);return ;SortCharAO ;WriteDatO ;int Re
20、adDat(void)FILE *fp ;int i = 0 ;char *p ;if(fp = fopen(HcAwexam35990001in.datH, nrM) = NULL) return 1 ; while(fgets(xxi, 80, fp) != NULL) p = strchr(xxi, Xn1);if(p) *p = 0 ;i+ + ;maxline = i ;fclose(fp);return 0 ;void WriteDat(void)FILE *fp ;unsigned int i ;fp = fopen(c:wexam35990001out.dat, w);ford
21、 = 0 ; i maxline ; i+ +) printf(M%snM, xxi);fprintf(fp, M%snn, xxi);)fclose(fp);【标准答案】void SortCharA(void)unsigned int m,i,j,str;char t;for(m=0;mmaxline;m+ +)str=strlen(xx m );for(i=0;istr-l;i+ +)for(j=0;jxxmj+ 1) t=xxm j;xxm j=xxm j+ 1;xxmj+ l=t; )第7套【试题要求】函数ReadDatO实现从文件1N.DAT中读取一篇英文文章存入到字符串数组xx中,
22、请编制函数 SorORO,其函数的功能是:以该文章中的行为单位依次扫描一行字符串中的小写字母0,每次将小写字母 。的左右字符串部分作交叉换位,即左边字符串移到小写字母。的右边,而原先右边的则反之,并把小写 字母o删除,依次直至这一行中的小写字母o处理完,之后把已处理的字符串仍按行重新存入字符串数组 xx中.最后main。函数调用函数WriteDatO把结果xx输出到文件OUT.DAT中.例如原文:you have the correct record.第一个 o : u have the correct record.y第二个 o :rrect record.yu have the c第三个
23、o : rd.yu have the crrect rec提示:对于每一行字符串数组处理有如下一种递归调用算法可供参考:查找字符串中首个小写字母。的位置;没有找到。,则结束递归调用;找到七工则按题意对 字符串进行处理,形成新的字符串,然后返回,继续进行递归调用.原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.注意:部分源程序存放在PROG1.C中.请勿改动主函数main。,读数据函数ReadDatO和输出数据函数WriteDatO的内容。【源程序】#include #include char xx50 80;int maxline = 0 ; /*文章的总行数*/int
24、 ReadDat(void);void WriteDat(void);void StrOR(void)void mainOif(ReadDatO) printf(数据文件IN.DAT不能打开!n007); return ;)StrORO ;WriteDatO ;)int ReadDat(void)FILE *fp ;int i = 0 ;char *p ;if(fp = fopen(Mc*wexam35990001in.datn, nrM) = NULL) return 1 ; while(fgets(xxi, 80, fp) != NULL) p = strchr(xxi, Xn);if(p
25、) *p = 0 ;i+ ;)maxline = i ;fclose(fp);return 0 ;void WriteDat(void)FILE *fp ;int i ;fp = fopen(,cAwexam35990001out.datH, uwH);ford = 0 ; i maxline ; i+ +) printf(H%snM, xxi);fprintf(fp, ,%snM, xxi);fclose(fp);)【标准答案】void StrOR(void)int m,i,j,k,str;char t80;for(m=0;mmaxlinelm+ +)for(;) str=strlen(xx
26、m);for(i=0;istr;i+ +)if(xxm i=*o) break;if(istr) k=0;for(j=i+ l;jstr;j+ +)tk=xxmj;k+ ;for(j=0;ji;j+ +) tk=xxmj; k+ + ;)tk=O;strcpy(xxm,t); elsebreak; )第8套【试题要求】函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到无符号字符串数组xx中;请编制函 数ChA(),其函数的功能是:以行为单位把字符串中的第一个字符的ASCII值加第二个字符的ASCII值, 得到第一个新的值,存入数组单元xxi 0中(其中:i是文章中的某行).第
27、二个字符的ASCH值加第 三个字符的ASCII值,得到第二个新的值,存入数组单元xxi 1中.以此类推一直处理到最后第二 个字符,最后一个字符的ASCH值加原第一个字符的ASCII值,得到最后一个新的值,存放在原字符串 对应的位置上,之后把已处理的字符串逆转后仍按行重新存入无符号字符串数组xx中.最后main()函 数调用函数writeDat ()把结果xx输出到OUT.DAT文件中。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。并也按它的ASCH 值作以上处理。注意:部分源程序存放在PORG1.C中。请勿改动主函数main。,读数据函数ReadDatO和输出数据函数
28、WriteDatO的内容.【源程序】#include #include unsigned char xx50 80;int maxline = 0 ; /*文章的总行数*/int ReadDat(void);void WriteDat(void);void ChA(void)void mainOif(ReadDatO) printf(数据文件IN.DAT不能打开!n007);return ;ChAO ;WriteDatO ;)int ReadDat(void)FILE *fp ;int i = 0 ;char *p ;if(fp = fopen(,cwexam35990001in.datH,
29、nrH) = NULL) return 1 ; while(fgets(xxi, 80, fp) != NULL) p = strchr(xxi, An1);if(p) *p = 0 ;i+ + ;)maxline = i ;fclose(fp);return 0 ;)void WriteDat(void)FILE *fp ;int i Jfp = fopen(,cwexam35990001out.datH, uwn);for(i = 0 ; i maxline ; i+ +) printf(M%snM, xxi);fprintf(fp, M%snM, xxi);)fclose(fp);)【标
30、准答案】void ChA(void)int i,j,k,str;unsigned char t;for(i=0;imaxline;i+ +)str=strlen(xxi);t=xxi 0;for(j=0;jstr- 1 ;j+ +)xxij=xxi j+ xxij+ 1;xxi str-1 =xxi str-l+1;for(j=0,k=str-1 ;jk;j+ + ,k)t=xxij;xxij=xxik;xxik=t; 第9套【试题要求】已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录有产品代码dm(字符型4位), 产品名称me (字符型10位),单价dj (整形),数量si
31、(整形),金额je(长整形)五部分组成.其中:金额= 单价*数量计算得出.函数ReadDat。读取这100个销售记录并存入结构数据sell中.请编制函数sortDat (),其功能要求:按金额从大到小进行排列,若金额相等,则按照产品代码从小到大进行排列,最终排列 结果仍存入数组sell中。最后main ()函数调用函数WriteDat。把结果输出到文件0UT.DAT中.提示:若中间变量为PRO temp,则可以直接使用结构赋值语句进行解题。例如:selli=temp;注意:部分源程序存放在PORGLC中。请勿改动主函数main。,读数据函数ReadDatO和输出数据函数WriteDatO的内容
32、.【源程序】#include #include #include #define MAX 100typedef struct char dm5 ; /* 产品代码 */char mcll ; /* 产品名称 */int dj ;/* 单价/int si ;/* 数量 */long je ;/* 金额 */ PRO ;PRO sell MAX;void ReadDatO ;void WriteDatO ;void SortDatOvoid mainOmemset(sell, 0, sizeof(sell);ReadDatO ;SortDatO ;WriteDatO ;void ReadDatOF
33、ILE *fp ;char str80, chll;int i ;fp = fopen(c:wexam35990001 in.dat, r);for(i = 0 ; i 100 ; i+ +) fgets(str, 80, fp);memcpy(sell i.dm, str, 4);memcpy(sell i.me, str + 4, 10);memcpy(ch, str + 14, 4) ; ch4 = 0 ;selli.dj = atoi(ch);memcpy(ch, str + 18, 5) ; ch5 = 0 ;selli.sl = atoi(ch);selli.je = (long)
34、selli.dj * selli.sl ;)fclose(fp);)void WriteDatOFILE *fp ;int i ;fp = fopen(,cAwexam35990001out.datn, nwn);ford = 0 ; i 100 ; i+ +) fprintKfp, H%s %s %4d %5d %101dnM, selli.dm, selli.me, selli.dj, sell.si, selli.je);)fclose(fp);【标准答案】void SortDatOint ij;PRO t;for(i=0;i99;i+ +)for(j=0;j99-i;j+ + )if(
35、sellj.je0)t=sellj;sellj=sellj+ 1;sellj+ l=t;)第10套【试题要求】已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录有产品代码dm(字符型4位), 产品名称me (字符型10位),单价dj (整形),数量si(整形),金额je(长整形)五部分组成。其中:金额= 单价*数量计算得出。函数ReadDatO读取这100个销售记录并存入结构数据sell中,请编制函数sortDat (),其功能要求:按产品名称从大到小进行排列,若产品名称相同,则按照金额从小到大进行排列,最终 排列结果仍存入数组sell中。最后main ()函数调用函数Writ
36、eDatO把结果输出到文件0UT.DAT中。提示:若中间变量为PRO temp,则可以直接使用结构赋值语句进行解题;产品名称比较请用函数 stremp进行解题。例如:selli = temp;注意:部分源程序存放在PORGLC中。请勿改动主函数main。,读数据函数ReadDatO和输出数据函数WriteDatO的内容。【源程序】#include #include #include #define MAX 100typedef struct char dm5 ; /* 产品代码 */char me11 ;/* 产品名称 */int dj ;/* 单价 */int si ;/* 数量 */lon
37、g je ;/* 金额 */) PRO ;PRO sellMAX;void ReadDatO ;void WriteDatO ; void SortDatOvoid mainOmemset(sell, 0, sizeof(sell);ReadDatO ;SortDatO ;WriteDatO ;)void ReadDatOFILE *fp ;char str80, chll;int i ;fp = fopen(McAwexam35990001in.datn, urM);for(i = 0 ; i 100 ; i+ + ) fgets(str, 80, fp);memcpy(sell i.dm,
38、 str, 4);memcpy(sell i.me, str + 4, 10);memcpy(ch, str + 14, 4) ; ch4 = 0 ;selli.dj = atoi(ch);memcpy(ch, str + 18, 5) ; ch5 = 0 ;selli.sl = atoi(ch);selli.je = (long)selli.dj * selli.sl ;)fclose(fp);void WriteDatOFILE *fp ;int i ;fp = fopen(McAwexam35990001out.datn, w1);ford = 0 ; i 100 ; i+ +) fpr
39、intf(fp, M%s %s %4d %5d %101dn, selli.dm, selli.me, selli.dj, selli.sl, selli.je);)fclose(fp);)【标准答案】void SortDatOint i,j;PRO t;for(i=0;i99;i+ +)for(j=0;j99-i;j+ + )if(strcmp(sell j .me,sell j+ l.mc)sellj+ l.je) t=sellj;sell j=sellj+ 1;sellj+ l=t;第11套【试题要求】函数ReadDatO实现从文件IN.DAT中读取一篇英文文章,存入到无符号字符串数组xx中;请编制 函数encryptCharO,按给定的替代关系对数组xx中的所有字符进行替代,其替代值仍存入数组xx所对 应的位置上,最后调用函数WriteDatO把结果xx输出到OUT.DAT中。替代关系:f(p)=p*ll mod 256,mod为取余运算,p是数组xx中某一个字符的ASCH值,f(p)是计 算后的无符号整形值(注意:中间变量定义成整形变量),如果计算后f(p)的值小于等于32或大于130, 则该字符不变,否则用f(p)替代所对应的字符。注意:部分源程序存放在P
限制150内