• 締切済み

わかりません・・・。

100個以下の整数を読み込んで、読み込んだ整数の一覧,それらのうちの最大値と二番目に大きい値とを表示するプログラムをつくりたいのですが、わかりません。 教えてください!! 実行例 整数は何個ですか:5 1 個目:65 2 個目:30 3 個目:98 4 個目:10 5 個目:54 入力された整数は 5 個で, 65 30 98 10 54 です. 最大値は 98 です. 二番目に大きい値は 65 です. ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー #include<stdio.h> #define number 100 int main (void) { int i; int seisu[number]; int max; puts("整数を入力してください。"); for(i=0, i<number, i++){ printf("%2d番",i+1); scanf("%d",&seisu[i]); } max=seisu[0] for(i=1, i<number, i++){ if (seisu[i]>max) max=seisu[i]; } printf("最高点:%d\n",max); return(0); } までしかわかりません。 2番目に大きい値と‘整数は何個ですか: ‘と‘入力された整数は 個で です。‘の部分はどうすればいいのでしょうか??

みんなの回答

  • YOKO-bee
  • ベストアンサー率50% (2/4)
回答No.2

まず、目的とされている処理を箇条書きにしてみましょう。 1.登録したい整数の個数入力(最大値100) 2.整数の入力(最大100個) 3.入力された整数の個数出力(最大100) 4.入力された整数の出力(最大100個) 5.入力された整数の最大値を出力 6.入力された整数の2番目に大きい値を出力 以上の6点が明示的な仕様となります。 では、これを入力・出力(表示)に分けて考えてみましょう。 まず入力について。 -------------------------------------- 1.登録したい整数の個数入力(最大値100) 2.整数の入力(最大100個) -------------------------------------- 「1.」は、「#define number 100」という宣言を使用したことで、ちょっと迷ってしまったのかと思われます。ここは「2.」で行っている「整数の入力」を同じことをすれば大丈夫です。「int n;」のように新たな変数を宣言して、変数「n」にscanf()で格納すればいいです。 「2.」関しては、掲載されたソースを見る限り出来ていますね。 ただ、「n」個(最大100個)の整数入力を促す必要があるため、今のソースでは登録したい整数の個数の値に関係なく「必ず」100個入力しないといけません。「number」を変数「n」にしてみましょう。 次に出力(表示)について。 -------------------------------------- 3.入力された整数の個数出力(最大100) 4.入力された整数の出力(最大100個) 5.入力された整数の最大値を出力 6.入力された整数の2番目に大きい値を出力 -------------------------------------- 現状のソースを見る限り「5.入力された整数の最大値を出力」が出来ています。 「3.」「4.」については、単に「1.」「2.」で入力された物を出力するだけです。 「3.」は先に書いた変数「n」を、「4.」は「2.」で入力につかったfor文を参考に「入力ではなく出力する」ようにしてみてください。 「5.」について、現状ソースで出来ていますが勿体無いです。せっかくfor文で「number」回分、比較処理を繰り返しているのですから、もうちょっと手を加えてバブルソートなどしてみてはどうでしょうか。 バブルソートについては、下の参考URLを見てください。サンプルソースも載っています。 「6.」については、先の「5.」で書いたバブルソートを使えば、seisu[0]に最大値、seisu[1]に2番目に大きい値が入りますので、それを表示するようにしてみましょう。 最後に最初に書いた箇条書きをまとめ直してみましょう。 1.登録したい整数の個数入力(最大値100) 2.整数の入力(最大100個) 3.入力された整数の個数出力(最大100) 4.入力された整数の出力(最大100個) ★★★追加(ここから)★★★ 4-2.入力された整数のソート ★★★追加(ここまで)★★★ 5.入力された整数の最大値を出力 6.入力された整数の2番目に大きい値を出力 プログラムというのは、どんなに小さいものでも大きいものでも必ず入力(Input)・出力(Output)=I/Oがあります。まずは要求事項をI/Oを明確にしてみて、そして入力された内容をそのまま出力「出来る物」と「出来ない物」で出力を分類していきましょう。 「出来ない物」は、「何故出来ないのか」と「何をしなければいけないのか」を考えてみてください。 長々と書いてしまいましたが・・・・プログラムの勉強は大変と思いますけど、楽しんで頑張ってくださいね♪

参考URL:
http://www1.cts.ne.jp/~clab/hsample/Sort/Sort1.html
全文を見る
すると、全ての回答が全文表示されます。
  • sobacya
  • ベストアンサー率11% (1/9)
回答No.1

