- 締切済み
一次元配列の添え字の出力について
配列matを以下のように宣言し、要素の値が2の倍数、または3の倍数ならば、その添え字を書き出すプログラムを作成しています。が、どうにも上手くいかなくて困ってます。条件式に誤りがあるのだと思いますが、解る方、何処が間違っているのか教えてください。 すぐに回答が欲しいです。 #include <stdio.h> int main(void) { int i,mat[10]={5,3,8,2,7,1,10,4,9,6}; for(i=0;i<10;i++) { if(mat[i]/ 2==1 || mat[i]/ 3==1){ printf("%d",i); } } printf("\n"); return(0); }
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- tatsu99
- ベストアンサー率52% (391/751)
if(mat[i]/ 2==1 || mat[i]/ 3==1){ を if(mat[i]% 2==0 || mat[i]% 3==0){ に代えて下さい。
- tatsu99
- ベストアンサー率52% (391/751)
老婆心ながらいいますと、 前の質問を締め切ってから新しい質問をすると良い回答がつきやすくなりますよ。
- chie65536(@chie65535)
- ベストアンサー率44% (8800/19959)
「2の倍数」は「2で割って、何がどうなった時」ですか? 「mat[i]/2==1」は「2で割って、何がどうなった時」ですか? 「3の倍数」は「3で割って、何がどうなった時」ですか? 「mat[i]/3==1」は「3で割って、何がどうなった時」ですか? それぞれの「何がどうなった時」は一致していますか? もし一致してないなら「条件式が誤っている」のです。 もし一致しているなら「条件式が合っている」のです。 以下、ヒント。 Cでは、intの割り算では「割り切れた」と言うのは判断できません。 なぜなら、intの割り算は、割り切れる割り切れないに関わらず、整数にされた商が計算され、剰余は無視されます。 つまり「割り算だけではダメ」と言う事です。 従って 「2の倍数」は「2で割って、何がどうなった時」ですか? と言われて 「2の倍数」は「2で割って、割り切れた時」です。 と考えてもダメだ、と言う事です。 別の考え方をする必要があります。 以上、ヒント終り。
- asuncion
- ベストアンサー率33% (2127/6290)
2の倍数、というのを別の言い方で表現してみてください。
- Tacosan
- ベストアンサー率23% (3656/15482)
例えば 「mat[i]/ 2==1」 という条件が何を意味するか, 「日本語で」説明してください.