• 締切済み
  • 暇なときにでも

c言語 for文

/*指定された個数だけ整数を読み込んで合計値・平均値を算出*/ #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

共感・応援の気持ちを伝えよう!

  • 回答数5
  • 閲覧数645
  • ありがとう数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;) こう書いても動くのですね。よくみたら教科書にものってました。

関連するQ&A

  • for文

    #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+1); scanf("%d",&tmp); sum+=tmp; } printf("合計値は:%d\n",sum); printf("平均値は:%.2f\n", (double)sum/num); return(0); } 上の文のforの箇所を for(i=1; i<=num; i++){ printf("No.%d:",i); scanf("%d",&tmp); sum+=tmp;   } としても結果的に同じですよね? どっちでもいいかどうか迷ってます。教えて下さい。

  • while文の作成について

    キーボードに整数を打ち込み、0を打ち込むと終了し、その合計を出すプログラムを以下のように作りました。 #include<stadio.h> int main(void){ int num=0 int sum=0 printf("整数を入力"\n"); do{ scanf("%d",&num); sum +=num; }while(num); printf("合計は%dです。\n",sum); returen 0; } 次に負の値が入力されるまで整数を読み込み続け、その合計をを求めるプログラムを作りたいのですが、whileのところを }while(num>=0); としてみたのですが、うまくいきません。また分かり易くするため、入力した整数の個数も表示できるようにしたいです。どうすればよいでしょうか。詳しい方、教えてください。

  • c言語で平均をだす

    #include<stdio.h> int main(void) { int num; int sum; printf("テストの点数を入力してください。\n"); do{ scanf("%d",&num); sum+=num; }while(num); printf("テストの合計点は%dです\n",sum); return 0; } テストの平均点をだすプログラムを作りたいのですが、合計を出すまではわかったのですが、ここから、平均を出すようにするにはどうすればよいですか。

  • 回答No.4

別な変数を定義して int j=1; … for(i=0;i<num;i++) {printf("No.%d:",j); scanf("%d",&tmp); sum = sum + tmp; j=j+1; } の様にして、jを変化させ、整数のナンバーにしてもいいでしょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 新しい変数を定義してもできるんですね。今は教科書に頼ることが 多いので、早く自分でいろいろ作れるようになりたいです。

  • 回答No.3
  • proto
  • ベストアンサー率47% (366/775)

まず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.2
  • Tacosan
  • ベストアンサー率23% (3656/15482)

