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

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

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