1题目:
题目6:在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行升序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat中。
例:处理前 9012 5099 6012 7025 8088
处理后 5099 8088 7025 6012 9012
注意:部分源程序已给出。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
--------------------
void jsSort() /*标准答案*/
{int I,j,data;
for(I=0;I<199;I++)
for(j=I+1;j<200;j++)
{if (aa[I]%1000<aa[j]%1000)
{data=aa[I];aa[I]=aa[j];aa[j]=data;}
else if(aa[I]%1000==aa[j]%1000)
if(aa[I]>aa[j])
{data=aa[I];aa[I]=aa[j];aa[j]=data;}
}
for(I=0;I<10;I++)
bb[I]=aa[I];
}
PROG1.C
#include<stdio.h>
#include<string.h>
#include<conio.h>
int aa[200],bb[10];
void jsSort()
{
}
void main()
{
readDat();
jsSort();
writeDat();
system("pause");
}
readDat()
{
FILE *in;
int i;
in=fopen("in.dat","r");
for(i=0; i<200; i++) fscanf(in,"%d,",&aa[i]);
fclose(in);
}
writeDat()
{
FILE *out;
int i;
clrscr();
out=fopen("out.dat","w");
for(i=0; i<10; i++){
printf("i=%d,%d\n",i+1,bb[i]);
fprintf(out,"%d\n",bb[i]);
}
fclose(out);
}
IN.DAT
6012
5099
9012
7025
8088
7055
5334
7607
8145
6012
5099
9012
7025
8088
7055
5334
5795
2896
3019
7747
7607
8145
7090
4140
8626
7905
3735
9620
8714
9496
3640
5249
7671
5925
4687
2982
6227
6478
2638
2793
8298
8246
5892
9861
5795
2896
3019
7747
7607
8145
6012
5099
9012
7025
8088
7055
5334
5795
2896
3019
7747
7607
8145
7090
4140
8626
7905
3735
9620
8714
9496
3640
5249
7671
5925
4687
2982
6227
6478
2638
2793
8298
8246
5892
9861
9110
2269
6951
9800
2439
5339
1064
9994
6762
5752
1001
1030
7989
2845
2958
3820
3010
9486
9798
4014
2783
1604
1628
6466
4101
4128
7127
3262
6332
2076
1860
5834
4580
9057
2614
7852
3789
2897
9194
6317
6276
4285
5610
6945
9137
8348
5434
9162
4303
6779
5025
5137
4630
3535
4048
2697
2438
9791
3903
3650
4899
1557
4745
2573
6288
5421
1563
9385
6545
5061
3905
1074
7840
4596
7537
5961
8327
2104
1055
3317
1282
5368
6571
5440
8274
1919
6789
4542
3570
1500
7044
9288
5302
7577
4018
4619
4922
2076
3297
5898
1699
9276
4439
2729
8725
7507
2729
6736
2566
3227
7901
2973
2353
4805
2546
3406
4824
2060
8645
5886
7549
9279
3310
5429
6344
4100
9604
1146
9234
6202
3477
1492
4800
2194
9937
1304
3454
5477
9230
5382
4064
8472
8262
6724
7219
9968
3398
OUT.DAT
9994
7989
2982
2982
2973
5961
2958
6951
6945
5925
2题目:
题目7:已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)四部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT10.DAT中。
注意: 部分源程序存放在PROG1.C中。
请勿改动主函数main( )、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
----------------------------------
void SortDat() /*标准答案*/
{int I,j;
PRO xy;
for(I=0;I<99;I++)
for(j=I+1;j<100;j++)
if(strcmp(sell[I].dm,sell[j].dm)<0)
{xy=sell[I];sell[I]=sell[j];sell[j]=xy;}
else if(strcmp(sell[I].dm,sell[j].dm)==0)
if(sell[I].je<sell[j].je)
{xy=sell[I]; sell[I]=sell[j]; sell[j]=xy;}
}
PROG1.C
#include<stdio.h>
#include<mem.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#define MAX 100
typedef struct{
char dm[5]; /*产品代码*/
char mc[11]; /*产品名称*/
int dj; /*单价*/
int sl; /*数量*/
long je; /*金额*/
}PRO;
PRO sell[MAX];
void ReadDat();
void WriteDat();
void SortDat()
{
}
void main()
{ memset(sell,0,sizeof(sell));
ReadDat();
SortDat();
WriteDat(); }
void ReadDat()
{FILE *fp;
char str[80],ch[11];
int i;
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);}
void WriteDat(void)
{FILE *fp;
int i;
fp=fopen("OUT10.DAT","w");
for(i=0;i<100;i++){
fprintf(fp,"%s %s %4d %5d %101d\n", sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}
fclose(fp);}
IN.DAT
1001软件世界 5 100
1002计算机用户 6 120
1003网上生活 27 1
1004网络互连 45 10
1005威宝3.5 5 1000
10063M3.5 3 150
1007办公自动化 90 100
1008JAVA 48 15
1009中文WORD97 68 10
1010EXCLE97 98 103
1011OFFICE97 108 18
1012ACCESS 64 78
1013二级BASIC 65 66
1014二级PASCAL 66 89
1015二级C 67 99
1016二级FOR 66 12
1017二级FOX 66 100
1018AUTO CAD 98 871
1019PhotoShop 68 64
1020一级 78 101
1021一级B类 98 1000
1022三级A类 78 765
1023三级B类 78 888
1024四级 88 666
1025INTERNET 58 1858
1001软件世界 5 101
1002计算机用户 6 120
1003网上生活 27 31
1004网络互连 45 1000
1005威宝3.5 5 5001
10063M3.5 3 300
1007办公自动化 90 871
1008JAVA 48 888
1009中文WORD97 68 999
1010EXCLE97 98 981
1011OFFICE97 108 18
1012ACCESS 64 78
1013二级BASIC 65 166
1014二级PASCAL 66 189
1015二级C 67 199
1016二级FOR 66 112
1017二级FOX 66 2000
1018AUTO CAD 98 71
1019PhotoShop 68 164
1020一级 78 110
1021一级B类 98 1100
1022三级A类 78 705
1023三级B类 78 888
1024四级 88 650
1025INTERNET 58 2858
1001软件世界 5 102
1002计算机用户 6 121
1003网上生活 27 11
1004网络互连 45 20
1005威宝3.5 5 1300
10063M3.5 3 250
1007办公自动化 90 130
1008JAVA 48 115
1009中文WORD97 68 20
1010EXCLE97 98 203
1011OFFICE97 108 818
1012ACCESS 64 178
1013二级BASIC 65 166
1014二级PASCAL 66 289
1015二级C 67 899
1016二级FOR 66 112
1017二级FOX 66 500
1018AUTO CAD 98 71
1019PhotoShop 68 4
1020一级 78 181
1021一级B类 98 1500
1022三级A类 78 65
1023三级B类 78 88
1024四级 88 66
1025INTERNET 58 858
1001软件世界 5 200
1002计算机用户 6 220
1003网上生活 27 21
1004网络互连 45 30
1005威宝3.5 5 1050
10063M3.5 3 150
1007办公自动化 90 100
1008JAVA 48 15
1009中文WORD97 68 10
1010EXCLE97 98 103
1011OFFICE97 108 18
1012ACCESS 64 78
1013二级BASIC 65 66
1014二级PASCAL 66 89
1015二级C 67 99
1016二级FOR 66 12
1017二级FOX 66 600
1018AUTO CAD 98 971
1019PhotoShop 68 164
1020一级 78 701
1021一级B类 98 8899
1022三级A类 78 115
1023三级B类 78 118
1024四级 88 116
1025INTERNET 58 58
OUT.DAT
1025 INTERNET 58 2858 -30844
1025 INTERNET 58 1858 -23308
1025 INTERNET 58 858 -15772
1025 INTERNET 58 58 3364
1024 四级 88 666 -6928
1024 四级 88 650