入力した数値から最大値を探すプログラム – プログラミング – Home

入力した数値から最大値を探すプログラム
 
通知
すべてクリア

[解決済] 入力した数値から最大値を探すプログラム


まつお
 まつお
(@まつお)
ゲスト
結合: 22年前
投稿: 4
Topic starter  

題名のようなプログラムを作ってみたいのですがうまくいきません。
一応自分が書いたプログラムを載せて見ます。
#include<stdio.h>
main()
{
int i,a,c[6];
for(i=0,i<=5;i++;){
scanf(%d,&a);
c[i]=a;}
if(c[i]==0 || c[i]==5);{
printf(%d\n,c[i]);
}

}
どなたかヒントでも良いので教えていただけないでしょうか?
宜しくお願いいたします。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

#include<stdio.h>
void main()
{
int i,a,c[6];
int 今のところ一番大きい数;
for(i=0;i<=5;i++){
scanf(%d,&a);
c[i]=a;
}
今のところ一番大きい数 = c[0];
for(i=1;i<=5;i++) {
if(c[i]が今のところ一番大きい数より大きい) {
今のところ一番大きい数 = c[i];
}
}
printf(%d\n,今のところ一番大きい数);
}


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 23年前
投稿: 310
 

dairygoods さんが答を載せてしまいましたが、折角書いたので…。

私自身がコンピュータの気持ちになって、まつおさんのコードを解釈してみました。

for文の書きかたがおかしい。
> for (i = 0, i <= 5; i++; ){
i <= 5 は、ただ単に評価される。
i = 0 で i が 0 で初期化される。
for文のループ条件、i++ だが、後置インクリメントなので、まず i の値が評価され、
 i == 0 なので、for文を抜ける。そして、i++ で i がインクリメントされ、i == 1 とな
る。
⇒結局for文のブロック内は一度も実行されない。

i == 1 であり、c[]は初期化されていないため、c[i] == c[1] の値は不定である。
そのため、(c[i] == 0 || c[i] == 5) の結果は真とも偽ともなりうる。
ところが、if文が、「;」で終結しているため、次のブロック{}は、このif文とは関わり無く、
必ず実行される。

c[i] == c[1] であり、その値は不定なので、不定の値が標準出力に表示される。

⇒最終的に、標準出力に不定な値が出力され、プログラムは終了する。


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 23年前
投稿: 310
 

> i <= 5 は、ただ単に評価される。
> i = 0 で i が 0 で初期化される。
すみません、順番が逆でした。

それから、書き忘れましたが、引用されている個所で、まつおさんのコード中に
空白文字を入れてあります。


返信引用
kajiki
 kajiki
(@kajiki)
ゲスト
結合: 22年前
投稿: 19
 

if(c[i]==0 || c[i]==5);{ //←この行すごく変
printf(%d\n,c[i]);
}

if ( 条件 ); ←このセミコロン不要。
条件もなんだこれ。
とりあえず
変数を2つ用意してそれぞれに数値を入れたとしよう。
例)
int a = 3;
int b = 5;

これからaとbどっちが大きいかってソース書けるかい?
それすら出来てないようから、もうちょっと参考書読んでみなよ。


返信引用
まつお
 まつお
(@まつお)
ゲスト
結合: 22年前
投稿: 4
Topic starter  

皆様助言ありがとうございます。
皆様の助言を下にこれから作りなおしてみたいと思います。
変な質問して申し訳ありませんでした。


返信引用
まつお
 まつお
(@まつお)
ゲスト
結合: 22年前
投稿: 4
Topic starter  

あれから皆様の意見を参考に作り直してみました。
#include<stdio.h>
main()
{
int i,a,c[6],max;  
for(i=0;i<=5;i++){
scanf(%d,&a);
c[i]=a;
}
max = c[0];   
for(i=0;i<=5;i++){ 
if(c[i] > max)
max = c[i];
}
printf(max=%d\n,max); 
}
一応問題なく実行されたのですが、
このような感じで宜しいでしょうか?
先輩方の意見を聞かせてください。


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

細かいスタイルはいろいろ突っ込めるところはあるけど、
とりあえずは問題なく実行されたんだったらそれでいいんじゃない。


返信引用
kajiki
 kajiki
(@kajiki)
ゲスト
結合: 22年前
投稿: 19
 

PAIさんに同意。
慣れてくればもっとスマートにかけるようになるさ。
がんばれ。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

でもせっかく意見をお求めなので、僭越ながら、、、

1.
main関数は

int main()
{
...
return 0;
}

と書く。

2.
main関数の前に

#define N 6

を追加してmain関数内の6や5をなくす(6の代わりにNと書く)。
特に5という数字には何の意味もないので、
define を使わないとしても、せめてこう書く。

for (i=0;i<6;i++) {

ついでに3.
scanfしながら常に最大値を保持しておけば、forは1つですむ。


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 23年前
投稿: 310
 

ついでに4.
> scanf(%d,&a);
> c[i]=a;
変数 a はここでしか使用されていないので、
scanf(%d,&c[i]);
と書けます。こうすれば、変数 a は不要となります。

ちなみに、たいちろうさんの3.を行なうには、maxの初期値として、
変数 max がとりうる最小値を指定する必要があります。
(通常、マクロで定義されています)

VC++6では、int型については、LIMITS.Hに、
#define INT_MIN (-2147483647 - 1) /* minimum (signed) int value */
と定義されています。


返信引用
まつお
 まつお
(@まつお)
ゲスト
結合: 22年前
投稿: 4
Topic starter  

皆様色々とありがとうございます。
大変勉強になります。
私自身最近C言語を始めたばかりで右も左もわからない状態でして・・・
早く皆さんのように理解できるようになりたいです。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

// 余計なお世話^^;
// C++版: 要素数制限ナシ

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
std::vector<int> input;
int n;
while ( std::cin >> n )
input.push_back(n);
std::cout << *std::max_element(input.begin(), input.end());
return 0;
}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました