参考程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_RECORDS 100
// 销售记录结构体
typedef struct {
char code[5];
char name[11];
int price;
int quantity;
long amount;
} SalesRecord;
// 比较函数,用于排序销售记录
int compareRecords(const void* a, const void* b) {
SalesRecord* recordA = (SalesRecord*)a;
SalesRecord* recordB = (SalesRecord*)b;
// 按产品代码升序排序
int codeComparison = strcmp(recordA->code, recordB->code);
if (codeComparison != 0) {
return codeComparison;
}
// 如果产品代码相同,按金额降序排序
return recordB->amount - recordA->amount;
}
int main() {
FILE* input = fopen("A_01_in.dat", "r");
FILE* output = fopen("A_01_out.dat", "w");
if (input == NULL || output == NULL) {
printf("无法打开文件。\n");
return 1;
}
while (!feof(input)) {
int numRecords;
fscanf(input, "%d", &numRecords);
fgetc(input); // 读取换行符
SalesRecord records[MAX_RECORDS];
// 读取销售记录
for (int i = 0; i < numRecords; i++) {
fscanf(input, "%s %s %d %d %ld", records[i].code, records[i].name, &records[i].price, &records[i].quantity, &records[i].amount);
fgetc(input); // 读取换行符
}
// 按要求排序销售记录
qsort(records, numRecords, sizeof(SalesRecord), compareRecords);
// 写入排序后的销售记录
fprintf(output, "%d\n", numRecords);
for (int i = 0; i < numRecords; i++) {
fprintf(output, "%s, %s, %d, %d, %ld\n", records[i].code, records[i].name, records[i].price, records[i].quantity, records[i].amount);
}
// 找出金额总和最大的产品代码
char maxAmountCode[5];
long maxAmount = 0;
for (int i = 0; i < numRecords; i++) {
if (records[i].amount > maxAmount) {
maxAmount = records[i].amount;
strcpy(maxAmountCode, records[i].code);
}
}
fprintf(output, "%s\n", maxAmountCode);
}
fclose(input);
fclose(output);
printf("程序执行完毕。\n");
return 0;
}
A_01_out.dat 的数据如下:
4
M001, machine, 500, 70, 35000
M001, machine, 500, 20, 10000
M150, machine, 400, 40, 16000
P106, Power, 600, 70, 42000
P106
2
M001, machine, 500, 70, 35000
P106, Power, 600, 70, 42000
P106