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

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

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

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

Q&A

解決済

2回答

1342閲覧

c言語 テストの点数をヒストグラムにする方法

Giruba

総合スコア5

C

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

0グッド

0クリップ

投稿2021/04/25 14:11

前提・実現したいこと

20人が10点満点のテストを受けて、キーボードから20人分の点数を打ち込み、
そのヒストグラムを表示するプログラム
という問題のヒストグラムの部分がわかりません。

手順として、
1.20人分の点数を入力する部分1重ループを作成
2.入力した点数が010以外の場合の処理を追加
3.各点の人数を数える処理を追加し、数えた人数を画面に表示
4.1重ループで0
10を表示
5.2重ループ化し、*で表示
と書かれています。
また、-(マイナス)の場合は0に、10を超えた場合は10にカウントするようにしたいです。

結果
1人目の点数:?



19人目の点数:-2
負なので0点に置き換えます
20人目の点数:12
10を超えているので10に置き換えます

0:**
1:
2:*



9:***
10:*

のような結果が出るようにしたいです。

発生している問題・エラーメッセージ

3、4、5がわかりません。

該当のソースコード

C言語

1#include<stdio.h> 2 3int main() { 4 int a[20]; 5 int i; 6 7 for(i=0; i<20; i++){ 8 printf("%d個目の実数:",i+1); 9 scanf("%d",&a[i]); 10 11 if(a[i]>10){ 12 printf("10を超えているので10に置き換えます\n"); 13 }else if(a[i]<0){ 14 printf("負なので0点に置き換えます\n"); 15 } 16 }

試したこと

ググったり、知恵袋で調べ試行錯誤した。

補足情報(FW/ツールのバージョンなど)

cpadというものでコードを書いています。

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

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

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

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

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

mather

2021/04/25 14:26

> と書かれています。 学校の課題などでしょうか?であれば、まずは担当の先生などに聞いてください。 > ググったり、知恵袋で調べ試行錯誤した。 具体的にどう調べて何を試行錯誤したか書いてください。 少なくともコンパイル可能なコードであることを確認してみてください。 もしコンパイルできないことが問題であれば、コンパイルエラーについて質問しましょう。
Giruba

2021/04/25 14:49

はい、学校の課題です。 オンライン授業なので気軽に質問することもできず、友達に聞いてもわからないといわれてしまい質問しました。 今の私には、調べたことが多すぎてうまくまとめえるほどの知識がないですので諦めます。 次質問できるころまでには、もっと知識をつけて具体的に状況を説明できるように頑張ります。 ありがとうございました。
mather

2021/04/25 15:04

> オンライン授業なので気軽に質問することもできず 別に対面でなくても担当教員の連絡先に「この問題がわかりません」とメールでもなんでもすれば良いと思います。あるいは授業中にでも「質問したいときはどうすればよいですか?」と素直に聞きましょう。 授業として教える側にも責任はあると思うので、「質問できない」という先入観は捨ててコニュニケーションをしてみてください。
Giruba

2021/04/25 15:06

アドバイスありがとうございます。 先生に質問してみることにします。
guest

回答2

0

ベストアンサー

細かい間違えはあるかもしれませんが、なんとなく動きました。

c

1#include<stdio.h> 2#include<string.h> 3 4#define MAX_NUM (4) 5#define MAX_POINT (10) 6 7 8int number_of_point[MAX_POINT + 1] = { 0 }; 9int main() { 10 int a[MAX_NUM]; 11 int i,j; 12 13 for(i=0; i<MAX_NUM; i++){ 14 printf("%d個目の実数:",i+1); 15 scanf("%d",&a[i]); 16 17 if(a[i]>MAX_POINT){ 18 printf("10を超えているので10に置き換えます\n"); 19 }else if(a[i]<0){ 20 printf("負なので0点に置き換えます\n"); 21 } 22 23 number_of_point[a[i]] ++; 24 25 } 26 27 for(i=0;i<=MAX_POINT;i++) { 28 printf("%d %d\n", i, number_of_point[i]); 29 } 30 31 for(i=0;i<=MAX_POINT;i++) { 32 printf("%d ", i); 33 for (j=0;j<number_of_point[i];j++) { 34 printf("*"); 35 } 36 printf("\n"); 37 } 38 return 0; 39} 40 41

わからない点があれば、質問してくださいー。お互いがんばりましょうー。
聞く人いないと辛いっすよねー。

投稿2021/04/25 15:11

編集2021/04/25 16:46
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Giruba

2021/04/25 16:05

共感していただきありがとうございます。 参考にして考えていきたいと思います。 また機会があればよろしくお願いします!
yumetodo

2021/04/25 16:18 編集

なおint number_of_point[MAX_POINT + 1] = { 0 };とすることで、memsetと完全に同一の成果が得られます
退会済みユーザー

退会済みユーザー

2021/04/25 16:47

yumetodoさん、ありがとうございます!修正しましたー。
fana

2021/04/26 01:39

> printf("10を超えているので10に置き換えます\n"); > printf("負なので0点に置き換えます\n"); 言うだけかよ.
yumetodo

2021/04/26 06:16

めんどくさがってちゃんと見てなかったけどほんとだ・・・
guest

0

投稿2021/04/25 14:24

yumetodo

総合スコア5850

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

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

Giruba

2021/04/25 14:50

こちらも調べた際に自分なりに書き換えてみたのですがうまくいきませんでした。 調べていただきありがとうございました。
yumetodo

2021/04/25 14:58

どううまく行かなかったのかを書くべきではないかと
Giruba

2021/04/25 15:06

そうですよね。 もう少し自分で考えてみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問