• ベストアンサー

c言語のforの計算で悩んでいます。

c言語のforの計算で悩んでいます。 これの答えがなぜ2000まで表示されるのでしょうか。 if文が意味がないというか、 if(0<a<1000)なので、999まで表示されるのかと思ったのですが。 もっとも後で、aを設定せず if(0<i*2<1000)とやればいいのではないかと気付きましたが。 既出でしたらすみません。

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

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

その条件式が間違っているからです。 if(0 < a && a < 1000) としなければ、どう動くかはコンパイラ次第。

matsurikag
質問者

お礼

ただの勉強不足でした。ありがとうございます

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • aurumnet
  • ベストアンサー率43% (51/117)
回答No.2

if(0<a<1000) これで動くかどうかは1さんのおっしゃってるとおりコンパイラ次第となります 動いたとしても 0<a<1000では 0<aが計算され答えが真か偽(1か0)に置き換わるためa<1000ではなく 真か偽(1か0)<1000の計算となり、常に真の値を出すとおもわれます よってif文の中の処理が行われ2000まで表示されます if文を書き換えるとしたら if((0<a) && (a<1000)) となるとおもいます

matsurikag
質問者

お礼

ご丁寧な説明ありがとうございます。 cの書き方に慣れていないのでもっと勉強します

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語のforとwhileについて・・・

    C言語で「While 文を使って、1から100までの和を求めて表示するプログラムを作る」ことをやってみました。↓ ですが、forではできたのですが、whileでは動きませんでした。 whileで作る時は、forのどの部分を変えれば出来るんでしょうか? 解説できましたら、お願いします。。 #include <stdio.h> int main(void) { int i,wa; wa=0; for(i=1; i<=100; i++) { wa=wa+i; } printf("和=%d\n",wa); }

  • C言語

    C言語についてです。 例えば関数中で for(i=0;i<10;i++){ for(j=0;j<10;j++){ A[i][j]=・・・; } } という10×10の配列に1つ1つ値が入っているとします。 このfor文の中で入れた値をfor文の外で使うことは出来ないのでしょうか? 例えば、 for(i=0;i<10;i++){ for(j=0;j<10;j++){ A[i][j]=・・・; } } for(k=0;k<10;k++){ for(l=0;l<10;l++){ B[k][l] = A[i][j]/2; } } みたいな形です。 つまり、A[i][j]の初期化を防ぐ方法はあるのでしょうか? 分かりにくくてすいません。

  • C言語で%を使わない余りの出し方

    c言語で%を使わない余りの出し方の問題を出されたのですが、色々考えたのですが全くわかりません まず余りの限界(余りがどこまであるか)がどこまであるか。 そしてwhileかforを使って余りを出す方法を自分で考えたのですが全くできませんでした。 自分の中ではif文でaを余りとして(a==1 && a==2)など考えたりしました。 またこれはポインタも使わずavgr**なども使いません。 さらに発展した問題で if文、switch文、for文、while文を使わないで余りを出すというのが出てきました 情けないのですが、何かアドバイスがあれば教えていただきたいと思います

  • C言語で分からないところがあるのですが……

    C言語で分からないところがあるのですが…… すみません。C言語の課題で分からないところがあり、質問しに来ました。 ユーザから数を受けて、そこまでのフィボナッチ数列を表示させるというプログラムです。 下のソースコード(でいいんですよね?)は正しいやつです。 for文を使って、繰り返しの作業を行うことに成功しましたが、doとwhileに書き換える作業がうまくできません。 どなたか助けてください。 #include<stdio.h> fib(int n) { if(n == 1)return(1); else{ if(n == 2) return (1); else return fib(n-1) + fib(n-2); } } main() { int n, i ; printf("INPUT the number. : "); scanf("%d",&n); for(i=1; i<=n; i++){ printf("F%d = %d\n",i, fib(i)); } }

  • C言語のfor文について

    C言語のfor文について C言語初心者です。質問させていただきます。 output.datというバイナリファイルに値を書き込みたい(100~149)のですが、どうもうまくいきません。 値が半分だけ正常に入って、あとの半分はおかしな値が入ります。 どなたか分かる方教えていただけないでしょうか。 ソース(一部分)↓ int main(){ int i,j; char output[456]; //ファイルに値を入れる for(i=0,j=100;i<456,j<556;i++,j++){ output[i]=j; } //バイナリ書き込みモードでファイルをオープン if((fp = fopen("output.dat","wb")) == NULL) { printf("<output.dat> file open error\n"); exit(1); } //値をファイルに書き込む fwrite(output,456,1,fp); fclose(fp); exit(0); }

  • for文を用いて

    みなさん、こんにちわ。C言語についてわからないことがありましたので、質問させていただきます。 C言語の本でfor文を用いて1~10までの和を求める例題は数多くありますが、(i=0,i<=10,i++) 1+2+1+2+1+2+… のように二種類のパターンがでてきたときはどのようにfor文で組めばよいのでしょうか?合計とその途中の計算も結果出力したいのですが、わからず困っています。ご教授よろしくお願いします。

  • C言語で困っています

    C言語で 100:1 99:2 98:3 .......ループ 1:100とやりたいんですが このやりかたがわかりません goto文などを使うのでしょうか? 一応コードは #include <stdio.h> int main(void) { int i,a; for(i=100; i>=1; i--){ for(a=1; a<=100; a++){ printf("%d:\n",i); break; printf("%d",a); } } return 0; } です まったくこれだと右側が出力されなくてだめみたいです どなたかお知恵をください お願いします

  • 至急で、c言語の問題の解答解説をお願いします。

    1 元金(g)と年利率(r %)、年数(n)を読み込みn年後の元利合計(total)を単利と複利で計算し、2つの金額を表示するプログラムをc言語で答えてください。ただし、for文は用いないこと。 2 for文を用いて下記のようになるような九九の表を表示するプログラムをc言語で答えてください。   1 2 3 4 5 6 7 8 9 1 1 2 3 4 5 6 7 8 9 2 2 4 6 8 10 12 14 16 18 3 3 6 9 12 15 18 21 24 27 .4・・・・・・・・・・・・・・・・・・・・・・ 5・・・・・・・・・・・・・・・・・・・・・・ 6・・・・・・・・・・・・・・・・・・・・・・ 7・・・・・・・・・・・・・・・・・・・・・・ 8・・・・・・・・・・・・・・・・・・・・・・ 9 9 18 27・・・・・・・・・・・72 81 3 整数kを入力しiを0から1ずつ増やしてkになるまで繰り返し以下のパターンを出力するプログラムをc言語で答えてください。ただし、iが奇数なら# i%4=3ならば&  i%7=4ならば*を  他%を出力すること 例 %#%&*#%&%#%*%・・・・・・・

  • C言語 (繰り返し処理-for文)

    C言語で繰り返し処理のfor文について質問ですが int counter ; for (counter = 1; counter <= 5; counter++)  { puts("繰り返し処理です") ; } の[counter++]の意味を教えてください

  • 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文の中身に問題があると思うんですが…。どうか正しいプログラムと、なぜこのプログラムではうまくいかないのかを教えていただきたいです。なにぶん初心者なもんで、よろしくお願いします。