if文がうまく動かない理由について教えてください
- if文がうまく動かない理由について教えてください。
- 上記のプログラムでは、p3=0の時はc[j3]=theta1; d[j3]=theta2;が実行されると考えているのですが、else文の方に入ってしまいます。
- c[j3]=theta1*co[p3]+theta2*si[p3]; d[j3]=theta2*co[p3]-theta1*si[p3];が実行される理由を教えていただけないでしょうか?
- ベストアンサー
if文がうまく動きません。教えてください。
if(p3=0){ c[j3]=theta1; d[j3]=theta2; } else{ c[j3]=theta1*co[p3]+theta2*si[p3]; d[j3]=theta2*co[p3]-theta1*si[p3]; } 上記のプログラムを書きました。上記のプログラムでは、p3=0の時 c[j3]=theta1; d[j3]=theta2;が為されると考えているのですが、 else文の方に入ってしまいます。 c[j3]=theta1*co[p3]+theta2*si[p3]; d[j3]=theta2*co[p3]-theta1*si[p3]; どうしてでしょうか? 教えていただけないでしょうか? よろしくお願いいたします。
- saterain20
- お礼率88% (254/286)
- C・C++・C#
- 回答数4
- ありがとう数4
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
if(p3=0){ を if(p3==0){ にしてください。(=を2つ書く) if文で比較する場合は、=を2つ書きます。 C言語では、=が1つでもエラーになりませんが、意味が異なってきます。 比較する場合は、必ず=を2つのが、本来の比較方法です。 (C#等のほかの言語ではif文で=を1つにするとエラーにしてくれるのですが、C言語はエラーにしてくれませんので、気をつけてください) また、同じように代入文は=が1つですが、=を2つ書いてもエラーになりません。 a=3; b==10; ・・・エラーにはならないが、bに10が代入されるわけではない。 (これも気をつけてください)
その他の回答 (3)
- asuncion
- ベストアンサー率33% (2126/6288)
>#1さん >p3=0 の代入なら値 0 だから else に行くのかな? そのとおりです。 if (p3 = 0) { っていうif文は、ぶっちゃけ if (0) { って書いたのと同じ。なぜなら、 p3 = 0 っていう式は、p3に0を代入して、その結果(0)を評価するから。 >普通は,代入したら true になると思うが, これは意味不明です。
お礼
ありがとうございます。 うまくいきました。
- m0r1_2006
- ベストアンサー率36% (169/464)
p3=0 の代入なら値 0 だから else に行くのかな? 普通は,代入したら true になると思うが, p3 == 0 の間違いだろう.
お礼
ありがとうございます。 うまくいきました。
関連するQ&A
- if文の演算子について
if文の演算子について int a=0,b=1,c=1,d=1; if(a==1 && b==1 && c==1 ||d==1){ Printf("yes"); }else{ Printf("no"); } if((a==1 && b==1 && c==1 )||d==1){ Printf("yes2"); }else{ Printf("no2"); } } 上記のif文で出力結果が異なります。 if((a==1 && b==1 && c==1 )||d==1)の方はa=1、b=1、c=1の時もしくはd=1の時と 理解できるのですが、 if(a==1 && b==1 && c==1 ||d==1)の方は、どういう条件の時が当てはまるのでしょうか?
- ベストアンサー
- C・C++・C#
- if文について教えてください
C++でプログラムを作っています。 b0~b3どれかが1の時という条件指定と、さらにその上でb0~b3どれも1でなく、かつどれも同じ値でないという条件指定はどのように記述すればよいのですか? ちなみに私は次の様にしたのですが、ビルドすると「error C2181: else 文が if と一致しません。」となってしまいました。 if((b[0]=1)||(b[1]=1)||(b[2]=1)||(b[3]=1));{ c[1]=c[1]+1; } else(b[0]!=b[1]!=b[2]!=b[3]!=1){ c[2]=c[2]+1; } もう一つこちらでもダメでした。 if((b[0]=1)||(b[1]=1)||(b[2]=1)||(b[3]=1));{ c[1]=c[1]+1; } else(b[0]!=b[1]!=b[2]!=b[3]){ c[2]=c[2]+1; }
- ベストアンサー
- C・C++・C#
- 実行すると if文 に矛盾
#include <stdio.h> #include <math.h> int main(void) { /* */ double c, l, m, n, w=1, x[4]={1,2,3,4}, y[4]={1,2,3,4}; /* */ int j, k, u, v; /* */ for(j=0; j<3; j++){ /* */ for(k=j+1; k<4; k++){ /* */ l = sqrt( pow(x[j]-x[k], 2) + pow(y[j]-y[k], 2) ); /* */ m = sqrt( pow(x[j], 2) + pow(y[j], 2) ); /* */ n = sqrt( pow(x[k], 2) + pow(y[k], 2) ); /* */ c = ( pow(m, 2) + pow(n, 2) - pow(l, 2) ) / (2*m*n); /*☆ */ /* if(c=w) ; */ /*※ */ if(c<=w){ /* */ w = c; /* */ u = j; /* */ v = k; /*● */ } else if(c>w){ /* */ if(c=w) /* */ printf("no way\n"); /* */ } /* */ } /* */ } /* */ printf("[ P%d P%d ]\n", u, v); /* */ return(0); } -------------------------------------------------------------------------------- 上記プログラムなのですが、Visual C++ でこれを実行すると、 ------------------------------ no way no way no way no way [ P0 P2 ] Press any key to continue ------------------------------ と出力されてしまいました。 ☆行のif文のコメントを外して直前で c=w を評価すると、※の部分が正常に処理されました。 なぜこのような矛盾が生じているのでしょうか? 何かご意見いただければ幸いです。 ※今回 Visual C++ でしか実行できるものがなかったため、他では確認できておりません。恐縮です。 ※この投稿の文字量の制限のため、プログラムの解説は割愛しました; ※補足などでお伝えできればよいのですが…。
- ベストアンサー
- C・C++・C#
- if文がうまく回りません。
if文がうまく回りません。 次のようなプログラムを作ろうとしています。 0.01 <= Te < =0.1 のとき Teを0.01ずつ増やす。 0.1 <= Te < =1 のとき Teを0.1ずつ増やす。 1 <= Te < =10 のとき Teを1ずつ増やす。 10 <= Te < =100 のとき Teを10ずつ増やす。 で作ったのが以下のプログラムになります。 Te[0] = 0.01; for( j = 0; Te[j]<=100.0 ;j++){ if( 0.01 <= Te[j] && Te[j] < 0.1) { Te[j+1] = Te[j] + 0.010;} else if( 0.1 <= Te[j] && Te[j] < 1) { Te[j+1] = Te[j] + 0.10;} else if( 1 <= Te[j] && Te[j] < 10) { Te[j+1] = Te[j] + 1.0;} else if( 10 <= Te[j] && Te[j] <= 100){ Te[j+1] = Te[j] + 10.0;} printf("%d Te=%lf\n",j,Te[j]); } ですが結果を出力すると以下のようになります。 0 Te=0.010000 1 Te=0.020000 2 Te=0.030000 3 Te=0.040000 4 Te=0.050000 5 Te=0.060000 6 Te=0.070000 7 Te=0.080000 8 Te=0.090000 9 Te=0.100000 10 Te=0.110000 ←おかしい 11 Te=0.210000 12 Te=0.310000 13 Te=0.410000 14 Te=0.510000 15 Te=0.610000 16 Te=0.710000 17 Te=0.810000 18 Te=0.910000 19 Te=1.010000 20 Te=2.010000 21 Te=3.010000 22 Te=4.010000 23 Te=5.010000 24 Te=6.010000 25 Te=7.010000 26 Te=8.010000 27 Te=9.010000 28 Te=10.010000 29 Te=20.010000 30 Te=30.010000 31 Te=40.010000 32 Te=50.010000 33 Te=60.010000 34 Te=70.010000 35 Te=80.010000 36 Te=90.010000 10 Te=0.2000となってほしいのですが、なりません。 ここはどこがおかしいのでしょうか? ご教授お願いします。
- ベストアンサー
- C・C++・C#
- if文について
最近、C言語プログラムから、離れていて、久しぶりにここを覗いたのですが、 こんな質問を見ました。 質問 C言語初心者だが、学習用に良いサイトはないか? 最初の回答の方は、ある初心者用と思われるサイトを、紹介してらっしゃいました。 それに対して、他の回答者の方々は、そのサイトの一分を引用して、コンパイルできないし、間違っていると指摘されました。それは以下のようなものでした。 if(条件式) 文1; else 文2; その代わりに掲載されているのが次のようなものでした。 if(条件)条件が真のときに実行する1文; else 条件が偽のときに実行する1文; 私には、最初の回答がなぜ間違っているのか、何故コンパイルできないのか、判りません。何方か詳しく教えていただければ、嬉しいです。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- elseif文の中のif文のところで
今、c言語の勉強をしていまして、 演習問題のプログラムを作成しています。 elseif文の中のif文のところで エラーが出てしまうのですが・・・。 ご教授して頂けたら幸いです。 #include<stdio.h> int main(void) { int kyori,untin; printf("ようこそ \n"); printf("距離を入力してください->"); scanf("%d", &kyori ); if(kyori < 5) untin = 120; else if(kyori >= 5 && kyori < 21) untin = ((kyori-4)/2*20)+120; else if(kyori >= 21 && kyori < 1000) untin = ((kyori-20)/5*40)+280; //7840円 else if(kyori >= 1000 ) untin = ((kyori-1000)/10*50)+8120 ここでエラー→→→ if(untin <> 0) untin = untin + 50; printf("運賃は%dです。",untin); }
- ベストアンサー
- C・C++・C#
- if文の使い方について
if文でaの値とbの値とcの値が一緒なら次の処理を行うものを作成したいのですが。 if($a==$b==$c){ 行いたい処理 }else{ その他の処理 } と書いたのですが、ダメで if($a=$b=$c){ 行いたい処理 }else{ その他の処理 } と書いたのですが、これもダメでした。 if($a==$b) { if($b==$c) { 処理 }else{ その他の処理 } }else{ その他の処理 } と書かいたら実行されたのですが、このように分けて書かないとダメなのですか? いいやり方がありましたら教えてください
- ベストアンサー
- PHP
- if文の初歩的な質問
if文の初歩的な質問なのですが、 if (a==1) c=10; else if (a==2) c=20; else if (a==3) c=30; System.out.println(c); この文のelseはなぜいるのでしょうか?どちらでも良いのでしょうか? 基本のルールとしては、elseが付くのでしょうか?
- ベストアンサー
- Java
お礼
ありがとうございます。 うまくいきました。