初心者向け配列の処理、本に載っているコードの意味が少しわかりません。

このQ&Aのポイント
  • 初心者向け配列の処理の本に載っているコードの意味がわかりません。
  • 学生の点数を読み込んで60点以上の学生の一覧を表示する処理を行っています。
  • 合格者の人数と合格者リストを格納し、合格者一覧を表示しています。
回答を見る
  • ベストアンサー

初心者向け配列の処理、本に載っているコードの意味が少しわかりません。

入門者向けの本に載っていたコードなんですが、1行だけ どういった処理を行っているのか理解できないところがありました。 よろしくお願いします。 /* 5人の学生の点数を読み込んで60点以上の学生の一覧を表示 */ #include <stdio.h> #define NUMBER 5 /* 人数 */ int main(void) {    int i;    int snum = 0; /* 合格者の人数 */    int tensu[NUMBER]; /* NUMBER人の学生の点数 */    int succs[NUMBER]; /* 合格者リスト(合格者の添字を格納) */    puts("点数を入力してください。");    for (i = 0; i < NUMBER; i++) {       printf("%2d番:", i + 1);       scanf("%d", &tensu[i]);       if (tensu[i] >= 60)          succs[snum++] = i; /*ここがどういった処理になっているのかわからないです。 */    }    puts(" 合格者一覧 ");    puts("------------");    for (i = 0; i < snum; i++)       printf("%2d番(%3d点)\n", succs[i] + 1, tensu[succs[i]]);    return (0); }

質問者が選んだベストアンサー

  • ベストアンサー
  • theisman
  • ベストアンサー率47% (56/119)
回答No.1

succs[snum++] = i ; を、2行に分けて書くと、 succs[snum] = i ; snum++ ; になります。これでわかるかな?

basfdr
質問者

お礼

勉強させて頂きました。 ありがとうございます。

