コードの書き方チェックお願いできますでしょうか。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
asahi
記事: 8
登録日時: 5年前

コードの書き方チェックお願いできますでしょうか。

#1

投稿記事 by asahi » 5年前

下記コードは私がコーディングしたものになります。変数名のつけ方やコーディング方法で至らぬ点がありましたら指摘いただきたいです。よろしくお願いします。

本コードの意味
学生の数と合格点数を入力し、合格点を満たしている学籍番号を出力するプログラム
※学生のテストの点数は授業の欠席回数によって減点されるようになっている

コード:

#include <stdio.h>
#define PENALTYSCORE 5
#define STUDENT_NUM_MAX 100

int main(void){
    
    int student_num = 0;                    /*学生数*/
    int pass_point = 0;                     /*合格点*/
    int student_id = 1;    /*学籍番号*/
    int absence_time[STUDENT_NUM_MAX] = {0};  /*欠席回数*/
    int test_score[STUDENT_NUM_MAX] = {0};  /*テスト点数*/
    int total_score[STUDENT_NUM_MAX] = {0};      /*総合点数*/
    
    /*学生数、合格点取得*/
    scanf("%d %d",&student_num,&pass_point);
    //printf("学生数は%dです,合格点は%dです\n",student_num,pass_point);
    /*合格者判断処理*/
    for(student_id = 1; student_id <= student_num; student_id++)
    {
        scanf("%d %d",&test_score[student_id],&absence_time[student_id]);          /*テスト点数と欠席回数の取得*/
        total_score[student_id] = test_score[student_id] - (PENALTYSCORE * absence_time[student_id]); /*得点処理*/
        /*確認*/
        //printf("学籍番号%dの総合点数は%dです\n",student_id,total_score[student_id]);
        /*0点処理*/
        if(total_score[student_id] < 0)
        {
            total_score[student_id] = 0;
        }
    }
    /*合格者出力*/
    for(student_id = 1; student_id <= student_num; student_id++)
    {
        if(total_score[student_id] >= pass_point)
        {
            printf("%d\n",student_id);
        }
    }
    
    
    return 0;
}

アバター
usao
記事: 1887
登録日時: 11年前

Re: コードの書き方チェックお願いできますでしょうか。

#2

投稿記事 by usao » 5年前

どこが
> 至らぬ
可能性があると思っているのか,を言わないと,どうしても話がぼんやりすると思います.

とりあえず,やりたい内容がそれだけなら(今後,ここからさらに機能が増えていく予定とかが無いなら)
各学生に関する情報を入力した時点で合否は判断付くのだから,
判断材料に使っただけの点数だの欠席回数だのを後生大事に配列に記録しておく必要はなく,
例えば「合格者の学生番号を記録するための配列」が1個あればそれで済むよね,的な.

あとは,
STUDENT_NUM_MAX は,_で単語を区切っているのに
PENALTYSCORE が PENALTY_SCORE じゃないのは何故なのか,とか気になりますが.

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: コードの書き方チェックお願いできますでしょうか。

#3

投稿記事 by みけCAT » 5年前

配列の0番目の要素を使っておらず、学生数STUDENT_NUM_MAX-1までしか安全に処理できないので、
STUDENT_NUM_MAXという名前が紛らわしくて良くないですね。
0番目の要素を使いたくないのであれば、要素をSTUDENT_NUM_MAX+1個確保するべきでしょう。

できれば、
・入力の読み取りに成功したか (scanfの戻り値)
・入力された値が正常か (大きすぎないか、小さすぎないか)
・計算がオーバーフローするか
のチェックもあるといいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“C言語何でも質問掲示板” へ戻る