C言語学習6
今日はアルバイト二日目でした。
バイト先の社員さんに電子工作初心者が作るのにおすすめのものを聞いたら、時計キットがいいと教えてもらいました。
仕組みまで説明できるようになったらとても良いとのことでしたので、
まずは時計キットを作って仕組みを説明できるようになろうと思いました。
疲れましたが片付けの続きを行い、苦C 15章の続きから復習して練習問題を解きました。
解答
#include <stdio.h>
void maxmin(int *max, int *min, int Value);
int main(void) {
int max = 0;
int min = 100;
int inputValue;
int i = 1;
printf("1~100 の範囲内で数値を入力してください。\n");
while (1) {
do {
printf("%2d度目の入力: ", i);
scanf("%d", &inputValue);
} while (inputValue < -1 || inputValue > 100);
if (inputValue == -1) break;
maxmin(&max, &min, inputValue);
i++;
}
printf("最大値:%3d\n", max);
printf("最小値:%3d\n", min);
return 0;
}
void maxmin(int *max, int *min, int value) {
if (value > *max) *max = value;
if (value < *min) *min = value;
return;
}
#include <stdio.h>
int main(void) {
int value[10], i;
int min = 100;
int max = 0;
int valueElements = sizeof(value) / sizeof(value[0]);
for (i = 0; i < valueElements; i++) {
int isBreak;
do {
printf("0~100の数値を入力(%2d / %d): ", i +1, valueElements);
scanf("%d", &value[i]);
if (value[i] == -1) {
isBreak = 1;
break;
}
} while (value[i] < 0 || value[i] >= 100);
if (isBreak) break;
if (value[i] < min) {
min = value[i];
}
if (value[i] > max) {
max = value[i];
}
}
printf("入力最小値 :%d\n入力最大値: %d\n", min, max);
return 0;
}
ちゃんと関数分けられました。
エラーも出ましたが、ポインタについて復習したおかげでメッセージみてすぐに修正できました。
あとif文のブロック文をなくしたおかげで見やすい気がする。
気がするだけ。
入力された値を全て表示するわけじゃないんだから配列にする意味なくない!?
と思ったのでinputValueを配列にしませんでした。
国語的にはよろしくないですね。
前より良くなっているということでよし。
答え
#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++;
}
}
やる気があったら入力値のバリデーションを書こうと思いました。
明日こそ20章やるぞ!
2024.01.19 追記
前回、ポインタ変数の命名は分かりやすくするって決めたのにしていないのと、
do-whileの条件をもっと分かりやすくできるなって思ったので修正しました。
#include <stdio.h>
void maxmin(int *ptr_max, int *ptr_min, int Value);
int main(void) {
int max = 0;
int min = 100;
int inputValue;
int i = 1;
printf("1~100 の範囲内で数値を入力してください。\n");
while (1) {
do {
printf("%2d度目の入力: ", i);
scanf("%d", &inputValue);
} while (!(-1 <= inputValue && inputValue <= 100));
if (inputValue == -1) break;
maxmin(&max, &min, inputValue);
i++;
}
printf("最大値:%3d\n", max);
printf("最小値:%3d\n", min);
return 0;
}
void maxmin(int *ptr_max, int *ptr_min, int value) {
if (value > *ptr_max) *ptr_max = value;
if (value < *ptr_min) *ptr_min = value;
return;
}
3行目を、int *max, int *min → int *ptr_max, int *ptr_min に変更。
16行目を、inputValue < -1 || inputValue > 100 → !(-1 <= inputValue && inputValue <= 100) に変更。
直感的に分かりやすくなったんじゃない!?と思いました。
この記事が気に入ったらサポートをしてみませんか?