1

クラスの生徒数()を読み取り、すべての生徒がex etc( )1<=students<=25の試験スコアを読み取り、生徒の最大スコアと最大スコア、およびクラスの平均スコアを出力するCプログラムを作成する必要があります。10/20 15/201<=score<=20

プログラムを作成しましたが、for何らかの理由でループを1回だけ実行します。

理由を理解するのを手伝ってくれませんか。

ここにコードがあります:

#include <stdio.h>

int main(void) {
    int m,i,b,sum,min,max,mo;
    sum=0;
    while (m<1 || m>25) {
            printf("give number of students ");
            scanf("%d",&m);
    }
    for (i=1; i<(m+1); i++) {
            while (b<1 || b>20) {
            printf("give score of  %d student",i);
            scanf("%d",&b);
            }

            if(i==1) {
                    min=b;
                    max=b;
            }
            else {
                    if(b<min) min=b;
                    if(b>max) max=b;
            }
            sum=sum+b;
    }
    mo=sum/m;
    printf("max is  %d and min is  %d and avg is  %d",max,min,mo);
}
4

4 に答える 4

1

最初に-変数を初期化します:

int m,i,b,sum,min,max,mo; // these are declared and uninitialized

m = 0;  // now it's initialized to 0
i = 0;
...

それらを何かに初期化しないと、それらが何から始まるのかわかりません。

2番目-次の値を変更する必要がありますb

for (i=1; i<(m+1); i++) {
        while (b<1 || b>20) {  <-- here you're checking for b being valid
        printf("give score of %d student",i);
        scanf("%d",&b);
        }

したがって、bの最初の時間は1から20の間になります。無効なものにリセットしないと、ここに再び到達することはありません。bの値を記録した後:

    sum=sum+b;
    b = 0;   // we're done with b for now, set it to something invalid for the while()
}
于 2012-11-09T18:40:38.587 に答える
1

1.ここで'm'を初期値なしで初期化します

    int m,i,b,sum,min,max,mo;

2.値がない場合は、この状態をチェックします。つまり、ガベージ値が使用されます。(5月/あなたの条件を満たさないかもしれません)

    while (m<1 || m>25) {

3. mの重要なscanfは、前のwhileの内側にあります。これがないと、FORは基本的なi = 1で実行され、停止します。

    for (i=1; i<(m+1); i++) {

Cのガベージ値と、変数を使用する前に変数を初期値に初期化する重要な手順について理解する必要があります。

あなたはこのリンクでもっと読むことができます: ガベージ値とは何ですか/それはCでどのように発生しますか

于 2012-11-09T18:44:14.337 に答える
1

初期化されておらず、 in条件mで使用されていますwhile

条件で初期化されundefined behaviourていないローカル変数を使用しています

同じを実装したい

使用する

do
{
  printf("give number of students ");
            scanf("%d",&m);
}
while(m<1 || m>25);

for (i=1; i<(m+1); i++)条件を変更するi<=mのは良いテクニックです。次に、 このループ内に同じループを使用して<追加します。1do while

于 2012-11-09T18:37:23.703 に答える
1

variabkleを初期化するのを忘れたBので、スコアを挿入するように求められることなく、m回ループします。

于 2012-11-09T18:42:37.017 に答える