三级网络技术上机部分天河教育版word版.docx
《三级网络技术上机部分天河教育版word版.docx》由会员分享,可在线阅读,更多相关《三级网络技术上机部分天河教育版word版.docx(113页珍藏版)》请在冰豆网上搜索。
![三级网络技术上机部分天河教育版word版.docx](https://file1.bdocx.com/fileroot1/2023-1/31/1ad71ef2-6cef-47e3-9ae3-8e22ea2379dd/1ad71ef2-6cef-47e3-9ae3-8e22ea2379dd1.gif)
三级网络技术上机部分天河教育版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;ifor(j=i+1;jif(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;iyy[i]=0;
for(i=0;iif(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;itotfc+=(yy[i]-ave2)*(yy[i]-ave2)/even;
}
voidmain()
{
inti;
for(i=0;iif(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;ifor(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;iyy[i]=0;
for(i=0;iif(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;itotfc+=(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;itotfc+=(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;k9已知在文件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的产品代码小于产