回答編集履歴

3

修正

2018/07/28 00:21

投稿

asm
asm

スコア15147

test CHANGED
@@ -102,7 +102,13 @@
102
102
 
103
103
 
104
104
 
105
+ 計算順序の問題で
106
+
105
- 計算順序問題で`i`が1以降s[0]が1となっている事が見えます。
107
+ i = 0時: s[0] 3から1に変化
108
+
109
+ i = 1の時: s[0] は1
110
+
111
+ となってしまっています
106
112
 
107
113
 
108
114
 

2

修正

2018/07/28 00:20

投稿

asm
asm

スコア15147

test CHANGED
@@ -48,17 +48,17 @@
48
48
 
49
49
  {
50
50
 
51
- int a[3] = {3, 6, 9};
51
+ int s[3] = {3, 6, 9};
52
52
 
53
53
  for(int i = 0; i < 3; i++){
54
54
 
55
- printf("a[%d]\t= a[%d] / a[0]\n", i, i);
55
+ printf("s[%d]\t= s[%d] / s[0]\n", i, i);
56
56
 
57
- printf("\t= %d / %d\n", a[i], a[0]);
57
+ printf("\t= %d / %d\n", s[i], s[0]);
58
58
 
59
- printf("\t= %d\n", a[i] / a[0]);
59
+ printf("\t= %d\n", s[i] / s[0]);
60
60
 
61
- a[i] /= a[0];
61
+ s[i] /= s[0];
62
62
 
63
63
  }
64
64
 
@@ -70,7 +70,7 @@
70
70
 
71
71
 
72
72
 
73
- 配列aaの先頭要素で割るという単純なプログラムです。
73
+ 配列ssの先頭要素で割るという単純なプログラムです。
74
74
 
75
75
  実行結果は
76
76
 
@@ -78,19 +78,19 @@
78
78
 
79
79
  ```
80
80
 
81
- a[0]= a[0] / a[0]
81
+ s[0]= s[0] / s[0]
82
82
 
83
83
  = 3 / 3
84
84
 
85
85
  = 1
86
86
 
87
- a[1]= a[1] / a[0]
87
+ s[1]= s[1] / s[0]
88
88
 
89
89
  = 6 / 1
90
90
 
91
91
  = 6
92
92
 
93
- a[2]= a[2] / a[0]
93
+ s[2]= s[2] / s[0]
94
94
 
95
95
  = 9 / 1
96
96
 
@@ -102,13 +102,13 @@
102
102
 
103
103
 
104
104
 
105
- 順序の問題で`i`が1以降a[0]が1となっている事が見えます。
105
+ 計算順序の問題で`i`が1以降s[0]が1となっている事が見えます。
106
106
 
107
107
 
108
108
 
109
- - a[0]を退避するか
109
+ - s[0]を退避するか
110
110
 
111
- - a[0]/=a[0]を最後に計算するか
111
+ - s[0]/=s[0]を最後に計算するか
112
112
 
113
113
  - 答え領域bを作るか
114
114
 

1

追記

2018/07/28 00:17

投稿

asm
asm

スコア15147

test CHANGED
@@ -25,3 +25,93 @@
25
25
 
26
26
 
27
27
  と正しい計算結果が得られます。
28
+
29
+
30
+
31
+ ---
32
+
33
+ **追記**
34
+
35
+
36
+
37
+ 問題を単純化します。
38
+
39
+
40
+
41
+ ```c
42
+
43
+ #include <stdio.h>
44
+
45
+
46
+
47
+ int main(void)
48
+
49
+ {
50
+
51
+ int a[3] = {3, 6, 9};
52
+
53
+ for(int i = 0; i < 3; i++){
54
+
55
+ printf("a[%d]\t= a[%d] / a[0]\n", i, i);
56
+
57
+ printf("\t= %d / %d\n", a[i], a[0]);
58
+
59
+ printf("\t= %d\n", a[i] / a[0]);
60
+
61
+ a[i] /= a[0];
62
+
63
+ }
64
+
65
+ return 0;
66
+
67
+ }
68
+
69
+ ```
70
+
71
+
72
+
73
+ 配列aをaの先頭要素で割るという単純なプログラムです。
74
+
75
+ 実行結果は
76
+
77
+
78
+
79
+ ```
80
+
81
+ a[0]= a[0] / a[0]
82
+
83
+ = 3 / 3
84
+
85
+ = 1
86
+
87
+ a[1]= a[1] / a[0]
88
+
89
+ = 6 / 1
90
+
91
+ = 6
92
+
93
+ a[2]= a[2] / a[0]
94
+
95
+ = 9 / 1
96
+
97
+ = 9
98
+
99
+ ```
100
+
101
+ となります。
102
+
103
+
104
+
105
+ 順序の問題で`i`が1以降a[0]が1となっている事が見えます。
106
+
107
+
108
+
109
+ - a[0]を退避するか
110
+
111
+ - a[0]/=a[0]を最後に計算するか
112
+
113
+ - 答え領域bを作るか
114
+
115
+
116
+
117
+ この辺が回避策になりますね