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

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

R32 give up 1,00

考察
R31を完全に理解しないとR32もとくのが難しい。部門コードを部門名に振り当てるやり方は、もしかしたらswitch文を使うのではと思ったけど、そんな訳ないかと実行しなかったのが悔しい。
switch (bucode) {
           
case 1:
                strcpy(buname_t[kensu],
"総務部");
                break;
このやり方でそれぞれの数字に名前を割り当てることができる。入力の手間を省くためにコード入力してもらう時に使えそう。
 
char buname_t[7][10];
kensu+=1;
    keihi_t[kensu]=goukei;
    bucode_t[kensu]=
9;
    strcpy(buname_t[kensu],"合計");
ここら辺のコードの理解が不十分。
 
 
 
問題
 部門コードが9になる迄、部門コードと経費を入力する。部門毎の経費の比率に応じて一般
管理費(4000)を按分する。部門コード、部門名、経費、比率、按分金額を表示する。
【金額は千円単位とする】
 
               表示例
 
______________________________________________
  コード  部門名    経費  比率   按分金額    → 見出し
-----------------------------------------------------
   1   総務部    3200   6.4 %    256
   2   人事部    9000  18 .0%    720
   3   企画部    2000   4 .0%    160
   4   営業部   12000  24.0%    960
   5   製造部   23800  47.6%   1904
       合 計   50000  100.0 %   4000
======================================================   →  フッター
 
 
考え方
(1)前処理
  ①件数(kensu)、合計(goukei)を0に設定する。
  ②部門コード(bucode)と経費(keihi)を入力する。
(2)部門コードが9になるまで次の処理を繰り返す。(while文を使用)
  ①経費を合計に加算する。(累計)
  ②件数に1を加算する。(カウント)
  ③部門コードを部門テーブル(bucode_t)の該当個所に(件数を添え字)格納する。
  ④経費を経費テーブル(keihi_t)の該当個所に(件数を添え字)格納する。
  ⑤部門コードに対応した部門名を部門名テーブル(buname_t)の該当個所に(件数を
   添え字)格納する。(上記参照)
  ⑥二件目以降の部門コードを入力する。
  ⑦部門コードが9でなければ、経費を入力する。
(3)合計の格納と見出し表示
  ①件数に1を加える。
  ②部門コードテーブルの最後に(件数を添え字)9を格納する。
  ③部門名テーブルの最後に(件数を添え字)"合 計"を格納する。
  ④見出しを表示する。
(4)率、按分金額の計算と明細の表示(格納した件数分繰り返す)(for文を使用)
  ①率=部門別経費×100.0÷合計
  ②按分金額=4000×率÷100
  ③コード、 部門名、経費、比率、按分金額を表示する。
(5)フッターを表示する。
 
 
#include<stdio.h>
#include
<string.h>

int main(void){
   
   
int i,kensu,goukei,bucode,keihi,anbun;
   
int bucode_t[7],keihi_t[7];
   
double ritu;
   
   
char buname_t[7][10];
   
    kensu =
0;
    goukei=
0;
   
    printf(
"部門コードが9で終了\n");
   
    printf(
"部門コードは");
    scanf(
"%d",&bucode);
   
   
   
    printf(
"経費は");
    scanf(
"%d",&keihi);
   
   
while (bucode!=9) {
       
        goukei += keihi;
        kensu++;
        bucode_t[kensu]=bucode;
        keihi_t[kensu]=keihi;
       
       
switch (bucode) {
           
case 1:
                strcpy(buname_t[kensu],
"総務部");
               
break;
               
           
case 2:
                strcpy(buname_t[kensu],
"人事部");
               
break;
               
           
case 3:
                strcpy(buname_t[kensu],
"企画部");
               
break;
               
           
case 4:
                strcpy(buname_t[kensu],
"営業部");
               
break;
               
           
case 5:
                strcpy(buname_t[kensu],
"製造部");
               
break;
               
        }
       
       
       
        printf(
"部門コードは");
        scanf(
"%d",&bucode);
       
       
if (bucode!=9) {
           
            printf(
"経費は");
            scanf(
"%d",&keihi);
           
        }
       
    }
   
    kensu+=
1;
    keihi_t[kensu]=goukei;
    bucode_t[kensu]=
9;
    strcpy(buname_t[kensu],
"合計");
   
    printf(
"コード 部門名   経費  比率 按分金額\n");
    printf(
"-------------------------------------------\n");
   
   
for (i=1; i<=kensu; i++) {
       
        ritu = (
double)keihi_t[i]*100.0/(double)goukei;
       
        anbun=
4000*ritu/100;
       
        printf(
" %d      %s %8d %6.1f%% %8d\n",bucode_t[i],buname_t[i],keihi_t[i],ritu,anbun);
    }
   
    printf(
"===========================================\n");
   
   
return 0;
   
}