• ベストアンサー

入力した整数のうち、最小のものを出力したい

一つの整数をキーボードから入力する。これをn とする。続いてn 個の整数をキーボードから入力する(値は100 以下と仮定してよい)。その後、n 個の整数の中で最小のものを出力したいのですが… 一応途中まではやってみました。↓ #include <stdio.h> int main(void) { int n, i, t; scanf("%d",&n); for (i=0; i < n; i++){ scanf("%d",&t); } return (0); } この後、どうしたらいいですか?

  • n1079
  • お礼率60% (70/115)

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

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

「最小のものを求める」部分が全くないんですが……まぁいいか。 ・もう一つint型の変数(minと仮置き)を用意する ・forループの初回ならtの値をminに入れる ・2回目以降はtがminより小さければtの値をminに入れる ということをやればforのループアウト時にminに最小値が入っています。

n1079
質問者

お礼

回答ありがとうございました。

n1079
質問者

補足

>forループの初回ならtの値をminに入れる forループで何回目かどうかわかるようにすることができるんですか? どうようにするか教えてくれたら嬉しいです。

その他の回答 (3)

回答No.4

まず、全体の流れを決めましょう。 (1)nを入力する (2)n個の整数を入力して、その値を記録する (3)記録した中から最小値を探す (4)最小値を表示する とりあえず、(1)と(2)の前半はできているという事でしょう。 (2)後半 n個の数値をどこかに記憶するやり方はいろいろありますが、配列を使う方法が簡単でしょう。 nは100以下なので int型で要素数100個の配列を準備すればいいですね。 ループ変数をうまく使って、配列に順次数値を入れてください。 (3)最小値を探す まず配列の最初を最小値の初期値として、残りの値を1個ずつ比較して、小さい方を新しい初期値にしていけば最後まで調べた時に本当の最小値が求まっているはずです。 (4)表示 printfが使えるなら、それが一番簡単でしょう 実は、最小値を探すだけなら配列に記録する必要はなくて、入力→比較を繰り返せば最小値が求まります。 前の回答者さんはこちらのやり方ですね。

n1079
質問者

お礼

配列を使ってもやってみます! 回答ありがとうございました。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

ループ回数は「ループカウンタiの値」で判断しましょう。

n1079
質問者

お礼

できました! ありがとうございます。

noname#77845
noname#77845
回答No.1

int n, i, t;   ↓ int n, i, t, min; scanf("%d",&t); }   ↓ scanf("%d",&t); if(min>t)min=t; } return (0);   ↓ printf("%d\n",min); return (0); ぐらいか…。 (っていうか、「一応途中まではやってみました。」は何もやっていないのと同じだろう…。「一番小さいもの」を選ぶことをやっていないし、出力もしていない。)

