- 締切済み
分岐処理(アルゴリズム)
C言語の初心者です。 C言語の分岐処理の書き方(アルゴリズム)について 分からない事があり質問しました。 A、B、C、Dという変数があり、 この変数にはランダムに、ある浮動小数が代入されます。 A、B、C、Dの値を比較して、 (1)一番小さい値が存在する場合 (2)一番小さい値が2つ存在する場合 (3)上記以外の場合 といったように場合分けを行い、 (1)一番小さい値をディスプレイに表示。 (2)アルファベット順で早い方 (Ex. AとBならA、但しDとAの場合はD) をディスプレイに表示。 (3)Aをディスプレイに表示。 といったように、場合分けによってそれぞれ 処理を行いたいのです。 条件を&&や||で増やせばできると思うのですが、 端的に書くにはどうしたらよいか悩んでいます。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#include <stdio.h> #define ON 1 #define OFF 0 void main(void){ float A,B,C,D; char name[]={ 'A','B','C','D' }; float *var[4]; int flag[] = { OFF, OFF, OFF, OFF }; int i, pos, size, count=0; float min; char varName; var[0]=&A;var[1]=&B;var[2]=&C;var[3]=&D; size = sizeof(name)/sizeof(char); for(i = 0; i < size ; i++){ printf("%c:",name[i]); scanf("%f", var[i]); } min=A; for(i = 1; i < size ; i++) if(min > *var[i]) min = *var[pos=i]; for(i = 0; i < size ; i++){ if(min == *var[i]){ flag[i] = ON; count++; } } switch(count){ case 1: varName=name[pos]; break; case 2: if(flag[0]*flag[3]){ //特殊条件:DとAの時D varName = 'D'; break; } for(i=0 ; i < size ; i++){ if(flag[i]) break; } varName = name[i]; break; default: varName = 'A'; min = A; } printf("selection:%c=%f\n", varName, min); }
お礼
ご回答ありがとうございました。 参考になりました。