1、2003年4月三级网络技术上机考试题1.在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)四局部组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品代码从大到小进行排列,假设产品代码相同,那么按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT10.DAT中。, 局部源程序已给出。,请勿改动主函数mai
2、n()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。,#include,#include,#include,#include,#include,#define MAX 100,typedef struct,char dm5; /*产品代码*/,char mc11; /*产品名称*/ ,int dj; /*单价*/,int sl; /*数量*/ ,long je; /*金额*/,PRO;,PRO sellMAX;,void ReadDat();,void WriteDat();,void SortDat(),void main(),memset(sell,0,sizeo
3、f(sell);,ReadDat();,SortDat();,WriteDat();,void ReadDat(),FILE *fp;,char str80,ch11;,int i;,fp=fopen(IN.DAT,r);,for(i=0;i100;i+),fgets(str,80,fp);,memcpy(selli.dm,str,4);,memcpy(selli.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=(
4、long)selli.dj*selli.sl;,fclose(fp);,void WriteDat(void),FILE *fp;,int i;,fp=fopen(OUT10.DAT,w);,for(i=0;i100;i+),fprintf(fp,%s %s %4d %5d %10Ldn, selli.dm,selli.mc,selli.dj,selli.sl,selli.je);,fclose(fp);,-,注:这时也是采用冒泡法进行排序。与前面的冒泡法在写法上有所不同请注意区分。,void SortDat(),int i,j;,PRO swap;,for(i=0;i for(j=0;j i
5、f(strcmp(sellj.dm,sellj+1.dm)0) /*用函数strcmp判断两个字符串的大小*/, swap=sellj; sellj=sellj+1; sellj+1=swap; ,if(strcmp(sellj.dm,sellj+1.dm)=0&sellj.je ,swap=sellj;,sellj=sellj+1;,sellj+1=swap;, ,假设产品代码相同,那么按金额从大到小进行排列没有表达!,2.six+six+six=nine+nine的个数cnt及它们的和sum,s,i,n,e是09自然数,但s,n不能为0.,如 984+984+984=1476+1476,,
6、我临时编的可能算法不太好,main(),int i,j,cnt=0;,float sum=0;,for(i=100;i1000;i+),for(j=1000;j10000;j+),if(i+i+i=j+j),cnt+;,sum=sum+i+j;,printf(%d+%d+%d=%d+%dn,i,i,i,j,j);,printf(%d,%f,cnt,sum);,参考这个:for(i=666;i=A&*pf*11%256=Z|*pf*11%25632) ,pf+;continue; ,*pf=*pf*11%256; ,pf+; , , , ,void encryptChar() , ,int i,
7、j,t; ,for(i=0;i ,for(j=0;j ,t=xxij*11%256; ,if(t=A & t=Z) continue; ,xxij=t; , , ,4.南开第一题,函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS10.DAT中。,替代关系:f(p)=p*11 mod 256 (p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符的ASC
8、II值是偶数或计算后f(p)值小于等于32,那么该字符不变,否那么将f(p)所对应的字符进行替代。,局部源程序已给出,原始数据文件存放的格式是:每行的宽度均小于80个字符。,请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 ,#include,#include,#include,#include,unsigned char xx5080;,int maxline=0;/*文章的总行数*/,int ReadDat(void),void WriteDat(void),void encryptChar(),void main(),clrscr();,
9、if(ReadDat(),printf(数据文件ENG.IN不能翻开!n007);,return;,encryptChar();,WriteDat();,int ReadDat(void),FILE *fp;,int i=0;,unsigned char *p;,if(fp=fopen(eng.in,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
10、;,fp=fopen(ps10.dat,w);,for(i=0;i printf(%sn,xxi);,fprintf(fp,%sn,xxi);,fclose(fp);,-,注:在ReadDat()函数中由于fgets()函数读入数据时没有读入字符串结束符0,因,而用while()循环在xx数组每一行未尾将换行符n替换成结束符0。,编写的函数如下:该函数的根本算法是让字符指针pf指向每一行的开头然后逐一往,后移动,在移动过程中按要求进行转换。*pf%2=0用于判断是否为偶数。if()条件语,句用于控制不替代字符。,的,解法1:,void encryptChar(),int i;,char *pf;,for(i=0;i pf=xxi; /*每行字符个数*/ ,while(*pf!=0),if(*pf%2=0|*pf*11%25632),pf+;continue; ,*pf=*pf*11%256;,pf+;,仅供参考