2022年2022年计算机网络技术级上机 .pdf
1,已知数据文件IN.DAT 中存有 300 个四位数,并以调用函数readDat() 把这些数存入数组 a 中,请编制一函数 jsValue(),其功能是: 求出所有这些四位数是素数的个数cnt, 再把所有满足此条件的四位数依次存入数组b 中,然后对数组b的四位数按从小到大的顺序进行排序。最后main() 调用写函数writeDat()把数组 b 中的数输出到 OUT.DAT 文件。例如: 5591 是素数,则该数满足条件存入数组b 中, 且个数 cnt=cnt+1 。 9812是非素数,则该数不满足条件忽略。程序中已定义数组:a300,b300,已定义变量cnt 请勿改动数据文件IN.DAT 中的任何数据、主函数main() 、读函数readDat()和写函数writeDat()的内容。#include int a300, b300, cnt=0 ; void readDat(); void writeDat(); void jsValue(); int isP(int m) int i ; for(i = 2 ; i m ; i+) if(m % i = 0) return 0 ; return 1 ; void jsValue() int i,j,tmp; for(i=0;i300;i+) if(isP(ai) bcnt=ai; cnt+; / 用选择排序法对数组b 进行排序for(i=0;icnt;i+) for(j=j+1;jcnt;j+) if(bibj) tmp=bi; bi=bj; bj=tmp; void main() int i ; readDat() ; jsValue() ; writeDat() ; printf(cnt=%dn, cnt) ; for(i = 0 ; i cnt ; i+) printf(b%d=%dn, i, bi) ; void readDat() FILE *fp ; int i ; fp = fopen(in.dat,r) ; for(i = 0 ; i 300 ; i+) fscanf(fp, %d, &ai) ; fclose(fp) ; void writeDat() FILE *fp ; int i ; fp = fopen(out.dat,w) ; fprintf(fp, %dn, cnt) ; for(i = 0 ; i cnt ; i+) fprintf(fp, %dn, bi) ; fclose(fp) ; 注意题目中已经提供了判断一个数是否是素数的函数,直接调用该函数判断数组元素是否是素数; 用选择排序法对数组b进行排序。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - 2,已知数据文件 IN.DAT 中存有 200 个四位数,并已调用读函数readDat() 把这些数存入数组 a 中,请编制一函数 jsVal(),其功能是: 若一个四位数的千位数位置上的值大于等于百位数位置上的值,百位数位置上的值大于等于十位数位置上的值,以及十位数位置上的值大于等于个位数位置上的值,并且原四位数是奇数,则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果 cnt 以及数组 b 中符合条件的数输出到OUT.DAT 文件中。#include #define MAX 200 int aMAX, bMAX, cnt = 0 ; void writeDat(); void jsVal() int i,j; /*定义所需变量*/ int tmp; int gw,sw,bw,qw; for(i=0;i=bw&bw=sw&sw=gw&ai%2=1) bcnt=ai; cnt+; for(i=0;icnt;i+) /*用选择排序法进行排序*/ for(j=j+1;jcnt;j+) if(bibj) tmp=bi; bi=bj; bj=tmp; void readDat() int i ; FILE *fp ; fp = fopen(in.dat, r) ; for(i = 0 ; i MAX ; i+) fscanf(fp, %d, &ai) ; fclose(fp) ; void main() int i ; readDat() ; jsVal() ; printf(满足条件的数 =%dn, cnt) ; for(i = 0 ; i cnt ; i+) printf(%d , bi) ; printf(n) ; writeDat() ; void writeDat() FILE *fp ; int i ; fp = fopen(out.dat, w) ; fprintf(fp, %dn, cnt) ; for(i = 0 ; i cnt ; i+) fprintf(fp, %dn, bi) ; fclose(fp) ; 因为要使用循环,故应定义循环变量i,j,变量 tmp用 于 存 放 计 算 的 中 间 结 果 , 此 外 还 需 定 义gw,sw,bw,qw 存放各位数位上的值。用 for语句进行 MAX次循环,每一次循环按要求进行判断,为真则存于数组b 中, cnt 累加 1 计数。 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 4 页 - - - - - - - - - 3,一直在文件IN.DAT 中存有 100 个产品销售记录,每个产品销售记录由产品代码dm (字符型 4 位) ,产品名称mc(字符型10 位) ,单价 dj (整型),数量 sl (整型),金额 je (长整型)五部分组成。其中:金额=单价 * 数量计算得出。函数ReadDat() 读取这 100 个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求: 按产品名称从大到小进行排序,若产品名称相同,则按金额从小到大的进行排列,最终排列结果仍存入结构数组sell中。最后main() 函数调用函数WriteDat()把结果输出到文件OUT.DAT中。 例如: selli=temp; #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() PRO temp; /*定义所需变量 */ int i,j; for(i=0;iMAX;i+) /*选择排序法 */ for(j=i+1;jMAX;j+) if(strcmp(selli.mc,sellj.mc)sellj.je) temp=selli; selli=sellj; sellj=temp; void main() memset(sell, 0, sizeof(sell) ; ReadDat() ; SortDat() ; WriteDat() ; void ReadDat() FILE *fp ; char str80, ch11 ; int i ; fp = fopen(K:k0135000215IN.DAT, r) ; for(i = 0 ; i 100 ; 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 = (long)selli.dj * selli.sl ; fclose(fp) ; void WriteDat() FILE *fp ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - int i ; fp = fopen(K:k0135000215OUT.DAT, w) ; for(i = 0 ; i 100 ; i+) fprintf(fp, %s %s %4d %5d %10ldn, selli.dm, selli.mc, selli.dj, selli.sl, selli.je) ; fclose(fp) ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -