はじめまして。
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.2
- 回答日時:
maxとminを初期化していないと予期しない結果になります。
*max = 101;
*min = -1;
>while (array[i] != -1) {
>if (array[i] > *max) *max = array[i];
>if (array[i] < *min) *min = array[i];
>i++;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語 3 2022/10/04 15:07
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングのPythonのnoteb...
-
スカラーのベクトル微分
-
配列データのMySQLへの登録
-
PHPで2次元配列を1次元配列に...
-
C言語 最大値と最小値を求めて...
-
mallocで char *型の配列を確...
-
delphi 2次元配列がわかりません
-
Perlで重複行を削除したい
-
CArrayの要素としてCStringArra...
-
mb_encode_numericentityでタグ...
-
PHPでこのコード自体に意味は無...
-
配列をループでたくさん宣言し...
-
ヒアドキュメントの中のfor文
-
連想配列のキー値(連番)を基...
-
file_existsでファイル名の部分...
-
foreachのなかで次のキーを参照...
-
PHPで多次元配列を一度に処理す...
-
Excel VBAでフィルター後の対象...
-
PHP、{}記号の意味
-
phpの関数について質問です!
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スカラーのベクトル微分
-
特定の文からメールアドレスの...
-
読み(あ行~わ行)ごとに分け...
-
ファイルの書き込みについて教...
-
php で1から100までの素数の表...
-
C言語の配列をPush(追加)する...
-
配列の要素(value)に、変数を...
-
STLのvectorで作った配列をメン...
-
C言語 最大値と最小値を求めて...
-
行列
-
verilogで、配列の一部をタスク...
-
CArrayのソート
-
PHPのセレクトボックスの初期値...
-
Perlで重複行を削除したい
-
pythonのnumpyでの繰り返しでの...
-
System.String.Splitでエラー
-
連想配列から<th>を含むテーブ...
-
2次元配列CSVのソート
-
Pager::factory()の使い方がわ...
-
【PHP】配列のキー名の修正は可...
おすすめ情報