NCRE4全国计算机等级考试四级上机真题.docx
- 文档编号:30550107
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:191
- 大小:60.81KB
NCRE4全国计算机等级考试四级上机真题.docx
《NCRE4全国计算机等级考试四级上机真题.docx》由会员分享,可在线阅读,更多相关《NCRE4全国计算机等级考试四级上机真题.docx(191页珍藏版)》请在冰豆网上搜索。
NCRE4全国计算机等级考试四级上机真题
全国计算机等级考试
2004年下半年版捷成模拟系统四级上机题全集
(带捷成模拟系统原解法及优化解法)
2004年6月20日
编者:
凌云志
注:
ID1:
表示的是在捷成模拟系统中固定抽题的第一个题
无忧ID16:
表示的是在无忧模拟系统中固定抽题的第十六题。
其它依此类推。
ID1(无忧ID16)
函数ReadDat()实现从文件ENG.IN中读取一篇英文文章存入到字符串数组xx中;请编制函数DelWord()分别按行删除空格、标点符号以及10个不区分大小写的英文单词(you,for,your,on,no,if,the,in,to,all),余下的单词按顺序重新存入数组xx中,最后调用函数WriteDat()把结果xx输出到文件PS6.OUT中。
例如:
原文:
Youareastudent.
结果:
areastudent
原始数据文件存放的格式是:
每行的宽度均小于80个字符,含标点符号和空格。
注意:
部分源程序存放在PROG1.C中。
文章每行中的单词与单词之间用空格或其它标点符号分隔,每单词均小于20个字符。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
#include
#include
#include
#include
charWORD[10][10]={"you","for","your","on","no","if","the","in","to","all"};
charxx[50][80];
intmaxline=0;/*文章的总行数*/
intReadDat(void);
voidWriteDat(void);
voidDelWord(void)
{
inti,j,k,tag;
charword[21],*p;
charstr[80];
for(i=0;i memset(str,0,80); p=xx[i]; j=0; memset(word,0,21); while(*p){ if(isalpha(*p)){ word[j++]=*p++; if(*p)continue; } tag=1; for(k=0;k<10&&tag;k++) if(stricmp(word,WORD[k])==0)tag=0; if(tag)strcat(str,word); j=0; memset(word,0,21); while(*p&&(! isalpha(*p)))p++; } strcpy(xx[i],str); } } voidmain() { clrscr(); if(ReadDat()){ printf("数据文件ENG.IN不能打开! \n\007"); return; } DelWord(); WriteDat(); } intReadDat(void) { FILE*fp; inti=0; char*p; if((fp=fopen("eng.in","r"))==NULL)return1; while(fgets(xx[i],80,fp)! =NULL){ p=strchr(xx[i],'\n'); if(p)xx[i][p-xx[i]]=0; i++; } maxline=i; fclose(fp); return0; } voidWriteDat(void) { FILE*fp; inti; fp=fopen("ps6.out","w"); for(i=0;i printf("%s\n",xx[i]); fprintf(fp,"%s\n",xx[i]); } fclose(fp); } 另一种解法: voidDelWord(void) {inti,j,k,tag; char*p,word[20],str[80]; for(i=0;i {memset(word,0,20); memset(str,0,80); k=0; p=xx[i]; while(*p) {while(isalpha(*p))word[k++]=*p++; if(strlen(word))tag=1; for(j=0;tag&&j<10;j++) if(stricmp(WORD[j],word)==0)tag=0; if(tag)strcat(str,word); memset(word,0,20); k=0; while(! isalpha(*p)&&*p)p++; } strcpy(xx[i],str); } } ******************************************************************************************* ID2(无忧ID47) 已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是: 从数组a的头开始,依次每20个数的平均值组成一个新数,这样可以获得10个新数并存入数组b中,接着把数组b中的数按从小到大的顺序重新存入数组b中。 最后main()函数调用写函数writeDat()把结果b输出到OUT.DAT文件中。 注意: 部分源程序存在文件PROG1.C文件中。 程序中已定义: a[200]、b[10] 请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。 #include #defineMAX200 inta[MAX]; doubleb[10]; voidjsVal() { inti,j=0,cnt=0; doubleval=0.0; for(i=0;i cnt++; val+=a[i]; if(cnt%20==0){b[j++]=val/20;val=0;} } for(i=0;i<10;i++) for(j=i+1;j<10;j++) if(b[i]>b[j]){val=b[i];b[i]=b[j];b[j]=val;} } voidreadDat() { inti; FILE*fp; fp=fopen("in.dat","r"); for(i=0;i fclose(fp); } voidmain() { inti; readDat(); jsVal(); for(i=0;i<10;i++) printf("b[%d]=%7.2lf\n",i,b[i]); writeDat(); } writeDat() { FILE*fp; inti; fp=fopen("out.dat","w"); for(i=0;i<10;i++)fprintf(fp,"%7.2lf\n",b[i]); fclose(fp); } 或者采用改进的解法: voidjsVal() {inti,j; doubleaver; for(i=0;i<10;i++) {aver=0.0; for(j=i*20;j<(i+1)*20;j++)/*依次每20个数的平均值组成一个新数*/ aver+=a[j]; aver/=20;/*计算平均值*/ b[i]=aver;/*将此新数存入数组b中*/ } for(i=0;i<9;i++)/*对数组b中的数从小到大进行排序*/ for(j=i+1;j<10;j++) if(b[i]>b[j]){aver=b[i];b[i]=b[j];b[j]=aver;} } ID3 已知数据文件IN.DAT中存有10组每组20个四位数的数据,每个数据间用空格分隔,并已调用读函数readDat()把这10组数据存入数组aa中(其中,aa定义为intaa[10][20]),请考生编制一函数jsVal(),其功能是: 首先将每组20个数按从小到大的顺序进行排序,排序后的结果仍存入数组aa中,接着去掉每组中最中间的 两个数以及最大的两个数,然后计算其余16个数的算术平均值,并将计算结果按组的顺序依次存入数组bb中(其中,数组bb定义为floatbb[10]),最后调用输出函数writeDat()把结果bb输出到文 件OUT.DAT中。 注意: 部分源程序存在文件PROG1.C文件中。 程序中已定义全局变量: aa[10][20]、bb[10] 请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。 #include intaa[10][20]; floatbb[10]; voidjsVal() { inti,j,k,val; for(i=0;i<10;i++) for(j=0;j<20;j++) for(k=j+1;k<20;k++) if(aa[i][j]>aa[i][k]){val=aa[i][j];aa[i][j]=aa[i][k];aa[i][k]=val;} for(i=0;i<10;i++){ for(j=0;j<9;j++) bb[i]+=aa[i][j]; for(j=11;j<18;j++) bb[i]+=aa[i][j]; bb[i]/=16.0; } } /*以下函数均无需修改*/ voidreadDat() { inti,j; FILE*fp; fp=fopen("D: \\EXAM\\40010001\\in.dat","r"); for(i=0;i<10;i++) for(j=0;j<20;j++)fscanf(fp,"%d",&aa[i][j]); fclose(fp); } voidmain() { inti; readDat();/*读数据*/ jsVal();/*按要求计算*/ for(i=0;i<10;i++)/*从屏幕输出结果*/ printf("%6.2lf\n",bb[i]); writeDat();/*输出结果到文件*/ } writeDat() { FILE*fp; inti; fp=fopen("D: \\EXAM\\40010001\\out.dat","w"); for(i=0;i<10;i++) fprintf(fp,"%6.2lf\n",bb[i]); fclose(fp); } ******************************************************************************************* ID4(同ID24,无忧ID11) 函数ReadDat()实现从文件ENG.IN中读取一篇英文文章存入到字符串数组xx中;请编制函数ComWord()分别计算出10个不区分大小写的英文单词(you,for,your,on,no,if,the,in,to,all)的频数并依次存入整型数组yy[0]至yy[9]中,最后调用函数WriteDat()把结果yy输出到文件PS1.OUT中。 原始数据文件存放的格式是: 每行的宽度均小于80个字符,含标点符号和空格。 注意: 部分源程序存放在PROG1.C中。 文章每行中的单词与单词之间用空格或其它标点符号分隔,每单词均小于20个字符。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include #include #include #include charWORD[10][10]={"you","for","your","on","no","if","the","in","to","all"}; charxx[50][80]; intyy[10]; intmaxline=0;/*文章的总行数*/ intReadDat(void); voidWriteDat(void); voidComWord(void) { inti,j,k; charword[21],*p; for(i=0;i p=xx[i]; j=0; memset(word,0,21); while(*p){ if(isalpha(*p)){ word[j++]=*p++; if(*p)continue; } for(k=0;k<10;k++) if(stricmp(word,WORD[k])==0){ yy[k]++; break; } j=0; memset(word,0,21); while(*p&&(! isalpha(*p)))p++; } } } voidmain() { inti; clrscr(); for(i=0;i<10;i++)yy[i]=0; if(ReadDat()){ printf("数据文件ENG.IN不能打开! \n\007"); return; } ComWord(); WriteDat(); } intReadDat(void) { FILE*fp; inti=0; char*p; if((fp=fopen("eng.in","r"))==NULL)return1; while(fgets(xx[i],80,fp)! =NULL){ p=strchr(xx[i],'\n'); if(p)xx[i][p-xx[i]]=0; i++; } maxline=i; fclose(fp); return0; } voidWriteDat(void) { FILE*fp; inti; fp=fopen("ps1.out","w"); for(i=0;i<10;i++){ printf("%s=%d\n",strupr(WORD[i]),yy[i]); fprintf(fp,"%d\n",yy[i]); } fclose(fp); } 另一种解法: voidComWord(void) {inti,j,k; char*p,word[20]; for(i=0;i {memset(word,0,20); k=0; p=xx[i]; while(*p) {while(isalpha(*p))word[k++]=*p++; if(strlen(word))strlwr(word); for(j=0;j<10;j++) if(strcmp(WORD[j],word)==0)yy[j]++; memset(word,0,20); k=0; while(! isalpha(*p)&&*p)p++; } } } ******************************************************************************************* ID5 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数ConvertCharA(),其函数的功能是: 以行为单位把字符串中的所有小写字母改写成该字母的下一个字母,如果是字母z,则改写成字母a。 大写字母仍为大写字母,小写字母仍为小写字母,其它字符不变。 把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件 OUT3.DAT中。 例: 原文: Adb.Bcdza abck.LLhj 结果: Aec.Bdeab bcdl.LLik 原始数据文件存放的格式是: 每行的宽度均小于80个字符,含标点符号和空格。 注意: 部分源程序存放在PROG1.C中。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include #include #include charxx[50][80]; intmaxline=0;/*文章的总行数*/ intReadDat(void); voidWriteDat(void); voidConvertCharA(void) { inti,j; for(i=0;i for(j=0;j if(xx[i][j]=='z')xx[i][j]='a'; elseif(xx[i][j]>='a'&&xx[i][j]<'z')xx[i][j]++; } } voidmain() { clrscr(); if(ReadDat()){ printf("数据文件IN.DAT不能打开! \n\007"); return; } ConvertCharA(); WriteDat(); } intReadDat(void) { FILE*fp; inti=0; char*p; if((fp=fopen("IN.DAT","r"))==NULL)return1; while(fgets(xx[i],80,fp)! =NULL){ p=strchr(xx[i],'\n'); if(p)*p=0; i++; } maxline=i; fclose(fp); return0; } voidWriteDat(void) { FILE*fp; inti; clrscr(); fp=fopen("OUT3.DAT","w"); for(i=0;i printf("%s\n",xx[i]); fprintf(fp,"%s\n",xx[i]); } fclose(fp); } ******************************************************************************************* ID6(无忧ID9) 已知在文件IN.DAT中存有若干个(个数<200)四位数字的正整数,函数ReadDat()是读取这若干个正整数并存入数组xx中。 请编制函数CalValue(),其功能要求: 1.求出这文件中共有多少个正整数totNum;2.求这些数中的百位数位置上的数字小于十位数位置上的数字的数的个数totCnt,以及满足此条件的这些数的算术平均值totPjz,最后调用函数WriteDat()把所求的结果输出到文件OUT9.DAT中。 注意: 部分源程序存放在PROG1.C中。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include #include #defineMAXNUM200 intxx[MAXNUM]; inttotNum=0;/*文件IN.DAT中共有多少个正整数*/ inttotCnt=0;/*符合条件的正整数的个数*/ doubletotPjz=0.0;/*平均值*/ intReadDat(void); voidWriteDat(void); voidCalValue(void) { inti,j1,j2; longhe=0; for(i=0;i if(xx[i])totNum++; for(i=0;i {j1=(xx[i]%1000)/100; j2=(xx[i]%100)/10; if(j1 totCnt++; he+=xx[i]; } } totPjz=(double)he/totCnt; } voidmain() { inti; clrscr(); for(i=0;i if(ReadDat()){ printf("数据文件IN.DAT不能打开! \007\n"); return; } CalValue();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NCRE4 全国 计算机等级考试 上机