ポインタを使ってみるよ
ポインタを使った式を、もっと短くかけたので、追記。
素敵なことを教えていただいたので追記
与えられた数の中から最も大きいものと小さいものを表示するようにする
入力方式
[一つ目の値, 二つ目の値, 三つ目の値……, 最後の値,, 終了を意味する任意の値]
まずはポインタをできるだけ使わずにやってみる
#include <stdio.h>
int main(void){
int i = 0;
int array[10];
int max = 1;
int min = 1000;
do{
scanf("%d", &array[i]);
printf("%d番:%d\n", i+1,array[i]);
i++;
}while(array[i - 1] != 0);
for (i = 0; array[i] >= 0; i++){
if (array[i] == 0){
break;
}
else{
if (array[i] > max){
max = array[i];
}
if (array[i] < min){
min = array[i];
}
}
}
printf("最小値%d\n", min);
printf("最大値:%d\n", max);
return 0;
}
ポインタを使うとこんな感じ
#include <stdio.h>
void calculate(int array[],int*,int*);
int main(void){
int i = 0;
int array[10];
int max, min;
do {
scanf("%d",&array[i]);
printf("%d番:%d\n",i+1,array[i]);
i++;
} while (array[i-1] != 0);
calculate(array,&max,&min);
printf("最大値:%d\n最小値:%d\n",max, min);
return 0;
}
void calculate(int array[],int *max,int *min){
int i;
int high = 1;
int low = 1000;
for(i=0; array[i]!=0; i++){
if(array[i] > high){
high = array[i];
}
if(array[i] < low){
low = array[i];
}
}
*max = high;
*min = low;
}
high lowにいれなくてもできた
void calculate(int array[], int *max, int *min){
int i;
*max = 1;
*min = 1000;
for (i = 0; array[i] != 0; i++){
if (array[i] > *max){
*max = array[i];
}
if (array[i] < *min){
*min = array[i];
}
}
}
すごい
void calculate(int array[], int *max, int *min){
int i;
*max = *min = *array;
for (i = 1; array[i] != 0; i++){
if (array[i] > *max){
*max = array[i];
}
if (array[i] < *min){
*min = array[i];
}
}
}
比較の時に最初の値をmaxとminに入れておいてぐるぐるするので、
intの範囲でどんな数でも入れられるようになった
iを消した
void calculate(int array[], int *max, int *min){
for (*min = *max = *array; *array; array++){
if (*array > *max){
*max = *array;
}
if (*array < *min){
*min = *array;
}
}
}
2行短くなった!!
表示
[283 876 961 346 315 0]と入力すると、どれも
次のように表示される
1番:283
2番:876
3番:961
4番:346
5番:315
6番:0
最大値:961
最小値:283
やったね