R33 give up 1,30
考察
heikin = goukei/kensu;
kensu+=1;
tensu_t[kensu]=heikin;
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;
#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;
}