资源描述
南开100题【终极无错2.0版】题目前带号的是在2004年4月份上机考试中被考生们所确定了的上机题。&题目前带众号的是在2004年9月份上机考试中被考生们所确定了的上机题。&题目中所提示的“无忧id xx”指的是2004年上半年版无忧模拟系统中的固定抽题序号&题目中所提示的“捷成id XX”指的是2004年上半年版捷成模拟系统中的固定抽题序号题目1(无忧id 14、id 27(提供 isP()函数;捷成id 23题)请编写一个函数jsValue(int m,int k,int xx),该函数的功能是:将大于整数m且紧靠m的k个素数存入数组XX传回。最后调用函数writeDat()读取10组数据,分别得出结果且把结果输出到文件out.dat中。部分源程序存在文件 prog 1,c 中。例如:若输入175则应输出:19,23,29,31,37o请勿改动主函数main()和写函数writeDat()的内容。#include #include void readwriteDat();int isP(int m)inti;for(i=2;i0;m+) if(isP(m) xxs-H-=m; kmain()(int m,n,xx1000;clrscr();printf(nPlease enter two integers:);scanf(%d%d,&m,&n); num(m,n,xx);for(m=0;mn;m+) printf(%d ,xxm);printf(n); readwriteDat();)void readwriteDat()(int m,n,xxI000, i;FILE *rf,*wf;rf=fopen(in.datJr);wf=fopen(”out.dat,“w”);for(i=0;i10;i+)fscanf(rf/%d %dM,&m,&n);num(m,n,xx);for(m=0;mn;m+)fprintf(wf,n%dn,xxm);fprintf(wf,”n);fclose(rf);fclose(wf);f无忧id 14题(无isP()函数)#include void jsVaIue(int mjnt kjnt xx|)int i,j,s=O;for(i=m+l ;k0;i-H-) forg=2;ji;j+) if(i%j=O) break;if(i=j) xx|s+=i; k-; main()(int m,n,zz100;printf(”n请输入两个整数:);scanf(,%d%d,&m,&n);jsValue(m,n,zz);for(m=0;mn;m+)printf(u%dn,zzm);printf(nnn);writeDat();)writeDat()int m,n,zz100,i;FILE *in,*out;in=fopen(,in.dat;V);out=fopen(Hout.dat7,wM);for(i=0;i10;i+)fscanf(in,n%d%dn,&m,&n);jsValue(m,n,zz);for(m=0;mn;m+4-)fprintf(out,% d H,zzm);fprintf(out,Hnn);)fclose(in);fclose(out);尸另一解法:void num(int mjnt kjnt xx|)int n=0,data=m+l;while(nk)if(isP(data) xxn-H-|=data;data-H-;题目2(无忧id 143整数排序题)已知数据文件IN.DAT中存有200个四位数,并已调用读函数 readDat。把这些数存入数组a中,请考生编制-函数jsVal(),其功能是:如果四位数各位上的数字均是0或2或4或6或8,则统计出满足此条件的个数ent,并把这些四位数按从大到小的顺序存入数组b中。最后main()函数调用写函数writeDat。把结果ent 以及数组b中符合条件的四位数输出到OUT.DAT文件中。注意:部分源程序存在文件 prog 1.c 中。程序中已定义数组:a200, b200,已定义变量:ent请勿改动数据文件IN.DAT 中的任何数据、主函数main。、读函数readDat()和写函数 writeDat()的内容。#include #define MAX 200int aMAX, bMAX, ent =0;void jsVal()int i,j,qw,bw,sw,gw;for(i=0;iv=ai|%10;if(qw&qw%2=0&bw%2=0&sw%2=0&gw%2=0) bcnt-H-J=ai;for(i=0;icnt-l;i+)for(j =i+1;jc nt; j+) if(bibj) qw=bi; bi=bj; b|j=qw;)void readDat()(inti ;HLE *fp ;fp = fopenCin.dat* T);for(i =0; i MAX ; i+) fscanf(fp,%dn,&ai);fclose(fp);)void main()inti ;rea(JDat();jsVal();printf(满足条件的数=%dn, ent);for(i =0; i ent ; i+) printf(%d , bi);printf(n);writeDat();writeDat()(FILE *fp ;int i ;fp = fopen(out.dat,w); fprintf(fp,%dn, ent);for(i =0; i ent ; i+) fprintf(fp,%dn, bi);fclose(fp);题目3(无忧id 133题;捷成id 59、99字符串位置倒置题)函数ReadDat()实现从文件 IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOR(),其函数的功能是:以行为单位依次把字符串中所有小写字母。左边的字符串内容移到该串的右边存放,然后把小写字母。删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组xx中。最后 main()函数调用函数 WriteDat()把结果xx输出到文件 OUT5.DAT 中。例如:原文:n any field.Yu can create an indexyou have the correct record.结果:n any field. Yu can create an indexrd. yu have the crrcct rec原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。注意:部分源程序存放在文件 prog 1.c 中。请勿改动主函数main。、读数据函数ReadDat。和输出数据函数WriteDat()的内容。#include #include #i nclude charxx5080;int maxline =0;/*文章的总行数*/int ReadDat(void);void WriteDat(void);void StrOR(void)int i,righto,j,s,k;char tem|80;for(i=0;i=O;j-) k=0;memset(tem,0,80);/*初始化字符串数组tem*/产如果当前字符为e,进入以下语句唱righto=j;/*则将此字符中位置i的值赋给righto*/for(s=righto+l;sstrlen(xxi);s+十)temk+=xxi;/*从 righto 的下一跳开始将其后所有的字符都存入到tem中for(s=0;srighto;s-H-)/*从当前行首部开始到出现字符b的位置(righoto)之前开始循环*/if(xxiHs!=o,)temk+=xx|i|s;/*字符 d的字符全存入到tem中*/strcpy(xxi,tcm);/*将当前已处理的字符重新存入当前行XX*/else continue;void main()(clrscr();if(ReadDat()printf(数据文件IN.DAT不能打开!n007);return ;)StrOR();WriteDat();)int ReadDat(void)(FILE *fp ;int i =0;char *p ;if(fp = fopenCIN.DAT,r)=NULL) return 1;while(fgets(xxi,80, fp)!=NULL)p = strchr(xxi,n);if(p)*p =0;i+;maxline = i;fclose(fp);return 0;void WriteDat(void)(FILE *fp ;int i;clrscr();fp = fopen(”OUT5.DAT, “w”);个字符连接到 dest 中char str|80|;for(i = 0 ; i maxline ; i+) printf(n%sn; xxi);fprintf(fp, n%snu, xxi);)fclose(fp);解法二:void StrOR(void)int i;char a80,*p;for(i=0;imaxline;i+-+-) p=strchr(xx|i|/o,);while(p)memset(a,0,80);memcpy(a,xxi,p-xxi); strcpy(xxi|,p+l); strcat(xx|i|,a); p=strchr(xxil,*o*);相关头文件:string.hchar *strcpy(char *dest, const char *src)功能将字符串src拷贝到存符串dest 中去梯&伟 string, h 题目4 (无忧id 24题捷成 id9字符串单词倒置题)函数ReadDat()实现从文件 IN.DAT中读取一篇英文文章存 入到字符串数组xx中,请编制函 数StrOL(),其函数的功能是: 以行为单位对行中以空格或标点 符号为分隔的所有单词进行倒 排。最后把己处理的字符串(应for(i=0;i=O;j) /* 从 当前字符串尾部开始向前倒序循 环,实现题意要求的倒排列 if(isalpha(xx|i|jl) k+;/*如果当前字符是字母az或 AZ,则k加一*/else for(m=l;m=k;m-H-) /* 否则将 长度为k的单词顺序存入到字符 串数组str中,s值加1*/不含标点符号)仍按行重新存入strs+|=xxij+m;字符串数组XX中,最后调用函数k=0;/*将k值清0,writeDat。把结果xx输出到文件 以方便下一个单词的长度计数均OUT6.DAT 中。例如:原文:You He Meif(!isalpha(xxli|j|)1 am a、/*如果当前字符不是解法三:void StrOR(void)int i,j; char yy80,*p;for(i=0; imaxline;i+)for(j=0; jstrlen(xxi); j+)strcpy(yy,p); /* 步唐/-p所指向的字符串拷贝到字符串progl.c中。yy中央*/请勿改动主函数main。、读将字符串中前j个字符连接函数writeDat。的内容。到yy /#include strcpy(xx|i,yy); /* 将 include 字符串yy重新拷贝到字符串xxi4:*/#include strncat(yy,xx|i,j); /*数据函数ReadDat。和输出数据0以标7口应力:的弗东*/ p=&xxilj+ll;student.结果:Me He You student a amI原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。部分源程序存在文件字母aZ或AZ,则以空格代之存入到字符串数组str中,s值加一*/|for(m=l ;m=k;m-H-)/*此时的k值为当前字符串中第一个单词的长度,但在上一个扣r循环中没能存入到字符串数组str中,所以在这里将其存入到str中*/strs+l=xxij+iii;str=、(T;卢在当前行尾加strcpv(xxi,str);/*将倒排好的当前字符串重新存回到当前行XX中*/j=0;/*扫描。*/.父的 char xx5080;int maxline=0;/*文章的总行数*/int ReadDat(void);相关库函数解释:char *strncat(char *dest, constchar *src, size_t maxlen)功能:将字符串src中前maxlenvoid WriteDat(void);/*企无忧及捷成版模拟系统中都通过测试(输入文件句末有标点的在输出文件中句前有空格列void StrOL(void)void main()clrscr();if(ReadDat()printf(数据文件IN.DAT不能打开!n007K);return;)StrOL();WriteDat();int例:处理前60125099int ReadDat(void)strcpy(zz, yy);901270258088FILE *fp;int i=0;char *p;if(fp=fopen(IN.DAT,;,r,)=NULL) return 1;while(fgets(xxi,80,fp)!=NULL) p=strchr(xxi,n,);if(p)*p=O; i+;)maxline=i;fclose(fp);return 0;void WriteDat(void)(FILE *fp;inti;clrscr();fp=fopen(OUT6.DAT“Jw”);for(i=0;imaxline;i+) printf(,%sn,xxi);fprintf(fp,n%snn,xxi);fclose(fp);)捷成版模拟系统中的解法/*在无忧模拟系统中没通过测试(输入文件句末有标点的在输出文件中句前无空格*/void StrOL(void)(nt i, j ;char word|21, yy80|, zz80,for(i =0; i maxline ; i+) P = xxi;j =0;memset(word,0,21);memset(yy,0,80);while(*p)if(isalpha(*p)word|j+=*p+; if(*p) continue ;sprintf(yy,%”,word, zz);j = o;memset(vvord,0,21);while(*p&(!isalpha(*p) p-H-;strcpy(xxi, yy);)另一解波):/*在无忧及捷成版模拟系统中都通过测试(输入文件句末有标点的在输出文件中句前有空格*/void StrOL(void)int i,j,m;char str|80|;for(i=0;i=0;j-)if(!isalpha(xxijD) strcat(str,xxi+j+l);strcat(str,M M);xx|i|j|=,0,;strcat(str,xxi);strcpy(xxi|,str);)实际上机考试时上面几种解法都可以采用。题目5(无忧id 8整数排序题)在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数 jsSort(),其函数的功能是:要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组bb中,如果后三位的数值相等,则按原先的数值进行降序排列。最后调用函数WriteDat。把结果bb输出到文件out.dat中。处理后90126012702580885099部分源程序存在文件 prog 1,c 中。请勿改动主函数main。、读数据函数ReadDat()和输出数据函数WriteDat。的内容。#include #include #include int aa200,bb10;void jsSort()(int i,j,data;for(i=0;i199;i+)forg=i+l;jaaj%1000|aai%1000=aaj%1000&aa|ila aj)data=aa|i|;aa|i|=aa|j|;aaj=dat a;for(i=0;i10;i+) bb|i=aa|i|;void main()(readDat();jsSort();writeDat();) readDat()(FILE *in;int i;in=fopen(in.dat,r);for(i=0; i200;i+)fscanf(in,%d,&aai);fclose(in);writeDat()FILE *out;int i;clrscr();out=fopen(out.dat,w);for(i=0; i10; i+)printf(%d,bbi);fprintf(out,%dn,bbi);fclose(out);L题目6正整数排序在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数 jsSort(),其函数的功能是:要求按每个数的后三位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行升序排列。最后调用函数WriteDat。把结果bb输出到文件out.dat中o例:处理前90125099601270258088处理后50998088702560129012注意:部分源程序已给出。请勿改动主函数main。、读数据函数ReadDat。和输出数据函数WriteDat()的内容。#include#include#includeint aaf200,bb10;void jsSort()int i,j,data;for(i=0;i199;i-H-)forg=i+l;j200;j+)if(aa|i|%1000a ajl)data=aa|i|;aa|i|=aa|j|;aa|j|=dat a;for(i=0;i10;i-H-)bb|i|=aa|i|;void main()(readDat();jsSort();writeDat();system(pause*);readDat()(FILE *in;int i;in=fopen(in.dat,rn);for(i=0; i200;i+)fscanf(in,”d,”,&aai);fclose(in);writeDat()(FILE *out;int i;clrscr();out=fopen(,out.dat,,wn);for(i=0; i10; i+) printfCi=%d,%dni+1,bbi); fprintf(out,n%dnu,bbi);fclose(out);)题目7(无忧id 15结构体操作题)已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称me(字符型10位),单价dj(整型),数量si(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数 ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat。把结果输出到文件 OUT6.DAT 中。部分源程序存在文件 progl.c 中。请勿改动主函数main。、读数据函数ReadDat()和输出数据函数WriteDat()的内容。#include #include #include #include #include #define MAX 100typedef struct char dm5;/*产品代码*/char产品名称*/int dj;/*单价*/int si;/*数量*/longje;/*金额*/PRO;PRO sellMAX;void ReadDat();void WriteDat();void SortDat()int i,j;PRO xy;for(i=0;i99;i-H-) for(j=i+l;jvlOO;j+)if(strcmp(selli.dm,sellj.din)0|strcmp(selli.dm,seIlj.din)=O&selli|.jesell|j.je)xy=sell|i|; sell |i|=sell|j|; sellj|=xy; void main()(memset(sell,0,sizeof(sell);ReadDat();SortDat();WriteDat();void ReadDat()(FILE *fp;char str80,chll;int i;fp=fopen(nIN.DAT,nrH);for(i=0;i100;i+)fgets(str,80,fp);memcpy(selli.dm,str,4);memcpy(sellfi.mc,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 WriteDat(void)(FILE *fp;int i;fp=fopen(,OUT6.DAT,;,w,);fdr(i=O;ilOO;i+)printf(u%s %s %4d %5d %5dnM. selli.dm,selli.mc,selli.dj,selli.sl,selli.je);fprintf(fp,M%s %s %4d %5d %5dn Hselli.dm,selli.mc,selli.dj,selii,sl,selli.je);)fclose(fp);题目8(无忧id 83字符替换题)函数ReadDatO实现从文件 ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar。,按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS1.DAT 中。替代关系:f(p)=p*ll mod 256(p是数组中某一个字符的 ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。部分源程序存在文件progl.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。请勿改动主函数main。、读数据函数ReadDat()和输出数据函数WriteDat()的内容。#include #include #include #include unsigned char xx5080;int maxline=0;/*文章的总行数*/int ReadDat(void);void WriteDat(void);void encryptChar()int i,j;for(i=0;imaxline;i-H-) for(j=0;jstrlen(xx|i|);j+)if(xxij*ll%256130) continue;elsexx|ilUl=xx|i|jl*ll%256;|void main()clrscr();if(ReadDat()printf(数据文件ENGIN不能打开!n007);return;)encryptChar();WriteDat();int ReadDat(void)(FILE *fp;int i=0;unsigned char *p;if(fp=fopen(neng.inn,rn)=NUL L) return 1;while(fgets(xxi,80,fp)!=NULL) p=strchr(xxi,n,);if(p)*p=O;i+;)maxline=i;fclose(fp);return 0;void WriteDat(void)FILE *fp;int i;fp=fopen(Mps l.datn,Kwn);for(i=0;imaxline;i+) printf(n%sn,xxi);fprintf(fp,0%snn ,xx i);fclose(fp);)解法二:void encryptChar()int i,j,k;for(i=0;imaxline;i4-+)for(j=0;jstrlen(xx|i);j4-4-) k= xx|i|jl*H%256;if(k130)continue;else xxi|j=k;解法三:void encryptChar()int i,j;unsigned char ch;for(i=0;imaxline;i-H-) for(j=0;jstrlen(xxi);j-H-)ch=xx|i|j*ll%256;if(ch130) continue; else xx|i|j|=ch;解法四:void encryptChar()int i,j;char *p;for(i=0;imaxline;i+)for(j=0;jstrlen(xxi);j-H-)p=xx|i|jl*ll%256;if(p130) continue;else xxiljl=p;解法五:void encry ptChar()int i;char *pf;for(i=0;imaxline;i+) pf=xxi;while(*pf!=0)if(*pf*ll%256130) pf+;else *pf+=*pf*ll%256;题目9(无忧 id 28; id 124;捷成id 16字符串排序题)函数ReadDatO实现从文件 IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数SortCharD(),其函数的功能是:以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组 xx中,最后调用函数writeDat()把结果xx输出到文件 OUT2.DAT 中。例:原文:dAe,BfC.CCbbAA结果:fedCBA.bbCCAA原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。部分源程序存在文件 prog 1.c 中。请勿改动主函数main。、读数据函数ReadDat。和输出数据函数writeDat()的内容。#include #include #include char xx50801;int maxline=0;/*文章的总行数*/int ReadDat(void);void WriteDat(void);void SortCharD(void)int i,j,k,strl;char ch;for(i=0;imaxline;i+)strl=strlen(xxi);for(j=0;jstrH;j-H-)for(k=j+l ;kstrl;k+)if(xx|i|j|xx|ik)ch=xxij;xxij=xxik; xxik=ch;) void main()clrscr();if(ReadDat()printf(数据文件IN.DAT不能打开!n007);return;SortCharD();WriteDat();int ReadDat(void)(FILE *fp;int i=0;char *p;if(fp=fopen(IN.DAT,r)=NULL) return 1;while(fgets(xxi,80,fp)!=NULL) p=strchr(xxi,n);if(p)*p=O;i+;maxline=i;fclose(fp);return 0;)void WriteDat(void)(FILE *fp;int i;fp=fbpen(nOUT2.DATnwH);for(i=0;imaxline;i+) printf(n%snf;xxi);fprintf(fp,*%sn ,xx i);fclose(fp);产题目10(无忧id 68替换字符题)函数ReadDatO实现从文件 IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数ConvertCharA。,其函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的下一个字母,如果是字母z,则改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。把已处理的字符串仍按行重新存入字符串数组 xx中,最后调用函数writeDat()把结果xx输出到文件 OUT1.DAT 中。例:原文:Adb.Bcdzaabck.LLhj结果:Aec.Bdeab bcdl.LLik原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。部分源程序存在文件 progl.c 中。请勿改动主函数main。、读数据函数ReadDatO和输出数据函数writeDat。的内容。#include #include #include charxx5080;int maxline=0;/*文章的总行数*/int ReadDat(void);void WriteDat(void);void ConvertCharA(void)int i,j;for(i=0;imaxline;i+)fora=0;j=,a,&xx 川jv=,y,) xxijl+=l; void main()clrscr();if(ReadDat()printf(数据文件IN.DAT不能打开!n007n);return;)ConvertCharA();WriteDat();int ReadDat(void)(FILE *fp;int i=0;char *p;if(fp=fopen(1,IN.DATn;,r,)=NU LL) return 1;while(fgets(xxi,80,fp)!=NULL) p=strchr(xxfi/n,);if(p)*p=O;i+;)maxline=i;fclose(fp);return 0;void WriteDat(void)FILE *fp;inti;clrscr();fp=fopen(nOUTl .DATn,nwH);for(i=0;imaxline;i+)printf(n%snn,xxi);fprintf(fp,%snu,xxi);)fclose(fp);L题目11(无忧id 93字符串字母移位题)程序progl.c的功能是:把s字符串中的所有字母改写成该字母的下一个字母,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其它字符不做改变。请考生编写函数chg(char *s)实现程序要求,最后调用函数 readwriteDAT()把结果输出到文件 be Lout 中 o例如:s字符串中原有的内容为:Mn.l23Zxy,则调用该函数后,结果为:No.l23Ayzo注意:部分源程序存在文件 progl.c文件中。请勿改动主函数main()和输出数据函数readwriteDAT()的内容。#include #include #include #include #define N 81void readwriteDAT();void chg(char *s)while(*s)if(*s=,z,|*s=,Z,)*-=25;s+;else if(*s=*a,&*s=,A,&*s=,Yr *s+=l;s+;else s+;main()(char aN;clrscr();printf(Enter a string :*); gets(a);printf(The original string is :): puts(a);chg(a);printf(The string after modified:);puts (a);readwriteDAT();void readwriteDAT()(int i;char aN;FILE *rf,*wf;rf=fopen(nbcl.inn, V);wf = fopen(nbcl.outn, nw);for(i =0; i 50; i+)fscanf(rf, n%sn, a);chg(a);fprintf(wf, a);fclose(rf); fclose(wf);题目12(无忧id 78结构体运算题题)已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称me(字符型10位),单价dj(整型),数量si(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数 ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品名称从小到大进行排列,若产品名称相等,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件 OUT5.DAT 中。部分源程序存在文件 progl.c 中。请勿改动主函数main。、读数据函数ReadDat()和输出数据函数WriteDat。的内容。#include #include #include #include #include #define MAX 100typedef struct char dm5;/*产品代码*/char mcll;/*产品名称*/int dj;/*单价*/int si;/*数量*/long je;/*金额*/PRO;PRO sellMAX;void ReadDat();void WriteDat();void SortDat()int i,j;PRO xy;for(i=0;i99;i+)fora=i+l;jO|strcmp(sell|i|.mc,sellj.mc)=O &selli.jesell|j.je)xy=sell|i|;sell|i|=sell|j|;sell|j|=x y; void main()memset(sell,0,sizeof(sell);ReadDatO;SortDat();WriteDat();void ReadDat()(FILE *fp;char str8O,chll;inti;fp=fopen(,IN.DAT,nr);fdr(i=0;i100;i+)fgets(str,8O,fp);memcpy(selli.dm,str,4); memcpy(selli.mc,str+4,10); memcpy(ch,str+14,4);ch4=0;selli.dj=atoi(ch);me mcpy(ch,str+18,5);ch5=0; selli.sl=atoi(ch);selli.je=(long)selli.dj*selli.sl;fclose(fp);void WriteDat()(FILE *fp;int i;fp=fopen(”OUT5.DAT丁 w);for(i=0;i100;i+)printf(M%s %s %4d %5d %5dnn,s elli.dm,selli.mc,selli.dj,selli. sl,selli.je);fprintf(fp,n%s %s %4d %5d %5dnselli.dm,selli.mc,selli.dj,selli.sl,selli.je);)fclose(fp);f题目13(无忧id 81结构体运算题)无忧id 81题按金额从小到大进行排列已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称me(字符型10位),单价dj(整型),数量si(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数 ReadDat。是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品代码从小到大进行排列,若产品代码相等,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat。把结果输出到文件OUT9.DAT市。部分源程序存在文件 prog 1.c 中。请勿改动主函数main。、读数据函数ReadDat。和输出数据函数WriteDat。的内容。#include #include #include #include #include #define MAX 100typedef struct char dm5;/*产品代码*/char/*产品名称*/int dj;/*单价*/int si;/*数量*/long je;/*金额*/PRO;PRO sellMAX;void ReadDat();void WriteDat();void SortDat()int i,j;PRO xy;for(i=0;i99;i4-+)fora=i+l;j0|strc mp(sell i.dm,sell j .dm)=0&selli.jesellj.je)xy=sell |i;sell|i|=sell|j|;sell|jl=xy; void main()(memset(sell,0,sizeof(sell);ReadDat();SortDat();WriteDat();)void ReadDat()(FILE *fp;char str80,chll;int i;fp=fopen(,IN.DAT,T);for(i=0;i100;i+)fgets(str,80,fp);memcpy(sellfil.dm,str,4); memcpy(selli.mc,str4-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 WriteDat()FILE *fp; int i;fp=fopen(OUT9.DAT,w);fdr(i=O;ilOO;i+)printf(%s %s %4d %5d %5dn. selli.dm,selli.mc,seUi.dj,selli.sl,selli.je);fprintf(fp,%s %s %4d %5d %5dnselli.dm,selli.mc,selli.dj,selli.sl,selli.je);fclose(fp);L题目14(无忧id 151整数统计排序题)已知数据文件IN.DAT中存有200个四位数,并已调用读函数 readDat()把这些数存入数组a中,请考生编制-函数jsVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以后的五个数且该数是奇数(该四位数以后不满五个数,则不统计),则统计出满足此条件的个数ent并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果 ent以及数组b中符合条件的四位数输出到OUT.DAT文件中。
展开阅读全文