アプリ版:「スタンプのみでお礼する」機能のリリースについて

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をディスプレイに表示。
といったように、場合分けによってそれぞれ
処理を行いたいのです。

条件を&&や||で増やせばできると思うのですが、
端的に書くにはどうしたらよいか悩んでいます。

よろしくお願いします。

A 回答 (1件)

#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);
}
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
参考になりました。

お礼日時:2006/05/10 21:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!