コンピュータの気持ちになって動作をシミュレートしてください. 特に 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

  • 分散を求めるプログラム

    n人の点数を読み込みそれらの平均、分散を計算するプログラムを作りたいのですが分散の式がよく分かりません。 分散を求める式は第i番目の点数をxi、平均をμとすると 分散=1/nΣxi^2-μ^2 で、プラグラムを作ってみると #include<stdio.h> int main (void) { int i; int sum=0; int num,tmp; printf("何人ですか"); scanf("%d",&num); for(i=0; i<num; i++) { print("No. %d ", i+1) scanf("%d",&tmp); sum += tmp; } printf("平均:%.3f\n",(double)sum/num); printf("分散:%.3f\n",(double){(sum-sum/num)*(sum+sum/num)}/num); return(0); } というプログラムを作ってみたのですが分散の計算がうまくいきません。どなたか分散の計算のプログラムを教えて下さい。 C言語初めてまもないので不備があったらすみません。

  • C言語の配列について

    配列を20 定義し値を入力して合計値を出したいのですがどうすればよいのでしょうか 下のソースでエラーはおこりませんでした 何がちがうのでしょうか #include <stdio.h> int main() { int a[20]={}; int i, sum; printf("整数を入力してください:"); scanf("%d",&a); printf("\n"); for (i = 0; i < 10; i++) { sum += a[i]; } printf("sum= %d\n", sum); return 0; }

  • c言語超初心者です。2

    #include <stdio.h> int main(void) { int na,nb, nc; int sum; double ave; puts("三つの整数を入力してください."); printf("整数A:"); scanf("%d", &na); printf("整数B:"); scanf("%d", &nb); printf("整数C:"); scanf("%d", &nc); sum=na+nb+nc; ave=(double)sum/3; printf("それらの合計は%5dです。\n", sum); printf("それらの平均は%5.1fです。\n",ave); return(0); } とういうのを作ったんですが、最後のそれらの合計は%5dとやりその5の意味は整数を10進法で少なくても5桁で表示とありますが、例えば1,2,3と入力しても合計は6とでて5桁ででないんですけど。そういう意味ではありませんか?あとave=(double)sum/3;のところをave=sum/3.0としても問題なくできるのですが、どっちでやったほうがいいとかはありますか?もしあったらその理由も教えてください。

  • C言語初心者です。次の問題で質問です。

    (問題) 二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値表示するプログラムを作成せよ。 (自分の解答) #include <stdio.h> int main(void) { int num1,num2; int sum=0; do { printf("整数1>整数2となる整数をそれぞれ入力してください\n"); printf("整数1:"); scanf("%d",&num1); printf("整数2:"); scanf("%d",&num2); if (num1 < num2) printf("整数1>整数2としてください\n"); } while (num1 < num2); printf("%d以上%d以下の全整数の和は",num2,num1); for (num2;num2 <= num1;num2++) { sum=sum+num2; } printf("%dです。",sum); return 0; } これでも一応正しく実行されるのですが、ごちゃごちゃしてるので簡潔に書けないでしょうか? 回答お願いします。

  • C言語でfor文を用いたプログラミングについてです。

    C言語のプログラミングの課題で以下のような表をfor文を用いて作るというものが出ました。 商品名 単価(円)個数(円) 計  A  50   20   ***  B  90   30   ***  C  30   80   ***        合計金額   *** A,B,C及びそれぞれの単価、個数の値はキーボードからの入力で、***は演算によりその結果を出力するようにします。つまり、商品名(1文字)と単価、そしてその個数をキーボードから入力すると、単価と個数をかけた値と、それら全ての合計が出力されるようなプログラムを作るということです。 私は以下のようなプログラムを作りました #include<stdio.h> int main(void) { int a,b,c,sum,allsum,i; printf("商品名 単価 個数 計\n"); for(i=1;i<=3;i++) { a=getchar(); scanf("%d %d",&b,&c);  sum=b*c; allsum +=sum; putchar(a); printf(" %d %d %d \n",b,c,sum); } printf("合計金額 %d\n",allsum); return 0; } しかしこれでは合計金額がちゃんと表示されなかったりしてうまくいきません。おそらくfor文の中身に問題があると思うんですが…。どうか正しいプログラムと、なぜこのプログラムではうまくいかないのかを教えていただきたいです。なにぶん初心者なもんで、よろしくお願いします。

  • C言語のプログラム添削お願いします

    #include<stdio.h> int main(void) { int a[4]; int i=0; int n; int sum=0; printf("正数を入力してください\n"); while(i<=4) {scanf("%d",&n); if(n>=0) {a[i]=n; sum=sum+a[i]; i++; } else{printf("正数を入力してください");} } printf("正数の合計値は%dです",sum); printf("正数の平均値は%lfです",(double)(sum/5)); return(0); } 上記は正数のみ配列に保存し、その合計と平均を表示するプログラムを 製作しようとして書いたものですが次のような問題点があり正常に機能しません。 (1)a[i]=n;をn=a[i];と置き換えると不正な値が表示される (2)平均値の小数点以下の値がおかしい   (例)8+8+8+9+8と入力し合計値41に対し、平均値が8.000000 解決法が分からず困っています。どなたかお力添えお願いします。

  • C言語。どうしてコンパイルできません^^;

    最近プログラミングの勉強をはじめました。 C言語を勉強しています。 /*入力した値の、平均値・最大値・最小値・を出す。*/ #include <stdio.h> int main(void) { int x[5],i,j,w,x,y,z,sum; printf("5つの実数の平均、最大値、最小値を求めます\n"); sum = 0; for(i=0; i<5; i++){ printf("値%d:",i+1); scanf("%d",&x[i]); sum += x[i]; } for(y=0; y<5; y++){ for(j=0; j<4; j++){ w=j+1; if(x[j] < x[w]){ z = x[i]; x[i] = x[w]; x[w] = z; } } } printf("平均値:%f\n最大値:%d\n最小値:%d\n", (double)sum/5, x[0], x[4]); return 0; } Microsoft Visual C++ 2008 Express Edition でコンパイルをしようとしたのですが、 「error C2040: 'x' : 'int' は 'int [5]' と間接操作のレベルが異なります。」 と出てできませんでした^^; 何度も見直したのですが、どうしても間違っている場所がわかりません^^; どこがいけないのでしょうか^^;

  • for文

    整数を読み込んで、その値を0までカウントダウンしながら表示するプログラム作りたいのですが、 while文ではできたのですが、for文ではうまくいきません。 どこが間違っているのでしょうか? OS:Windows XP C++Builder X パーソナル #include <stdio.h> int main(void) { int i; int num; printf("整数を入力してください:"); scanf("%d", &num); for(i = num; i <= 0; --i) { printf("%d", i); } return 0; } 宜しくお願いします。

  • c言語の勉強をしているのですが、詰まってしまっています。

    複数回整数を入力し、-1以下もしくは101以上の入力で整数の入力を終了、 最後の-1以下もしくは101以上の数値を省いた 合計と平均の算出をしたいのです。 が、現状。 { int sum=0,p=0,n=0; while(0<=p){ printf("点数:"); scanf("%d",&p); if(0<=p){ sum=sum+p; n++; } } printf("%d",sum); printf("%6.2f",(double)sum/n); return 0; } で、101以上の際の処理ができません。 お教えいただける方、よろしければお願いいたします。

  • コンパイルエラー

    コンパイルしても、12行目(printf("%d番目の整数を入力してください。"i+1);が、関数呼び出しに)がないとでます。でもどこが間違っているか分かりません。 教えてください。お願いします。 #include <stdio.h> int main(void) { int num; int sum=0; int i; for(i=0; i<10; i++){ printf("%d番目の整数を入力してください。"i+1); scanf("%d", &num); sum+=num; } printf("合計は、%dです。\n", sum); return(0); }