🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

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

include

あるファイルで定義された関数や処理を、別のファイル上でも使用できるようにするプロセスをincludeと呼びます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

配列

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

Q&A

解決済

1回答

1246閲覧

平均値以下のプログラムの作成方法が思いつかない。または理解できない。

-taku-

総合スコア4

C

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

include

あるファイルで定義された関数や処理を、別のファイル上でも使用できるようにするプロセスをincludeと呼びます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

配列

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

0グッド

0クリップ

投稿2020/11/23 09:40

前提・実現したいこと

ここに質問の内容を詳しく書いてください。

正整数個ある実数のデータの平均値以下の値を出力するプログラムを作りたいのですが、
自分で考えてもどうもうまくいきません。
具体的には、どのように定義して構成はどうなるのかがいまいち理解できないのです。

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

エラーメッセージ 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 警告 C6031 戻り値が無視されました: 'scanf' Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample1.c 13 警告 C6031 戻り値が無視されました: 'scanf' Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample1.c 19 警告 C6262 関数はスタックの '80028' バイトを使用します: /analyze:stacksize '16384' を超えています。 データの一部をヒープに移動することを考慮してください。 Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample2.c 3 警告 C6001 初期化されていないメモリ 'Num' を使用しています。 Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample2.c 13 警告 C6031 戻り値が無視されました: 'scanf' Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample2.c 15 警告 C6031 戻り値が無視されました: 'scanf' Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample2.c 17 警告 C6270 'printf' への float 引数がありません: 変換指定子 '1' に対応する float 引数を追加してください。 Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample2.c 28 エラー C2057 定数式が必要です。 Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample1.c 7 エラー C2466 サイズが 0 の配列を割り当てまたは宣言しようとしました。 Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample1.c 7 エラー C2133 'dnum': サイズが不明です。 Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample1.c 7 エラー C2297 '+=': 無効です。右オペランドには型 'double [0]' が指定されています。 Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample1.c 21 エラー C2440 '+=': 'double [0]' から 'double' に変換できません。 Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample1.c 21 エラー C2143 構文エラー: ';' が ')' の前にありません。 Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample1.c 29 警告 C4473 'printf': 書式文字列として渡された引数が不足しています Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample2.c 28 エラー C4700 初期化されていないローカル変数 'Num' が使用されます Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample2.c 13

該当のソースコード

C言語

試したこと

実際以下のプログラムを書いてみたのはいいのですが、どうも構成がよくわからなくなってしまっています。
#include<stdio.h>

int main(void)
{
int Num=0;
double test[10000];
double dnumSum=0;
double dnumAve=0;
int i, j;

printf("データの数を入力してください。\n"); scanf("%d", &Num); for (i = 1; i <= Num; i++){ printf("データの値を入力してください。"); scanf("%lf", &test[i]); dnumSum += test[i]; } dnumAve = (double)dnumSum / Num; for (j = 1; j<=Num; j++){ if (test[j] <= dnumAve) { printf("平均値以下のデータは%fです。\n"); } } return 0;

}

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

一回作ってみたのはいいのですが、どうも何がどう駄目かがわからなく困っております。
ご指摘お願いします。基本的なことが一部抜けているところもありますので、そこもご指摘くださると助かります。

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

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

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

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

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

guest

回答1

0

ベストアンサー

提示されたソースで良いと思います。
1箇所以下のように変えてください。

printf("平均値以下のデータは%fです。\n");

printf("平均値以下のデータは%fです。\n",test[j]);
に変えてください。

投稿2020/11/23 10:15

tatsu99

総合スコア5493

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

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

-taku-

2020/11/23 10:19

回答ありがとうございます。申し上げにくいのですが、試してみたところ、まだ原因があるみたいです。 以下のエラーが起こりました。まだ、Cを学んで日が浅いので、何が原因かの模索をしようにもわかりません。 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 警告 C6031 戻り値が無視されました: 'scanf' Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample1.c 13 警告 C6031 戻り値が無視されました: 'scanf' Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample1.c 19 警告 C6262 関数はスタックの '80028' バイトを使用します: /analyze:stacksize '16384' を超えています。 データの一部をヒープに移動することを考慮してください。 Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample2.c 3 警告 C6031 戻り値が無視されました: 'scanf' Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample2.c 12 警告 C6031 戻り値が無視されました: 'scanf' Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample2.c 17 エラー C2059 構文エラー: ')' Project3 C:\Users\nishi\source\repos\Project3\Project3\Sample1.c 30
tatsu99

2020/11/23 10:30

提示されたソースはSample1.cですかSample2.cですか。両方提示してください。 エラーがあるのは、Sample1.cのみです。 Sample2.cは警告なのでとりあえずは後回しにできます。(警告だけなら実行形式ファイルが作られます)
-taku-

2020/11/23 10:37

提示した内容はSample2のものです。
tatsu99

2020/11/23 10:41

では、Sample2.cは問題ありません。こちらの環境(linux,gcc)ではコンパイルがOKで動作も正常に行われています。
dodox86

2020/11/23 10:44

>@質問者さん 直接、今の問題とは関係ありませんが、C言語の配列は添え字が0ベースです。現状のコードでは常に1からアクセスしているのでとりあえず問題は出ませんが、Numがもし10000であった場合、領域外アクセスになります。 > for (i = 1; i <= Num; i++){ のようなコードは、C言語では一般的には > for (i = 0; i < Num; i++) { のように扱います。あくまで"一般的には"、です。意図的にやっているのであればよいです。
-taku-

2020/11/23 10:46

できました!!ありがとうございます。使用していたプロジェクトが項目が複数個存在していてごちゃごちゃしていたので、新たに作り直したところ、無事に行けました。ありがとうございます。助かりました。
-taku-

2020/11/23 10:48

そうですね。意図はないので、あとで少し書き直してみます。ご指摘ありがとうございます。
tatsu99

2020/11/23 10:50

sample2.cでの警告は 1つは、scanfが戻り値を返すが、それを無視しているという警告です。この警告は無視しても問題ありません。 2つ目は、 double test[10000];です。配列が10000なので大きすぎると警告しています。 main関数の外側で定義すれば、この警告は消えるはずです。
-taku-

2020/11/23 10:52

ありがとうございます。詳しい情報ありがとうございます。大変勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問