宿題でつまづいています。助けて下さい。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ゆうさん

宿題でつまづいています。助けて下さい。

#1

投稿記事 by ゆうさん » 14年前

まず、宿題内容です。

変数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;
}

box
記事: 2002
登録日時: 15年前

Re: 宿題でつまづいています。助けて下さい。

#2

投稿記事 by box » 14年前

ゆうさん さんが書きました: 変数nを入力し、配列a[ ]を動的に確保する。
この仕様を満たすコードが見当たらないような気がします。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

ゆうさん

Re: 宿題でつまづいています。助けて下さい。

#3

投稿記事 by ゆうさん » 14年前

boxさん

for文が終わるところまでで乱数を用いたn個の配列a[ ]を作ったので、それで動的に確保できているのではないのですか?

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: 宿題でつまづいています。助けて下さい。

#4

投稿記事 by beatle » 14年前

確かに配列aにn個の要素を代入していますが、それは配列a自体を動的に確保したことにはなりません。
配列aの(最大)要素数はCAPAであり、
int a[CAPA];
というように静的に確保しています。

もし、「input n>>」でCAPAより大きな数値、すなわち257以上の数値が入力されたら、配列から溢れてしまいますね。
そのような状況を防止するために、入力されたnを用いて配列aを動的に確保するようにします。それが問題文が求めていることです。

box
記事: 2002
登録日時: 15年前

Re: 宿題でつまづいています。助けて下さい。

#5

投稿記事 by box » 14年前

ゆうさん さんが書きました: 動的に確保できているのではないのですか?
できていません。
入力した要素数に基づいて、malloc()か何かを使うのが「動的確保」です。
ゆうさん さんが書きました:

コード:

#define CAPA 256
なぜ256なのか、説明していただけますか?
私は、257以上であっても対応できるようなコードが必要ではないか、と思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 15年前

Re: 宿題でつまづいています。助けて下さい。

#6

投稿記事 by box » 14年前

ゆうさん さんが書きました:

コード:

if(x=a[i]){
    printf("%d",i);
}
ループの外で1回比較するだけで本当にいいのでしょうか。
また、比較用の演算子は = で本当にいいのでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

“C言語何でも質問掲示板” へ戻る