電子書籍の厳選無料作品が豊富!

C言語を勉強中です・・・
0秒から1.0秒まで0.01秒刻みでデータ(s[i])を配列から表示させていく簡単なプログラムです。
0から0.2までは"30"
0.2から0.4までは"29"
0.4から1.0までは"30"と表示させたいのですが、
全て"30"と表示されてしまいます。
配列の仕方が悪いのでしょうか??
すごく基本的な質問かもしれませんが、どなたか分かる方、よろしくお願いします。

#include <stdio.h>
#include <math.h>

#define number0 (100)
#define h (0.01)
#define f1 (30.0)
#define f2 (29.0)

void main(void){
double s[number0]={0};
int i;
double t;

for(i=0; i<number0; i++){
t=h*i;
if(0<=i<20){
s[i]=f1;
} else {
if (20<=i<40){
s[i]=f2;
} else {
s[i]=f1;
}
}

printf("%g %g\n",t,s[i]);
}
}

A 回答 (2件)

こんにちわ。



条件式には、複数の条件を一度に指定はできません。
複数の条件式を指定するには、&& (and), || (or) を使います。
「if (20 <= i < 40)」と記述している部分を、
「if ((20 <= i) && (i < 40)) のように記述して下さい。
(内側の括弧は必須ではありませんが、上記のようにすると
ミスが少なくなります。)

georgia さんのプログラム (部分) をもう少し分かりやすく書くと
以下のようになります。
プログラム1, 2 共同じ結果が得られます。
参考にして下さい。

-------------------------------------
プログラム1
for (i = 0; i < number0; i++) {
 t=h*i;
 if (i < 20) {
  s[i]=f1;
 } else if (i < 40){
  s[i]=f2;
 } else {
  s[i]=f1;
 }
 printf("%g %g\n",t,s[i]);
}
-------------------------------------
プログラム2
for (i = 0; i < number0; i++) {
 t=h*i;
 s[i] = ((i < 20) || (i >= 40)) ? (f1) : (f2);
 printf("%g %g\n",t,s[i]);
}
-------------------------------------
    • good
    • 0
この回答へのお礼

めちゃめちゃ分かりやすかったです!! 簡単なプログラムだったんですが、とっても困っていたので相当助かりました!! 本当にありがとうございました!! C言語の勉強頑張ります・・・

お礼日時:2002/11/19 15:26

>if(0<=i<20){



この書き方だと意図したものになりません。

if (0 <= i && i < 20) {

というように書きます。
    • good
    • 0
この回答へのお礼

あ、本当ですね!! 訂正したらプログラムちゃんと動きました!!本当にありがとうございました!!

お礼日時:2002/11/19 15:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!