#include<stdio.h> void main (void) { int *input; int input_count; int max[2] = {0, 0}; printf("整数は何個ですか:", &input_count); input = malloc(sizeof (int) * input_count); for (i = 0; i < input_count; i++) { printf("%d何個目:", &input_count); scanf("%d", &input[i]); if (max[1] < input[i]) { max[0] = max[1]; max[1] = input[i]; } } printf("入力された整数は %2d個で,", input_copunt); for (i = 0; i < input_copunt; i++) { printf("%d "); } printf("です.\n最大値は %3dです.\n二番目に大きい値は %3dです", max[0], max[1]); free(input); } これはバグがあるバージョンなのであとは自力で直してください。 フローでも書いて確認してみたほうがいいですよ。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プログラミングで二番目に大きい数を表示する

    指定された個数(100個以下)だけ整数を読み込んで,読み込んだ整数の一覧,それらのうちの最大値と二番目に大きい値とを表示するプログラムを作成。最大となる値が複数入力された場合も正しく処理する。 このプログラムで入力した数字が全部同じ時、二番目に大きい値はありません。と表示したいのですが、どのようにしたらいいのかわかりません。教えてください。あとこのプログラムで最大値と二番目に大きい値出せたのですが、念のため問題ないか確認お願いします。 #include <stdio.h> #define NUMBER 100 /*整数の個数の上限*/ int main(void) { int i; int num; int kazu[NUMBER]; int max; int sec; printf("整数は何個ですか:"); scanf("%d", &num); puts("整数を入力してください。"); for(i = 0; i<num; i++){ printf("%3d個目:",i+1); scanf("%d", &kazu[i]); } printf("入力された整数は%d個で、\n",num); for(i=0;i<num;i++) printf("%d ",kazu[i]); printf("です。\n"); sec = max = kazu[0]; for(i=1; i<num; i++){ if(kazu[i]>max) max=kazu[i]; } for(i=0;i<num;i++){ if(kazu[i]>max){ sec=max; max=kazu[i]; }else if((max>kazu[i]) && (kazu[i]>sec)) sec=kazu[i]; } printf("最大値は%dです。 \n",max); printf("二番目に大きい値は%dです。\n", sec); return(0); }

  • 最大値を求める

    3つの整数を入力して、最大値を求めるプログラムを作りたいのですが、整数を入力するところまでは うまくいくのですが、結果が、255、と出てしまいます。どこがおかしいのかが解かりません。 どなたか教えていただけませんか? 宜しくお願いします。 #include <stdio.h> int main(void) { int num[3]; int max, i, j; puts("三つの整数を入力してください"); for(i = 0; i < 3; ++i) { printf("整数%d:", (i + 1)); scanf("%d", &num[i]); } max = num[0]; for(j = 0; j < 3; ++j) { if(max < num[j]) { max = num[j]; } } printf("最大値は%dです。\n", max); return 0; }

  • 空Enterの扱い方

    3つの整数を入力し、最大値を出力するプログラムを作りました。 最大値をさがすステップに入る前に、 「最大値を出力しますか?(y/n)」と聞いてy+Enterで実行するようになっています。この部分を、 y+Enter もしくは 空Enter で実行するにはどのように変更すればよいのでしょうか?大変お手数ですが、教えてください。 よろしくお願いします。 #include <stdio.h> #include <stdlib.h> int main(){ int i,max,max_no,a[3]; char YN[2]; printf("整数を3つ入力してください。\n"); for(i=0;i<3;i++){ printf("%d番目の整数: ",i+1); scanf("%d",&a[i]); } printf("最大値を出力しますか?(y/n):"); scanf("%s",YN); if(YN[0]=='y'){ printf("最大値をさがします。\n"); } else{ exit(0); } max_no=0; max=a[max_no]; for(i=1;i<3;i++){ if(a[i]>max){ max=a[i]; max_no=i; } } printf("最大値は %d 番目のデータ %d です。\n",max_no+1,max); return 0; }

  • printf、最大値の出し方

    3つの整数を入力し、どれが最大値かを判別するプログラムを作りたいです。 #include<stdio.h> main() { int i, x, max; max = 0; i = 1; while(i <= 3) { printf("整数:"); scanf("%d",&x); if (x > max) { max = x; } i++; } printf("最も大きい整数は%d\n", max); } とすると 整数:と3回表示されますが、これを一つ目の整数:、二つ目の整数:3つ目の整数:と表示されるようなプログラムにするにはどうしたらよいでしょうか。

  • 並べ替えのプログラム

    整数を20個入力し、まずそのまま表示してその後大きい順に並べ替えて表示するプログラムを作っているのですが、最大値しか表示されません。多分for文の3重ループの中がおかしいと思うのですがよくわかりません。 #include <stdio.h> int main(int argc, char* argv[]) { int c,i,x,max; int sav = 0; int before[20]; int after[20]; int check[20] = {0}; printf("整数を20個入力してください: "); for(i = 0; i < 20; i++) { scanf("%d",&before[i]); } printf("\n"); printf("BEFORE\n"); for(i = 0; i < 20; i++) { printf("%d\n",before[i]); } printf("\n"); max = 0; for(c = 0; c < 20; c++) { for(x = 0; x < 20; x++) { for(i = 0; i < 20; i++) { if(before[i] > max && check[i] == 0) max = before[i]; sav = i; } if(check[sav] == 0) check[sav] = 1; after[19 - x] = max; } } printf("AFTER\n"); for(x = 0; x < 20; x++) { printf("%d\n",after[x]); } return 0; } よろしくお願いします。

  • コンパイルエラー

    このソースを実行しても、コンパイルエラーになります。エラーメッセージは、 エラーE2449で19行目で、'eng'のサイズが不明またはゼロとでます。これが、二つ出ます。また20行目の'mat'も一緒のが二つでます、ほかにもでるのですが、これが、分からないので教えてください。宜しくお願いします。また、int max= vc[0];の意味も教えてください。 #include <stdio.h> #define NUMBER int max_of(int vc[ ],int no) { int i; int max = vc[0]; for (i=1; i< no; i++) if(vc[i] > max) max= vc[i]; return(max); } int main(void) { int i; int eng[NUMBER]; /*数学の点数*/ int mat[NUMBER]; /*英語の点数*/ int max_e, max_m; /*最高点*/ printf("%d人の点数を入力してください。\n", NUMBER); for (i=0; i<NUMBER; i++) { printf("[%d] 英語 :",i+1); scanf("%d", &eng[i]); printf(" 数学 :"); scanf("%d", &mat[i]); } max_e = max_of(eng, NUMBER); /*英語の最高点*/ max_m = max_of(mat, NUMBER); /*数学の最高点*/ printf("英語の最高点=%d\n", max_e); printf("数学の最高点=%d\n", max_m); return (0); }

  • 基礎だと思いますが、教えてください!初心者です。

    『0より大きい10個の異なる数字を入力したときに、 大きいものから順番に並び替えて表示する』プログラム の作り方を教えてくださいm(__)m 下に途中までですが、自分なりにやったものを載せておきます。 include <stdio.h> int main() { int input[10],max[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; int i,j; printf("0より大きい10個の異なる数字を入力してください\n"); for(i=1; i<=10; i++)/* 比べるものを10個入力する */ { printf("%d番目の数字を入力してください",i); scanf("%d", &input[i-1]); } for(j=1; j<=10; j++) /* 1つずつ調べている */ { for(i=1; i<=10; i++) { if(max[j-1] < input[i-1]) max[j-1] = input[i-1]; /* 結果をほかの配列に格納している */ input[i-1] = 0; /* 最大となったものを0にしたい,だけどその方法がわからない */ } /* これだと最大値が変わるごとにその値が0になってしまいます */ printf("%2d目の数は%2dです \n",j,max[j-1]); } return(0); }

  • 処理の流れの説明のしかたがわかりません。

    プログラムの課題が出たのですがソースコードはなんとか穴埋めでできたのですが説明文を簡単につけなければならないのですがあんまり理解してないのでどのように説明したら良いかよくわかりません。お願いします。 10個の整数を配列し保存しそのデータのうちから最大値と最小値を表示するプログラムです。 #include <stdio.h> void main(void) { int data[10]; int i; int max,min; for(i=0;i<10;i++){ printf("input data No. %d ->",i+1); scanf("%d",&data[i]); } max=data[0]; min=data[0]; for(i=1;i<10;i++){ if(data[i]>max){ max=data[i]; } if(data[i]<min){ min=data[i]; } } printf("MAX = %d\n",max); printf("MIN = %d\n",min); } .

  • プログラミング(C言語)についての質問です

    3つの整数の入力を受け付け、最大と最小を求める関数を作成し得られた結果を表示するプログラミングを作成したつもりなのですが、うまく作動しません。(コンパイルはできますが、結果が無茶苦茶になります。) ご教授宜しくお願いします。 それと、課題文にはポインタを使って最大値と最小値を同時に求めるようにと書いてあったのですが、それもよくわからないです。 今回初めてポインタと配列の受け渡しについて習ったのでよくわかっていない部分も多いと思うのですが、何卒宜しくお願いします。 ちなみに関数の形自体は void minmax(int data[],int *min,int *max){} で決まっています。 #include <stdio.h> void minmax(int data[],int *min,int *max){ int i; *min=*max=data[0]; printf("1st intenger:"); scanf("%d",&data[0]); printf("2st intenger:"); scanf("%d",&data[1]); printf("3st intenger:"); scanf("%d",&data[2]); for(i=1;i<3;i++){ if(*max<data[i]){ *max=data[i]; } if(*min>data[i]){ *min=data[i]; } } } int main(void){ int data[3],min,max; minmax(data,&min,&max); printf("最小値は%dで最大値は%dです",min,max); return 0; }

  • コンパイルエラー

    Borlnd C++ compilerでコンパイルしたのですが、どうしてもエラーがでてしまいます。エラーは、不正な文字’’(0×8140)(関数 main) エラーE2206 文字' ' (0×8140)(関数 main) エラーE2206と二つ同じエラーがあると表示されます。本当に分からないので力を貸したください。お願いします。 /*読み込んだ二つの整数値の大きい方の値を求めて表示(条件演算子)*/ #include <stdio.h> int main(void) { int n1, n2, max; puts("二つの整数を入力してください。");   printf("整数1 : "); scanf("%d", &n1); printf("整数2 : "); scanf("%d", &n2); max = (n1 > n2) ? n1 : n2; printf("大きい方の値は%dです。\n", max); return 0;