回答編集履歴

1

コードを追加

2020/07/25 14:39

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -9,3 +9,83 @@
9
9
  - data が min1 より小さければ、min2 = min1, min1 = data。
10
10
 
11
11
  - そうでなくて、data が min2 より小さければ、min2 = data。
12
+
13
+
14
+
15
+ **追記**
16
+
17
+ 質問のコードで「うまくいかない」わけを知りたいのですよね。
18
+
19
+ 10, 9, 8,... と入れるとどうなるか考えてみれば分かるはずです。
20
+
21
+ 各変数の値の変化を見てください。
22
+
23
+
24
+
25
+ 10 を入力すると、data = 10, min1 = 10, min2 = 0。
26
+
27
+ 9 を入力すると、data = 9。i = 1, min2 < data (0 < 9) なので何もしない。
28
+
29
+ 変ですよね。
30
+
31
+ 9が一番小さく、10 が二番目に小さいから、
32
+
33
+ min1 = 9、min2 = 10 になっていなくてはいけないのに。
34
+
35
+
36
+
37
+ こんな風に自分の書いたコードを確かめてみようと思わないのですか?
38
+
39
+
40
+
41
+ 私なら次のようなコードを書きます。
42
+
43
+ ```C
44
+
45
+ #include <stdio.h>
46
+
47
+
48
+
49
+ int main(void)
50
+
51
+ {
52
+
53
+ int min1 = 0x7fffffff; // 1番小さな値 (minimum number)
54
+
55
+ int min2 = 0x7fffffff; // 2番目に小さな値
56
+
57
+ int ent1 = 0; // min1 が何番目の入力か (entry number)
58
+
59
+ int ent2 = 0; // min2 が何番目の入力か
60
+
61
+ int data; // 入力データ
62
+
63
+
64
+
65
+ puts("10個の正整数を入力します");
66
+
67
+ for (int i = 1; i <= 10; i++) {
68
+
69
+ printf("%d番目 ", i);
70
+
71
+ scanf("%d", &data);
72
+
73
+ if (data < min1)
74
+
75
+ min2 = min1, ent2 = ent1, min1 = data, ent1 = i;
76
+
77
+ else if (data < min2)
78
+
79
+ min2 = data, ent2 = i;
80
+
81
+ }
82
+
83
+ printf("2番目に小さい数は%d番目に入力された%dです\n", ent2, min2);
84
+
85
+ }
86
+
87
+ ```
88
+
89
+ コンマ演算子を多用するなど、模範的なコードではありません。
90
+
91
+ 内容を理解して、自分のコードを書いてみてください。