三级网络技术上机部分天河教育版word版.docx
- 文档编号:8523502
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:113
- 大小:66.08KB
三级网络技术上机部分天河教育版word版.docx
《三级网络技术上机部分天河教育版word版.docx》由会员分享,可在线阅读,更多相关《三级网络技术上机部分天河教育版word版.docx(113页珍藏版)》请在冰豆网上搜索。
三级网络技术上机部分天河教育版word版
1文件IN.DAT中存有200个销售记录,每个记录均由产品代码ID(字符型4位)、产品名称name(字符型10位)、单价price(整型)、数量amount(整型)、金额value(长整型)几部分组成。
其中:
金额=单价×数量,函数ReadData()负责将IN.txt中的数据读到结构数组sell[]中。
请编制函数sortData(),将各个记录按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,并将排列后的结果存放到sell[]中。
函数WriteData()负责将sell[]中的数据输出到文件OUT.txt中。
注意:
部分源程序已给出。
请勿改动主函数main()、读函数ReadData()和写函数WriteData()的内容。
试题程序:
#include
#include
#include
#include
#defineMAX100
typedefstruct
{
charID[5];//产品代码
charname[11];//产品名称
intprice;//单价
intamount;//数量
longvalue;//金额
}PRODUCT;
PRODUCTsell[MAX];
voidreadData();
voidwriteData();
voidsortData()
{
PRODUCTtemp;
inti,j;
memset(&temp,0,sizeof(temp));
for(i=0;i for(j=i+1;j if(strcmp(sell[i].ID,sell[j].ID)<0||(strcmp(sell[i].ID,sell[j].ID)==0&&sell[i].value { memcpy(&temp,&sell[i],sizeof(temp));//将以&sell[i]为起始地址大小为sizeof(temp)的的内存中的内容复制到以&temp为起始地址的内存中 memcpy(&sell[i],&sell[j],sizeof(temp)); memcpy(&sell[j],&temp,sizeof(temp)); } } voidreadData() { FILE*fp; charstr[80],ch[11]; inti; fp=fopen("IN.DAT","r"); for(i=0;i { fgets(str,80,fp); memcpy(sell[i].ID,str,4); memcpy(sell[i].name,str+4,10); memcpy(ch,str+14,4);ch[4]=0; sell[i].price=atoi(ch); memcpy(ch,str+18,5);ch[5]=0; sell[i].amount=atoi(ch); sell[i].value=(long)sell[i].price*sell[i].amount; } fclose(fp); } voidwriteData() { FILE*fp; inti; fp=fopen("OUT.DAT","w"); for(i=0;i { fprintf(fp,"%s%s%4d%5d%10ld\n",sell[i].ID,sell[i].name,sell[i].price,sell[i].amount,sell[i].value); } fclose(fp); } voidmain() { memset(sell,0,sizeof(sell)); readData(); sortData(); writeData(); } 2请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中偶数的个数even,奇数的平均值ave1,偶数的平均值ave2以及方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。 计算方差的公式如下: totfc=1/N∑Ni=1(xx[i]-ave2)2 设N为偶数的个数,xx[i]为偶数,ave2为偶数的平均值。 原始数据文件存放的格式是: 每行存放10个数,并用逗号隔开。 (每个数均大于0且小于等于2000) 注意: 部分源程序已给出。 请勿改动主函数main()和输出数据函数writeDat()的内容。 试题程序: #include #include #include #defineMAX1000 intxx[MAX],odd=0,even=0; doubleave1=0.0,ave2=0.0,totfc=0.0; voidWriteDat(void); intReadDat(void) {inti; FILE*fp; if((fp=fopen("IN.DAT","r"))==NULL)return1; /*********编制函数ReadDat()的部分************/ for(i=0;i {fscanf(fp,"%d,",&xx[i]);//读取文件中的数据存入变量xx[i]中 if((i+1)%10==0)//每行存10个数 fscanf(fp,"\n");}//读取行后的换行符 /*******************************************/ fclose(fp); return0; } voidCompute(void) {inti,yy[MAX]; for(i=0;i yy[i]=0; for(i=0;i if(xx[i]%2==0)//测试结点i是否是偶数 {yy[even++]=xx[i];//将结点i存入数组yy中 ave2+=xx[i];}//将结点i累加存入ave2中 else//如果结点i不是偶数 {odd++;//累加变量odd记录奇数数的个数 ave1+=xx[i];}//将xx[i]累加存入ave1中 if(odd==0)ave1=0; elseave1/=odd;//计算奇数数的平均数 if(even==0)ave2=0; elseave2/=even;//计算偶数数的平均数 for(i=0;i totfc+=(yy[i]-ave2)*(yy[i]-ave2)/even; } voidmain() { inti; for(i=0;i if(ReadDat()){ printf("数据文件IN.DAT不能打开! \007\n"); return; } Compute(); printf("EVEN=%d\nAVE1=%f\nAVER2=%f\nTOTFC=%f\n",even,ave1,ave2,totfc); WriteDat(); } voidWriteDat(void) { FILE*fp; inti; fp=fopen("OUT.DAT","w"); fprintf(fp,"%d\n%f\n%f\n%f\n",even,ave1,ave2,totfc); fclose(fp); } 3文件IN.DAT中存有一篇英文文章,函数ReadData()负责将IN.DAT中的数据读到数组inBuf[]中。 请编制函数replaceChar(),该函数的功能是: 以行为单位把字符串中的所有字符的ASCII值右移4位,然后把右移后的字符的ASCII值再加上原字符的ASCII值,得到新的字符,并存入原字符串对应的位置上。 把已处理的字符串仍按行重新存入字符串数组inBuf中,函数WriteData()负责将inBuf[]中的数据输出到文件OUT.DAT中并且在屏幕上打出。 原始数据文件存放的格式是: 每行的宽度均小于80个字符,含标点符号和空格。 注意: 部分源程序已给出。 请勿改动主函数main()、读函数ReadData()和写函数WriteData()的内容。 试题程序: #include #include #include #include #defineLINE50 #defineCOL80 charinBuf[LINE][COL]; inttotleLine=0;//文章的总行数 intreadData(void); voidwriteData(void); voidreplaceChar() { inti,j,y; for(i=0;i for(j=0;j { y=(int)inBuf[i][j]/16+(int)inBuf[i][j];//将ASCII码右移4位,再加上自身的值 inBuf[i][j]=(char)y;//将整型转换成字符型存入inBuf中 } } voidmain() { system("CLS"); if(readData()) { printf("IN.DATcan'tbeopen! \n\007"); return; } replaceChar(); writeData(); } intreadData(void) { FILE*fp; inti=0; char*p; if((fp=fopen("IN.DAT","r"))==NULL)return1; while(fgets(inBuf[i],COL+1,fp)! =NULL) { p=strchr(inBuf[i],'\n'); if(p)*p=0; i++; } totleLine=i; fclose(fp); return0; } voidwriteData(void) { FILE*fp; inti; fp=fopen("OUT.DAT","w"); for(i=0;i { printf("%s\n",inBuf[i]); fprintf(fp,"%s\n",inBuf[i]); } fclose(fp); } 4补充函数,要求实现如下功能: 寻找并输出11~999之间的数m,它满足m,m2,m3均为回文数(回文数是指各位数字左右对称的整数),例如: 12321,505,1458541等。 满足上述条件的数如m=11时,m2=121,m3=1331都是回文数。 请编写jsValue(longm)实现此功能。 如果是回文数,则函数返回1,不是则返回0。 最后,把结果输出到文件OUT.DAT中。 注意: 部分源程序已经给出。 请勿改动主函数Main()中的内容。 试题程序: #include #include #include #include #defineMAX100 typedefstruct{ chardm[5];/*产品代码*/ charmc[11];/*产品名称*/ intdj;/*单价*/ intsl;/*数量*/ longje;/*金额*/ }PRO; PROsell[MAX]; voidReadDat(); voidWriteDat(); voidSortDat() {inti,j; PROxy; for(i=0;i<99;i++) for(j=i+1;j<100;j++) if(strcmp(sell[i].mc,sell[j].mc)<0//如果产品i的产品名称小于产品j的产品名称 ||strcmp(sell[i].mc,sell[j].mc)==0//如果产品i的产品名称等于产品j的产品名称 &&sell[i].je>sell[j].je)//如果产品i的金额大于产品j的金额 {xy=sell[i];sell[i]=sell[j];sell[j]=xy;}//产品i和产品j交换 } voidmain() { memset(sell,0,sizeof(sell)); ReadDat(); SortDat(); WriteDat(); } voidReadDat() { FILE*fp; charstr[80],ch[11]; inti; fp=fopen("IN.DAT","r"); for(i=0;i<100;i++){ fgets(str,80,fp); memcpy(sell[i].dm,str,4); memcpy(sell[i].mc,str+4,10); memcpy(ch,str+14,4);ch[4]=0; sell[i].dj=atoi(ch); memcpy(ch,str+18,5);ch[5]=0; sell[i].sl=atoi(ch); sell[i].je=(long)sell[i].dj*sell[i].sl; } fclose(fp); } voidWriteDat() { FILE*fp; inti; fp=fopen("OUT7.DAT","w"); for(i=0;i<100;i++){ printf("%s%s%4d%5d%5d\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je); fprintf(fp,"%s%s%4d%5d%5d\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je); } fclose(fp); } 5 请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中奇数的个数odd,奇数的平均值ave1,偶数的平均值ave2以及所有奇数的方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。 计算方差的公式如下: N2 totfc=1/N∑(xx[i]-ave1) i=1 设N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。 原始数据文件存放的格式是: 每行存放10个数,并用逗号隔开。 (每个数均大于0且小于等于2000) 注意: 部分源程序已给出如下: 请勿改动主函数main()和输出数据函数writeDat()的内容。 试题程序 for(i=0;i {fscanf(fp,"%d,",&xx[i]);//读取文件中的数据存入变量xx[i]中 if((i+1)%10==0)//每行存10个数 fscanf(fp,"\n"); } voidCompute(void) {inti,yy[MAX]; for(i=0;i yy[i]=0; for(i=0;i if(xx[i]%2)//测试结点i是否是奇数 {yy[odd++]=xx[i];//将结点i存入数组yy中 ave1+=xx[i];}//将结点i累加存入ave1中 else//如果结点i不是奇数 {even++;//累加变量even记录偶数数的个数 ave2+=xx[i];}//将xx[i]累加存入ave2中 if(odd==0)ave1=0; elseave1/=odd;//计算奇数数的平均数 if(even==0)ave2=0; elseave2/=even;//计算偶数数的平均数 for(i=0;i totfc+=(yy[i]-ave1)*(yy[i]-ave1)/odd; } 6 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。 其中: 金额=单价*数量计算得出。 函数ReadDat()是读取这100个销售记录并存入结构数组sell中。 请编制函数SortDat(),其功能要求: 按产品名称从大到小进行排列,若产品名称相等,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT5.DAT中。 注意: 部分源程序已给出如下: 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 试题程序 voidSortDat() {inti,j; PROxy; for(i=0;i<99;i++) for(j=i+1;j<100;j++) if(strcmp(sell[i].mc,sell[j].mc)<0//如果产品i的产品名称大于产品j的产品名称 ||strcmp(sell[i].mc,sell[j].mc)==0//如果产品i的产品名称等于产品j的产品名称 &&sell[i].je {xy=sell[i];sell[i]=sell[j];sell[j]=xy;}//产品i和产品j交换 } 7 请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute(),分别计算出xx中奇数的个数odd,偶数的个数even,平均值aver以及方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。 计算方差的公式如下: N2 totfc=1/N∑(xx[i]-aver) i=1 原始数据文件存放的格式是: 每行存放10个数,并用逗号隔开。 (每个数均大于0且小于等于2000) 注意: 部分源程序已给出如下: 请勿改动主函数main()和输出数据函数writeDat()的内容。 试题程序 for(i=0;i {fscanf(fp,"%d,",&xx[i]);//读取文件中的数据存入变量xx[i]中 if((i+1)%10==0)//每行读取10个数 fscanf(fp,"\n"); } voidCompute(void) {inti; for(i=0;i {if(xx[i]%2)//测试结点i是否是奇数 odd++;//累加变量odd记录奇数数的个数 else//如果结点i不是奇数 even++;//累加变量even记录偶数数的个数 aver+=xx[i];}//将xx[i]累加存入aver中 } aver/=MAX;//计算平均数 for(i=0;i totfc+=(xx[i]-aver)*(xx[i]-aver); totfc/=MAX; } 8 文件IN.DAT中存放有100条对10个候选人进行选举的记录,每条记录的长度均为10位,第一位表示第一个人选中的情况,第二位表示第二个人的选中情况,依次类推。 每一位内容均为字符0或1,1表示此人被选中,0表示此人未被选中,全选或全部选(空选票)均为无效选票。 函数readData()负责将IN.DAT中的内容读入到数组inBuf[]中。 请编制函数calculate()来统计每个人的选票数并把得票数依次存入outBuf[0]~outBuf[9]中,最后调用函数WriteData()把结构outBuf[]输入到文件OUT.DAT中。 注意: 部分源程序已给出。 请勿改动主函数main()、读函数readData()和写函数Writedata的内容。 试题程序: inti,j,k,sum,use_i; intuseful[LINE]={-1}; k=0; for(i=0;i { sum=0;//将总和清零 for(j=0;j if(sum>0&&sum { useful[k]=i;//将有效的选票的标号放到数组useful中 k++;//将有效选票的计数器加1 } } use_i=k;//记录有效选票的个数 for(j=0;j for(k=0;k 9已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。 其中: 金额=单价*数量计算得出。 函数ReadDat()是读取这100个销售记录并存入结构数组sell中。 请编制函数SortDat(),其功能要求: 按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT6.DAT中。 注意: 部分源程序已给出如下: 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 试题程序 voidSortDat() {inti,j; PROxy; for(i=0;i<99;i++) for(j=i+1;j<100;j++) if(strcmp(sell[i].dm,sell[j].dm)<0//如果产品i的产品代码小于产
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三级 网络技术 上机 部分 天河 教育 word