プログラムのソース解読中の疑問-意味不明な部分の解説をお願いします!

このQ&Aのポイント
  • 現在解析中のプログラムのソースコードに、理解できない部分があります。
  • 特に、( i % 8 ) == 7 ? ' ' : ' ' という行の意味が分かりません。
  • この部分について、詳しい解説を教えていただけないでしょうか?
回答を見る
  • ベストアンサー

プログラムについて

今使用しているプログラムのソースを解読している最中なのですが、その中に以下のようなプログラムがありました。 for(i=0 ; i<10 ; ++i) { printf(" %d%c " , table[i] , ( i % 8 ) == 7 ? '\n' : ' ' ); } これの ( i % 8 ) == 7 ? '\n' : ' '  がよくわかりません。 i % 8 はおそらく iを8で割ったときの余りで、それが=7のとき……???…とあとは意味が全くわかりません。  どなたか教えてください!!お願いします!!!

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

  • ベストアンサー
noname#240995
noname#240995
回答No.1

X ? A : B で、Xが真のときはA、偽のときはBになります。 ?演算子で検索すれば出ると思いますが。

Sh669999922
質問者

お礼

?演算子で出てこなかったのです。ありがとうございました!!!

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

まあ、既に回答出ていますが……。 検索でうまく見つからない場合はキーワードを「三項演算子」にして検索してみてください。

Sh669999922
質問者

お礼

?演算子では出てこず、三項演算子で検索したらでました!ありがとうございます!

