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

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

R33 give up 1,30

考察
heikin = goukei/kensu;
    kensu+=
1;
    tensu_t[kensu]=heikin;
    strcpy(simei_t[kensu],"平均");
heikin = goukei / kensu; の文は、tensu_t[kensu]=heikin;の文の前に置かないと正常に作動しない。
順序を間違えていて、最初まともに動かなかった。
 
漢字の名前の人とひらがなの名前の人を混ぜるとバグっちゃうな。
 
 
strcpy(a,b)
a第一引数にはコピー先の配列
b第二引数にはコピー元の文字列
a 配列に b の文字列をコピー
while (strcmp(tanto,"end))
strcmp(tanto,”end)までやるよーっていう意味のwhile
 
問題
 氏名が"end"になる迄、氏名と点数を入力する。データがなくなったら点数の平均を算出
する。平均と各人の点数を比較し、平均より20点以上下回っていたら"***"、10点以上
下回っていたら"**"、1点以上下回っていたら"*"を備考欄に表示する。
 
表示例
 
___________________________
  氏名   点数  備考     →  見出し
----------------------------
  井上    70  
  菊地    65  *
  佐藤    100  
  田中    30  ***
  平均    66  
=============================   →  フッター
 
 
考え方
(1)前処理
  ①件数(kensu)、合計(goukei)を0に設定する。
  ②氏名(simei)と点数(tensu)を入力する。
(2)氏名が"end"になるまで次の処理を繰り返す。(while文を使用)
  ①点数を合計に加算する。(累計)
  ②件数に1を加算する。(カウント)
  ③氏名を氏名テーブル(simei_t)の該当個所に(件数を添え字)格納する。
  ④点数を点数テーブル(tensu_t)の該当個所に(件数を添え字)格納する。
  ⑤二件目以降の氏名を入力する。
  ⑥氏名が"end"でなければ、点数を入力する。
(3)合計の格納と見出し表示
  ①平均(heikin)を求める。(平均=合計÷件数)
  ②件数に1を加える。
  ③氏名テーブルの最後に(件数を添え字)"平 均"を格納する。
  ④点数テーブルの最後に(件数を添え字)平均を格納する。
  ⑤見出しを表示する。
(4)氏名、点数、備考の表示(格納した件数分繰り返す)(for文を使用)
  ①備考(bikou)をブランク("")にセットする。
  ②平均-点数が20以上のとき備考を"***"とする。
   同様に10以上のとき備考を"**"とし、1以上のとき"*"とする。
  ②氏名、点数、備考を表示する。
(5)フッターを表示する。
 
#include<stdio.h>
#include
<string.h>

int main(void){
   
   
int i,kensu,goukei,tensu,heikin;
   
int tensu_t[10];
   
char simei[10],simei_t[10][10];
   
char bikou[7];
   
    kensu =
0;
    goukei=
0;
   
    printf(
"氏名がendで終了\n");
   
    printf(
"氏名は");
    scanf(
"%s",simei);
   
    printf(
"%sさんの点数は",simei);
    scanf(
"%d",&tensu);
   
   
while (strcmp(simei,"end")) {
       
        goukei+=tensu;
        kensu++;
        strcpy(simei_t[kensu],simei);
        tensu_t[kensu]=tensu;
       
       
        printf(
"氏名は");
        scanf(
"%s",simei);
       
       
if (strcmp(simei,"end")) {
           
            printf(
"%sさんの点数は",simei);
            scanf(
"%d",&tensu);
           
        }
       
       
    }
   
    heikin = goukei/kensu;
    kensu+=
1;
    tensu_t[kensu]=heikin;
    strcpy(simei_t[kensu],
"平均");
   
    printf(
"氏名  点数  備考\n");
    printf(
"---------------------\n");
   
   
for (i=1; i<=kensu; i++) {
       
        strcpy(bikou,
"");
       
if (heikin - tensu_t[i]>=20) {
            strcpy(bikou,
"***");
        }
       
else if(heikin - tensu_t[i]>=10) {
            strcpy(bikou,
"**");
        }
       
else if(heikin - tensu_t[i]>0) {
            strcpy(bikou,
"*");
        }
       
        printf(
" %-10s  %4d  %s\n",simei_t[i],tensu_t[i],bikou);
       
    }
   
   
    printf(
"=====================\n");
   
   
return 0;
   
}