计算机三级考试C语言上机试题.doc
全国计算机等级考试三级C语言程序设计上机考试习题集(版)【终极无错2.0版】考试吧E-第一个极力推崇人性化服务的综合考试网站服务面向较高学历人群,提供计算机类,外语类,学历类,资格类,四大类考试的全套考试信息服务.特色极力推崇人性化服务让您最便捷的在最短时间内得到对您最有价值考试信息坚持每日更新声明本资料由 狂风校园考试网 收集整理,转载请注明出自 服务面向校园,提供计算机等级考试,计算机软件水平考试,英语四六级,研究生考试 等校园相关考试信息。 特色提供历年试题,模拟试题,模拟盘,教程,专业课试题 下载等。资料丰富,更新快 考试交流论坛 推出全新综合考试网站考试吧(E)南开100题【终极无错2.0版】10月30日修订者李蓝(无忧网校)题目前带号的是在4月份上机考试中被考生们所确定了的上机题。题目前带号的是在9月份上机考试中被考生们所确定了的上机题。题目中所提示的“无忧id xx”指的是上半年版无忧模拟系统中的固定抽题序号题目中所提示的“捷成id xx”指的是上半年版捷成模拟系统中的固定抽题序号*题目1(无忧 id 14、id 27提供isP函数;捷成id 23题请编写一个函数jsValueint m,int k,int xx,该函数的功能是将大于整数m且紧靠m的k个素数存入数组xx传回。 最后调用函数writeDat读取10组数据,分别得出结果且把结果输出到文件out.dat中。 部分源程序存在文件prog1.c中。 例如若输入17 5 则应输出19,23,29,31,37。 请勿改动主函数main和写函数writeDat的内容。include conio.hinclude stdio.hvoid readwriteDat;int isPint m int i; fori2;im;i ifm i0return 0; return 1;void numint m,int k,int xx int s0; formm1;k0;m ifisPm xxsm; k;main int m,n,xx1000; clrscr; printfnPlease enter two integers; scanfdd, numm,n,xx; form0;mn;m printfd ,xxm; printfn; readwriteDat;void readwriteDat int m,n,xx1000, i; FILE *rf,*wf; rfin.dat,r; wfout.dat,w; fori0;i10;i fscanfrf,d d, numm,n,xx; form0;mn;mfprintfwf,d ,xxm; fprintfwf,n; fcloserf; fclosewf;无忧id 14题(无isP函数)include stdio.hvoid jsValueint m,int k,int xx int i,j,s0; forim1;k0;i forj2;ji;j ifij0 break; ifij xxsi; k; main int m,n,zz100; printfn请输入两个整数; scanfdd, jsValuem,n,zz; form0;mn;mprintfd ,zzm; printfn; writeDat;writeDat int m,n,zz100,i; FILE *in,*out; inin.dat,r; outout.dat,w; fori0;i10;i fscanfin,dd, jsValuem,n,zz; form0;mn;mfprintfout,d ,zzm; fprintfout,n; fclosein; fcloseout;另一解法void numint m,int k,int xxint n0,datam1;whilenk ifisPdata xxndata; data;*题目2(无忧 id 143 整数排序题 已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat把这些数存入数组a中,请考生编制一函数jsVal,其功能是如果四位数各位上的数字均是0或2或4或6或8,则统计出满足此条件的个数cnt,并把这些四位数按从大到小的顺序存入数组b中。最后main 函数调用写函数writeDat把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。 注意部分源程序存在文件prog1.c中。 程序中已定义数组a200,b200,已定义变量cnt 请勿改动数据文件IN.DAT中的任何数据、主函数main、读函数readDat和写函数writeDat的内容。include stdio.hdefine MAX 200int aMAX, bMAX, cnt 0 ;void jsVal int i,j,qw,bw,sw,gw; fori0;iMAX;i qwai/1000; bwai/10010; swai100/10; gwai10; ifqwqw20bw20sw20gw20 bcntai; fori0;icnt-1;i forji1;jcnt;j ifbibj qwbi; bibj; bjqw;void readDat int i ; FILE *fp ; fp in.dat, r ; fori 0 ; i MAX ; i fscanffp, d, fclosefp ;void main int i ; readDat ; jsVal ; printf满足条件的数dn, cnt ; fori 0 ; i cnt ; i printfd , bi ; printfn ; writeDat ;writeDat FILE *fp ; int i ; fp out.dat, w ; fprintffp, dn, cnt ; fori 0 ; i cnt ; i fprintffp, dn, bi ; fclosefp ;*题目3(无忧 id 133题;捷成id 59、99字符串位置倒置题函数ReadDat 实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOR ,其函数的功能是以行为单位依次把字符串中所有小写字母o左边的字符串内容移到该串的右边存放,然后把小写字母o删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组xx中。最后main函数调用函数WriteDat把结果xx输出到文件OUT5.DAT中。 例如原文n any field.Yu can create an index you have the correct record. 结果n any field. Yu can create an index rd. yu have the crrect rec 原始数据文件存放的格式是每行的宽度均小于80个字符,含标点符号和空格。 注意部分源程序存放在文件prog1.c中。 请勿改动主函数main、读数据函数ReadDat和输出数据函数WriteDat的内容。include stdio.hinclude string.hinclude conio.hchar xx5080 ;int maxline 0 ; /* 文章的总行数 */int ReadDatvoid ;void WriteDatvoid ;void StrORvoidint i,righto,j,s,k; char tem80; fori0;imaxline;i /*倒序循环*/ forjstrlenxxi-1;j0;j k0; memsettem,0,80; /*初始化字符串数组tem*/ ifxxijo /*如果当前字符为o,进入以下语句*/ rightoj; /*则将此字符中位置j的值赋给righto*/ forsrighto1;sstrlenxxi;s temkxxis; /*从righto的下一跳开始将其后所有的字符都存入到tem中*/ fors0;srighto;s /*从当前行首部开始到出现字符o的位置(righoto之前开始循环*/ ifxxiso temkxxis; /*将不是字符o的字符全存入到tem中*/ strcpyxxi,tem; /*将当前已处理的字符重新存入当前行xx*/ else continue; void main clrscr ; ifReadDat printf数据文件IN.DAT不能打开n007 ; return ; StrOR ; WriteDat ;int ReadDatvoid FILE *fp ; int i 0 ; char *p ; iffp IN.DAT, r NULL return 1 ; whilefgetsxxi, 80, fp NULL p strchrxxi, n ; ifp *p 0 ; i ; maxline i ; fclosefp ; return 0 ;void WriteDatvoid FILE *fp ; int i ; clrscr ; fp OUT5.DAT, w ; fori 0 ; i maxline ; i printfsn, xxi ; fprintffp, sn, xxi ; fclosefp ;解法二void StrORvoid int i; char a80,*p; fori0;imaxline;i pstrchrxxi,o; whilep memseta,0,80; memcpya,xxi,p-xxi; strcpyxxi,p1; strcatxxi,a; pstrchrxxi,o; 解法三void StrORvoid int i,j; char yy80,*p; fori0; imaxline;i forj0; jstrlenxxi; j ifxxijo p strcpyyy,p; /*将指针p所指向的字符串拷贝到字符串yy中去*/ strncatyy,xxi,j; /*将字符串xxi中前j个字符连接到yy中*/ strcpyxxi,yy; /*将字符串yy重新拷贝到字符串xxi中去*/ j0; /* 开始下一次的扫描。*/ 相关库函数解释char *strncatchar *dest, const char *src, size_t maxlen功能将字符串src中前maxlen个字符连接到dest中相关头文件string.hchar *strcpychar *dest, const char *src功能将字符串src拷贝到字符串dest中去相关头文件string.h*题目4(无忧id 24题 捷成id 9 字符串单词倒置题函数ReadDat实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数StrOL,其函数的功能是以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数writeDat把结果xx输出到文件OUT6.DAT中。 例如原文You He Me I am a student.结果Me He You student a am I 原始数据文件存放的格式是每行的宽度均小于80个字符,含标点符号和空格。 部分源程序存在文件prog1.c中。 请勿改动主函数main、读数据函数ReadDat和输出数据函数writeDat的内容。include stdio.hinclude string.hinclude conio.hinclude ctype.hchar xx5080;int maxline0;/*文章的总行数*/int ReadDatvoid;void WriteDatvoid;/*在无忧及捷成版模拟系统中都通过测试(输入文件句末有标点的在输出文件中句前有空格*/void StrOLvoid int i,j,k,s,m,strl; char str80; fori0;imaxline;i strlstrlenxxi; memsetstr,0,80; /*初始化这字符串数组str*/ sk0; forjstrl-1;j0;j /*从当前字符串尾部开始向前倒序循环,实现题意要求的倒排*/ ifisalphaxxij k; /*如果当前字符是字母az或AZ,则k加一*/ else form1;mk;m /*否则将长度为k的单词顺序存入到字符串数组str中,s值加1*/ strsxxijm; k0; /*将k值清0,以方便下一个单词的长度计数*/ ifisalphaxxij strs ; /*如果当前字符不是字母az或AZ,则以空格代之存入到字符串数组str中,s值加一*/ form1;mk;m /*此时的k值为当前字符串中第一个单词的长度,但在上一个for循环中没能存入到字符串数组str中,所以在这里将其存入到str中*/ strsxxijm; strs0; /*在当前行尾加0以标记此行的结束*/ strcpyxxi,str; /*将倒排好的当前字符串重新存回到当前行xx中*/ void main clrscr; ifReadDat printf数据文件IN.DAT不能打开n007; return; StrOL; WriteDat;int ReadDatvoid FILE *fp; int i0; char *p; iffpIN.DAT,rNULL return 1; whilefgetsxxi,80,fpNULL pstrchrxxi,n; ifp*p0; i;maxlinei;fclosefp;return 0;void WriteDatvoid FILE *fp; int i; clrscr; fpOUT6.DAT,w; fori0;imaxline;i printfsn,xxi; fprintffp,sn,xxi; fclosefp;捷成版模拟系统中的解法/*在无忧模拟系统中没通过测试(输入文件句末有标点的在输出文件中句前无空格*/void StrOLvoid int i, j ; char word21, yy80, zz80, *p ; fori 0 ; i maxline ; i p xxi ; j 0 ; memsetword, 0, 21 ; memsetyy, 0, 80 ; while*p ifisalpha*p wordj *p ; if*p continue ; strcpyzz, yy ; sprintfyy, s s, word, zz ; j 0 ; memsetword, 0, 21 ; while*p isalpha*p p ; strcpyxxi, yy ; 另一解法 /*在无忧及捷成版模拟系统中都通过测试(输入文件句末有标点的在输出文件中句前有空格*/void StrOLvoid int i,j,m;char str80;fori0;imaxline;i mstrlenxxi; memsetstr,0,80; forjm-1;j0;j ifisalphaxxij strcatstr,xxij1; strcatstr, ; xxij0; strcatstr,xxi; strcpyxxi,str; 实际上机考试时上面几种解法都可以采用。*题目5(无忧id 8整数排序题在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat读取这200个数存放到数组aa中。请编制函数jsSort,其函数的功能是要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组bb中,如果后三位的数值相等,则按原先的数值进行降序排列。最后调用函数WriteDat把结果bb输出到文件out.dat中。 例处理前 6012 5099 9012 7025 8088 处理后 9012 6012 7025 8088 5099 部分源程序存在文件prog1.c中。请勿改动主函数main、读数据函数ReadDat和输出数据函数WriteDat的内容。include stdio.hinclude string.hinclude conio.hint aa200,bb10;void jsSort int i,j,data; fori0;i199;i forji1;j200;j ifaai1000aaj1000aai1000aaj1000aaiaaj dataaai;aaiaaj;aajdata; fori0;i10;i bbiaai;void main readDat; jsSort; writeDat;readDat FILE *in; int i; inin.dat,r; fori0; i200; i fscanfin,d fclosein; writeDat FILE *out; int i; clrscr; outout.dat,w; fori0; i10; i printf d,bbi; fprintfout,dn,bbi; fcloseout;*题目6 正整数排序在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat读取这200个数存放到数组aa中。请编制函数jsSort,其函数的功能是要求按每个数的后三位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行升序排列。最后调用函数WriteDat把结果bb输出到文件out.dat中。例处理前 9012 5099 6012 7025 8088 处理后 5099 8088 7025 6012 9012 注意部分源程序已给出。请勿改动主函数main、读数据函数ReadDat和输出数据函数WriteDat的内容。 includestdio.hincludestring.hincludeconio.hint aa200,bb10;void jsSort int i,j,data; fori0;i199;i forji1;j200;j ifaai1000aaj1000aai1000aaj1000aaiaaj dataaai;aaiaaj;aajdata; fori0;i10;i bbiaai;void mainreadDat;jsSort;writeDat;systempause;readDatFILE *in;int i;inin.dat,r;fori0; i200; i fscanfin,dfclosein;writeDatFILE *out;int i;clrscr;outout.dat,w;fori0; i10; iprintfid,dn,i1,bbi;fprintfout,dn,bbi;fcloseout;*题目7(无忧id 15结构体操作题已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm字符型4位,产品名称mc字符型10位,单价dj整型,数量sl整型,金额je长整型五部分组成。其中金额单价*数量计算得出。函数ReadDat是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat,其功能要求按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat把结果输出到文件OUT6.DAT中。 部分源程序存在文件prog1.c中。请勿改动主函数main、读数据函数ReadDat和输出数据函数WriteDat的内容。include stdio.hinclude mem.hinclude string.hinclude conio.hinclude stdlib.hdefine MAX 100typedef struct char dm5; /*产品代码*/ char mc11; /*产品名称*/ int dj; /*单价*/ int sl; /*数量*/ long je; /*金额*/PRO;PRO sellMAX;void ReadDat;void WriteDat;void SortDatint i,j; PRO xy; fori0;i99;i forji1;j100;j ifstrcmpselli.dm,sellj.dm0strcmpselli.dm,sellj.dm0selli.jesellj.je xyselli; sell isellj; selljxy;void main memsetsell,0,sizeofsell; ReadDat; SortDat; WriteDat; void ReadDat FILE *fp; char str80,ch11; int i; fpIN.DAT,r; fori0;i100;i fgetsstr,80,fp; memcpyselli.dm,str,4; memcpyselli.mc,str4,10; memcpych,str14,4;ch40; selli.djatoich; memcpych,str18,5;ch50; selli.slatoich; selli.jelongselli.dj*selli.sl; fclosefp;void WriteDatvoid FILE *fp; int i; fpOUT6.DAT,w; fori0;i100;i printfs s 4d 5d 5dn, selli.dm,selli.mc,selli.dj,selli.sl,selli.je; fprintffp,s s 4d 5d 5dn, selli.dm,selli.mc,selli.dj,selli.sl,selli.je; fclosefp;*题目8(无忧id 83 字符替换题函数ReadDat实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar,按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat把结果xx输出到文件PS1.DAT中。替代关系fpp*11 mod 256(p是数组中某一个字符的ASCII值,fp是计算后新字符的ASCII值),如果计算后fp值小于等于32或大于130,则该字符不变,否则将fp所对应的字符进行替代。部分源程序存在文件prog1.c中。原始数据文件存放的格式是每行的宽度均小于80个字符。请勿改动主函数main、读数据函数ReadDat和输出数据函数WriteDat的内容。include stdio.hinclude string.hinclude conio.hinclude ctype.hunsigned char xx5080;int maxline0;/*文章的总行数*/int ReadDatvoid;void WriteDatvoid;void encryptChar int i,j; fori0;imaxline;i forj0;jstrlenxxi;j ifxxij*1125632xxij*11256130 continue; else xxijxxij*11256;void main clrscr; ifReadDat printf数据文件ENG.IN不能打开n007; return; enc
如果觉得《c语言三级考试题库 计算机三级考试C语言上机试题.doc》对你有帮助,请点赞、收藏,并留下你的观点哦!