質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

5回答

1070閲覧

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

aka-1990

総合スコア13

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2017/06/26 13:35

コード###前提・実現したいこと
ifとfor文を使って、0から200までの整数の乱数を20個発生させて、それを配列x[ ]にいれて、列順番号と一緒に表示させる。乱数を生成するためにrandom関数を用います。
配列xが100以下の乱数の値と個数を表示させる。
例として下のような感じで表示させたいです。

列番号 乱数
0 10
1 75
2 100
3 112
4 43
5 50
6 210
7 110
8 10
9 24

乱数=100,112,210,110 個数=4

###発生している問題・エラーメッセージ
下のように、プログラミングを組んでみたのですが、わけのわからない結果になってしまいました。例のような感じで表示させるにはどうしたらいいでしょうか?よろしくお願いします。

###該当のソースコード

#include <stdio.h> #include <stdlib.h> main() { int x[20],i,a,k=0; a=200; printf("列番号、乱数\n"); for(i=0;i<=19;i=i+1) { printf("%d,%20d\n",i,x[i]); x[i]=random(a+1); } for(i=0;i<=19;i=i+1) { if(x[i]>=100) { k=k+1; printf("x[20]"); } } printf("乱数=%d\n", x[20]); printf("個数=%d\n",k); return 0; }

###補足情報(言語/FW/ツール等のバージョンなど)
まだprintf、if、for以外は習っていないのでこの3つの条件文でお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SaitoAtsushi

2017/06/26 14:12

random という関数は C の言語仕様にはありませんが、あなたがプログラムを書くにあたってその環境には random 関数が用意されていると理解してよいでしょうか。 また、その場合に random 関数は整数値の引数をひとつ取り、引数として与えられた整数値より小さくゼロ以上の整数を返す関数であるという仕様ということでよろしいでしょうか。
aka-1990

2017/06/26 14:57

そうです。random関数ではなくてrand関数と書いた方がよかったですね…
guest

回答5

0

わけのわからない結果になる理由:
x[i]に値を代入する前に表示している

C

1for(i=0; i<=19; i=i+1) 2{ 3 printf("%d,%20d\n",i,x[i]); 4 x[i]=random(a+1); 5}

存在しない値を呼び出している

C

1printf("乱数=%d\n", x[20]);

xは0から19までの20要素なので、x[20]は存在しません。


あと、これはどういう意図なんでしょうか。

C

1if(x[i]>=100) 2{ 3 k=k+1; 4 printf("x[20]"); // ここ! 5}

x[i]が100を超えた回数だけ「x[20]」と表示されますが、設計通りですか?

投稿2017/06/26 14:06

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

概ねLouiS0616さんが指摘している内容で網羅できていると思います。
問題文で
配列xが100以下の乱数の値と個数を表示させる。
例として下のような感じで表示させたいです。

列番号 乱数
0 10
1 75
2 100
3 112
4 43
5 50
6 210
7 110
8 10
9 24

乱数=100,112,210,110 個数=4
となっていますが、配列xが100以上の間違いでしょうか?

C

1 for(i=0;i<=19;i=i+1) 2 { 3 if(x[i]>=100) 4 { 5 k=k+1; 6 printf("x[20]"); 7 } 8 } 9 printf("乱数=%d\n", x[20]); 10 printf("個数=%d\n",k);

このままでは、x[i]の配列の値の内、100以上の場合にx[20]が表示されるだけとなります
if文の中に乱数部分のprintf文を入れるように修正しましょう。
注意点として、現在の記述のまま入れてもダメですよ。x[20]は存在しませんし、意図と違うので。
ちなみに乱数=の部分のprintfに改行コードは不要です。(今回のお題とあわないので)

投稿2017/06/27 07:35

ardin

総合スコア544

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

乱数を求めるところは大丈夫そうなので、最後の表示のところだけ次のようにしてみてはいかがでしょうか。

c

1#include <stdio.h> 2#include <stdlib.h> 3main() 4{ 5 int x[20],i,a,k=0; 6 a=200; 7 printf("列番号、乱数\n"); 8 for(i=0;i<=19;i=i+1) 9 { 10 printf("%d,%20d\n",i,x[i]); 11 x[i]=random(a+1); 12 } 13 14 printf("乱数="); 15 for(i=0;i<=19;i=i+1) 16 { 17 if(x[i]>=100) 18 { 19 k=k+1; 20 if(k != 0) printf(","); 21 printf("%d", x[i]); 22 } 23 } 24 printf(" 個数=%d\n",k); 25 26 return 0; 27} 28

投稿2017/06/27 00:20

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一つの例題ですのでご参考まで

c

1#include <stdio.h> 2#include <string.h> 3void main(void) 4{ 5 int x[20],i,a,k=0; 6 char y[100]={'\0'}; 7 char z[20]={'\0'}; 8 a=200; 9 printf("列番号、乱数\n"); 10 for(i=0;i<20;i++) 11 { 12 x[i]=rand()%a; 13 printf("%2d %3d\n",i,x[i]); 14 } 15 for(i=0;i<20;i++) 16 { 17 if(x[i]>=100) 18 { 19 sprintf(z,"%d",x[i]); 20 if(k++>0)strcat(y,","); 21 strcat(y,z); 22 } 23 } 24 printf("乱数=%s ",y); 25 printf("個数=%d\n",k); 26 27}

投稿2017/06/26 14:33

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

xを初期化する必要があるのでは?

for(i=0;i<=19;i=i+1) { x[i]=random(a+1); } for(i=0;i<=19;i=i+1) { printf("%d,%20d\n",i,x[i]); }

投稿2017/06/26 14:07

madone99

総合スコア1855

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問