• ベストアンサー

ヒントをください!

ある課題があるんですが、 「ユーザに好きな整数を10個入力させ、その最小値と最大値を出力するプログラムを書いてください。if文を使ってください。」 このプログラムを作る際のヒントをください。ぜんぜんわからないので。。。 答えは作ってから見たいので。。。 よろしくおねがいします。 10個数字を入力させるプログラムは作りました。 #include <stdio.h> int main(void){ int c,e,r,u,t,v,d,a,p,n; printf("好きな整数を10個入力してください。\n"); printf("整数を入力:"); scanf("%d",&c); printf("整数を入力:"); scanf("%d",&e); printf("整数を入力:"); scanf("%d",&r); printf("整数を入力:"); scanf("%d",&u); printf("整数を入力:"); scanf("%d",&t); printf("整数を入力:"); scanf("%d",&v); printf("整数を入力:"); scanf("%d",&d); printf("整数を入力:"); scanf("%d",&a); printf("整数を入力:"); scanf("%d",&p); printf("整数を入力:"); scanf("%d",&n); return 0; } このようになりました。

  • dfksh
  • お礼率64% (756/1164)

質問者が選んだベストアンサー

  • ベストアンサー
  • nerosuke
  • ベストアンサー率33% (39/115)
回答No.7

No1さんのお礼から >もっとスリムなプログラムはあるのではないのかな、と考えているのです 考えてできないよりかは、膨大になっても実装した方が良いですよ。 スリムなプログラムを入門者がいきなり考えてもしょうがないです。 まずは動くものを書いてから、最適化していくと良いです。 あと答えはNo6さんが書いてくれてますけど、 一応一言・・・(マナー違反かな?) No6さんの回答から if(i==0){ min=a[i]; max=a[i]; } この部分はループの前に0で初期化していれば無用です。 毎回余分な条件判定が入ってしまうので・・・ 余計なお世話ならすいません。

その他の回答 (6)

回答No.6

#include <stdio.h> int main(){ int i,a[10],min,max; for(i=0;i<10;i++){ printf("%d番目の整数: ",i+1); scanf("%d",&a[i]); if(i==0){ min=a[i]; max=a[i]; } else{ if(min>a[i]){ min=a[i]; } else if(max<a[i]){ max=a[i]; } } } printf("最小値: %d, 最大値: %d\n",min,max); return 0; }

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.5

がると申します。 んっと。プログラムを書くときは、まず「コメント」を書く癖をつけると大変によろしいかと思います。 今回ですと /* ユーザに好きな整数を10個入力 */ /* その最小値と最大値を出力する */ こんな感じです。 で、 /* その最小値と最大値を出力する */ はさらに /* 最小値と最大値を求める */ /* 最小値と最大値を出力する */ になり、さらにそれは /* 最小値を求める */ /* 最大値を求める */ /* 最小値と最大値を出力する */ になります。 整理すると /* ユーザに好きな整数を10個入力 */ /* 最小値を求める */ /* 最大値を求める */ /* 最小値と最大値を出力する */ ですね。 あとは、各コメントごとにプログラムをしていくと、少しだけ、楽になるかと思います。

dfksh
質問者

お礼

そういえばコメント文は書いたことがありませんでした・・・。 参考にさせていただきます。

  • bnosuke-x
  • ベストアンサー率39% (43/110)
回答No.4

じゃあ、本当にヒントだけ。 数の入力は、ループで配列に入れる 最小値と最大値を入れるための変数を準備しておく。 配列に入れておいた数をループしながら一つずつ見ていき、新しい最小/最大値が見つかったら更新する。 これでどうでしょう。 あとは、他の皆さんの言うとおりにして下さい。

dfksh
質問者

お礼

回答ありがとうございました。 もう一度基礎から見直してこのヒントを参考に作っていこうと思います。 ありがとうございました。

  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.3

とりあえず,簡単なCの本を一冊通読しましょう. きちんと自分で環境を構築して実験しながらしましょう. #これはもうCとかの問題ではなくて #アルゴリズムそのものの問題だな・・・ まず一番大事なのは「質問の仕方を学ぶ」こと. あなたの質問の仕方はかなり悪い部類に入ります (a)タイトルは内容を反映したものにする (b)質問内容は漠然としたものではなく整理すること (a)(b)に注意すると質問しようとすると問題が整理されて 解決してしまうこともままあります. ヒントだけ. (1)「繰り返しは悪」for文,while文を勉強する (2)入力した数を全部変数にいれて覚えることはない. 新しい値が入力された時点での最大と最小だけ記憶すればよい. 結果,10個でも何個でもよくなる.

dfksh
質問者

お礼

すべて独学です。やはり参考書は必要になりますか。 すみませんでした。ちゃんとfor文やwhile文を理解していませんでした。 なのでせっかくヒントをいただいても意味がわかりませんでした。 プログラミングを勉強するのは早かったのかなと思いました。 もう少し年をとってから勉強することにします。 ありがとうございました。

