if-else文を用いて三つの整数値の大小を比較するソースコードを作りました。これをifを使わずに、switch文を用いて書き換えようとしたのですが、swich文では式の値しか返せず、困っています。switch文が使えないとなると、どの文を使えば良いのでしょうか。繰り返し文を用いるしかないのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
3 つの数 -2, 0 , 2 に対して、 x がどの区分に入っているかを判定する処理を
if 文無しで書いてみました。
関数 f(x) は、 x がどの区分にいるかに応じた int 値を返すように定義してます。
関数 sing_1(x) は
0: x < 0 の場合
1: x == 0 の場合
2: 0 < x の場合
となるように定義しています。
x.c
c
1#include <stdio.h> 2 3#define A (-2) 4#define B (0) 5#define C (2) 6 7int sign_1(int x) { 8 return (0 < x) - (x < 0) + 1; 9} 10 11int f(int x) { 12 return sign_1(x - A) + sign_1(x - B) * 10 + sign_1(x - C) * 100; 13} 14 15void print_status(int x) { 16 switch (f(x)) { 17 case 0: 18 printf("x < %d\n", A); 19 break; 20 case 1: 21 printf("x == %d\n", A); 22 break; 23 case 2: 24 printf("%d < x < %d\n", A, B); 25 break; 26 case 12: 27 printf("x == %d\n", B); 28 break; 29 case 22: 30 printf("%d < x < %d\n", B, C); 31 break; 32 case 122: 33 printf("x == %d\n", C); 34 break; 35 case 222: 36 printf("%d < x\n", C); 37 break; 38 } 39} 40 41int main() { 42 for (int x = A - 1; x <= C + 1; x++) { 43 printf("x = %d: ", x); 44 print_status(x); 45 } 46 return 0; 47}
投稿2018/11/29 14:23
編集2018/11/29 15:17総合スコア22324
0
これをifを使わずに、switch文を用いて書き換えようとしたのですが
C言語のswitch
では、比較対象は定数式だけなので、汎用的なif
の代替として使うのは難しいです(なぜそのように書き換えたいのでしょうか)。
投稿2018/11/29 10:46
総合スコア145201
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/29 12:44
2018/11/29 13:30
0
ベストアンサー
こういうのでもいいのですか?
C
1switch ((a < b) * 2 + (a > b)) { 2 case 1: 3 break; 4 case 2: 5 break; 6 default: 7 break; 8}
投稿2018/11/29 10:37
総合スコア28662
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/29 10:44
2018/11/29 11:06
2018/11/29 11:13
2018/11/29 11:31
2018/11/29 12:36
2018/11/29 12:41
2018/11/29 12:43
2018/11/29 13:32
0
switchは、どの値か、を判定するもので、値の大小の比較はできません。
これがしたいならif文でやりましょう
投稿2018/11/29 10:11
総合スコア87784
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/29 10:24
2018/11/29 10:27
2018/11/29 10:50
2018/11/29 12:39
2018/11/29 12:46
0
比較した結果として何を返すのでしょうか?
(a > b) && (b > c) && funcA(); // a > b > c の時、 funcA()が実行
(a < b) && (b < c) && funcB(); // a < b < c の時、 funcB()が実行
..
(一応、funcA(), funcB() の戻り値は、int とする)
されますが、こんなのは?
投稿2018/11/29 13:41
総合スコア6383
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/29 14:41