重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

if (A=0 && B=0 && C=0) {処理;}のような形の文は理解できたんですけど
if の条件に

A[1]=0 && A[2] && ~~~~~~~&& A[n-1]=0 && A[n]=0

のような文を入れるにはどうすればいいんですか?
C言語です

A 回答 (4件)

おそらく


if(A[0]==0 && A[1]==0 && ... && A[n-1]=0) {}
のことだと仮定して、

回数が固定でなく変数に縛られるような処理(この場合n個の要素をチェック)はfor文やwhile文などのループを用いる必要があります。

論理積&&を理解されているのならばfor文を使ってどう書けるかおわかりになると思います。

変数を1つ(仮にallzero)用意し、要素を1つずつチェックしてどれか1つでも0でなければallzeroが0、すべて0ならばallzeroが1となるようにすればよいのです。

ということで擬似Cコードで書くとこうなります。

allzero = 1;
for (iが0からn-1まで) {
if (A[i]が0でない) {
allzero = 0;
}
}
if (allzero) {
/* 全部0のときやりたいこと */
}
    • good
    • 1

やりたいことは、次のことかな?


i = 0;
while( i <= n && a[i] == 0 ){
i++;
}
if( i > n ){
/* やりたいこと */
}
    • good
    • 0

入門書等には「条件式」と書いてありますが、それは正確ではありません。


if (式) 〜
というのが正しいのです。

式なので
if ( 10 - 4 -6 )
if (921)
 等も正しいif文です。
if( foo(x) )
if( var )
 等のように、変数や関数も書けます。

判定は
式の値が0でない→ then部を実行
式の値が0 → elseを実行
 となります。


では、 == とか < とか && とかがなにかと言えば
「指定した関係になっていたら 1 そうでないなら 0 になる演算子」
です。
A == 0
 だったら
Aが0だったら1、そうでないなら 0
 という式です

if (A==0 && B==0 && C==0) {
 は次のものと一緒です
int f = (A==0) ;
f = f && (B==0) ;
f = f && (C==0) ;
if ( f ) 〜

判定部分を関数にして
int isZero(int a,int b,int c) {
int f = (a==0) ;
f = f && (b==0) ;
f = f && (c==0) ;
return f
}
...
if ( isZero(A,B,C) ) 〜
 とも書けます。

と、なれば
A[1]==0 && A[2]==0 && ~~~~~~~&& A[n-1]==0 && A[n]==0
はどうすればいいか、わかるのではないでしょうか。


なお。
= も代入演算子 というもので
「(値を代入した上で)その値になる演算子」
です。

if ( A=0 ) 〜

A=0 ; /* 代入 */
if ( 0 ) 〜
とするのと同じことになり、常にelse側のみ実行されます。
if (A=0 && B=0 && C=0) {処理;}
では、例えA=B=C=0であっても「処理;」が実行されるとはありません。
(しかも、この後強制的にA=0になってしまいます)

ベテランでもたまにやらかす間違いです。



それと
A[1]=0 && ...
とありますが、正しいですか?
配列の宣言と、添字の範囲を間違えてないですか?
    • good
    • 0
この回答へのお礼

A[0]を使うとややこしくなりそうだったのでA[1]から値を代入しています。
関数にするですか……
関数のつくりかたを勉強してから使ってみたいと思います。
ありがとうございました

お礼日時:2017/01/10 18:29

=なのか、==なのか…ってのはちゃんとしているとして……。



nが固定でない場合は、判定用の関数を作って、戻り値で結果を返却する。
という対応になるんじゃないですかね?
    • good
    • 0

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