• ベストアンサー

どなたか分かりますか?

1+2+3+・・・10を計算するプログラムを作るんですが、 #include <stdio.h> int main(){ int a, b; for(a = 0; a<=10; a++){ b=a+1; printf("b=%d\n", b); } return 0; } だと、結果はb=1…b=11と出ます。for文を使わなければいけないんですが、どうすればいいですか?

  • jlnh
  • お礼率37% (201/542)

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.21

おー!良かったです。 正解です。 >b=0はb=b+a の右辺のbを常に0にするためにあるんですね? 右辺のbを常に0ですか?まだ代入で疑問があるみたいですね。 じゃあ、常にbが0だったらb=0+a;と同じですよね。 正解のプログラムを試しに書き換えてみてください。 望んだ答えが出ましたか?出ないはずです。 じゃあ、箱bは何のためにあるのでしょうか? 箱bに箱aのボールの数を加算していかないと正しい答えが出ないはずです。 そのためにはb=0;と書いて最初に空にする必要があります。あくまで最初だけですよ。 そうしないとint b;で箱bを用意しただけでは箱bの中にボールが何個入っているかが分からないからです。 本当にボールが何個入っているかは運次第で試してみると分かりますが、恐ろしい数値が入っていると思います。 int b; printf("b=%d\n",b); とやってみてください。 main関数だと実行するたびに同じ数値が出ると思いますが、main関数以外で同じことをすると本当に運次第の値になります。 その運次第の値にb=b+a;と実行してしまうと運次第の値にaを足しこんでいくことになるので、結果も望んでいた答えが出ません。 ためしに正解のプログラムからb=0;を除いて実行すると分かると思います。 >で、左辺のbが後に実行されるんですか? それは正解です。 右辺の計算後に左辺に代入されます。 >b+=a;と、b=b+a;は同じですか 同じです。どちらで書いても読みやすければ問題ありません。 最後にこれを実行してみてください。 #include <stdio.h> int main(){ int a,b; b=0; printf("b=%d\n",b); for(a=1;a<=10;a++){ printf("a=%d b=%d\n",a,b); b=b+a; printf("b=%d\n",b); } return 0; } 頭でイメージしている変数の変化と同じ出力が得られましたか? もし違ったら、また質問してみてください。

jlnh
質問者

補足

そのためにはb=0;と書いて最初に空にする必要があります。あくまで最初だけです。そうしないとint b;で箱bを用意しただけでは箱bの中にボールが何個入っているかが分からないからです。> これが、変数の初期化という作業ですか? 確かにb=0を省いたらエラーが出ました。 b=0で箱が空になるということは、0でなければ空でないんですね? 0でないときもあるんですか?

その他の回答 (23)

noname#77845
noname#77845
回答No.3

まずは、bを初期化しましょう。 #include <stdio.h> int main(){ int a,b; b=0; for(a=1;a<=10;a++){ b+=a; printf("b=%d\n",b); } return 0; } それから、エラーが出たときはどういうエラーが出たかも補足してください。

jlnh
質問者

補足

b=0; とは、代入式のことですか? bが何から始まるかを表現してるんですか?

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

1 から 10 まで足したいなら、そのまま変数 a が 1 から 10 を渉るように for ループをまわすだけ。 そして b に「加算」するには b += a と書く、と。

jlnh
質問者

補足

#include <stdio.h> int main(){ int a, b; for(a = 1; a<=10; a++){ b +=a; printf("b=%d\n", b); } return 0; } とした結果、エラーが出てしまいました。

  • taunamlz
  • ベストアンサー率20% (175/843)
回答No.1

