
はじめまして。
C言語を学習中です。
下記の問題演習の解答として記載されているプログラムがどうしても理解できません。
特にプログラムの最後の方のwhile文で最大値と最小値の判定をしているのかと思いますが、どのような計算をして判定しているのでしょうか。
while (array[i] != -1) {
if (array[i] > *max) *max = array[i];
if (array[i] < *min) *min = array[i];
i++;
具体的に教えてください。
よろしくお願い致します。
●問題
0~100の範囲で入力された複数の数値の中から、
最大値と最小値を求めて表示するプログラムを作成せよ。
-1が入力された場合は入力の終わりと判定する。
ただし、最大値と最小値はmain関数以外の一つの関数の中で求める。
また、入力された数値を記憶する配列の要素数は10とし、
それ以上入力された場合はエラーが起きても仕方ないこととする。
ヒント:配列の中に -1 があればデータの終わりだと判断できる。
ヒント:最小値を探すには、最大値を記憶した変数との比較を繰り返せば良い。
●解答
#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++;
}
}
No.1ベストアンサー
- 回答日時:
>while (array[i] != -1) {
>if (array[i] > *max) *max = array[i];
>if (array[i] < *min) *min = array[i];
>i++;
手でコードを追いかけていくのが上達への近道だとは思いますが…。
今回は、データの範囲が0~100と決まっていますので、
まずは、仮の最大値として下限の0を、仮の最小値として上限の100を、
それぞれセットしています。
そして、配列の中身を、その時点での最大値や最小値と比べて、
データの方がその時点での最大値よりも大きければ最大値の値を更新し、
データの方がその時点での最小値よりも小さければ最小値の値を更新する、
というアルゴリズムです。
ループを脱出した(つまり、すべてのデータをチェックし終わった)段階で
変数maxやminに入っている値が、(仮ではない)真の最大値や最小値となります。
No.4
- 回答日時:
2です。
初期化の値が逆です。
間違えました。
minが101でmaxが-1です。ごめんなさい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
プログラマー達は何故、プログ...
-
C言語 関数、変数の宣言について
-
c言語
-
プログラミングc++を全く分か...
-
C言語について(初心者)
-
C# で 数式文字列処理を処理す...
-
visual studio 2022でのC#プロ...
-
DNCL(共テ用プログラミング言語...
-
プログラマーです。このDB設計...
-
ペーパーマリオみたいにドット...
-
C言語の関数のextern宣言
-
PIC12F1822でLED調光器を作りたい
-
最初に聞かれたこと
-
あってる
-
DNCL(共テ用プログラミング言語...
-
C言語のことです。写真(見にく...
-
Cのプログラムからアクセスでき...
-
プログラミング言語でアプリや...
-
c++の勉強方法を教えてくださ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
STLのvectorで作った配列をメン...
-
行列
-
CArrayのソート
-
読み(あ行~わ行)ごとに分け...
-
delphi 2次元配列がわかりません
-
C言語 最大値と最小値を求めて...
-
特定の文からメールアドレスの...
-
CArrayの要素としてCStringArra...
-
System.String.Splitでエラー
-
PHPで10連ガチャを作成したいの...
-
verilogで、配列の一部をタスク...
-
cakephpでのトランザクション処...
-
再帰関数を用いて配列の合計を...
-
mb_encode_numericentityでタグ...
-
配列を指定した順序でソート
-
多次元配列をエンコードする関...
-
forとかで連番の変数を一気に格...
-
正規表現
-
楽天市場ジャンル検索APIで順番...
おすすめ情報