5が出るまで数字を入力して5が出たらそれまで入力した数字の5以外の最大値と最小値を入れ替えたのを左から順番に表示するプログラムの作り方を教えてください
for文から無限ループして何回もscanfで入力するまではわかったのですが
そこから最大と最小を出して
それを入れ替えるやりかたがわかりません
教えてください
無限ループから配列処理をして最大と最小を求めてそれを入れ替えるやり方
Re: 無限ループから配列処理をして最大と最小を求めてそれを入れ替えるやり方
課題がよくわかりません。もっと、正確に書いてください。
>5が出るまで数字を入力して
「出る」とはどこから出るのでしょうか、乱数ですか?
>左から順番に表示する
最大と、最小を除いて入力された順ということでしょうか?
すると、すべての入力されたデータを記憶しておく必要があるように思えますが、
データの最大個数はあるのでしょうか?
>for文から無限ループして何回もscanfで入力するまではわかったのですが
そのプログラムを添付しましょう。
フォーラムルールを守って、これが学校の課題ならどこまで習っているのかを
示してください。
>5が出るまで数字を入力して
「出る」とはどこから出るのでしょうか、乱数ですか?
>左から順番に表示する
最大と、最小を除いて入力された順ということでしょうか?
すると、すべての入力されたデータを記憶しておく必要があるように思えますが、
データの最大個数はあるのでしょうか?
>for文から無限ループして何回もscanfで入力するまではわかったのですが
そのプログラムを添付しましょう。
フォーラムルールを守って、これが学校の課題ならどこまで習っているのかを
示してください。
non
Re: 無限ループから配列処理をして最大と最小を求めてそれを入れ替えるやり方
例えば
2 1 3 7 8 10 5
と入力すると
2 10 3 7 8 1 と最大値と最小値が出力されるプログラムです
学校で習ったのは
printf scanf for do while while 配列 です
無限ループして何回も入力するのは
今できているところは
#include<stdio.h>
int main (void)
{
int n;
printf("入力¥n")
for(;;)
{
scanf("%d",n);
}
return 0;
}
までです
2 1 3 7 8 10 5
と入力すると
2 10 3 7 8 1 と最大値と最小値が出力されるプログラムです
学校で習ったのは
printf scanf for do while while 配列 です
無限ループして何回も入力するのは
今できているところは
#include<stdio.h>
int main (void)
{
int n;
printf("入力¥n")
for(;;)
{
scanf("%d",n);
}
return 0;
}
までです
Re: 無限ループから配列処理をして最大と最小を求めてそれを入れ替えるやり方
今できているプログラムは、うまく動かないはずです。
実行して確認しましょう。
また、scanfの次の行に、printfでnを表示するようにしましょう。
永久ループですから止めるにはCTRL-cで止めます。
さて、うまくいったなら、5を入力したらループから抜けるようにプログラムを変更し
できたら、プログラムを添付してください。
なお、プログラムを添付するときにはタグを使ってください。
実行して確認しましょう。
また、scanfの次の行に、printfでnを表示するようにしましょう。
永久ループですから止めるにはCTRL-cで止めます。
さて、うまくいったなら、5を入力したらループから抜けるようにプログラムを変更し
できたら、プログラムを添付してください。
なお、プログラムを添付するときにはタグを使ってください。
non
Re: 無限ループから配列処理をして最大と最小を求めてそれを入れ替えるやり方
#include<stdio.h>
int main (void)
{
int n[900],i,k;
printf("入力¥n")
for(;;)
{
scanf("%d",n);
if(n==5)
break;
}
for(j=0;j<i;k++)
printf("%d¥n",n);
return 0;
}
int main (void)
{
int n[900],i,k;
printf("入力¥n")
for(;;)
{
scanf("%d",n);
if(n==5)
break;
}
for(j=0;j<i;k++)
printf("%d¥n",n);
return 0;
}
Re: 無限ループから配列処理をして最大と最小を求めてそれを入れ替えるやり方
↑間違えました
少し直してみたのですが
<#include<stdio.h>
int main (void)
{
int i,j;
printf("入力\n");
for(;;)
{
scanf("%d",&i);
if(i==5)
break;
}
printf("%d\n",i);
return 0;
}>
配列を使って表示する方法がわかりません
少し直してみたのですが
<#include<stdio.h>
int main (void)
{
int i,j;
printf("入力\n");
for(;;)
{
scanf("%d",&i);
if(i==5)
break;
}
printf("%d\n",i);
return 0;
}>
配列を使って表示する方法がわかりません
Re: 無限ループから配列処理をして最大と最小を求めてそれを入れ替えるやり方
<code>
#include<stdio.h>
int main (void)
{
int i,j;
printf("入力\n");
for(;;)
{
scanf("%d",&i);
if(i==5)
break;
}
printf("%d\n",i);
return 0;
} </code>
#include<stdio.h>
int main (void)
{
int i,j;
printf("入力\n");
for(;;)
{
scanf("%d",&i);
if(i==5)
break;
}
printf("%d\n",i);
return 0;
} </code>
Re: 無限ループから配列処理をして最大と最小を求めてそれを入れ替えるやり方
あー惜しいですがcodeは[]でくくってください。
後入力のときにiをおきっぱなしにしてるようなので少し気にしてあげてください。
最後に配列が出てきたコードの を書き換えてみると for文のループに使ってる変数がバラバラだったのでjのみにしました。tn さんが書きました:配列を使って表示する方法がわかりません
後入力のときにiをおきっぱなしにしてるようなので少し気にしてあげてください。
ニャン!!\(゜ロ\)(/ロ゜)/
Re: 無限ループから配列処理をして最大と最小を求めてそれを入れ替えるやり方
utとtnさんは同一人物ですか?統一してね。
最初に添付してもらったプログラムの悪いところにコメントをつけました。動くように手直ししてください。
完成したら、添付してね。
#include<stdio.h>
int main (void)
{
int n[900],i,k; // iは何から始めましょうか?
printf("入力¥n") // セミコロンがない
for(;;)
{ // 繰り返すたびにiは増やしたいよね。
scanf("%d",n[i]); // n[i]の前に何かおまじないをつけるって習いませんでしたか
if(n[i]==5)
break;
}
for(j=0;j<i;k++) // jでカウントしてるのになんで、kを増やすの?
printf("%d¥n",n[i]); //カウントはjだろ
return 0;
}
完成したら、添付してね。
non
Re: 無限ループから配列処理をして最大と最小を求めてそれを入れ替えるやり方
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p = NULL, *q, num, max, min, mx, mn, n = 0, t, i;
// データの入力
while (1) {
scanf("%d", &num);
if (num == 5) break;
// 動的に領域を拡張する
q = realloc(p, sizeof(int) * (++n));
if (!q) exit(1);
// 入力値をセットする
p = q, p[n-1] = num;
}
// 1個以上データがあれば
if (n) {
// 最大値と最小値の値と場所を求めて
for (max = min = p[0], mx = mn = 0, i = 1; i < n; i++) {
if (p[i] > max) max = p[i], mx = i;
if (p[i] < min) min = p[i], mn = i;
}
// 入れ替える
t = p[mx], p[mx] = p[mn], p[mn] = t;
// 結果の出力
for (i = 0; i < n; i++) printf("%d ", p[i]);
putchar('\n');
// 後始末
free(p), p = NULL, free(q), q = NULL;
}
return 0;
}