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