前提・実現したいこと
書籍:「苦しんで覚えるc言語」の練習問題15の書き取り問題で、「0~100の範囲で入力された複数の数値の中から、最大値と最小値を求めて表示するプログラムを作成する」という課題に取り組んでいます。書籍に書いてある解答を参考にして自分なりのプログラムを書きたいです。そこで、とある問題が生じました。解答頂けると幸いです
問題文の詳細は以下の通りです。
「0~100の範囲で入力された複数の数値の中から、
最大値と最小値を求めて表示するプログラムを作成せよ。
-1が入力された場合は入力の終わりと判定する。
ただし、最大値と最小値はmain関数以外の一つの関数の中で求める。
また、入力された数値を記憶する配列の要素数は10とし、
それ以上入力された場合はエラーが起きても仕方ないこととする。
ヒント:配列の中に -1 があればデータの終わりだと判断できる。
ヒント:最小値を探すには、最大値を記憶した変数との比較を繰り返せば良い。」
発生している問題・エラーメッセージ
最大値と最小値が入力した数値とは異なる数値が表示されてしまいます。
以下のように表示されます。
1番目の数字:4
2番目の数字:3
3番目の数字:5
4番目の数字:3
5番目の数字:6
6番目の数字:7
7番目の数字:3
8番目の数字:2
9番目の数字:54
10番目の数字:4
最大値:2008230864、最小値:-858993460
最大値と最小値がおかしな値になってしまいます。入力した数字の中で最大値と最小値を表示したいです。
該当のソースコード
自分の解答:
#include <stdio.h>
void maxminfunc(int data[], int *pmax, int *pmin);
int main(void)
{
int max, min, i, number[10];
printf("0~100の数字の中から10個の数値を入力してください\n"); for (i = 0;i < 10; i++) { printf("%d番目の数字:",i+1); scanf_s("%d", &number[i]); } maxminfunc(number, &max, &min); printf("最大値:%d、最小値:%d\n",max,min); return 0;
}
void maxminfunc(int data[],int *pmax,int *pmin)
{
int i=0;
*pmax = 0;
*pmin = 100;
while (data[i]!=-1) { if (*pmax<data[i]) { *pmax = data[i]; } if (*pmin>data[i]) { *pmin = data[i]; } i++; }
}
書籍の解答:
#include <stdio.h>
void maxmin(int array[],int max,int min);
int main(void)
{
int i = 0,array[10],max,min;
do { printf("%d 番目の数:",i + 1); scanf("%d",&array[i]); i++; } while (array[i - 1] != -1); maxmin(array,&max,&min); printf("最大値 %d : 最小値 %d\n",max,min); return 0;
}
void maxmin(int array[],int max,int min)
{
int i = 0;
*max = 0; *min = 100; while (array[i] != -1) { if (array[i] > max) max = array[i]; if (array[i] < min) min = array[i]; i++; }
}
試したこと
書籍の解答と関数のプログラムは一緒にしました。
回答2件
あなたの回答
tips
プレビュー