• 締切済み

c言語配列拡張

c言語配列拡張 20個の要素からなる実数配列 x[ ] から、小さい添え字からn個の要素までの 最大値を取り出すプログラムを作成する。計算する要素の数nはキーボード から入力するか乱数で決定するかは乱数により得る。 a. 乱数が奇数の場合はキーボードから入力する。 b.乱数が偶数の場合この乱数の数を用いる。 誰が知ったら教えてください!

みんなの回答

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

「小さい添え字からn個の要素まで」 という意味がよくわからない。 #1への補足のコードだと,「0」から「n」までの最大値を採るようになっている。 それでいいなら,このコードは基本的には正しいでしょう。 ただ,stdio.hとstdlib.hをインクルードしなければだめだ。 下記,参考。 #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 20 int main() { int hairetsu[N],soeji,max,i, n; srand((unsigned)time(NULL)); for(i=0;i<20;i++){ hairetsu[i] = rand()%100; printf("hairetsu[%d]=%d \n",i,hairetsu[i]); } soeji = rand(); if( (soeji% 2) == 0){ n = soeji % 20; printf("soeji=%d n=%d\n",soeji,n); } else{ printf("nを入力してください\n "); scanf("%d", &n); n = n % 20; printf("n=%d\n",n); } max=hairetsu[0]; for(i=0;i<=n;i++){ if(hairetsu[i] > max){ max = hairetsu[i]; printf("max=%d hairetsu[%d]=%d\n",max,i,hairetsu[i]); } } printf("n=%dのMax: %d\n", n,max); }

  • asuncion
  • ベストアンサー率33% (2126/6287)
回答No.2

ちょっと確認します。 タイトルの「配列拡張」と、本文との関係が少しもわからないのですが、 教えていただけないでしょうか?

hungvan7189
質問者

補足

関係ないのです

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

問題を分解して考えましょう。 ・20個の要素からなる実数配列 x[ ] →配列はどう宣言しますか? ・小さい添え字からn個の要素までの最大値を取り出す →以下の入力云々のことは一旦横へ置いといて。 既に値が入っていたとするなら、「n個までの最大値」はどうしたらよいでしょう? 例えば、トランプを並べて、そのなかの最大を探すには、どうやったらいいでしょう? 実際にやってみて、それをプログラムにするにはどうやればいいか考えてみましょう。 ・ 乱数 →いろんな乱数発生器がありますが、とりあえずは、 標準の関数を使えばよいのでは。 ・a. 乱数が奇数の場合はキーボードから入力する。 b.乱数が偶数の場合この乱数の数を用いる。 → 条件によって処理を分けるには、何を使えばよいでしょうか? また、奇数/偶数というのはどんな値だか、式で表現できますか?

hungvan7189
質問者

補足

#include <time.h> #define N (20) int main() { int hairetsu[N],soeji,max,i, n; srand(time(NULL)); for(i=0;i<20;i++)     hairetsu[i] = rand()%100; soeji = rand(); if( (soeji% 2) == 0){ n = soeji % 20;           } else { printf("nを入力してください\n "); scanf("%d", &n); n = n % 20; }  max=hairetsu[0];  for(i=0;i<=n;i++){ if(hairetsu[i] > max){max = hairetsu[i];} } printf("n=%dのMax: %d\n", n,max); } これでいいでしょうか?

