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

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

R34 give up 1,00

考察
if (uriage_t[i]<uriage_t[j]) 
営 i と j を比べてるのが紛らわしくて気づかなかった。
山下営業所と入力するとうまく写らない。長い文字名になると文字がバグっちゃうのをどうにかしたい。
for文の位置が今回は上に来たのはびっくりした。しかも二重で。最初の方でiで繰り返す指示を与えて、次のforでiの中で、jで繰り返す指示を与えているのか。
では一番下にあるforは一体?最初のforと内容は同じだけど、書かなければいけない理由がある。しかし不明。。。
 
問題
 営業所が"end"になる迄、営業所と売上金額【単位:千円】を入力する。データがな
くなったら売上金額にて順位付けを行い、営業所、売上金額、順位を表示する。
 
表示例
 
_________________________________
  営業所    売上金額  順位    →  見出し
----------------------------------
  本社      75000   1
  大阪支店    34600   3
  福岡営業所   28400   4
  長崎営業所   35600   2
  佐世保営業所  12500   5  
===================================   →  フッター
 
 
 
考え方
(1)前処理
  ①件数(kensu)を0に設定する。
  ②営業所(eigyousho)と売上(uriage)を入力する。
(2)営業所が"end"になるまで次の処理を繰り返す。(while文を使用)
  ①件数に1を加算する。(カウント)
  ②営業所を営業所テーブル(eigyousho_t)の該当個所に(件数を添え字)格納する。
  ③売上を売上テーブル(uriage_t)の該当個所に(件数を添え字)格納する。
  ④順位テーブル(juni_t)の該当個所に(件数を添え字)1を格納する。
  ⑤二件目以降の営業所を入力する。
  ⑥営業所が"end"でなければ、売上を入力する。
(3)順位付け(他より小さいとき順位に1を加える)下記参照
  ① iを1から件数の値まで②を繰り返す。(for文)
   ② jを1から件数の値まで③を繰り返す。(for文)
    ③ 売上テーブルのi番目がj番目より小さいとき
       順位テーブルのi番目に1を加える。
(4)見出しを表示する。
(5)営業所、売上金額、順位の表示(格納した件数分繰り返す)(for文を使用)
(6)フッターを表示する。
 
・ヒント
for ( i = 1 ; i <= kensu ; i++){
for ( j = 1 ; j <= kensu ; j++){
if (uriage_t[i] < uriage_t[j]) {
juni_t[i]++;
}
}
}
 
 
 
#include<stdio.h>
#include
<string.h>

int main(void){
   
   
int i,j,kensu,uriage,juni;
   
int uriage_t[10];
   
int juni_t[10];
   
char eigyousho[10],eigyousho_t[10][10];
   
    kensu =
0;
   
    printf(
"営業所がendで終了\n");
   
   
    printf(
"営業所名は");
    scanf(
"%s",eigyousho);
   
    printf(
"%sの売上は",eigyousho);
    scanf(
"%d",&uriage);
   
   
while (strcmp(eigyousho,"end")){
   
        kensu++;
        strcpy(eigyousho_t[kensu],eigyousho);
        uriage_t[kensu]=uriage;
        juni_t[kensu]=
1;
       
        printf(
"営業所名は");
        scanf(
"%s",eigyousho);
       
       
if (strcmp(eigyousho,"end")) {
            printf(
"%sの売上は",eigyousho);
            scanf(
"%d",&uriage);
        }
   
    }
   
   
for (i=1; i<=kensu; i++) {
       
       
for (j=1; j<=kensu; j++) {
           
if (uriage_t[i]<uriage_t[j]) {
                juni_t[i]++;
            }
        }
    }
   
   
    printf(
"営業所  売上金額  順位\n");
    printf(
"---------------------\n");
   
   
for (i=1; i<=kensu; i++) {
   
    printf(
" %-10s  %8d  %d\n",eigyousho_t[i],uriage_t[i],juni_t[i]);
       
    }

    printf(
"=====================\n");
   
   
return 0;
   
}