• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「解きながら学ぶC言語」という本の問題8-3)

C言語の問題8-3でのマクロ展開について

このQ&Aのポイント
  • 「解きながら学ぶC言語」という本の問題8-3で、2つの値の大きい方を返すマクロが定義されています。
  • このマクロを利用してmax(max(max(a, b), c), d)を展開すると、不等号(>)ではなくコンマ(:)が使用される部分があります。これは参考書のミスですか?
  • 腑に落ちないため、質問させていただきました。

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

この類いの質問は、著者なり出版社なりにすべきかと思います。 そうすることで正誤表や増刷に反映されることにもなります。 間違いの指摘であっても、読者から反応が還ってくれば著者にとっても励みになります。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

多分, コンマではなくコロン.

ganmenapple
質問者

補足

間違えました! コンマではなくコロン(:)でしたね。 申し訳ないです!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語の関数形式マクロの定義・呼び出し時の空白の挿入

    C言語で関数形式マクロを定義するときに、どこに空白(スペース)を入れてもよいのか、教えてください。 関数形式マクロとは、引数付きマクロと言っている本もあるようで、例えば、 #define mymul(x,y) ((x)*(y)) こんなものです。 mymul(a,b)と書いてあったら、((a)*(b))に置き換えますという意図です。 ・#の前 ・#とdefineの間 ・mymulと(x,y)の間 ・(とxの間 ・xと,(カンマ)の間 ・,(カンマ)とyの間 ・yと)の間 ・マクロ定義本体(つまり右側)の 一番目の括弧と二番目の括弧の間 ・二番目の括弧とxの間  以下同様に・・・・・・・・・・・・・ 呼び出す場合も、c=mymul(a,b)と呼び出す場合に、 ・=とmymulの間 ・mymulと( の間 ・( と a の間 ・aと,(カンマ)の間  ・・・・・・ これらのどこに入れてよいのか、 よろしくお願いいたします。 全角で書いてあるところがあります。例としてあげた定義の実益については問わないことにしましょう。

  • C言語のポインタの考え方について

    ポインタについて理解ができていないのでお聞きしたいのですが 値を交換する関数のプログラミングでこの場合ポインタ で以下にしないといけないと思います。 #include<stdio.h> void swap(int *a int *b){ int c; c=*a; *a=*b; *b=c; } main(){ int x,y; x=123; y=456; swap(&x,&y); printf("x = %d, y = %d\n", x, y); } またポインタを使用せず以下のプログラムではなぜダメのでしょうか。 よろしくお願い致します。 #include<stdio.h> void swap(int a int b){ int c; c=a; a=b; b=c; } main(){ int x,y; x=123; y=456; swap(x,y); printf("x = %d, y = %d\n", x, y); }

  • 数学(高校生ができる)問題です。

    1.実数x,yに対し(1+x)(1+y)≦{1+(x+y)/2}^2を示せ。   また、等号が成立するのはどのようなときか。 2.a,b,c,dを-1以上の数とするとき     (1+a)(1+b)(1+c)(1+d)≦{1+(a+b+c+d)/4}^4   を示せ。また、等号が成立するのはどのようなときか。 この問題の1.は虚数iを使って示すのだろうというところまでしか見通しが立っていません。 2.は1.と形が似ているのでそれを応用するのだろうと思います。 というところまでは自分で考えてみたのですがそこからがわかりません。 お願い致します。

  • 至急で、C言語の問題で解答解説お願いします。

    1実数を3つ(a,b,c)を読み込み3辺とする三角形ができるか判定(d(d-a)(d-b)(d-c)>0のとき三角形となる)しできなければ、三角形ではありません!というメッセージを表示し、できる場合は以下のヘロンの公式を用いて三角形の面積を求めるプログラムをC言語で答えてください。d=(a+b+c)/2 s=√{d(d-a)(d-b)(d-c) 2maxの整数値(≧1)をキーボードから入力し、その値に対応した図形を出力するプログラムをC言語で答えてください。 例 max1 max2 max3 * ** *** * ** *** * ** *** ** *** *** 3整数nをキーボード入力しnの値に応じて以下の図形を表示するプログラムをc言語で答えてください。 n=3 n=4 n=5 3 4 5 45 56 67 678 789 890 0123 1234 56789 4整数n(≧0)を入力し歯科の計算を実行するC言語プログラムを答えてください。2つの自然数nとmを読み込みn個の中からm個を取り出すときの組み合わせの数を計算せよ。ただし、n!を計算する関数long fact (int n)を定義し必ずそれを用いること。 5 1つのscanfで2つの10進数を入力し8進数と16進数で表示するプログラムをC言語で答えてください。 6 実数aを入力し少数第1位で四捨五入する関数g(a)をマクロ定義で入力した値の少数第1位を四捨五入して出力するプログラムをC言語で答えてください。 7 4つの実数w,x,y,zを読み込みその最大値を出力するプログラムをC言語で答えてください。ただし、2つの実数の大きいほうを求める関数 double my may (double x,double y)を定義し、その関数を用い、if文を用いないでc言語で答えてください。

  • C言語のプログラムの問題で質問です。

    C言語のプログラムの問題で質問です。 問題は、 与えられた実数(a,b,c,d)に対して、次の連立非線形方程式の解 を「ニュートン法」を用いて解く。 f1(x,y)=y+ax^2-b=0 f2(x,y)=y^2+cx^2-d=0 ただし初期値(a,b,c,d)を入力でき、上記の方程式の解が画面表示されること。 という問題です。まず、どういう方針で作っていくのかが分かりません。 できるのなら参考例を挙げてもらえればありがたいです。お願いします。

  • c言語について

    このプログラムであと2行削れるとこがあるそうです。 どこがけずれますか? #include <stdio.h> #include <math.h> #define f(x) ((x)+(log(x))) #define EPS 1e-8 main( ) { double a, b, c, fa, fb, fc; int i=1; printf("input a and b: "); /*区間[a,b]の入力, a<b とする*/ scanf("%lf%lf", &a, &b); fa = f(a); fb = f(b); do { c = (a+b) / 2; /*cの値の更新*/ fc = f(c); printf(" %2d : a = %f, b = %f, c = %f, fc = %f\n", i, a, b, c, fc); if (fb*fc < 0){ a = c; fa = fc; } if (fa*fc < 0) { b = c; fb = fc; } if(fabs(fc) < EPS ) break; }while(++i<100); /*iが100以上になったら繰り返し終了*/ }

  • C言語教えてください。

    (1)二次方程式y=a*x*x+b*x+cについて、a=1.0,b=2.0,c=3.0として、x=1.1,2.2,3.3,4.4のときのyをもとめる計算を行い、式と係数値とxと対応するyの値を表示するプログラムを作成せよ。 (2)xを与えて、xの2乗、3乗を計算し、xと対応する結果を表示するプログラムを作成せよ。なお、x=3,5,7,9とする。

  • C言語 配列の確保

    はじめまして。C言語の勉強を最近始めたのですが、 以下のプログラムで教えていただきたい点があります。 #include <stdio.h> #include <math.h> #define x 10000 #define y 200000 #define z 1.0E-12 #define k 1.38 #define kE 1.0E-23 #define h 6.63 #define hE 1.0E-34 #define c 3.00 #define cE 1.0E+08 void main(void){ int i; double A[x+1]; double B[x+1]; for(i=0;i<=x;i++) { A[i]=(i+y)*z; B[i] = exp(-(h*hE*c*cE)/(A[i]*k*kE*1000)); printf("%e %e\n",A[i],B[i]); }} このプログラムで、xを100000にするとプログラムが動かなくなってしまいます。OSはWindowsXP、ソフトはVisual C++ 6.0を使っています。 解決方法を教えていただけないでしょうか。

  • 不等式の等号成立の問題です

    質問させていただきます 問.a≧b≧c、x≧y≧zのとき(a+b+c)(x+y+z)≦3(ax+by+cz) この問についてとき方は習ったとき二つあって、両方ともほぼわかったのですが、片方のとき方で等号成立の条件についてわからないところ有ります。 その解き方(一部省略しています)では、単純に右辺から左辺を引いて (a-b)(x-y)+(b-c)(y-z)+(a-c)(x-z)≧0 として、等号成立の条件として a-b=0またはx-y=0かつb-c=0またはy-z=0かつa-c=0またはx-y=0 ここまではわかったのですが、このあとにこれをまとめて a=b=cまたはx=y=z としていました。この最後のa=b=cまたはx=y=zへ、どうやったらこのようにまとめられるのかがわかりません。自分の考えでは、このようにまとめてしまうと等号の成立がa=b=cとx=y=zの二つしかなく、本来a-b=0かつy-z=0かつx-y=0やx-y=0かつb-c=0かつa-c=0のようにたくさんあるものを減らしているように思います。 お願いします。

  • C言語の演算について

    次のプログラムを実行したらどう出力されますか。 微妙な代入演算の違いが分からないので、教えていただけないでしょうか。 #include<stdio.h> void main (void) { int x = 5; int y = 8; int z = 3; int a,b,c,d,e,f; a = y == x + z; b = !x; c = x + y / z; d = x *=z - 1; e = --y / --z; f = y++ % x++; printf("%d,%d,%d,%d,%d,%d\n",a,b,c,d,e,f); } できれば途中のトレースも書いていただけると助かります。 よろしくお願いします。 なお、先ほど記述ミスがあるのにも関わらず投稿してしまいました…。 正しい記述はこちらの質問です。 大変失礼しました。 前の質問は削除可能になり次第、削除いたします。