C言語で名前と売上を入力すると最高売上の人と金額と最低売上の人と金額を表示するプログラム
auです。
今回のプログラムは、名前と売上を入力するとその最高額と最低額の金額と、その人を表示するプログラムを組みました。
#include <stdio.h> #include <string.h> int main(void) { int number, total, sale, max_sale, min_sale, max_emp, min_emp, ave; char emp[256], max_emp_name[256], min_emp_name[256]; // 売上件数はnumber、総売上がtotal 初期値=0 number = 0; total = 0; printf("従業員の名前をendにすると終了\n"); // 従業員の名前を入力 printf("従業員の名前: "); scanf("%s", emp); // 売上の入力 printf("%sの売上: ", emp); scanf("%d", &sale); // 総売上に入力した売上を足す total += sale; // 基準になる最大の売り上げ max_sale = sale; // 基準になる最小の売り上げ min_sale = sale; // 最高売上の従業員の名前 strcpy(max_emp_name, emp); // 最小売上の従業員の名前 strcpy(min_emp_name, emp); // 入力件数+1 number++; // 従業員名がendになるまでループ /* strcmp(str1, str2)としたら、str1とstr2が同じ値(str1 == str2)の時に1を返す str1とstr2でstr1が大きい値(str1 > str2)の時に+の値(正の値)を返す st11とstr2でstr2が大きい値(str1 < str2)の時に-の値(負の値)を返す*/ while (strcmp(emp, "end") != 0) { // n人目の入力 printf("従業員の名前(endを入力で終了): "); scanf("%s", emp); if (strcmp(emp, "end") != 0) { // n人目の売上の入力 printf("%sの売上: ", emp); scanf("%d", &sale); } // 総売上に入力した売上を足す total += sale; // もし最大売上がn人目のほうが大きい場合はその値に更新 if (max_sale < sale) { max_sale = sale; // 従業員の名前の更新 strcpy(max_emp_name, emp); } // もし最小売上がn人目のほうが大きい場合はその値に更新 if (min_sale > sale) { min_sale = sale; // 従業員の名前の更新 strcpy(min_emp_name, emp); } // 入力件数+1 number++; } // 平均の入力 ave = total / number; // 合計、平均、件数の表示 printf("合計: %d 平均: %d 件数: %d\n", total, ave, number); // 最高売上の値と従業員の名前の表示 printf("売上最高: %d\n従業員名: %s", max_sale, max_emp_name); // 最小売上の値と従業員の名前の表示 printf("売上最小: %d\n従業員名: %s", min_sale, min_emp_name); return 0; } // 実行結果 従業員の名前をendにすると終了 従業員の名前: 佐藤 佐藤の売上: 100 従業員の名前(endを入力で終了): 伊藤 伊藤の売上: 200 従業員の名前(endを入力で終了): 加藤 加藤の売上: 300 従業員の名前(endを入力で終了): 井上 井上の売上: 500 従業員の名前(endを入力で終了): 浜田 浜田の売上: 800 従業員の名前(endを入力で終了): end 合計: 2700 平均: 450 件数: 6 売上最高: 800 従業員名: 浜田 売上最小: 100 従業員名: 佐藤
ちゃんとだしてくれました。
ただ、同じ金額を入力しても最初の人しかでてくれないのはどうにかしなければならないと思いました。