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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

4回答

7831閲覧

条件を満たす数値の個数を表示するプログラムがわからない

poniponiponiki

総合スコア98

C

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2018/08/28 03:04

前提・実現したいこと

初めまして、閲覧ありがとうございます。
早速ですが、私は現在、「一週間で身につくC言語」というサイトの発展問題を解いています。

その中で、「長さ5の整数型の配列変数aに、すべての成分に0から100の乱数の値を代入して表示し、以下の条件を満たす数値の個数を表示するプログラムを作りなさい。」という発展問題で躓いてしまいました。
条件は、以下の3つです。
(1) 20以上50以下の数
(2) 80より大きい数
(3) 0以上10未満の数

実行結果の例では、以下のようになると表記されていました。
実行結果の例
a[0]=9 a[1]=7 a[2]=35 a[3]=91 a[4]=58
20以上50以下の数:1個
80より大きい数:1個
0以上10未満の数:2個

乱数を発生させ、配列に代入、表示はできました。
しかし、条件を満たす数値の個数を表示するプログラムがどうしてもわかりません。
ご助言いただけると助かります。
また、コードの書き方についてもご教示いただければと思います。

該当のソースコード

#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int a[5]; int i; srand((unsigned)time(NULL)); //乱数の初期化 for (i = 0; i < 5; i++) { a[i] = rand() % 100 + 1; //1から100までの乱数を得る printf("a[%d] = %d\n", i, a[i]); //選択された5個の乱数を表示 } if ((a[i] >= 20) || (a[i] <= 50)) { printf("20以上50以下の数%d個\n"); } else { printf("20以上50以下の数0個\n"); } if (a[i] > 80) { printf("80より大きい数%d個\n"); } else { printf("80より大きい数0個\n"); } if ((i >= 0) && (i < 10)) { printf("0以上10未満の数%d個\n"); } else { printf("0以上10未満の数0個\n"); } return 0; }

試したこと

このあとの条件を満たす数値の個数を表示するプログラムがまったく思いつかず、参考書やサイトを巡ってみても該当するものが見つけられませんでした。

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

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

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

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

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

guest

回答4

0

変数countなどを用意してfor文でループしながら条件に合うときだけ1増やすようにすればいいです。

また、配列の長さの5などは定数なので記号定数にしましょう。

C

1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#include <time.h> 5 6#define NUMBER 5 7#define ITEM 3 8 9int main(void) 10{ 11 int a[NUMBER]; 12 int i; 13 int count[ITEM] = {0,0,0}; 14 char text[ITEM][30] = {"20以上50以下の数","80より大きい数","0以上10未満の数"}; 15 16 srand((unsigned)time(NULL)); //乱数の初期化 17 18 for(i = 0; i < NUMBER; i++){ 19 a[i] = rand() % 100 + 1; //1から100までの乱数を得る 20 printf("a[%d] = %d\n", i, a[i]); //選択された5個の乱数を表示 21 } 22 23 for(i = 0; i < NUMBER; i++){ 24 if(20 <= a[i] && a[i] <= 50){ 25 count[0]++; 26 } 27 else if(a[i] >= 80){ 28 count[1]++; 29 } 30 else if(a[i] < 10){ 31 count[2]++; 32 } 33 } 34 for(i = 0; i < ITEM; i++){ 35 printf("%s : %d個\n",text[i],count[i]); 36 } 37 return 0; 38}

投稿2018/08/28 03:55

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

poniponiponiki

2018/08/28 04:50

回答ありがとうございます。 記号定数にする、という点はまったく思いつかず勉強不足だと身に染みます。 私の書き方では、冗長に思えたコードもスッキリして見えるので、その部分も気にしながら勉強指定校と思います、ありがとうございました。
guest

0

if ~ else 文の各箇所にカウンタ(i++)を挿入し、最後に各変数をプリントすればどうですか?

投稿2018/08/28 03:29

paolo.ahn

総合スコア73

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

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

poniponiponiki

2018/08/28 04:47

回答ありがとうございます。 そういうやり方もあるのだと、凝り固まった頭が解れるアンサーでした。
guest

0

ベストアンサー

こういう質問に答えるのは難しいですね。
全部書いてしまうと 質問者さんのためにはならないと思いますので
(1) 20以上50以下の数 だけ
できるだけ質問者さんのプログラムに沿った形にするならば、下記のようになります。

c

1#include <stdio.h> 2#include <stdlib.h> 3#include <time.h> 4 5int main(void) 6{ 7 int a[5]; 8 int i; 9 int i20_50 = 0; 10 11 srand((unsigned)time(NULL)); // 乱数の初期化 12 13 for (i = 0; i < 5; i++) 14 { 15 a[i] = rand() % 100 + 1; // 1から100までの乱数を得る 16 printf("a[%d] = %d\n", i, a[i]); // 選択された5個の乱数を表示 17 18 if ((a[i] >= 20) && (a[i] <= 50)) 19 { 20 i20_50 += 1; 21 } 22 } 23 24 printf("20以上50以下の数%d個\n", i20_50); 25 26 return 0; 27}

投稿2018/08/28 03:26

showkit

総合スコア1638

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

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

poniponiponiki

2018/08/28 04:44

回答ありがとうございます。私に沿った書き方にまでしていただけるとは思わず、驚きました。 このプログラムに沿って動かしたところ、全ての条件の数値を表示することができました。 回答を真っ先に書かず、こちらの為を思っての記述、とても参考になりました。 本当にありがとうございます、勉強頑張っていきます。
guest

0

個数を数えるなら、配列の最初から最後までループして、値をチェックして数えるコードを書きましょう

投稿2018/08/28 03:12

y_waiwai

総合スコア87749

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

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

poniponiponiki

2018/08/28 04:40

回答ありがとうございます。考えすぎて頭が凝り固まってきているみたいなので、小休憩をとってから改めて挑戦してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問