質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

5回答

1182閲覧

C言語での計算の結果が大きく出る

re_refuse

総合スコア17

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/03/21 08:56

最小値、最大値、合計値を求める問題です。
c言語はあえて使っています。
どこが間違っているか教えてください...

int main(){ int n,i; int num,MAX,MIN,SUM; scanf("%d",&n); for(i=1;i<n;i++){ scanf("%d",&num); if(MAX<num){ MAX=num; SUM=SUM+num; }else if(MIN>num){ MIN=num; SUM=SUM+num; }else{ SUM=num+SUM; } } printf("%d %d %d %d\n",MIN,MAX,SUM,i); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

初期化が必要ですが
なにを初期値とするか を考える必要がありますね

c

1int main(){ 2 int n, int i = 0; 3 int MIN, MAX, SUM = 0, num; 4 scanf("%d", &n); 5 for(i=1;i<n;i++){ 6 scanf("%d", &num); 7 if(i == 1) // 初期化 8 MIN = MAX = num; 9 if(MIN > num) MIN = num; 10 else if(MAX < num) MAX = num; 11 SUM += num; 12 } 13}

投稿2019/03/21 09:35

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

re_refuse

2019/03/21 10:19

ありがとうございます!
re_refuse

2019/03/21 10:44

if(i==1)の部分は MINを初期値0としたときに、MINよりnumが小さくなることを防ぐということですか?
re_refuse

2019/03/21 10:44

numよりMINが小さくなるでした...
asm

2019/03/21 10:51

最初の一回の値を暫定最大最小に置いています
re_refuse

2019/03/21 10:54

ありがとうございます!
guest

0

初期値はこんな感じで与えます。
他のおかしい点も直しました。

C

1#include <stdio.h> 2#include <limits.h> 3 4int main () { 5 int n, i; 6 int num, MAX = INT_MIN, MIN = INT_MAX, SUM = 0; 7 scanf("%d", &n); 8 for (i = 0; i < n; i++) { 9 scanf("%d", &num); 10 if (num > MAX) { 11 MAX = num; 12 } 13 if(num < MIN) { 14 MIN = num; 15 } 16 SUM += num; 17 } 18 printf("%d %d %d %d\n", MIN, MAX, SUM, i); 19}

投稿2019/03/21 10:00

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

re_refuse

2019/03/21 10:20

ありがとうございます!
re_refuse

2019/03/21 10:23

if文はelseifは使わないほうがよかったですか?
otn

2019/03/21 10:28

1件目は、最小値かつ最大値なので、両方実行が必要です。 asmさんの回答のように1件目だけ特別扱いするなら、else if でいいです。
re_refuse

2019/03/21 10:30

勉強になりました!ありがとうございます!。
guest

0

こうですね。C言語は初期化が命なので...

C言語

1int main(){ 2 int n = 0,i = 0; 3 int num = 0,MAX = 0,MIN = 0,SUM = 0; 4 scanf("%d",&n); 5 for(i=1;i<n;i++){ 6 scanf("%d",&num); 7 if(MAX<num){ 8 MAX=num; 9 SUM+=num; 10 }else if(MIN>num){ 11 MIN=num; 12 SUM+=num; 13 }else{ 14 SUM+=SUM; 15 } 16 } 17 printf("%d %d %d %d\n",MIN,MAX,SUM,i); 18 }

投稿2019/03/21 09:10

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/03/21 09:40

初期化というとゼロを入れると思っていませんか?
re_refuse

2019/03/21 10:19

ありがとうございます!
stdio

2019/03/21 12:12 編集

otnさん、初心者相手に仕組んだ罠に玄人が突っ込むべきではないですよ。それぐらい考えたさせる方が身につくと思ったのでね... 実際にやるならint型の最大値(limits.hの中に存在するINT_MAX)でも入れておく方が無難でしょうね。
guest

0

MAX、MIN、SUMが初期化無しで使われてます
ローカル変数は初期化しないとでたらめな値が入ってるのでこれではダメですね

投稿2019/03/21 09:01

編集2019/03/21 09:03
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

re_refuse

2019/03/21 10:19

ありがとうございます!
guest

0

scanf()を取って初期化した元のソース

c

1#include <stdio.h> 2 3static int number[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 4 5int main() 6{ 7 int num, MAX = 0, MIN = 10, SUM = 0; 8 // scanf("%d", &n); 9 int n = 10; 10 11 for (int i = 1; i < n; i++) { 12 // scanf("%d", &num); 13 num = number[i]; 14 if (MAX < num) { 15 MAX = num; 16 SUM = SUM + num; 17 } else if (MIN > num) { 18 MIN = num; 19 SUM = SUM + num; 20 } else { 21 SUM = num + SUM; 22 } 23 } 24 printf("%d %d %d \n", MIN, MAX, SUM); 25 26} 27結果 28usr ~/Project/test/teratail % ./a.out 2910 9 45

修正版

c

1#include <stdio.h> 2 3static int number[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 4 5int main() 6{ 7 int num, MAX = 0, MIN = 10, SUM = 0; 8 // scanf("%d", &n); 9 int n = 10; 10 11 for (int i = 1; i < n; i++) { 12 // scanf("%d", &num); 13 num = number[i]; 14 if (MAX < num) { 15 MAX = num; 16 } 17 if (MIN > num) { 18 MIN = num; 19 } 20 SUM = SUM + num; 21 } 22 printf("%d %d %d \n", MIN, MAX, SUM); 23 // 24 return 0; 25} 26 27結果 28usr ~/Project/test/teratail % ./a.out 291 9 45 30

理由はわかりますか?

投稿2019/03/21 10:19

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2019/03/21 10:21

かぶったw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問