>for(a = 0; a<=10; a++){ を for(a = 1; a<=10; a++){ とするか for(a = 0; a<10; a++){ とすればいいと思います。 ただ、 >b=a+1; の部分を見る限り1+2+3+・・・10を計算するプログラムにはならないと思います。

関連するQ&A

  • 九九の表示について

    九九の結果を表示したくてプログラムを組んでみたんですけど #include <stdio.h> int main(void) { int a,b; for (a=1;a<=9;a++ ) { for (b=1;b<=9;b++ ) { printf("%d ",a*b); } printf("\n");   } } これで・・・ 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 . . . . 9 18 27 36 45 54 63 72 81 と表示されます。 この結果の各行の先頭にそれぞれ 1の段、2の段という言葉を入れたいんですが、 どこにどのような文を加えたらいいんでしょうか?? 教えてください!!

  • c

    ¥bとはどういうときに使うのでしょうか たとえば /*arry02*/ #include<stdio.h> int main() { int a[]={1,2,100,50}; int i; for(i=0;i<4;i++) printf("a[%d]=%d,",i,a[i]); printf("\b\b \b\n"); return0; } の場合バックスペースで2つ戻りとあります どこをどう戻っているのかさっぱりです 戻った位置もどこなのかわかりません たすけてください

  • プログラムが上手く動作しません。

    質問です。 1.整数を1個入力し、その数を3で割った余りが0ならば"Good morning"、1ならば"Good evening"、2ならば"Good afternoon"と出力するプログラムを作成せよ。ただしswhitc文を用いること。 という問題で私は #include <stdio.h> main() {      int a;      printf("整数a:");      scanf("%d",&a);      switch(a%3)      {      case '0':           printf("Good morning \n");           break;      case '1':           printf("Good evening \n");           break;      case '2':           printf("Good afternoon \n");           break;      } } と考えましたが実行しても入力はできますがprintfが表示されません。 どこが間違っているのでしょうか?ちゃんとコンパイルはできるのですが・・・。 2.10個の整数値をキー入力し、合計と平均値を計算してその結果を表示するプログラムを書きなさい。 #include <stdio.h> main() {      int a[11],b,c,i;      for(i=1;i<11;i++)      {           printf("整数%d:\n",i);           scanf("%d",&a[i]);      }      for(i=1;i<11;i++)           b+=a[i];      c=b/10;      printf("合計値は%d",b);      printf("平均値は%d",c); } というプログラムを考えましたが、計算結果がめちゃくちゃになってしまいます。 これもどこを直したらいいべきでしょうか?

  • グローバル変数について

    ◎1--------------------------------- #include<stdio.h> void func(void); int glb; int main(void) { int a=20; glb=30; printf("main a=%d glb=%d\n",a,glb); func(); return 0; } void func(void) { int b=88; printf("func b=%d glb=%d\n",b,glb); } ------------------------------------- ◎1の実行結果----------------------- main a=20 glb=30 func b=88 glb=30 ------------------------------------- ◎2--------------------------------- #include<stdio.h> void func(void); int glb; int main(void) { int a=20; func(); printf("main a=%d glb=%d\n",a,glb); return 0; } void func(void) { int b=88; int glb=30; printf("func b=%d glb=%d\n",b,glb); } ------------------------------------- ◎2の実行結果----------------------- func b=88 glb=30 main a=20 glb=0 ------------------------------------- 以上2つのプログラムで、◎1は参考書を参考に作成したものです。 ◎1のプログラムで、グローバル変数glbの値をmain( )関数内で設定していたので、次に◎2のようにfunc( )という関数プロトタイプ内で、グローバル変数glbの値を設定し、main( )関数内のprintf文でも表示させようと思ったら、「glb=0」となってしまいました。 なぜこのようになってしまうか、教えてもらえたら嬉しいです。

  • 組み合わせ

    aに100、bに20や2を入力すると プログラムが停止します。 計算できるように御指摘お願いします。 以下のプログラムです。 #include<stdio.h> int factrical(int n){ if(n>0){ /*printf("%d\n",n);*/ return (n*factrical(n-1)); } else{ return(1);} } int combination(int n ,int r){ return(factrical(n)/(factrical(n-r)*factrical(r))); } int main (void){ int a,b,c; printf("二つの数を入力してください。\n"); do{ printf("大きい方の数を入力してください。\n"); scanf("%d",&a); scanf("%d",&b); }while(a<b); c=combination(a,b); printf("%d",c); return(0);}

  • 現在、C言語を習っています。

    現在、C言語を習っています。 今、関数を勉強しているんですがわからない文があるので正解の文を教えてください。 #include <stdio.h> int main (void) { int a=123; doubke b=4.5; printf("%d\n○○" ,a,b); return 0; } ○に入る言語や文が間違っていたら教えてください。

  • C言語の質問です。

    #include"stdio.h" int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = a+b; printf("add=%d\n", add); return 0; } と、------------------------------------------------------------------------------ #include"stdio.h" int tasizan(int x, int y); int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = tasizan(a, b); printf("add=%d\n", add); return 0; } int tasizan(int x, int y){ int aa; aa = x + y; return aa; } の違いを教えてください。

  • 配列について

    初歩的な質問ですいませんが、質問よろしくお願いします。 ◎1----------------------------- #include<stdio.h> int main(void) { char ss[10]="AB"; printf("ss=%s\n",ss); return 0; } ------------------------------------ ◎2-------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss[0]='A'; ss[1]='B'; ss[2]=0; printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎3------------------------------- #include<stdio.h> #include<string.h> int main(void) { char ss[10]; strcpy(ss,"AB"); printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎4------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss="AB"; printf("ss=%s\n",ss); return 0; } ---------------------------------- 以上4つのプログラムで、◎2と◎3は正常に動くと理解できたのですが、何故、◎1は正常に動き、◎4は「'const char [3]' から 'char [10]' に変換できません。」といったようなエラーが出てしまうか分かりません。 教えていただければ嬉しいです。

  • C言語の参照はずしについて

    ソートのプログラムなんですが #include <stdio.h> #include <stdlib.h> int comp(const void *, const void *); int main() { int i; int test[6] = {10, 8, 2, 6, 4, 0}; qsort(test, (size_t)6, sizeof(int), comp); printf("\n"); for (i = 0; i < 6; i++) printf("%d\n", test[i]); return 0; } int comp(const void *a, const void *b) { static int i = 1; printf("%02d--%d,%d\n", i, *(int *)a, *(int *)b); i++; return (*(int *)a - *(int *)b); } 最後のreturnの()の中身がよくわかりません。「参照はずし」という事をしてるらしいんですが「参照はずし」とは何ですか意味も教えてください。

  • この数列プログラムの解説お願いします c言語です

    初項が2です。 #include<stdio.h> int main(void){ int a, n, k, sum = 0; printf("Type k\n"); scanf("%d",&k); a = 2; for(n = 2; n <= k+1; n++){ sum += a; printf("a = %d, sum = %d\n",a, sum); a += (n-1)*(n-1); } return 0; } for文の()内の意味とかよくわかんないです

専門家に質問してみよう