计算机三级上机试题程序总结.docx
- 文档编号:8069693
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:47
- 大小:32.70KB
计算机三级上机试题程序总结.docx
《计算机三级上机试题程序总结.docx》由会员分享,可在线阅读,更多相关《计算机三级上机试题程序总结.docx(47页珍藏版)》请在冰豆网上搜索。
计算机三级上机试题程序总结
已知在文件IN.DAT中存有100个产品销售记录,每个产品销售
记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价
dj(整型),数量sl(整型),金额je(长整型)五部分组成。
其中:
金额=单价*数量计算得出。
函数ReadDat()读取这100个销售记录
并存入结构数组sell中。
请编制函数SortDat(),其功能要求:
按金额从小到大进行排列,若金额相等,则按产品代码从小到大
进行排列,最终排列结果仍存入结构数组sell中。
最后main()函
数调用函数WriteDat()把结果输出到文件OUT1.DAT中。
注意:
部分源程序存放在PROG1.C中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函
数WriteDat()的内容。
*/
#include
#include
#include
#include
#include
#defineMAX100
typedefstruct{
chardm[5];/*产品代码*/
charmc[11];/*产品名称*/
intdj;/*单价*/
intsl;/*数量*/
longje;/*金额*/
}PRO;
PROsell[MAX];
voidReadDat();
voidWriteDat();
voidSortDat()
{/**/
inti,j,k;
PROtt;
for(i=0;i {k=i; for(j=i+1;j if((sell[k].je>sell[j].je)||(sell[k].je==sell[j].je)&&(strcmp(sell[k].dm,sell[j].dm)>0)) k=j; if(k! =i) {tt=sell[k];sell[k]=sell[i];sell[i]=tt;} } /**/ } 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("OUT1.DAT","w"); for(i=0;i<100;i++){ fprintf(fp,"%s%s%4d%5d%10ld\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je); } fclose(fp); } 100个产品销售记录排序其余9题说明 1)in.dat内容完全相同。 2)程序也基本雷同,仅排序的要求不一样。 3)考生应熟悉strcmp()函数,否则有的题相当不好处理。 之二 排序要求: 按金额从小到大进行排列,若金额相等,则按产品代码从大到小 进行排列 相应语句: if(sell[k].je>sell[j].je||(sell[k].je==sell[j].je)&& (strcmp(sell[k].dm,sell[j].dm)<0)) 之三 排序要求: 按金额从大到小进行排列,若金额相等,则按产品代码从小到大 进行排列 相应语句: if((sell[k].je< sell[j].je)||(sell[k].je==sell[j].je)&&(strcmp(sell[k].dm, sell[j].dm)>0)) 之四 排序要求: 按金额从大到小进行排列,若金额相等,则按产品代码从大到小 进行排列 相应语句: if((sell[k].je< sell[j].je)||(sell[k].je==sell[j].je)&&(strcmp(sell[k].dm,sell[j].dm)<0)) 之五 排序要求: 按产品名称从小到大进行排列,若产品名称相同,则按金额从小 到大进行排列 相应语句: if((strcmp(sell[k].mc, sell[j].mc)>0)||(strcmp(sell[k].mc,sell[j].mc)==0)&&(sell[k].je>sell[j].je)) 之六 排序要求: 按产品名称从小到大进行排列,若产品名称相同,则按金额从大 到小进行排列 相应语句: if(strcmp(sell[i].mc,sell[j].mc)>0||(strcmp(sell[i].mc, sell[j].mc)==0)&&(sell[i].je 之七 排序要求: 按产品名称从大到小进行排列,若产品名称相同,则按金额从小 到大进行排列 相应语句: if((strcmp(sell[k].mc,sell[j].mc)<0)|| (strcmp(sell[k].mc,sell[j].mc)==0)&&(sell[k].je>sell[j].je)) 之八 排序要求: 按产品名称从大到小进行排列,若产品名称相同,则按金额从大 到小进行排列 相应语句: if((strcmp(sell[k].mc,sell[j].mc)<0)||(strcmp(sell[k].mc, sell[j].mc)==0)&&(sell[k].je 之九 排序要求: 按产品代码从小到大进行排列,若产品代码相同,则按金额从小 到大进行排列 相应语句: if((strcmp(sell[k].dm, sell[j].dm)>0)||(strcmp(sell[k].dm,sell[j].dm)==0)&&(sell[k].je>sell[j].je code: /* 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售 记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价 dj(整型),数量sl(整型),金额je(长整型)五部分组成。 其中: 金额=单价*数量计算得出。 函数ReadDat()读取这100个销售记 录并存入结构数组sell中。 请编制函数SortDat(),其功能要求: 按产品代码从大到小进行排列,若产品代码相同,则按金额从大 到小进行排列,最终排列结果仍存入结构数组sell中。 最后main() 函数调用函数WriteDat()把结果输出到文件OUT10.DAT中。 注意: 部分源程序存放在PROG1.C中。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函 数WriteDat()的内容。 */ #include #include #include #include #include #defineMAX100 typedefstruct{ chardm[5];/*产品代码*/ charmc[11];/*产品名称*/ intdj;/*单价*/ intsl;/*数量*/ longje;/*金额*/ }PRO; PROsell[MAX]; voidReadDat(); voidWriteDat(); voidSortDat() {/**/ inti,j; PROtt; for(i=0;i for(j=i+1;j {if(strcmp(sell[i].dm,sell[j].dm)<0) {tt=sell[i];sell[i]=sell[j];sell[j]=tt;} if((strcmp(sell[i].dm,sell[j].dm)==0)&&(sell[i].je {tt=sell[i];sell[i]=sell[j];sell[j]=tt;} } /**/ } 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("OUT10.DAT","w"); for(i=0;i<100;i++){ fprintf(fp,"%s%s%4d%5d%10ld\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je); } fclose(fp); } 老枪 300个四位数问题(此类共10题) 本类10题中,五题产生数组B,并对B按一定要求排序; 其余五题是求平均值。 我把它们分成两组五题来讨论。 以下为产生数组B之题一: code: /* 已知数据文件IN.DAT中存有300个四位数,并已调用读函数 readDat()把这些数存入数组a中,请编制一函数jsvalue(),其功 能是: 求出个位数上的数减千位数上的数减百位数上的数减十位 数上的数大于零的个数cnt,再把所有满足此条件的四位数依次 存入数组b中,然后对数组b的四位数按从大到小的顺序进行排序。 最后main()函数调用写函数writeDat()把数组b中的数输出到文 件OUT.DAT。 例如: 1239,9-1-2-3>0,则该数满足条件存入数组b中,且 个数cnt=cnt+1。 8129,9-8-1-2<0,则该数不满足条件忽略。 注意: 部分源程序存在文件PROG1.C文件中。 程序中已定义数组: a[300],b[300],已定义变量: cnt 请勿改动数据文件IN.DAT中的任何数据、主函数main()、读 函数readDat()和写函数writeDat()的内容。 */ #include inta[300],b[300],cnt=0; jsvalue() {/**/ inti,j,k,t; for(i=0;i<300;i++) if(a[i]%10-a[i]/1000-a[i]/100%10-a[i]/10%10>0) b[cnt++]=a[i]; for(i=0;i {k=i; for(j=i+1;j if(b[k] if(k! =i){t=b[k];b[k]=b[i];b[i]=t;} } /**/ } main() { inti; readDat(); jsvalue(); writeDat(); printf("cnt=%d\n",cnt); for(i=0;i } readDat() { FILE*fp; inti; fp=fopen("in.dat","r"); for(i=0;i<300;i++)fscanf(fp,"%d,",&a[i]); fclose(fp); } writeDat() { FILE*fp; inti; fp=fopen("out.dat","w"); fprintf(fp,"%d\n",cnt); for(i=0;i fclose(fp); } 要求: 求出所有这些四位数是素数的个数cnt,再把所有满足此 条件的四位数依次存入数组b中,然后对数组b的四位数按从小到 大的顺序进行排序。 out.dat文件内容应当为: 30 1231 1277 1283 1319 2543 2609 3793 3911 4013 4549 4817 4933 5591 5843 5939 6733 6791 6841 6871 6917 7297 7369 7703 8101 8221 8941 9013 9461 9689 9887 之四 要求: 求出千位数上的数减百位数上的数减十位数上的数减个位 数上的数大于零的个数cnt,再把所有满足此条件的四位数依次 存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序。 out.dat文件内容应当为: 20 4002 4102 5111 5400 6014 6302 7050 7105 7113 8101 8130 8203 8221 8303 8700 9013 9016 9052 9053 9800 之五 要求: 求出千位数上的数加百位数上的数等于十位数上的数加个 位数上的数的个数cnt,再把所有满足此条件的四位数依次存入 数组b中,然后对数组b的四位数按从大到小的顺序进行排序。 out.dat文件内容应当为: 22 7795 7429 7328 7153 6978 6767 6556 6226 5591 5555 5427 4509 4013 3672 3663 3205 3131 2855 2763 2543 2507 1625 __________________ 老枪 求满足条件的数的个数、平均值…… 求满足条件的数的个数、平均值及不满足条件的数的平均 值等,此类也是五题。 本处仅给出一个全题,其余题只给出不同 之处。 code: /* 已知数据文件IN.DAT中存有300个四位数,并已调用读函数 readDat()把这些数存入数组a中,请编制一函数jsvalue(),其功 能是: 求出千位数上的数减百位数上的数减十位数上的数减个位 数上的数大于零的个数cnt,再求出所有满足此条件的四位数平 均值pjz1,以及所有不满足此条件的四位数平均值pjz2。 最后 main()函数调用写函数writeDat()把结果cnt,pjz1,pjz2输出到 OUT.DAT文件。 例如: 9123,9-1-2-3>0,则该数满足条件计算平均值pjz1, 且个数cnt=cnt+1。 9812,9-8-1-2<0,则该数不满足条件计算平均值pjz2。 注意: 部分源程序存在文件PROG1.C文件中。 程序中已定义数组: a[300],已定义变量: cnt,pjz1,pjz2 请勿改动数据文件IN.DAT中的任何数据、主函数main()、读 函数readDat()和写函数writeDat()的内容。 */ #include inta[300],cnt=0; doublepjz1=0.0,pjz2=0.0; jsvalue() {/**/ inti; for(i=0;i<300;i++) if(a[i]/1000-a[i]/100%10-a[i]/10%10-a[i]%10>0) {cnt++;pjz1+=a[i];} elsepjz2+=a[i]; if(cnt)pjz1/=cnt; if(cnt<300)pjz2/=300-cnt; /**/ } main() { inti; readDat(); jsvalue(); writeDat(); printf("cnt=%d\n满足条件的平均值pzj1=%7.2lf\n不满足条件的平均值pzj2=%7.2lf\n",cnt,pjz1,pjz2); } readDat() { FILE*fp; inti; fp=fopen("in.dat","r"); for(i=0;i<300;i++)fscanf(fp,"%d,",&a[i]); fclose(fp); } writeDat() { FILE*fp; inti; fp=fopen("out.dat","w"); fprintf(fp,"%d\n%7.2lf\n%7.2lf\n",cnt,pjz1,pjz2); fclose(fp); } in.dat与前面给出的完全相同,out.dat内容应当如下: 20 7389.55 5524.03 __________________ 满足条件数的平均数……四题之说明 之二 要求: 求出千位数上的数加百位数上的数等于十位数上的数加个 位数上的数的个数cnt,再求出所有满足此条件的四位数平均值 pjz1,以及所有不满足此条件的四位数平均值pjz2。 正确程序生成的out.dat文件内容应当如下: 22 4876.86 5709.46 之三 要求: 求出个位数上的数减千位数上的数减百位数上的数减十位 数上的数大于零的个数cnt,再求出所有满足此条件的四位数平 均值pjz1,以及所有不满足此条件的四位数平均值pjz2。 正确程序生成的out.dat文件内容应当如下: 12 2926.08 5761.83 之四 要求: 求出所有这些四位数是素数的个数cnt,再求出所有满足 此条件的四位数平均值pjz1,以及所有不满足此条件的四位数平 均值pjz2。 正确程序生成的out.dat文件内容应当如下: 30 5782.87 5633.46 之五 要求: 求出千位数上的数加个位数上的数等于百位数上的数加十 位数上的数的个数cnt,再求出所有满足此条件的四位数平均值 pjz1,以及所有不满足此条件的四位数平均值pjz2。 正确程序生成的out.dat文件内容应当如下: 18 6681.22 5582.48 __________________ 老枪 200个四位数(此类共10题) 此部分题与300个数的题有相似之处。 之一 code: /* 已知数据文件IN.DAT中存有200个四位数,并已调用读函数 readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其 功能是: 把千位数字和十位数字重新组成一个新的十位数ab(新 十位数的十位数字是原四位数的千位数字,新十位数的个位数字 是原四位数的十位数字),以及把个位数字和百位数字组成另一 个新的十位数cd(新十位数的十位数字是原四位数的个位数字, 新十位数的个位数字是原四位数的百位数字),如果新组成的两 个十位数ab>cd,ab必须是偶数且能被5整除,cd必须是奇数,同 时两个新数的十位数字均不为零,则将满足此条件的四位数按从 大到小的顺序存入数组b中,并要计算满足上述条件的四位数的 个数cnt。 最后main()函数调用写函数writeDat()把结果cnt以 及数组b中符合条件的四位数输出到OUT.DAT文件中。 注意: 部分源程序存在文件PROG1.C文件中。 程序中已定义数组: a[200],b[200],已定义变量: cnt 请勿改动数据文件IN.DAT中的任何数据、主函数main()、读 函数readDat()和写函数writeDat()的内容。 */ #include #defineMAX200 inta[MAX],b[MAX],cnt=0; voidjsVal() {/**/ inti,j,k,A,B,C,D; for(i=0;i {A=a[i]/1000;B=a[i]/10%10;C=a[i]%10;D=a[i]/100%10; if(A&&C&&(B==0)&&(D%2)&&(10*A>10*C+D)) b[cnt++]=a[i]; } for(i=0;i {k=i; for(j=i+1;j if(b[k] if(k! =i){A=b[k];b[k]=b[i];b[i]=A;} } /**/ } voidreadDat()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 三级 上机 试题 程序 总结
![提示](https://static.bdocx.com/images/bang_tan.gif)