■if文を使って最大値/最小値を見つける
#include <stdio.h>
#include <limits.h>
int ary[] = {
3,
-14,
159,
-2653, //最少
58979, //最大
-3,
23,
-846,
2643,
};
int main(void){
int max = INT_MIN ;
int min = INT_MAX ;
const size_t num = sizeof(ary)/sizeof(ary[0]);
for(size_t i = 0 ; i < num ; i++){
if( max < ary[i]) {
max = ary[i];
}
if( min > ary[i]){
min = ary[i];
}
}
printf("配列内の最大値 = %d\n",max);
printf("配列内の最小値 = %d\n",min);
}
■三項演算子を使って最大値/最小値を見つける
//3項演算子版
#include <stdio.h>
#include <limits.h>
int ary[] = {
3,
-14,
159,
-2653, //最少
58979, //最大
-3,
23,
-846,
2643,
};
int main(void){
int max = INT_MIN ;
int min = INT_MAX ;
const size_t num = sizeof(ary)/sizeof(ary[0]);
for(size_t i = 0 ; i < num ; i++){
max = (ary[i] > max) ? ary[i] : max ;
min = (ary[i] < min) ? ary[i] : min ;
}
printf("配列内の最大値 = %d\n",max);
printf("配列内の最小値 = %d\n",min);
}
■マクロを使って最大値/最小値を見つける
//マクロ版
#include <stdio.h>
#include <limits.h>
int ary[] = {
3,
-14,
159,
-2653, //最少
58979, //最大
-3,
23,
-846,
2643,
};
#define MAX(a,b) (((a)>(b))?(a):(b))
#define MIN(a,b) (((a)<(b))?(a):(b))
int main(void){
int max = INT_MIN ;
int min = INT_MAX ;
const size_t num = sizeof(ary)/sizeof(ary[0]);
for(size_t i = 0 ; i < num ; i++){
max = MAX(ary[i],max);
min = MIN(ary[i],min);
}
printf("配列内の最大値 = %d\n",max);
printf("配列内の最小値 = %d\n",min);
}
■三項演算子を使って三つの整数を大きい順に並べる
//コマンドラインから3つの整数を入力し大きい順に並べる
#include <stdio.h>
#include <stdlib.h>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
int med(int a, int b, int c)
{
int max = max(max(a,b),c);
int min = min(min(a,b),c);
return a + b + c - max - min;
}
int main(int argc,char *argv[]){
if(argc != 4){
printf("整数を3つ入力してください。\n");
exit(1);
}
int a = atoi(argv[1]);
int b = atoi(argv[2]);
int c = atoi(argv[3]);
printf("大(%d) >= 中(%d) >= 小(%d)\n",
max(max(a,b),c),
med(a,b,c),
min(min(a,b),c)
);
}
遊び方
$./a.out 1 10 5
コピペしコンパイル&実行し、
動作確認をして下さい。