noname#22058
noname#22058
回答No.2

1000個入力する場合でも、そのパターンで作りますか? 配列を用意して、ループの中で入力するのが正攻法でありましょう。

dfksh
質問者

お礼

ループですか・・・いろいろやってみます! ありがとうございました!

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

> このプログラムを作る際のヒントをください。ぜんぜんわからないので。。。 全然分からないというのであれば、最初にすべきことは、何が分かって何が分からないかを明確にすることです。 それができないのであれば、C言語の入門書を買ってきて勉強するのが正攻法です。 それでも全然分からないのであれば、まずは日本語を勉強しましょう。あるいは英語を勉強するのもよいでしょう。

dfksh
質問者

お礼

ifをつかって a > b a < b などの条件をつければいいのかな?と考えています。 しかし、今の私の知識では膨大なプログラムになるので、もっとスリムなプログラムはあるのではないのかな、と考えているのです。 ありがとうございました。

関連するQ&A

  • ヒントを教えて欲しいです

    2と1が同時に表示されてしまうのです。 キーボードから2個の整数を読み込み、それらの和と差がともに偶数であれば整数の2を表示し、いずれか一方のみが偶数の場合は1を表示し、それ以外の場合は整数の0を表示するプログラムを作れ #include<stdio.h> main() { int A,B; printf("Enter an integer:"); scanf("%d",&A); printf("Enter an integer:"); scanf("%d",&B); if((A+B)%2==0,(A-B)%2==0){ /* 偶数ならば */ printf("2\n"); } if((A+B)%2==0){ /* 偶数ならば */ if((A-B)%2==0) /* 偶数ならば */ printf("1\n"); } else{ /* 奇数ならば */ printf("0\n"); } }

  • 警告 W8065について。

    このプログラムを実行したら、実行結果は思い通りになったのですが、 「警告 W8065…プロトタイプのない関数」 と言うのが出ました。  (1)これを消すにはどうすればよいのかを教えてください。  (2)このプログラムはわざと4つに分けているのでこの状態のままプログラムのどこをいじればよいのかを教えてください。 OSはWindows XPでボーランドのコンパイラを使用しています。 #include<stdio.h> int hiki(); int kake(); int waru(); int main(){ int a,b; printf("一つ目の数字\n"); scanf("%d",&a); printf("二つ目の数字\n"); scanf("%d",&b); printf("計%d\n",a+b); hiki(); return 0; } int hiki (){ int c,d; printf("一つ目の数字\n"); scanf("%d",&c); printf("二つ目の数字\n"); scanf("%d",&d); printf("計%d\n",c-d); kake(); return 0; } int kake (){ int e,f; printf("一つ目の数字\n"); scanf("%d",&e); printf("二つ目の数字\n"); scanf("%d",&f); printf("計%d\n",e*f); waru(); return 0; } int waru (){ int g,h; printf("一つ目の数字\n"); scanf("%d",&g); printf("二つ目の数字\n"); scanf("%d",&h); printf("計%d\n",g/h); return 0; }

  • C++のプログラム

    C言語の問題を授業で出されたのですがさっぱり分かりません。教えて下さい。 1.キーボードから整数nを入力して、1+2+…+nを求めるプログラムを作れ。 2.キーボードから整数nを入力して、1*2*…*nを求めるプログラムを作れ。 3.キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作   れ。 4.円錐の体積を求めるプログラムを作れ。 注:円錐体積V=π*r*r*h/3 5.キーボードから文字列を入力し、それを逆さまにするプログラムを作れ。例えば、”dog”を逆さまにすると”god”になる。 6.キーボードから一つの整数を入力し、それは奇数か偶数かを判断するプログラムを作れ。 ちなみに6番は /* iftst.c */ #include <stdio.h> void main(void) { int n; printf("n="); scanf("%d",&n); if(n%2 == 0){ printf("偶数です\n"); } else{ printf("奇数です\n"); } } で合っているのでしょうか?

  • C言語でscanf()が先に実行されるのはなぜですか?

    C言語でscanf()が先に実行されるのはなぜですか? #include <stdio.h> int main(void){ int intNum; printf("整数を入力してください:\n"); scanf("%d", &intNum); printf("入力値は:%d\n",intNum); return(0); }

  • 昇順に並べ替えるプログラム(続き)

    (C言語)実行例のような3つの整数を読み込み昇順に並べ替えるプログラムは途中までわかったのですがあとはどう修正・追加をすればいいのでしょうか? 実行例 1:45 2:43 3:38 昇順に並べ替えました。 1:38 2:43 3:45 途中までのプログラム #include<stdio.h> int main(void) { int n1,n2,n3; printf("1:"); scanf("%d",&n1); printf("2:"); scanf("%d",&n2); printf("3:"); scanf("%d",&n3); printf("昇順に並べ替えました。\n"); return 0; }

  • malloc関数について質問です。

    整数を入力してその分だけ動的にメモリを確保し、その後文字列を入力して確保した領域に格納し、表示するプログラムなんですが、 int main(void) { int n; char *p; puts("整数を入力"); scanf("%d", &n); p = malloc(sizeof(char) *(n+1)); puts("文字を入力");   scanf("%s", p); printf("文字列は%s\n", p); free(p); return 0; } としたら、ちゃんとプログラムは動くんですが、 問題の意図にあっているんでしょうか?

  • 組み合わせ

    aに100、bに20や2を入力すると プログラムが停止します。 計算できるように御指摘お願いします。 以下のプログラムです。 #include<stdio.h> int factrical(int n){ if(n>0){ /*printf("%d\n",n);*/ return (n*factrical(n-1)); } else{ return(1);} } int combination(int n ,int r){ return(factrical(n)/(factrical(n-r)*factrical(r))); } int main (void){ int a,b,c; printf("二つの数を入力してください。\n"); do{ printf("大きい方の数を入力してください。\n"); scanf("%d",&a); scanf("%d",&b); }while(a<b); c=combination(a,b); printf("%d",c); return(0);}

  • C言語の初心者です。

    ポインタについて教えてください。 #include <stdio.h> int main() { int *p,a[2],i=0; p=a; scanf("%d",p); printf("%d\n",*p); i++; scanf("%d",p+i); printf("%d\n",*(p+i)); return 0; } これは整数を入力して出力といった簡単なプログラムなのですが、こういうポインタの使いかたって普通はしないでしょうか・・?。ポインタは使わずにこういう場合は2次元配列とかで出すのが普通なのでしょうか? また、下のプログラムなのですが、上記のプログラムをただ単にキャラ型で試しただけなのですが、どうして実行時エラーがおこってしまうのでしょうか? printfのところの*nameの、*を抜くと実行時エラーはおこりません。しかし、上記の整数では*はつけたままでも エラーしません。 整数とキャラ型では何かちがうのでしょうか?? #include <stdio.h> int main() { char *name,a[10]; name=a; printf("入力---"); gets(name); printf("%s\n",*name); return 0; } 初心者特有の質問をしてしまって申しわけございません。でも、ずっと悩んでて、すこしずつでもポインタの本当の使いかたを知りたいとおもいまして、初期段階ではありますがどうしても解らなかったので質問させていただきました。 そういうものだから!以外でご説明いただける方がいらっしゃいましたら宜しくお願いいたします。

  • c言語のプログラムについて

    今年からC言語を始めた大学1年生です。レポートで四則計算を行うプログラムを6/19までに作らないといけないです。使えるのは今までに習った選択型、反復型、関数scanfです。このプログラムの留意点は次の4つです。 1.使う演算を選択してもらう   例えば   どんな演算をしますか? 1:+,2:-,3:*,4:/ (選択) 2.演算を行う数値を入力してもらう   例えば   a + b の計算をします。aを入力してください。 3.演算結果を表示する   ○+○の答えは ○です 4.計算終了か、それともほかの演算を行うか 決める   0:計算終了 1:他の計算を行う を選択してください  以下のプログラムはこのことを留意してプログラムをつくりました。どこがおかしいのでしょうか。 #include<stdio.h> main() { short a,b,m,n; long c,d,e,f; c = a + b; d = a - b; e = a * b; f = a / b; m = 1; printf("整数を入力してください:"); scanf("%d",&a); printf("どんな演算をしますか?:"); printf("1: +,2: -,3: ×,4: ÷ :"); scanf("%d",&n); while(m=1){ if(n<=4){ while(m=1){ switch (n<=4){ case 1: printf("整数を入力してください:"); scanf("%d",&b); printf("%d + %d = %d \n",a,b,c); break; case 2: printf("整数を入力してください:"); scanf("%d",&b); printf("%d - %d = %d \n",a,b,d); break; case 3: printf("整数を入力してください:"); scanf("%d",&b); printf("%d × %d = %d \n",a,b,e); break; case 4: printf("整数を入力してください:"); scanf("%d",&b); printf("%d ÷ %d = %d \n",a,b,f); break; } } } else { printf("計算できません。"); printf("演算をやり直してください。\n:"); } } printf("計算を終了しますか、それとも他の計算を行いますか?:"); printf("0:計算終了,1:他の計算を行う:"); scanf("%d",&m); printf("計算を終了します。\n"); } 提出期限があるのでなるべく早めのご回答待ってます。生意気言ってすいません。

  • C言語 %表示

    二つの整数値を読み込んで、前者が後者の何%かを表示するプログラムを作成したいです。 #include<stdio.h> int main(void){ int no1,no2; printf("整数を入力してください。\n"); printf("整数A:"); scanf("%d",&no1); printf("整数B:"); scanf("%d",&no2); printf("Aの値はBの値の%f%%です。\n",(double)(no1/no2)); } Aの値はBの値の0.0000%です。となってしまいます。 上記のプログラムの訂正をお願いします。

専門家に質問してみよう