![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_05.png?e8efa67)
/*指定された個数だけ整数を読み込んで合計値・平均値を算出*/
#include <stdio.h>
int main(void)
{
int i;
int sum=0;
int num,tmp;
printf("整数は何個ですか:");
scanf("%d",&num);
for(i=0;i<num;i++)
{printf("No.%d:",++i);
scanf("%d",&tmp);
sum = sum + tmp;
}
printf("合計値:%d\n",sum);
printf("平均値:%.2f\n",(double)sum / num);
return(0);
}
C言語の勉強を始めたばかりのものです。
指定された個数だけ読み込めません 汗
前置と後置をまぜたあたりがよくないのかなと思うのですが。。。
どうしておかしくなるのか教えてください。
内部でどういった処理が行われているのかまだあまりわからない状態です。
ちなみに4と入力した結果は以下です。
整数は何個ですか:4
No.1:4
No.3:3
合計値:7
平均値:1.75
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
>for(i=0;i<num;i++)
でiに1を足してる(i++してる)から
>{printf("No.%d:",++i);
でiに1を足して(++i)はいけない。
これでは「合わせて2を足してしまう」ことになる。
「No.??」を表示する上で「iが0から始まってるのが困る」のであれば
for(i=0;i<num;i++)
{printf("No.%d:",++i);
の2行を
for(i=0;i<num;)
{printf("No.%d:",++i);
にするか
for(i=1;i<=num;i++)
{printf("No.%d:",i);
にするか
for(i=0;i<num;i++)
{printf("No.%d:",i+1);
にすれば良い。
どのパターンでも「ループはnum回」「1回にiに足すのは1だけ」「表示するのは1から」になる。どれにするかは「お好み」で。
回答ありがとうございます。
いろいろなパターンをのせていただき参考になりました。
>for(i=0;i<num;)
こう書いても動くのですね。よくみたら教科書にものってました。
No.3
- 回答日時:
まずfor文の基本について確認します。
for( A ; B ; C )
{
;
}
for文はAの状態から始めて、Bが真の間だけ繰り返し、1回繰り返すごとにCの操作を実行します。
今回の場合で言うと、
for( i=0 ; i<num ; i++)
なので、i=0から始めて、i<numの間だけ繰り返し、1回繰り返すごとにi++を実行します(つまり1回繰り返すごとにiを1増やします)。
さてforループの中に注目すると、ループの中でも
> printf("No.%d:",++i);
の部分で++iを実行していますね。
するとどうでしょうか、++iで1増えて、i++で1増えるのですから、結局ループが1回廻るごとにiは2ずつ増えることになりますね。
ですからprintfで表示したiの値が1,3,5,...となるのですよ。
> printf("No.%d:",++i);
の部分を
> printf("No.%d:",i+1);
と変更してみてください。
これならば、iの値そのものの値を変更することなく、現在のiの値に1足したものを表示するというだけの意味になります。
最後に注意ですが。
『教えて!goo > [技術者向] コンピューター > プログラミング > C&C++』にC言語のカテゴリーがあるので、次回からはそちらで質問してみてください。
回答ありがとうございます。
for文のところから説明していただきとてもわかりやすかったです。
カテゴリーですが、[技術者向]とあって違うのかなと思ってました 汗
次回から気を付けます。
No.1
- 回答日時:
>前置と後置をまぜたあたりがよくないのかなと思うのですが。
。。問題は概ねそのあたりです。
余分なところは省いて説明します。
問題となる部分は
----------
>for(i=0;i<num;i++)
iを0からnumより小さい間繰り返し、処理の最後でiを+1する。
>printf("No.%d:",++i);
iを+1して、iの値を表示する。
----------
です。
つまりfor()の{}でくくられた処理を実行してiが「0→(forの++iで)1」となる部分が、
printfにある処理の為「0→(printfのi++1で)1→(forの++iで)2」という処理になっています。
従って、以下のように記述するのが正解です。
誤:printf("No.%d:",++i);
↓
正:printf("No.%d:",(i+1));
これで、iの内容を変更することなく表示します。
回答ありがとうございます。
前置と後置とをぜないよう気を付けます。
i++,++iの違いもわかりました。また機会があればよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
このQ&Aを見た人はこんなQ&Aも見ています
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
信頼区間の1.96や1.65ってどこ...
-
2÷3などの余りについて
-
マイナスからプラスへ転じた時...
-
「Aに対するBの割合」と「Aに対...
-
Aの値からBの値を除するとは??
-
20'(角度)の計算がわかりま...
-
変数とパラメータとは違うもの...
-
エクセルで可視セルにのみ値貼...
-
エクセルのオートフィル?ドラ...
-
Excelで1つしかない値だけを抽...
-
c言語 for文
-
パーセントの出し方を教えて下さい
-
値差の%計算方法について
-
大学数学の問題です。 加法群Z/...
-
中学生で数学です。 √84nが自然...
-
根号内が負になり、エクセルで...
-
大きな負の値?負の大きな値???
-
二次関数と関数の違いは何ですか?
-
写真の問題について質問です。 ...
-
EXCELの分散分析表のP-値が....
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マイナスからプラスへ転じた時...
-
信頼区間の1.96や1.65ってどこ...
-
2÷3などの余りについて
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
-
エクセルの問題です。絶対値の...
-
ある商品のロス率を5%見込み、...
-
変数とパラメータとは違うもの...
-
EXCELの分散分析表のP-値が....
-
エクセルで可視セルにのみ値貼...
-
値差の%計算方法について
-
20'(角度)の計算がわかりま...
-
Excelで1つしかない値だけを抽...
-
大学数学の問題です。 加法群Z/...
-
エクセルのクイックアクセスツ...
-
寄り付きからぐわんぐわん値が...
-
中学生で数学です。 √84nが自然...
-
正の数aは4の倍数で、7でわると...
-
シグマを平均値で割る
-
二次関数と関数の違いは何ですか?
おすすめ情報