R31 give up 2,00
考察
完全に不明確な部分が多すぎる。これはいろいろ質問する部分がありそう。
箇条書きに上げておくと、
- char tanto[10],tanto_t[20][10];あなぜ[ ]の中の数字が10と20なのか?
- strcpy(tanto_t[kensu],"合計");どのときにstrcpyを使って”合計”を使うのか?
- printf(" %-8s %8d %6.1f%%\n",tanto_t[i],uriage_t[i],ritu);%-8s などの数字をどのように決めればいいのか?
2次元配列の組み方
参考例 九九を表示するプログラム
縦の大きさ、横の大きさ
%3d この3は幅を表している。大きければ大きいほど数字と数字の幅も大きくなる。
%[フラグ][最小フィールド][ . ][精度][h | l | L]フォーマット指定子
問題
担当者名が"end"になる迄、担当者名と売上を入力する。売上合計を求める。各担当の売
上が売上合計の何%になるかの比率の計算を行い、担当者名、売上、比率を表示する。
表示例
________________________________________
担当者 売上 比率 → 見出し
----------------------------------------
山田 12000 30.0%
鈴木 8000 20.0%
井上 20000 50.0%
合計 40000 100.0%
========================================= → フッター
考え方
(1)前処理
①件数(kensu)、合計(goukei)を0に設定する。
②「担当者名が"end"で終了」を表示する。
③一人目の担当者名(tanto)を入力する。
④一人目の売上(uriage)を入力する。
(2)担当者名が"end"になるまで次の処理を繰り返す。(while文を使用)
①売上を合計に加算する。(累計)
②件数に1を加算する。(カウント)
③売上を売上テーブル(uriage_t)の該当個所に(件数を添え字)格納する。
④担当者名を担当者名テーブル(tanto_t)の該当個所に(件数を添え字)格納する。
⑤二人目以降の担当者名を入力する。
⑥担当者名が"end"でなければ、売上を入力する。
(3)合計の格納と見出し表示
①件数に1を加える。
②担当者名テーブルの最後に(件数を添え字)"合計"を格納する。
③見出しを表示する。
(4)率の計算と明細の表示(格納した件数分繰り返す)(for文を使用)
・ヒント:for (i=1;i<=kensu;i++){ 以下省略
①率=担当者別売上×100.0÷合計
・ヒント:ritu = (double)uriage_t[i] * 100.0 / (double)goukei;
②担当者名、担当者別売上、率の表示。
(5)フッターを表示する。
#include<stdio.h>
#include<string.h>
int main(void){
int i,kensu,uriage,goukei;
int uriage_t[20];
double ritu;
char tanto[10],tanto_t[20][10];
kensu = 0;
goukei= 0;
printf("担当者名がendで終了\n");
printf("%d人目の担当者名は",kensu+1);
scanf("%s",tanto);
printf("%sさんの売上は",tanto);
scanf("%d",&uriage);
while (strcmp(tanto,"end")) {
goukei += uriage;
kensu++;
uriage_t[kensu]=uriage;
strcpy(tanto_t[kensu],tanto);
printf("%d人目の担当者名は",kensu+1);
scanf("%s",tanto);
if (strcmp(tanto,"end")) {
printf("%sさんの売上は",tanto);
scanf("%d",&uriage);
}
else printf("endと入力されたので記入を終了します。\n");
}
kensu+=1;
uriage_t[kensu]=goukei;
strcpy(tanto_t[kensu],"合計");
printf("担当者 売上 比率\n");
printf("-------------------------------------------\n");
for (i=1;i<=kensu;i++){
ritu = (double)uriage_t[i]*100.0/(double)goukei;
printf(" %-8s %8d %6.1f%%\n",tanto_t[i],uriage_t[i],ritu);
}
printf("===========================================\n");
return 0;
#include<string.h>
int main(void){
int i,kensu,uriage,goukei;
int uriage_t[20];
double ritu;
char tanto[10],tanto_t[20][10];
kensu = 0;
goukei= 0;
printf("担当者名がendで終了\n");
printf("%d人目の担当者名は",kensu+1);
scanf("%s",tanto);
printf("%sさんの売上は",tanto);
scanf("%d",&uriage);
while (strcmp(tanto,"end")) {
goukei += uriage;
kensu++;
uriage_t[kensu]=uriage;
strcpy(tanto_t[kensu],tanto);
printf("%d人目の担当者名は",kensu+1);
scanf("%s",tanto);
if (strcmp(tanto,"end")) {
printf("%sさんの売上は",tanto);
scanf("%d",&uriage);
}
else printf("endと入力されたので記入を終了します。\n");
}
kensu+=1;
uriage_t[kensu]=goukei;
strcpy(tanto_t[kensu],"合計");
printf("担当者 売上 比率\n");
printf("-------------------------------------------\n");
for (i=1;i<=kensu;i++){
ritu = (double)uriage_t[i]*100.0/(double)goukei;
printf(" %-8s %8d %6.1f%%\n",tanto_t[i],uriage_t[i],ritu);
}
printf("===========================================\n");
return 0;
}