関連するQ&A

  • プログラムが上手く動作しません。

    質問です。 1.整数を1個入力し、その数を3で割った余りが0ならば"Good morning"、1ならば"Good evening"、2ならば"Good afternoon"と出力するプログラムを作成せよ。ただしswhitc文を用いること。 という問題で私は #include <stdio.h> main() {      int a;      printf("整数a:");      scanf("%d",&a);      switch(a%3)      {      case '0':           printf("Good morning \n");           break;      case '1':           printf("Good evening \n");           break;      case '2':           printf("Good afternoon \n");           break;      } } と考えましたが実行しても入力はできますがprintfが表示されません。 どこが間違っているのでしょうか?ちゃんとコンパイルはできるのですが・・・。 2.10個の整数値をキー入力し、合計と平均値を計算してその結果を表示するプログラムを書きなさい。 #include <stdio.h> main() {      int a[11],b,c,i;      for(i=1;i<11;i++)      {           printf("整数%d:\n",i);           scanf("%d",&a[i]);      }      for(i=1;i<11;i++)           b+=a[i];      c=b/10;      printf("合計値は%d",b);      printf("平均値は%d",c); } というプログラムを考えましたが、計算結果がめちゃくちゃになってしまいます。 これもどこを直したらいいべきでしょうか?

  • プログラム作成が出来ません

    プログラム作成の課題でエラーが出て進めません (1)~(3)までだけなら作成できるのですがどうしても(4) を表示させることができません^^; (1)3~99までの奇数を7*7の2次元配列に読み込み表示 (2)(1)の配列の行と列を入れ替えたものを表示 (3)全要素の平均 (4)要素の中から9の倍数を選び出し表示 添削よろしくお願いします。 #include <stdio.h> main() { int a[7][7]; int i,j,ave,sum; int c; for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { a[i][j] =3+(j*2)+(i*14); } } for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { for(c=0; c<49; ++c) { if((3+(j*2)+(i*14))%9==0) { c=3+(j*2)+(i*14); } } } } sum=0; for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { sum=sum+a[i][j]; } } ave=sum/7/7; for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { printf( "%2d ", a[i][j] ); } printf( "\n" ); } printf("\n"); for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { printf( "%2d ", a[j][i] ); } printf( "\n" ); } printf("\n"); printf("average=%d\n",ave); printf("\n"); for(c=0; c<49; ++c) { printf("%d",c); } } 長々と失礼しました・・・

  • 位数を求めるプログラム

    a^e≡1(mod n)を満たす最小の正の整数eを 法nに関するaの位数です。 これを法31における1、2,...、30の位数を求めるプログラムを以下のように作ったのですが 位数は31が素数なので30の約数であるはずなのですが11とか12などが出てきてしまいます。 問題のある箇所を教えてください。 #include <stdio.h> int main(void) { int h,i,j,k,n; //法31 n=31; //1の位数は1 printf("1:1\n"); for(j=2;j<n;j++){ k=1; for(i=1;i<=(n-1)/2;i++){ //j^iを求める。 k=j*k; for(h=2;h*n<k;h++); //余りが1になるものを位数とする。 if(!((k-1)%((h-1)*n))){ printf("%d:%d\n",j,i); break; } } //i<=(n-1)/2までに余りが1あまるものがなければn-1(30)を位数とする。 if(i>(n-1)/2)printf("%d:%d\n",j,n-1); } return 0; }

  • 並べ替えのプログラム

    整数を20個入力し、まずそのまま表示してその後大きい順に並べ替えて表示するプログラムを作っているのですが、最大値しか表示されません。多分for文の3重ループの中がおかしいと思うのですがよくわかりません。 #include <stdio.h> int main(int argc, char* argv[]) { int c,i,x,max; int sav = 0; int before[20]; int after[20]; int check[20] = {0}; printf("整数を20個入力してください: "); for(i = 0; i < 20; i++) { scanf("%d",&before[i]); } printf("\n"); printf("BEFORE\n"); for(i = 0; i < 20; i++) { printf("%d\n",before[i]); } printf("\n"); max = 0; for(c = 0; c < 20; c++) { for(x = 0; x < 20; x++) { for(i = 0; i < 20; i++) { if(before[i] > max && check[i] == 0) max = before[i]; sav = i; } if(check[sav] == 0) check[sav] = 1; after[19 - x] = max; } } printf("AFTER\n"); for(x = 0; x < 20; x++) { printf("%d\n",after[x]); } return 0; } よろしくお願いします。

  • プログラム

    下のようなプログラムを作ったのですが、10進2進変換をj=n>>2&1の部分にあるようなビットシフトではなく、 for(i=1;i<8;i++){printf("bit[%d]=%d\n",i,n%2);n=n/2;}に変えて剰余計算で行うプログラムにしたいのですが、分かる方がいましたら教えて下さい。お願いします。 #include <stdio.h> int main(void) { int i,j,n; i=2; printf("数字を入力="); scanf("%d",&n); printf("Dec=%d\n",n); printf("heX=0x%x\n",n); j=n>>2&1; printf("bit[%d]=%d\n",i,j); return(0); }

  • プログラムの説明をお願いします!

    http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1319406053 の回答を参考にして、入力されたnに対するn!を求めるプログラムを作りました。(0<=n<10000) 実行して出力できたのですが、情けない話ですがプログラムがどう動いているのかがさっぱりわかりません。 どなたか解説をお願いします。 #include <stdio.h> int main(void) { int c[10000]; int i, j, t, n; for (i=0; i<9999; i++) { c[i] = 0; } c[9999]=1; scanf("%d", &n); for (i=1; i<=n; i++) { t=0; for (j=9999;j>=0; j--){ c[j] = c[j] * i + t; t = c[j] /10000; c[j] %= 10000; } } for (i=0; i<10000; i++) {  /* (1) */ if (c[i] > 0) { break; } } printf("%d", c[i++]); for(i=i; i<10000; i++) { printf("%04d", c[i]); /* (2) */ printf("\n"); return 0; } 特に、 (1)ここの繰り返しは何をやっているのでしょうか? (2)なぜ4ケタ0詰めにするのでしょうか? よろしくお願いします。

  • ポインタのプログラムについて

    以下のプログラムを実行したとき、表示される値を余白に記述せよ。ただし、配列idataは1000番地から格納されているとする。また、表示結果*8**~*10**の箇所で、正しく計算された値のみ表示させるには、maxはいくらに設定すればよいか。という課題なんですが、実際にプログラムを作ってみてmaxの箇所を4にしてみたところ間違いと言われたので正しいmaxの値を教えて下さい。 #include<stdio.h> int main(void) { int iv,idata[]={2,4,6,8,10,12},*ip,i,max; iv=idata[0]; printf("*1*ivの値=%d\n",iv); ip=&idata[0]; printf("*2*ipの値=%p\n",ip); ip=&idata[1]; printf("*3*ipの値=%p\n",ip); ip=&idata[2]; printf("*4*ipの値=%p\n",ip); iv=*ip; printf("*5*ivの値=%d\n",iv); iv=*ip+3; printf("*6*ivの値=%d\n",iv); iv=*(ip+3); printf("*7*ivの値=%d\n",iv); max=4; *ip=0; for(i=0;i<max;i++){ printf("*8**(ip+%d)=%d\n",i,*(ip+i)); } *(ip+1)=10; for(i=0;i<max;i++){ printf("*9**(ip+%d)=%d\n",i,*(ip+i)); } *(ip+3)=20; for(i=0;i<max;i++){ printf("*10**(ip+%d)=%d\n",i,*(ip+i)); } ip=&idata[0]; printf("*11*ipの値=%p\n",ip); ip=ip+2; printf("*12*ipの値=%p\n",ip); iv=*ip+3; printf("*13*ipの値=%d\n",iv); iv=*(ip+3); printf("*14*ivの値=%d\n",iv); ++ip; printf("*15*ipの値=%p\n",ip); } ヒントは”正しく計算された値のみ”という部分らしいのですが、自分にはまったく分りませんでした。

  • Visual C++ 2005 行列のプログラムがうまくいきません

    Visual C++ 2005 で行列プログラムを作っているのですが、上手くいきません。初心者ですのでとても下らない間違えの可能性もありますが、ご教授下さい。 /*matrix*/ #include<stdio.h> int main(){ int i, j, m[2][2]; for(i=0; i<3; i++){ for(j=0; j<3; j++){ printf("matrix[%d][%d] ",i+1, j+1); scanf("%d",&m[i][j]); } } printf("matrix\n"); for(i=0; i<3; i++){ for(j=0; j<3; j++){ printf("%d ",m[i][j]); } printf("\n"); } printf("transposed matrix\n"); for(i=0; i<3; i++){ for(j=0; j<3; j++){ printf("%d ",m[j][i]); } printf("\n"); } } とプログラムし、デバックなしで開始すると。 matrix[1][1] 1 matrix[1][2] 2 matrix[1][3] 3 matrix[2][1] 4 matrix[2][2] 5 matrix[2][3] 6 matrix[3][1] 7 matrix[3][2] 8 matrix[3][3] 9 matrix 1 2 4 4 5 7 7 8 9 transposed matrix 1 4 7 2 5 8 4 7 9 続行するには何かキーを押してください . . . となってしまいます。 予定では matrix[1][1] 1 matrix[1][2] 2 matrix[1][3] 3 matrix[2][1] 4 matrix[2][2] 5 matrix[2][3] 6 matrix[3][1] 7 matrix[3][2] 8 matrix[3][3] 9 matrix 1 2 3 4 5 6 7 8 9 transposed matrix 1 4 7 2 5 8 3 6 9 続行するには何かキーを押してください . . . となって欲しいのですが。何処が間違っているんでしょうか。できれば正しいプログラムまで載せていただけると助かります。

  • プログラムの添削

    以下のような数当てゲームを作りました.なるべくうまいプログラムを書けるようになりたいのですが,どのような改善点がありますか?よろしくお願いします. /*数当てゲームを作りなさい.*/ #include<stdio.h> void maegaki(void); /*このように関数を定義しまくることに意味はあるのか?main関数はすっきりするけど.*/ void in_check_out(int i); int main(void) { int i; int j; maegaki(); for(j=0;j<10;j++) { scanf("%d",&i); in_check_out(i); if(!(i-1)) return 0; printf("残り%d回です.\n",9-j); } return 0; } void maegaki(void) { printf("数当てゲームをはじめます.\nぼくの好きな整数を当ててください.\nチャンスは10回です.\nヒントはボゾン\n"); } void in_check_out(int i) { if(!(i-1)) { printf("正解!答えは1です.\n"); } else { printf("残念!\n"); if(i>1) printf("%dより小さいです.\n",i); else printf("%dより大きいです.\n",i); } }

  • 外積のプログラムについて質問があります

    ベクトルの外積のプログラムについて質問があります 環境はリナックスです 問題は2つの実ベクトルa,bをキーボードから入力しその外積を求めるプログラムです i<jである組み合わせに対してai*bj-aj*biを並べたものです 次元nについてはキーボードから入力します wedge内で外積を求める計算をします #include <stdio.h> int *wedge(int *a, int *b, int *c); int main() { int n; int a[100]; int b[100]; int i; int j; printf(" nの値を入力" ); scanf("%d", &n); for(i = 0; i < n; i++){ scanf("%d",&a[i]); } for(i = 0; i < n; i++){ scanf("%d",&b[i]); } for(i = 0; i < n; i++){ printf("a[%d]=%d\n",i, a[i]); } for(i = 0; i < n; i++){ printf("b[%d]=%d\n",i, b[i]); } } int *wedge(int *a, int *b, int *c) { int i; int j; *c = a[i] * b[j] - a[j] * b[i]; if ( i < j ){ *c = a[i] * b[j] - a[j] * b[i]; } else { *c = 0 ; } printf("*c = %d",a[i] * b[j] - a[j] * b[i]); } このようなプログラムを作ったのですが外積を表示させることができません。 修正したプログラムをおしえていただけないでしょうか