#include <stdlib.h>#include <stdio.h>#include <memory.h> //提供了內存操作相關的一些函數及聲明float waterfact, powerfact;int counter;typedef struct userinfo{long number;int waterconsump;int powerconsump;} userinfo;userinfo users[100];void createdatafile(){FILE *fp;int ws, ps;long num;float t1, t2;if ((fp = fopen("input.dat", "w")) == NULL){printf("打開文件失?。n");exit(-1);}printf("請輸入水費的標準和電費標準(空格分開):\n");scanf("%f %f", &t1, &t2);fprintf(fp, "%.2f %.2f\n", t1, t2);printf("請輸入住戶信息(住戶地址 水耗<噸> 電耗<度>,0結束輸入):\n");while (1){scanf("%ld", &num);if (num == 0) break;scanf("%d %d", &ws, &ps);fprintf(fp, "%ld %d %d\n", num, ws, ps);}fclose(fp);}void readdatafile(){FILE *fp;int i = 0;if ((fp = fopen("input.dat", "r")) == NULL){printf("打開文件失?。n");exit(-1);}fscanf(fp, "%f %f", &waterfact, &powerfact);while (1){memset(users + i, 0, sizeof(userinfo));fscanf(fp, "%ld %d %d", &users[i].number, &users[i].waterconsump, &users[i].powerconsump);if (users[i].number == 0)break;++i;}counter = i;fclose(fp);}void processdata(){FILE *fp;float t1, t2, t3, s1, s2, s3;int i, s4, s5;t1 = t2 = t3 = s1 = s2 = s3 = 0.0;s4 = s5 = 0;if ((fp = fopen("charge.dat", "w")) == NULL){printf("打開文件失??!\n");exit(-1);}printf("住戶地址 水耗(噸) 水費(元) 電耗(度) 電費(元) 合計(元)\n");for (i = 0; i < counter; ++i){t1 = users[i].waterconsump * waterfact;t2 = users[i].powerconsump * powerfact;t3 = t1 + t2;s1 += t1; s2 += t2;s3 += t3;s4 += users[i].waterconsump;s5 += users[i].powerconsump;fprintf(fp, "%ld %d %.2f %d %.2f %.2f\n", users[i].number, users[i].waterconsump, t1, users[i].powerconsump, t2, t3);printf("%ld\t%d\t%.2f\t%d\t%.2f\t%.2f\n", users[i].number, users[i].waterconsump, t1, users[i].powerconsump, t2, t3);}fprintf(fp, "總共 %d %.2f %d %.2f %.2f\n", s4, s1, s5, s2, s3);printf("總共\t%d\t%.2f\t%d\t%.2f\t%.2f\n", s4, s1, s5, s2, s3);fclose(fp);}void main(){createdatafile();readdatafile();processdata();system("PAUSE");}
3 回答

largeQ
TA貢獻2039條經驗 獲得超8個贊
#include #include #include //提供了內存操作相關的一些函數及聲明 float waterfact, powerfact; int counter; typedef struct userinfo { long number; int waterconsump; int powerconsump; } userinfo; userinfo users[100];//定義結構體數組 void createdatafile() { FILE *fp; int ws, ps; long num; float t1, t2; if ((fp = fopen("input.dat", "w")) == NULL) //判斷文件是否能打開 { printf("打開文件失??!\n"); exit(-1); // 打開文件失敗 退出 } printf("請輸入水費的標準和電費標準(空格分開):\n"); scanf("%f %f", &t1, &t2); // 輸入 注意 : 兩個輸入之間有一個空格 格式輸出 , fprintf(fp, "%.2f %.2f\n", t1, t2); // 數據寫入 文件fp printf("請輸入住戶信息(住戶地址 水耗 電耗,0結束輸入):\n"); while (1) // 錄入數據,直到 num=0 { scanf("%ld", &num); if (num == 0) break; scanf("%d %d", &ws, &ps); fprintf(fp, "%ld %d %d\n", num, ws, ps); } fclose(fp); } void readdatafile() { FILE *fp; int i = 0; if ((fp = fopen("input.dat", "r")) == NULL) { printf("打開文件失敗!\n"); exit(-1); } fscanf(fp, "%f %f", &waterfact, &powerfact); while (1) { memset(users + i, 0, sizeof(userinfo)); fscanf(fp, "%ld %d %d", &users[i].number, &users[i].waterconsump, &users[i].powerconsump); if (users[i].number == 0) break; ++i; } counter = i; fclose(fp); } void processdata() { FILE *fp; float t1, t2, t3, s1, s2, s3; int i, s4, s5; t1 = t2 = t3 = s1 = s2 = s3 = 0.0; // 初始化 s4 = s5 = 0; if ((fp = fopen("charge.dat", "w")) == NULL) { printf("打開文件失??!\n"); exit(-1); }

幕布斯7119047
TA貢獻1794條經驗 獲得超8個贊
createdatafile(); 讓用戶輸入一些數據(住戶地址 水耗<噸> 電耗<度>等 ),然后產生一個數據文件 ;
readdatafile 則從改文件中讀出數據放到 users,counter中;
processdata 比較簡單,對Users數據進行處理打印,同事做點統計工作。
- 3 回答
- 0 關注
- 152 瀏覽
添加回答
舉報
0/150
提交
取消