60日間全力プログラミング

プログラミング初心者が二ヶ月間でどこまでいけるかを記録したプログラミング学習ブログ

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;
   
}