まず、宿題内容です。
変数nを入力し、配列a[ ]を動的に確保する。乱数を用いてn個のデータを配列a[ ]に入力し、次に繰り返してxを
入力し配列a[ ]の中に同じ値があれば、その位置を出力し、なければ0を出力するプログラムを書きなさい。
たとえば、A[ ]={4,2,7,3}でx=7のときは3を出力し、x=9のときは0を出力する。
まず、乱数を用いてn個のデータを配列a[ ]に入力できたのですが、うまくxの位置を特定することができません。
うまく特定するためのヒント又は問題点を訂正してください。
自分で作ったプログラム
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define CAPA 256
int input(void){
int x,y;
y=rand()%10+1;
return y;
}
int main(void){
int x,n,i;
int a[CAPA];
srand((unsigned)time(NULL));
printf("input n>>>");
scanf("%d",&n);
for(i=0;i<n;i++){
a=input();
printf("a[%d] = %d\n",i,a);
}
printf("x=");
scanf("%d",&x)
if(x=a){
printf("%d",i);
}
else{
printf("0");
}
return 0;
}
宿題でつまづいています。助けて下さい。
Re: 宿題でつまづいています。助けて下さい。
この仕様を満たすコードが見当たらないような気がします。ゆうさん さんが書きました: 変数nを入力し、配列a[ ]を動的に確保する。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
-
ゆうさん
Re: 宿題でつまづいています。助けて下さい。
boxさん
for文が終わるところまでで乱数を用いたn個の配列a[ ]を作ったので、それで動的に確保できているのではないのですか?
for文が終わるところまでで乱数を用いたn個の配列a[ ]を作ったので、それで動的に確保できているのではないのですか?
Re: 宿題でつまづいています。助けて下さい。
確かに配列aにn個の要素を代入していますが、それは配列a自体を動的に確保したことにはなりません。
配列aの(最大)要素数はCAPAであり、
int a[CAPA];
というように静的に確保しています。
もし、「input n>>」でCAPAより大きな数値、すなわち257以上の数値が入力されたら、配列から溢れてしまいますね。
そのような状況を防止するために、入力されたnを用いて配列aを動的に確保するようにします。それが問題文が求めていることです。
配列aの(最大)要素数はCAPAであり、
int a[CAPA];
というように静的に確保しています。
もし、「input n>>」でCAPAより大きな数値、すなわち257以上の数値が入力されたら、配列から溢れてしまいますね。
そのような状況を防止するために、入力されたnを用いて配列aを動的に確保するようにします。それが問題文が求めていることです。
Re: 宿題でつまづいています。助けて下さい。
できていません。ゆうさん さんが書きました: 動的に確保できているのではないのですか?
入力した要素数に基づいて、malloc()か何かを使うのが「動的確保」です。
なぜ256なのか、説明していただけますか?
私は、257以上であっても対応できるようなコードが必要ではないか、と思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 宿題でつまづいています。助けて下さい。
ループの外で1回比較するだけで本当にいいのでしょうか。
また、比較用の演算子は = で本当にいいのでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。