和山论坛

标题: 全国计算机等级考试三级C语言上机题91-100 [打印本页]

作者: 天涯海角    时间: 2006-3-19 04:55
标题: 全国计算机等级考试三级C语言上机题91-100
<P><FONT color=#990000 size=4><STRONG>全国计算机等级考试三级C语言上机题91-100</STRONG></FONT> </P>
<P> 题目91<BR>请编制程序prog1.c,从文件in.dat中读取200个整数至数组xx中,求出奇数的个数cnt1和偶数的个数cnt2以及数组xx下标为偶数的元素值的算术平均值pj(保留2位小数)。<BR> 结果cnt1,cnt2,pj输出到out.dat中。<BR> 部分程序、读数据函数read_dat(int xx[200])及输出格式已给出。<BR>#include <CONIO.H><BR>#include <STDIO.H><BR>#define N 200<BR><BR>void read_dat(int xx[N])<BR>{<BR> int i,j;<BR> FILE *fp;<BR><BR> fp=fopen("in.dat","r");<BR> for(i=0;i&lt;20;i++){<BR> for(j=0;j&lt;10;j++){<BR> fscanf(fp,"%d,",&amp;xx[i*10+j]);<BR> printf("%d ",xx[i*10+j]);<BR> }<BR> printf("\n");<BR> }<BR> fclose(fp);<BR>}<BR><BR>void main()<BR>{<BR> int i,j,sum;<BR> int cnt1,cnt2,xx[N];<BR> float pj;<BR> FILE *fw;<BR> <BR> clrscr();<BR> fw=fopen("out.dat","w");<BR> read_dat(xx);<BR>/**********************/<BR> sum=0; pj=0.0; cnt1=cnt2=0;<BR> for(i=0;i<N;I++) <br> { if(xx%2) cnt1++;<BR> else cnt2++;<BR> if(i%2==0) {pj+=xx;sum++;}<BR> }<BR> pj/=sum;<BR><BR>/***********************/<BR><BR>printf("\n\ncnt1=%d,cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj);<BR>fprintf(fw,"%d\n%d\n%6.2f\n",cnt1,cnt2,pj);<BR>fclose(fw);<BR>}<BR><BR><BR>*******************************************************************************<BR>☆题目92<BR>请编制程序prog1.c,从文件IN.DAT中读取200个整数至数组xx中,求出最大数max及最大数的个数cnt和数组xx中能被3整除或能被7整除的算术平均值pj(保留2位小数)。<BR> 结果max,cnt,pj输出到OUT.DAT中。<BR> 部分程序、读数据函数read_dat(int xx[200])及输出格式已给出。<BR>#include <CONIO.H><BR>#include <STDIO.H><BR>#define N 200<BR><BR>void read_dat(int xx[N])<BR>{<BR> int i,j;<BR> FILE *fp;<BR><BR> fp=fopen("in.dat","r");<BR> for(i=0;i&lt;20;i++){<BR> for(j=0;j&lt;10;j++){<BR> fscanf(fp,"%d,",&amp;xx[i*10+j]);<BR> printf("%d",xx[i*10+j]);<BR> }<BR> printf("\n");<BR> }<BR> fclose(fp);<BR>}<BR><BR>void main()<BR>{<BR> int m,temp,n,sum;<BR> int cnt,xx[N],max ;<BR> float pj;<BR> FILE *fw;<BR><BR> clrscr();<BR> fw=fopen("out.dat","w");<BR> read_dat(xx);<BR>/*********************/<BR> cnt=0; max=xx[0]; pj=0.0; n=0;<BR> for(m=0;m<N;M++)<BR> if(max<XX[M]) max="xx[m];<br"> for(m=0;m<N;M++)<BR> {if(xx[m]==max) cnt++;<BR> if(xx[m]%3==0||xx[m]%7==0)<BR> { pj+=xx[m]; n++; }<BR> }<BR> pj/=n;<BR><BR>/*********************/<BR><BR>printf("\n\nmax=%d,cnt=%d,pj=%6.2f\n",max,cnt,pj);<BR>fprintf(fw,"%d\n%d\n%6.2f\n",max,cnt,pj);<BR>fclose(fw);<BR>}<BR><BR>*****************************************************************************<BR>☆题目93<BR>请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute(),分别计算出xx中奇数的个数odd,偶数的个数even,平均值aver以及方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。<BR> 计算方差的公式如下:<BR> N 2<BR> totfc=1/N ∑ (xx-aver)<BR> i=1<BR> 原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000)<BR> 部分源程序存在文件prog1.c中。<BR> 请勿改动主函数main()和输出数据函数writeDat()的内容。<BR>#include <STDIO.H><BR>#include <STDLIB.H><BR>#include <STRING.H><BR>#define MAX 1000<BR><BR>int xx[MAX],odd=0,even=0;<BR>double aver=0.0,totfc=0.0;<BR>void WriteDat(void);<BR><BR>int ReadDat(void)<BR>{<BR> int i;<BR> FILE *fp;<BR><BR> if((fp=fopen("IN.DAT","r"))==NULL) return 1;<BR>/***************编制函数ReadDat()*****************/<BR> for(i=0;i<MAX;I++)<BR> { fscanf(fp,"%d,",&amp;xx);<BR> if((i+1)%10==0)<BR> fscanf(fp,"\n");<BR> }<BR>/*********************************************/<BR> fclose(fp);<BR> return 0;<BR>}<BR><BR>void Compute(void)<BR>{ int i;<BR> for(i=0;i<MAX;I++)<BR> { if(xx%2) odd++;<BR> else even++;<BR> aver+=xx;<BR> }<BR> aver/=MAX;<BR> for(i=0;i<MAX;I++)<BR> totfc+=(xx-aver)*(xx-aver);<BR> totfc/=MAX;<BR>}<BR><BR><BR>void main()<BR>{<BR> int i;<BR><BR> for(i=0;i<MAX;I++)XX[I]=0;<BR> if(ReadDat()){<BR> printf("数据文件IN.DAT不能打开!\007\n");<BR> return;<BR> }<BR> Compute();<BR> printf("ODD=%d\nOVEN=%d\nAVER=%f\nTOTFC=%f\n",odd,even,aver,totfc);<BR> WriteDat();<BR>}<BR><BR>void WriteDat(void)<BR>{<BR> FILE *fp;<BR> int i;<BR><BR> fp=fopen("OUT.DAT","w");<BR> fprintf(fp,"%d\n%d\n%f\n%f\n",odd,even,aver,totfc);<BR> fclose(fp);<BR>}<BR><BR><BR>*******************************************************************************<BR>题目94<BR>请编制程序prog1.c,从文件in.dat中读取200个整数至数组xx中,求出奇数的个数cnt1和偶数的个数cnt2以及数组xx中值为偶数的算术平均值pj(保留2位小数)。<BR> 结果cnt1,cnt2,pj输出到out.dat中。<BR> 部分程序、读数据函数read_dat(int xx[200])及输出格式已给出。<BR>#include <CONIO.H><BR>#include <STDIO.H><BR>#define N 200<BR><BR>void read_dat(int xx[N])<BR>{<BR> int i,j;<BR> FILE *fp;<BR><BR> fp=fopen("in.dat","r");<BR> for(i=0;i&lt;20;i++){<BR> for(j=0;j&lt;10;j++){<BR> fscanf(fp,"%d,",&amp;xx[i*10+j]);<BR> printf("%d ",xx[i*10+j]);<BR> }<BR> printf("\n");<BR> }<BR> fclose(fp);<BR>}<BR><BR>void main()<BR>{<BR> int m,sum;<BR> int cnt1,cnt2,xx[N];<BR> float pj;<BR> FILE *fw;<BR> <BR><BR> fw=fopen("out.dat","w");<BR> clrscr();<BR> read_dat(xx);<BR>/****************************/<BR> cnt1=0; cnt2=0; pj=0.0;<BR> for(m=0;m<N;M++)<BR> if(xx[m]%2) cnt1++;<BR> else { cnt2++; pj+=xx[m];}<BR> if(cnt2==0) pj=0;<BR> else pj/=cnt2;<BR>/****************************/<BR>printf("\n\ncnt1=%d,cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj);<BR>fprintf(fw,"%d\n%d\n%6.2f\n",cnt1,cnt2,pj);<BR>fclose(fw);<BR>}<BR><BR><BR>****************************************************************************<BR>☆题目95<BR>函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS4.DA中。<BR>  替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或f(p)对应的字符是大写字母,则该字符不变,否则将f(p)所对应的字符进行替代。<BR>  部分源程序存在文件prog1.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。<BR>  请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。<BR>#include <STDIO.H><BR>#include <STRING.H><BR>#include <CONIO.H><BR>#include <CTYPE.H><BR><BR>unsigned char xx[50][80];<BR>int maxline=0;/*文章的总行数*/<BR><BR>int ReadDat(void);<BR>void WriteDat(void);<BR><BR>void encryptChar()<BR>{ int i,j;<BR> for(i=0;i<MAXLINE;I++)<BR> for(j=0;j<STRLEN(XX[I]);J++)<BR> if(xx[j]*11%256&lt;=32||xx[j]*11%256&gt;='A'&amp;&amp;xx[j]*11%256&lt;='Z') continue;<BR> else xx[j]=xx[j]*11%256;<BR>}<BR><BR>void main()<BR> {<BR> clrscr();<BR> if(ReadDat()){<BR> printf("数据文件ENG.IN不能打开!\n\007");<BR> return;<BR> }<BR> encryptChar();<BR> WriteDat();<BR>}<BR><BR>int ReadDat(void)<BR>{<BR> FILE *fp;<BR> int i=0;<BR> unsigned char *p;<BR><BR> if((fp=fopen("eng.in","r"))==NULL) return 1;<BR> while(fgets(xx,80,fp)!=NULL){<BR> p=strchr(xx,'\n');<BR> if(p)*p=0;<BR> i++;<BR>}<BR>maxline=i;<BR>fclose(fp);<BR>return 0;<BR>}<BR><BR>void WriteDat(void)<BR>{<BR> FILE *fp;<BR> int i;<BR><BR> fp=fopen("ps4.dat","w");<BR> for(i=0;i<MAXLINE;I++){<BR> printf("%s\n",xx);<BR> fprintf(fp,"%s\n",xx);<BR> }<BR> fclose(fp);<BR>}<BR><BR><BR>***********************************************************************<BR>☆题目96<BR>函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS5.DAT中。<BR>  替代关系:f(p)=p*11mod 256 (p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符是小写字母或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。<BR>  部分源程序存在文件prog1.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。<BR>  请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。<BR>#include <STDIO.H><BR>#include <STRING.H><BR>#include <CONIO.H><BR>#include <CTYPE.H><BR><BR>unsigned char xx[50][80];<BR>int maxline=0;/*文章的总行数*/<BR><BR>int ReadDat(void);<BR>void WriteDat(void);<BR><BR>void encryptChar()<BR>{ int i,j;<BR> for(i=0;i<MAXLINE;I++)<BR> for(j=0;j<STRLEN(XX[I]);J++)<BR> if(xx[j]*11%256&lt;=32||xx[j]&gt;='a'&amp;&amp;xx[j]&lt;='z') continue;<BR> else xx[j]=xx[j]*11%256;<BR>}<BR><BR>void main()<BR> {<BR> clrscr();<BR> if(ReadDat()){<BR> printf("数据文件ENG.IN不能打开!\n\007");<BR> return;<BR> }<BR> encryptChar();<BR> WriteDat();<BR>}<BR><BR>int ReadDat(void)<BR>{<BR> FILE *fp;<BR> int i=0;<BR> unsigned char *p;<BR><BR> if((fp=fopen("eng.in","r"))==NULL) return 1;<BR> while(fgets(xx,80,fp)!=NULL){<BR> p=strchr(xx,'\n');<BR> if(p)*p=0;<BR> i++;<BR>}<BR>maxline=i;<BR>fclose(fp);<BR>return 0;<BR>}<BR><BR>void WriteDat(void)<BR>{<BR> FILE *fp;<BR> int i;<BR><BR> fp=fopen("ps5.dat","w");<BR> for(i=0;i<MAXLINE;I++){<BR> printf("%s\n",xx);<BR> fprintf(fp,"%s\n",xx);<BR> }<BR> fclose(fp);<BR>}<BR><BR><BR>*************************************************************************<BR>★题目97<BR>函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS9.DAT中。<BR>  替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符是数字字符0至9或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。<BR>  部分源程序存在文件prog1.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。<BR>  请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。<BR>#include <STDIO.H><BR>#include <STRING.H><BR>#include <CONIO.H><BR>#include <CTYPE.H><BR><BR>unsigned char xx[50][80];<BR>int maxline=0;/*文章的总行数*/<BR><BR>int ReadDat(void);<BR>void WriteDat(void);<BR><BR>void encryptChar()<BR>{ int i,j;<BR> for(i=0;i<MAXLINE;I++)<BR> for(j=0;j<STRLEN(XX[I]);J++)<BR> if(xx[j]*11%256&lt;=32||xx[j]&gt;='0'&amp;&amp;xx[j]&lt;='9') continue;<BR> else xx[j]=xx[j]*11%256;<BR>}<BR><BR>void main()<BR> {<BR> clrscr();<BR> if(ReadDat()){<BR> printf("数据文件ENG.IN不能打开!\n\007");<BR> return;<BR> }<BR> encryptChar();<BR> WriteDat();<BR>}<BR><BR>int ReadDat(void)<BR>{<BR> FILE *fp;<BR> int i=0;<BR> unsigned char *p;<BR><BR> if((fp=fopen("eng.in","r"))==NULL) return 1;<BR> while(fgets(xx,80,fp)!=NULL){<BR> p=strchr(xx,'\n');<BR> if(p)*p=0;<BR> i++;<BR>}<BR>maxline=i;<BR>fclose(fp);<BR>return 0;<BR>}<BR><BR>void WriteDat(void)<BR>{<BR> FILE *fp;<BR> int i;<BR><BR> fp=fopen("ps9.dat","w");<BR> for(i=0;i<MAXLINE;I++){<BR> printf("%s\n",xx);<BR> fprintf(fp,"%s\n",xx);<BR> }<BR> fclose(fp);<BR>}<BR><BR><BR>******************************************************************************<BR>★题目98<BR>  函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS3.DAT中。<BR>  替代关系:f(p)=p*17 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或其ASCII值是奇数,则该字符不变,否则将f(p)所对应的字符进行替代。<BR>  部分源程序存在文件prog1.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。<BR>  请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。<BR>#include <STDIO.H><BR>#include <STRING.H><BR>#include <CONIO.H><BR>#include <CTYPE.H><BR><BR>unsigned char xx[50][80];<BR>int maxline=0;/*文章的总行数*/<BR><BR>int ReadDat(void);<BR>void WriteDat(void);<BR><BR>void encryptChar()<BR>{ int i,j;<BR> for(i=0;i<MAXLINE;I++)<BR> for(j=0;j<STRLEN(XX[I]);J++)<BR> if(xx[j]*17%256&lt;=32||(xx[j]*17%256)%2!=0) continue;<BR> else xx[j]=xx[j]*17%256;<BR>}<BR><BR>void main()<BR> {<BR> clrscr();<BR> if(ReadDat()){<BR> printf("数据文件ENG.IN不能打开!\n\007");<BR> return;<BR> }<BR> encryptChar();<BR> WriteDat();<BR>}<BR><BR>int ReadDat(void)<BR>{<BR> FILE *fp;<BR> int i=0;<BR> unsigned char *p;<BR><BR> if((fp=fopen("eng.in","r"))==NULL) return 1;<BR> while(fgets(xx,80,fp)!=NULL){<BR> p=strchr(xx,'\n');<BR> if(p)*p=0;<BR> i++;<BR> }<BR>maxline=i;<BR>fclose(fp);<BR>return 0;<BR>}<BR><BR>void WriteDat(void)<BR>{<BR> FILE *fp;<BR> int i;<BR><BR> fp=fopen("ps3.dat","w");<BR> for(i=0;i<MAXLINE;I++){<BR> printf("%s\n",xx);<BR> fprintf(fp,"%s\n",xx);<BR> }<BR>fclose(fp);<BR>}<BR><BR>*****************************************************************************<BR>题目99<BR>已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按金额从小到大进行排列,若金额相等,则按产品代码从小到大进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT1.DAT中。<BR> 部分源程序存在文件prog1.c中。<BR>  请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。<BR>#include <STDIO.H><BR>#include <MEM.H><BR>#include <STRING.H><BR>#include <CONIO.H><BR>#include <STDLIB.H><BR><BR>#define MAX 100<BR>typedef struct{<BR> char dm[5]; /*产品代码*/<BR> char mc[11]; /*产品名称*/ <BR> int dj; /*单价*/<BR> int sl; /*数量*/ <BR> long je; /*金额*/<BR>}PRO;<BR>PRO sell[MAX];<BR>void ReadDat();<BR>void WriteDat();<BR><BR>void SortDat()<BR>{int i,j;<BR> PRO xy;<BR> for(i=0;i&lt;99;i++)<BR> for(j=i+1;j&lt;100;j++)<BR> if(sell.je&gt;sell[j].je||sell.je==sell[j].je&amp;&amp;strcmp(sell.dm,sell[j].dm)&gt;0)<BR> {xy=sell;sell =sell[j];sell[j]=xy;}<BR>}<BR><BR>void main()<BR> {<BR> memset(sell,0,sizeof(sell));<BR> ReadDat();<BR> SortDat();<BR> WriteDat();<BR> }<BR><BR>void ReadDat()<BR>{<BR> FILE *fp;<BR> char str[80],ch[11];<BR> int i;<BR><BR> fp=fopen("IN.DAT","r");<BR> for(i=0;i&lt;100;i++){<BR> fgets(str,80,fp);<BR> memcpy(sell.dm,str,4);<BR> memcpy(sell.mc,str+4,10);<BR> memcpy(ch,str+14,4);ch[4]=0;<BR> sell.dj=atoi(ch);<BR> memcpy(ch,str+18,5);ch[5]=0;<BR> sell.sl=atoi(ch);<BR> sell.je=(long)sell.dj*sell.sl;<BR> }<BR> fclose(fp);<BR>}<BR><BR>void WriteDat()<BR>{<BR> FILE *fp;<BR> int i;<BR><BR> fp=fopen("OUT1.DAT","w");<BR> for(i=0;i&lt;100;i++){<BR> printf("%s %s %4d %5d %5d\n", sell.dm,sell.mc,sell.dj,sell.sl,sell.je);<BR> fprintf(fp,"%s %s %4d %5d %5d\n", sell.dm,sell.mc,sell.dj,sell.sl,sell.je);<BR> }<BR> fclose(fp);<BR>}<BR><BR>*************************************************************************<BR>☆题目100<BR>函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数CharConvA(),其函数的功能是:以行为单位把字符串中的最后一个字符的ASCII值右移4位,高位补0后加最后第二个字符的ASCII值,得到最后一个新的字符,最后第二个字符的ASCII值右移4位,高位补0后加最后第三个字符的ASCII值,得到最后第二个新的字符,依此类推一直处理到第二个字符,第一个字符的ASCII值加原最后一个字符的ASCII值,得到第一个新的字符,得到的新字符分别存放在原字符串对应的位置上。最后已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT10.DAT中。<BR> 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。<BR> 部分源程序存在文件prog1.c中。<BR> 请勿改动主函数main()和写函数writeDat()的内容。<BR>#include <STDIO.H><BR>#include <STRING.H><BR>#include <CONIO.H><BR><BR>char xx[50][80];<BR>int maxline=0;/*文章的总行数*/<BR><BR>int ReadDat(void);<BR>void WriteDat(void);<BR><BR>void CharConvA()<BR>{ int i,j;<BR> char p,c;<BR> for(i=0;i<MAXLINE;I++)<BR> { p=xx[strlen(xx)-1];<BR> c=xx[0];<BR> for(j=strlen(xx)-1;j&gt;0;j--)<BR> xx[j]=(xx[j]&gt;&gt;4)+xx[j-1];<BR> xx[0]=p+c; <BR> }<BR>}<BR><BR>void main()<BR> {<BR> clrscr();<BR> if(ReadDat()){<BR> printf("数据文件IN.DAT不能打开!\n\007");<BR> return;<BR> }<BR> CharConvA();<BR> WriteDat();<BR>}<BR><BR>int ReadDat(void)<BR>{<BR> FILE *fp;<BR> int i=0;<BR> char *p;<BR><BR> if((fp=fopen("IN.DAT","r"))==NULL) return 1;<BR> while(fgets(xx,80,fp)!=NULL){<BR> p=strchr(xx,'\n');<BR> if(p)*p=0;<BR> i++;<BR>}<BR>maxline=i;<BR>fclose(fp);<BR>return 0;<BR>}<BR><BR>void WriteDat(void)<BR>{<BR> FILE *fp;<BR> int i;<BR><BR> fp=fopen("OUT10.DAT","w");<BR> for(i=0;i<MAXLINE;I++){<BR> printf("%s\n",xx);<BR> fprintf(fp,"%s\n",xx);<BR> }<BR> fclose(fp);<BR>}<BR></P>




欢迎光临 和山论坛 (http://www.hsbbs.com/) Powered by Discuz! X3.2