n1079
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • 最小の整数が,何番目に入力されたものかを出力したい

    先日、 「一つの整数をキーボードから入力する。これをn とする。続いてn 個の整数をキーボードから入力する(値は100 以下と仮定してよい)。その後、n 個の整数の中で最小のものを出力したい」 という質問をした者です。 今度は出力された最小の整数が,何番目に入力されたものか を出力したいのですが、どうすればいいですか? 困ってるんでお願いします。 ちなみに、前回の質問の答えはこうなりました。↓ #include <stdio.h> int main(void) { int n, i, t, min=0; scanf("%d",&n); for (i=0; i < n; i++){ scanf("%d",&t); if (i==0){ min=t; } if (min > t) { min=t; } } printf("\n最小:%d", min); return (0); }

  • 非負整数nを読み込んで、1+2+・・・+m>nとなる最小の整数mを表示

    非負整数nを読み込んで、1+2+・・・+m>nとなる最小の整数mを表示するというプログラミングなのですが・・・ #include <stdio.h> int main(void) { int n,m=■ , sum=0; do { printf("非負整数: "); scanf("%d", &n); } while (n■0); while (sum■n) { ■ ; sum +=■; } printf("1+2+・・・+m> %dとなる最小の整数mは%dである。\n", n, m); return (0); } ■のところがわかる方どうにかお願いします!!

  • 3つの整数が等しいかどうか調べるプログラム

    3つの整数が等しいかどうか調べるプログラムがよくわからないので、どなたか教えていただけないでしょうか?ちなみに、わからないながらに作ってみました。 #include <stdio.h> int main(void) { int x, y, z; puts("3つの整数を入力してください。"); printf("整数1:"); scanf("%d",&x); printf("整数2:"); scanf("%d",&y); printf("整数3:"); scanf("%d",&z); if (x==y==z) puts("3つの整数の値は同じです。"); else puts("3つの整数の値は違います。"); return (0); }

  • 10個の整数を入力して小さい順にソートする

    C言語を使って、10個の整数を読み込んで小さい順にソートするプログラムを作っています。 #include<stdio.h> #include<stdlib.h> int main() { int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int i; for (i = 0; i < 9; ++i ) { printf("No. %d Please Enter!", a[i]); scanf("%d", &a[i]); } return(0); } これで、10個の整数を読み込んだ後、ソートする方法が分かりません。 どなたか教えていただけますでしょうか^^;

  • 入力した数 警報

    警報をno回鳴らしたいです。 #include<stdio.h> void alert(int no){ int i; for(i=1;i<=no;i++){ putchar('\a'); } } int main(void){ int a; puts("整数を入力してください。"); scanf("%d",&a); alert(a); return(0);} 修正をお願いします。

  • printf()で出力したいんですが?

    #include <stdio.h> int main( void ) { int air[4]; int i; i = 0; printf( "データ入力\n" ); do{ scanf( "%d\t", &air[ i++ ]); } while(air[ i - 1 ] > 0 ); printf( "%d\n", i ); return 0; } このプログラムはコンパイル出来ますが、期待していたprintf関数での出力ができません。 その理由として何がありますか?関数の使い方が間違っているのか、DO~WHILE文が使えない場所 なのか、もし直すとすればどう直せばいいのですか。

  • C言語の初歩的な質問

    質問1----------------------------------------- #include<stdio.h> int main() {  int a;  char b[10];  for(int i = 0;i < 2;i++){   scanf("%d",&a);   printf("整数%d\n",a);  }  scanf("%s",b);  printf("文字列%s\n",b); } /* この際に、例えばabと入力すると結果が 整数-858993460 整数-858993460 文字列ab となり整数入力を無視して進められるのはなぜでしょうか? */ 質問2----------------------------------------- #include<stdio.h> void func(int**); int main() {  int *p;  func(&p);  printf("%d",*p); } void func(int **pp) {  int n = 10;  *pp = &n; } /* func関数のnはスコープからはずれて変数の寿命がなくなるはずなのにprintfで表示されるのはなぜでしょうか? */ ---------------------------------------------- C言語は一冊の本とネットの入門サイトをかじった程度の理解です。

  • C言語の、階乗を使うプログラムの問題を教えて下さい

    C言語の、このプログラムを作るのが分かる方、教えて下さい。階乗を使う問題です。 「キーボードで整数aを入力するとn!>aとなるときの最小のnを出力するプログラムを作りなさい」という問題です。 分からず苦戦しています。 nをキーボードで入力してn!を求めるには #include<stdio.h> int main(void) { int kekka,n,i; printf("n=? \n"); scanf("%d",&n); kekka=1; for(i=1;i<=n;i++) { kekka=kekka*i; } printf("%d!は%dです。\n",n,kekka); return 0; } とすればいいのは自分で作れたのですが、問題にあるn!>aのプログラムが分からず困っています。 分かる方、お願いいたします

  • Cのプログラミングを勉強中です。

    Cのプログラミングを勉強中です。 Aの値のBに対する割合を表示すしたいのですが、以下のように記述してもうまくいきません。 どこを直したらよいか教えていただけますか。 #include <stdio.h> int main(void) { int n1 , n2 ; printf("二つの整数を入力してください。\n"); printf("整数A:"); scanf("%d", &n1); printf("整数B:"); scanf("%d", &n2); printf("Aの値はBの%d%%です。\n" , n1 / n2 * 100 ); return(0); }

  • ヒントをください!

    ある課題があるんですが、 「ユーザに好きな整数を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; } このようになりました。

専門家に質問してみよう