関連するQ&A

  • C言語 初心者です。

    この合格者一覧のソースについてわからない所があります。 詳しく教えてもらえないでしょうか? #include <stdio.h> #define NUMBER 5 /* 人数 */ int main(void) { int i; int snum = 0; int tensu[NUMBER]; int succs[NUMBER]; puts("点数を入力してください。"); for (i = 0; i <NUMBER ; i++){ printf("%2d番:", i + 1); scanf("%d",&tensu[i]); if (tensu[i] >= 60){ succs[snum++] = i; } } puts("合格者一覧"); puts("-----------"); for (i = 0; i < snum; i++) printf("%2d (%3d点)\n",succs[i] + 1, tensu[succs[i]]); return (0); } そのわからないところとは、 if (tensu[i] >= 60){ succs[snum++] = i; で、特に、succs[snum++] = i について教えてください。  私の考えでは、一回目は、 succs[1] = 0 になるのですが・・・?? それでは、おかしい気がするのです。 この i は どれに代入するのですか?? 全くわかりません。 どうか、回答よろしくお願いします。

  • C言語 初心者です。

    以下のソースの中でわからないことがあります。 詳しく説明してもらえないでしょうか? よろしくお願いします。 #include <stdio.h> #define NUMBER 80 /* 人数の上限 */ int main(void) { int i,j; int num; int tensu[NUMBER]; int bunpu[11] = {0}; printf("人数を入力してください。:"); do{ scanf("%d",&num); if (num < 0 || num > NUMBER) printf("\a要【1以上%d以下】:", NUMBER); }while (num > 0 || num < NUMBER); puts("点数を入力してください。"); for (i = 0; i < num; i++){ printf("%2d番:", i + 1); do { scanf("%d",&tensu[i]); if (tensu[i] < 0 || tensu[i] > 100) printf("\a要 【0以上100以下】:"); }while (tensu[i] < 0 || tensu[i] > 100); bunpu[tensu[i] / 10]++; } 上記のソースの中の bunpu[tensu[i] / 10]++; の部分がどうなっているのかわかりません。 教えてください。

  • C言語の問題-配列について

    今、独学でC言語をやっているんですが本にのっている問題に解答がなくわかりません。 問題はbunpu[tensu[i] / 10]++;はどういう意味を表すかです。 do-while分の繰り返しがおわった後にbumpuに++があるので+1をすればいいのでしょうか?よくわかりません・・・ 学生10人の点数の分布を10点ごとに分布グラフとして表示します。 #include <stdio.h> #define NUMBER 80 int main (void) { int i,j,num; int tensu[NUMBER]; int bunpu[11] = {0}; puts("点数を入力してください"); for("i =0; i < num; i++"){ printf("%2d番",i + 1); do{ scanf("%d",&tensu[i]); if(tensu[i] < 0 || tensu[i] > 100) printf("0以上100以下"); }while (tensu[i] < 0 || tensu[i] > 100); bunpu[tensu[i] / 10]++; } puts("\n 分布ぐらふ "); printf(" 100:"); for (j = 0;j < bumpu[10];j++) putchar('*') putchar('\n') for(i = 9; i>=0; i--) { printf("%3d - %3d:",i*10,i*10+9); for (j=0; j< bunpu[i];j++) putchar('*'); putchar('\n'); } return(o); }

  • 教えてください

    このソースのbunpu[tensu[i] / 10]++;がよく分からないので詳しく教えてください。 あと、 printf(" 100:"); for(j=0; j < bunpu[10]; j++) putchar('*'); putchar('\n');についても何を示しているのかわかりません。そこも詳しく教えてください。宜しくお願いします。 #include <stdio.h> #define NUMBER 80 int main(void) { int i, j; int num; int tensu[NUMBER]; int bunpu[11] = {0}; printf("人数を入力してください:"); do{ scanf("%d", &num); if(num < 1 || num > NUMBER) printf("\a要 [1以上%d以下] :", NUMBER); }while (num < 1 || num > NUMBER); puts("点数を入力してください。"); for(i=0; i < num; i++) { printf("%2d番:", i+1); do{ scanf("%d", &tensu[i]); if (tensu[i] < 0 || tensu[i] > 100) printf("\a要 [0以上100以下] :"); }while (tensu[i] < 0 || tensu[i] > 100); bunpu[tensu[i] / 10]++; } puts("\n 分布グラフ "); printf(" 100:"); for(j=0; j < bunpu[10]; j++) putchar('*'); putchar('\n'); for (i=9; i >=0; i--) { printf("%3d-%3d:", i*10, i*10+9); for (j =0; j < bunpu[i]; j++) putchar('*'); putchar('\n'); } return(0); }

  • わかりません!!

    関数についての質問です。 以下で大文字なのはオブジェクト形式のマクロで宣言してあります。 void goukaku( int a) { int succs[NUMBER] = {0}; int snum = 0; for ( i = 0 ; i < num ; i ++ ) if ( tensu{a][i] >= GOUKAKU) succs[snum++] = i; for ( i = 0 ; i < snum ; i ++ ); printf("%2d番 (%3d点)¥n” , succs[i] + i , tensu[a][succs[i]]); } 中略 for ( i = 0 ; i < sub ; i ++ ) goukaku(i); subは教科数、numは人数、配列 tensu[SUB][NUMBER] sub , numにそれぞれ1を入れると無限ループになるのですが、どうしたらよいでしょうか??

  • 教えてください!!

    このソースのtensu[5]={0};の意味を詳しくお願いします。宜しくお願いします。tensu[5]では、1~100の範囲で入力してください。が実行したら出てきてしまいますが、tensu[5]={0};とやるとうまくできます。そのことを知りたいです。 宜しくお願いします。 #include <stdio.h> int main(void) { int i; int tensu[5]= {0}; int sum=0; puts("点数を入力してください"); for(i=0; i<5; i++){ printf("%2d番:", i+1); do{ if(tensu[i]<0 || tensu[i]>100){ printf("0~100の範囲で入力してください。\n"); printf("%2d番:", i+1); } scanf("%d", &tensu[i]); }while(tensu[i]<0 || tensu[i]>100); sum+=tensu[i]; } putchar('\n'); for(i=0; i<5; i++) printf("%2d番: %d\n", i+1, tensu[i]); printf("合計点: %d\n", sum); printf("平均点: %f\n", (double)sum/5); return (0); }

  • C言語が分からないので分かる方説明お願いします

    C言語が分からないので分かる方説明お願いします #include<stdio.h> int main(void) { int i; int tensu[5]; int sum=0; printf(”点数を入力してください。”); for(i=0;i<5;i++){ printf(”%2d番:”,i+1); scanf(”%d”,&tensu[i]); sum+=tensu[i]; } printf(”合計点:%5d¥n”,sum); printf(”平均点:%5.1f¥n”,(double)sum/5); return(0); } 実行すると 点数を入力してください。 1番:95 2番:83 3番:85 4番:63 5番:89 合計点:415 平均点:83.0 できるだけ詳しく教えてください

  • c言語のプログラミングについて聞きたいのですが

    自分は課題で「10人分の名前と点数を入力して降順に並び替える」というプログラムを作ろうとしているのですが、なかなかうまくいきません。一応↓の形までできたのですがなぜか数字が変になります。 どうしてか教えていただけないでしょうか。 #include<stdio.h> int main(void) {     int i,j;     int tensu[10][3];     char namae[10][6]; for(i=0;i<10;i++){ printf("名前の入力>>"); scanf("%s",&namae[i]); printf("点数の入力>>"); scanf("%d",tensu[i]); } printf("名前   点数\n"); for(j=0;j<10;j++) { printf("%s ",&namae[j]); printf("%10d\n",tensu[j]); } return 0; } それとポインタ?みたいなのもよく理解できず、点数で降順にしたあとに点数を使って名前を並び替えるのかなと思うのですがそれもよくわかりません。 どなたか教えてください

  • わかりません・・・。

    100個以下の整数を読み込んで、読み込んだ整数の一覧,それらのうちの最大値と二番目に大きい値とを表示するプログラムをつくりたいのですが、わかりません。 教えてください!! 実行例 整数は何個ですか:5 1 個目:65 2 個目:30 3 個目:98 4 個目:10 5 個目:54 入力された整数は 5 個で, 65 30 98 10 54 です. 最大値は 98 です. 二番目に大きい値は 65 です. ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー #include<stdio.h> #define number 100 int main (void) { int i; int seisu[number]; int max; puts("整数を入力してください。"); for(i=0, i<number, i++){ printf("%2d番",i+1); scanf("%d",&seisu[i]); } max=seisu[0] for(i=1, i<number, i++){ if (seisu[i]>max) max=seisu[i]; } printf("最高点:%d\n",max); return(0); } までしかわかりません。 2番目に大きい値と‘整数は何個ですか: ‘と‘入力された整数は 個で です。‘の部分はどうすればいいのでしょうか??

  • 以下のプログラムについて教えてください

    #include<iostream.h> int main() { int i; int ninzu=0; int tensu[6]; int rakudai[6]; cout<<"6人の点数を入力!\n"; for(i=0; i<6;i++) { cout<<i+1<<"番:"; cin>>tensu[i]; if(tensu[i]<60) { rakudai[ninzu]=i; ninzu++;} } cout<<"60点未満は"<<ninzu<<"人です。\n"; for(i=0; i<ninzu; i++) cout<<rakudai[i]+1<<"番:"<<tensu[rakudai[i]]<<"点\n"; return(0); } というテストの点数が60点未満の学生の一覧表を出力するというプログラムなんですが、12行目からの rakudai[ninzu]...以降が よくわかりません。配列の数を指定するところに数字以外のものが来るというのはいったいどういうことなのでしょう?どなたか教えてください。

専門家に質問してみよう