c言語初心者スレ2

  • 1c難民22/06/13(月) 10:53:58

    また保守し忘れて落ちてしまいました
    今週も配列です
    入力した番号に対応した数字を出力するやつです
    int test[5][3] = {
    {120001,80,60},
    {120002,22,50},
    {120003,75,90},
    {120004,90,55},
    {120005,72,58}
    };
    int a;
    int i=0;
    printf("学籍番号を入力\n");
    scanf("%d", &a);
    for (i = 0; i < 5; i++) {
    if (a = test[i][0]) {
    printf("数学=");
    printf("%d\n", test[i][1]);
    printf("国語=");
    printf("%d\n", test[i][2]);
    double g = (test[i][1] + test[i][2]) / 2;
    printf("平均点=");
    printf("%f\n", g);
    }
    }

  • 2c難民22/06/13(月) 10:56:26

    a=test[i][0]が機能してないです(どの数字を入れても全員分の点数が出てきます)
    後平均点は少数まで入れたいです

  • 3c難民22/06/13(月) 10:58:54

    スレの保守は忘れてもここまで助けてくれた皆さんに感謝してますし、やる気あります

  • 4二次元好きの匿名さん22/06/13(月) 12:46:03

    保守

  • 5二次元好きの匿名さん22/06/13(月) 12:50:43

    if (a = test[i][0]) ×
    if (a == test[i][0]) =と==は大丈夫?

  • 6c難民22/06/13(月) 12:58:01

    >>5

    うっかりしてました

    intとかの定義するときは=で他は==でしたっけ

  • 7二次元好きの匿名さん22/06/13(月) 13:03:43

    =は代入==は比較

  • 8c難民22/06/13(月) 13:08:03

    >>7

    ありがとうございます!

  • 9二次元好きの匿名さん22/06/13(月) 13:10:07

    割とよくあるミスとして入門書とかに書いてる

  • 10c難民22/06/13(月) 13:12:59

    うまくいきました!
    平均点も82.500000とかまで出したいです
    testのintをdoubleに変えたら平均は思った通りに出たのですが数学と国語の点が0になってしまいました

  • 11二次元好きの匿名さん22/06/13(月) 13:14:48

    %dのままじゃね?

  • 12二次元好きの匿名さん22/06/13(月) 13:14:57

    学籍番号って120001~120005なのか。とんでもない数だ

  • 13c難民22/06/13(月) 13:18:41

    >>11

    国語数学は小数点なしにしたいです

  • 14二次元好きの匿名さん22/06/13(月) 13:19:55

    スレ主さんがんばげー

  • 15c難民22/06/13(月) 13:22:28
  • 16二次元好きの匿名さん22/06/13(月) 13:23:16

    double g = (test[i][1] + test[i][2]) / 2;

    これの左側がdouble 右側がintのままになっている

    右側をちょいいじくればdoubleに変えればできる


    キャスト演算子 - 演算子 - C言語 入門キャスト演算子www.javadrive.jp
  • 17二次元好きの匿名さん22/06/13(月) 13:23:22

    学校の提出用?なら学習内容超えると思われるprintfに追加していくやつと
    学習範囲内なら少しあれだけどdoubleの配列をintの変数に入れて%dで表示するのがあるかな?

  • 18c難民22/06/13(月) 13:26:54

    >>16

    >>17

    出来ました!

    次のやつ行きます

  • 19二次元好きの匿名さん22/06/13(月) 13:28:14

    型キャストはまだ先なのかもしれないな

  • 20二次元好きの匿名さん22/06/13(月) 13:29:27

    学校のヤツだとどこまで使っていいか分からんな...問題の制約も分からんし...

  • 21c難民22/06/13(月) 13:48:38

    int h[5]={ test[0][1], test[1][1], test[2][1], test[3][1], test[4][1] };
    int i, j,tmp,p;
    for (i = 0; i < 4; i++) { for (j = 0; j < 5; j++) { tmp = h[i]; h[i] = h[j]; h[j] = tmp; } }

    for (p = 0; p < 5; p++) { printf("学籍番号=%d、数学=%d、国語=%d\n", test[p][0],h[p],test[p][2]);}
    }
    数学の点数順に並び変えるんですけど、hに対応してtestも並び替える方法ってありますか?

  • 22c難民22/06/13(月) 13:55:13

    >>20

    それはそうなのですが…

  • 23二次元好きの匿名さん22/06/13(月) 14:03:05

    同じ数学の点数がない前提ならif分岐でtestの数学とhの表示したい点数を比較して同じなら表示で
    順番に並んだhと同じtest配列を取り出すのが簡単かな?その場しのぎ感あるけど...

  • 24二次元好きの匿名さん22/06/13(月) 14:22:45

    //h配列は並べられているとする
    //forで回す配列数の5は適当に入れてるだけなので注意
    for (int i=0; i < 5; i++) { //並べられたh配列を順番に出していく
     for (int j=0; j < 5; j++) { //test配列を比較するため

      //並べられた数学の点数と同じtest配列を探す
      if (h[i] == test[j][1]) {
       printf(); //test[j][0]の番号
       printf(); //test[j][1]の番号
       printf(); //test[j][2]の番号
      }

     }
    }

    くそみたいなコメントは流してくれ...

  • 25c難民22/06/13(月) 17:45:19

    >>24

    試してみます!

  • 26二次元好きの匿名さん22/06/13(月) 21:37:41

    >>21はこんな感じかな

    https://paiza.io/projects/ObKfN35sO0zZOzArhRqbXg

    元の問題がどういうものかにもよるけど自分で配列hを作ったとしたら必要なさそう

    tmpをintの配列にするだけでいける

  • 27二次元好きの匿名さん22/06/14(火) 01:00:12

    hの順番を参照して配列を並び替えるのはポインタ使わないと無理な気がする…

    https://paiza.io/projects/SOHVKnOiYOkGtTdl7PpPlg

  • 28二次元好きの匿名さん22/06/14(火) 12:33:08

    保守

  • 29c難民22/06/14(火) 13:33:23

    >>26

    すいません、これ以外理解できなったので写す感じになってしまいました…

    助けてもらってて何なのですができればヒントくらいでお願いします…

  • 30二次元好きの匿名さん22/06/14(火) 15:15:19

    はいよ~

  • 31二次元好きの匿名さん22/06/14(火) 23:47:56

    保守

オススメ

このスレッドは過去ログ倉庫に格納されています