R35 1,30
考察
if ( a ) { b } もしaならbの動作をする。
いらない ; が入っていたせいで30分ずっと作動せず模索していた。
こういったミスをいかに少なく、また早く見つけ出せるか。
ターミナルが指摘している間違いを丁寧に見ることも大切。
問題
氏名が"end"になる迄、氏名と点数を入力する。データがなくなったら点数にて順位付け
を行い、氏名、点数、順位を表示する。
表示例
___________________________
氏名 点数 順位 → 見出し
----------------------------
井上 70 2
菊地 65 3
佐藤 100 1
田中 30 4
============================= → フッター
考え方
(1)前処理
①件数(kensu))を0に設定する。
②氏名(simei)と点数(tensu)を入力する。
(2)氏名が"end"になるまで次の処理を繰り返す。(while文を使用)
①件数に1を加算する。(カウント)
②氏名を氏名テーブル(simei_t)の該当個所に(件数を添え字にして)格納する。
③点数を点数テーブル(tensu_t)の該当個所に(件数を添え字にして)格納する。
④順位テーブル(juni_t)の該当個所に(件数を添え字にして)1を格納する。
⑤二件目以降の氏名を入力する。
⑥氏名が"end"でなければ、点数を入力する。
(3)順位付け(他より小さいとき順位に1を加える)
① iを1から件数の値まで②を繰り返す。(for文)
② jを1から件数の値まで③を繰り返す。(for文)
③ 点数テーブルのi番目がj番目より小さいとき
順位テーブルのi番目に1を加える。
(4)見出しを表示する。
(5)氏名、点数、順位の表示(格納した件数分繰り返す)(for文を使用)
(6)フッターを表示する。
#include<stdio.h>
#include<string.h>
int main(void){
int i,j,kensu,tensu,juni;
int tensu_t[10];
int juni_t[10];
char simei[10],simei_t[10][10];
kensu = 0;
printf("氏名がendで終了\n");
printf("氏名は");
scanf("%s",simei);
printf("%sの点数は",simei);
scanf("%d",&tensu);
while (strcmp(simei,"end")) {
kensu++;
strcpy(simei_t[kensu],simei);
tensu_t[kensu]=tensu;
juni_t[kensu]=1;
printf("氏名は");
scanf("%s",simei);
if (strcmp(simei,"end")) {
printf("%sの点数は",simei);
scanf("%d",&tensu);
}
}
for (i=1; i<=kensu; i++) {
for (j=1; j<=kensu; j++) {
if (tensu_t[i]<tensu_t[j]) {
juni_t[i]++;
}
}
}
printf("氏名 点数 順位\n");
printf("---------------------\n");
for (i=1; i<=kensu; i++) {
printf(" %-10s %4d %d\n",simei_t[i],tensu_t[i],juni_t[i]);
}
printf("=====================\n");
return 0;
#include<string.h>
int main(void){
int i,j,kensu,tensu,juni;
int tensu_t[10];
int juni_t[10];
char simei[10],simei_t[10][10];
kensu = 0;
printf("氏名がendで終了\n");
printf("氏名は");
scanf("%s",simei);
printf("%sの点数は",simei);
scanf("%d",&tensu);
while (strcmp(simei,"end")) {
kensu++;
strcpy(simei_t[kensu],simei);
tensu_t[kensu]=tensu;
juni_t[kensu]=1;
printf("氏名は");
scanf("%s",simei);
if (strcmp(simei,"end")) {
printf("%sの点数は",simei);
scanf("%d",&tensu);
}
}
for (i=1; i<=kensu; i++) {
for (j=1; j<=kensu; j++) {
if (tensu_t[i]<tensu_t[j]) {
juni_t[i]++;
}
}
}
printf("氏名 点数 順位\n");
printf("---------------------\n");
for (i=1; i<=kensu; i++) {
printf(" %-10s %4d %d\n",simei_t[i],tensu_t[i],juni_t[i]);
}
printf("=====================\n");
return 0;
}