関連するQ&A

  • C言語 ポインタと配列

    C言語で配列をあつかう場合、ポインタをつかうか、配列の添え字を使って処理するか迷うのですが、どちらが良いのでしょうか? 処理速度ではどちらが上でしょうか?

  • c言語について

    C言語のループのところで詰まってしまってわからないので2問ほど教えていただきたいです。 (1)nから1までの自然数を以下のように対角的に印字せよ。 Enter n:20 20 -19 --18 ---17 ・ ・ ・ ・ -----------------3 ------------------2 -------------------1 (2)入力した数に応じたピラミッドを作れ。 (i)奇数の場合 Enter:5 1 12 123 1234 12345 (ii)偶数の場合 Enter:8 1 22 333 4444 55555 666666 7777777 88888888 という問題なんですがわかるかたお願いします。

  • C++のプログラム

    C言語の問題を授業で出されたのですがさっぱり分かりません。教えて下さい。 1.キーボードから整数nを入力して、1+2+…+nを求めるプログラムを作れ。 2.キーボードから整数nを入力して、1*2*…*nを求めるプログラムを作れ。 3.キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作   れ。 4.円錐の体積を求めるプログラムを作れ。 注:円錐体積V=π*r*r*h/3 5.キーボードから文字列を入力し、それを逆さまにするプログラムを作れ。例えば、”dog”を逆さまにすると”god”になる。 6.キーボードから一つの整数を入力し、それは奇数か偶数かを判断するプログラムを作れ。 ちなみに6番は /* iftst.c */ #include <stdio.h> void main(void) { int n; printf("n="); scanf("%d",&n); if(n%2 == 0){ printf("偶数です\n"); } else{ printf("奇数です\n"); } } で合っているのでしょうか?

  • C言語について

    C言語を学習しています。 入門レベルの知識しか有りません。 <演習問題>  要素数nの配列v内のkeyと等しい全要素の添字を配列idxに格納する  関数search_idxを作成せよ。  返却するのはkeyと等しい要素の個数とする。   int search_idx(const int v[], int idx[], int key, int n); 例えば、vに受け取った配列の要素が{1,7,5,7,2,4,7}でkeyが7で     あれば、idxに{1,3,6}を格納した上で3を返却する。 というのが有るのですが、上手くプログラムが組めません。 ソースコードを伝授して頂けたら有難いです。

  • C言語、配列の積

    整数型二次元配列x,yに適当な値をキーボードから入力し、次にそれらの行列の積を計算して二次元配列zに代入し、行列x,y,zの要素を出力せよ。但し、配列の大きさは最初にキーボードから入力しておき、変数宣言においては、配列の大きさを大きめに宣言しておき、キーボードから入力する配列の大きさはその範囲内で入力するようにせよ。 という問題です。よろしくお願いいたします

  • C言語のプログラムで配列について教えてください

    配列の要素の数をscanf文で入力するためにはどうしたらいいのでしょうか。 x[N]のNの部分です。

  • C言語

    C言語初心者です。 整数を入力しその数が偶数ならプログラムを終了する。奇数ならそれが3の倍数か3の倍数でないかを表示する。入力した数が奇数ならこの操作を何回も繰り返すプログラムを作りたいです。 このプログラムのソースを教えてください。

  • 配列の問題

    配列の問題です。 n個の要素を持つ一次元配列の値(変数値)をまったく逆に入れ替えるプログラムを作りたいのですが、この場合どのようにして逆を表現すればよいのかわかりません。 (nの値は読み込み、配列は奇数個でも偶数個でも使えるプログラムでなければなりません) 参考書を見ながら作ってみたのですが…だめでした。 プログラム初心者です。アドバイスお願いします。 int main(void) { int i,n; int vc[n]; printf("n個の要素を持つ一次元配列をつくる\n"); printf("nの値を入力してください\n"); scanf("%d",&n); for (i=0;i<n+1;i++) vc[i]=i+1; for (i=0;i<5;i++) printf("vc[%d]=%d\n",i,vc[i]); printf("この配列を逆に入れ替えると\n); return 0; }

  • [C言語] 配列が添字の意味を失う理由

    はじめまして。こんばんは。 早速ですが、下記のソースコードは、 配列aの各要素の内容を先頭から順に調べ、最初に0であった要素の添字番号を表示する。 という内容の、C言語のプログラムです。(C++でコンパイルするためmain()はint型に指定) そこで、このプログラムを実行していて腑に落ちない点として、 プログラムの挙動を見る限り、 タイトルに書いたとおり、 「配列が添字の意味を失っている」という事なんです。 普通に配列の添字と考えれば、 while文の条件式は、 int i=0; while(a[i]) { i++; } なので、a[0]になるはずなので、 普通に考えれば 条件式の中身としては  配列a[0] が 配列a[0] になるまでi++をするとなるはずです。 しかしながら、このプログラムは、 初期値に「0」が入っている要素まで探し続けます。 なぜ、 「配列が添字の意味を失うのか?」 どなたか、この疑問にお答えしていただけますと幸いです。 「プログラムの内容」 配列aの各要素の内容を先頭から順に調べ、最初に0であった要素の添字番号を表示する。 「表示結果」 a[2]= 0 「ソースコード」 #include<stdio.h> int main() { int a[]={3,0,7,8,5,5,8}; int i=0; while(a[i]) { i++; } printf("a[%2d]=%2d \n",i,a[i]); }

  • C言語の配列について質問です。

    配列の添え字に別の配列を指定するような以下の処理について 質問です。 #include <stdio.h> int main(void) {    int k = 0;    int kn = 0;    char str[256];    char key[] = "ABCD";    kn = strlen(key);    for(k=0; k<kn-1; k++) {    str[key[k]] = kn-k-1;    } } 上記についてですが、for文の中で "str[key[k]]"とありますが、 ループ処理にともなって配列str[] の添え字は、str[A], str[B], str[C] となるのでしょうか?? その場合、結果的に配列str[]の各要素にはどのような値が格納され るのでしょうか? そもそも、配列の添え字に対して別の配列を指定した場合の動きが よくわかりません。 どなたか教えて頂けますか??

専門家に質問してみよう