回答受付終了まであと4日

第63回情報技術検定のC言語についてです。 これがいまいち理解できません。解説していただける方いましたら、お教えください。

画像

回答(5件)

m = num % 2 (訳: numを2で割った時の余りをmに入れる) 2の倍数判別方法は2で割ったあまりに注目する。あまりが0だったら2の倍数。 6 ÷ 2 = 3 余り 0 7 ÷ 2 = 3 余り 1 8 ÷ 2 = 4 余り 0 9 ÷ 2 = 4 余り 1 したがって if(m == 0)とすればよい。 この条件下でcntを+1していくことで、個数を数える。(cnt = cnt + 1 )

この回答はいかがでしたか? リアクションしてみよう

>第63回情報技術検定のC言語について 専門用語の丸暗記から始めます。num、cntが専門用語です。iも独自性の高い専門用語です。 num number cnt count このような用語の略記法の丸暗記を予め達成しておく必要があります。 C言語にはこのような専門的な統一的略記法が極めて多いので、それらの全てを丸暗記しておくのが手っ取り早いです。界隈で暗黙のうちに定められている略語が多く、しかもそれを懇切ていねいに説明した教科書なんてものは存在しないので、「自分で察しろ」という趣旨の教育方法だからです。なのでそれらの略語を察することが出来ない人間を知らずのうちにふるい落としているというわけです。 また、大抵はfor文でiが使われますので、なんで変数名がiであるべきなのかは思考停止すべき箇所である……ということも予め知っている必要があります。 つかわれているmもmoduloの略である可能性が極めて高いので、そのような類推能力を高めるためには専門用語を丸暗記する必要があります。分子分母はnumeratorとdenominatorであり、余りはremainderなどです。これらの数学的な擁護を暗記しておくと理解が捗るので、英語力が必要とされますが単なる単語の暗記ですので実は語学力なんてのは大して必要ないです。脳を使わないただの暗記をするだけだからです。 cntがなんでcountの略語になるかと言うとこれは業界の慣例なので実例を眺めて知るしかないですが、知っていれば「cntはカウントのことであり何かを1,2,3,・・・と計数するための変数である」という意味までを察することが出来るので読解がラクになるからです。全体を理解するために細部のそれぞれの変数名の意味を暗記しておくと理解が簡単になるからです。 numやnやnumberには慣例として整数しか入らず、floatやdoubleを入れる時は大抵はxとかyとかの変数になる……というのは業界の弱い慣例です。なのでnumという変数名を眺めただけで「ここには整数が入る」ということを暗記により予め知っているからです。知っているとはどういうことかと言うと、理解の前提です。 なので変数名の慣例的な略し方と文脈における使われ方には一定のパターンがあるのでそれらを知っているつまり暗記している状態だと理解が捗ります。

その他の数学的な箇所は極めて難解ですので、復習をするだけで理解できます。 【小学生算数】倍数と公倍数とは?見つけ方や見分け方を解説! | 数スタ https://study-line.com/sansu-baisu/ 小学生 算数 整数のしくみ 第3回 【四街道の学習塾】 | ブログ | 四街道の学習塾なら丁寧な秀英ゼミナール https://laplus.com/blog/detail/20220905/ 書店にも大抵は復習用の書籍が売っていますので、それを購入して「倍数とは何か」を考察してもよいです。

m = num % 2; if(m == 0) cnt = cnt + 1; だと思います。 2の倍数ということは、2で割り切れる数ということになります。 なので、2で割った余りを求め0になる数を数えればよいわけです。 1は、2になります。 mに余りの数値が保存されますので mが0かどうかif文で判断していますので 2は、m == 0です。 最終的に2の倍数の数を数えるわけです。 問題では、cntが2の倍数の数を数えている変数になります。 なので、3は、cntになります。

>解説して → 解説をプログラムコードにコメントとして埋め込みました。 numが2で割り切れれば偶数(即ち、元の値(num)は、2の倍数です)。 //main.c // 標準入力(キーボード)より正の整数を10個入力し2の倍数の個数を表示 #include <stdio.h> int main(void){   int num, i, m, cnt;   cnt = 0;                //cntをゼロで初期化   for(i=0; i<10; i++){    //繰返し制御 i = (0~9) の10回     printf("正の正数を入力して下さい。");  //入力促進表示     scanf("%d", &num);   //標準入力(キーボード)より整数をnumに格納     m = num % 2;    //入力した整数を2で割った余りをmに格納(即ち、0/1)     if(m == 0){             //余りがゼロ(即ち、偶数の場合[真])       cnt = cnt + 1;        //cntに1を加え、cntに格納。(即ち、カウント)     }   }   printf("2の倍数は、%d個です。", cnt); } >main 正の正数を入力して下さい。0 正の正数を入力して下さい。1 正の正数を入力して下さい。2 正の正数を入力して下さい。3 正の正数を入力して下さい。4 正の正数を入力して下さい。5 正の正数を入力して下さい。6 正の正数を入力して下さい。7 正の正数を入力して下さい。8 正の正数を入力して下さい。9 2の倍数は、5個です。 ━

以下は「検定」と言うことで意味も無く2行に分けていると思います     m = num % 2;    //入力した整数を2で割った余りをmに格納     if(m == 0){        //余りがゼロ(即ち、偶数の場合[真])         ↓     if(num%2 == 0){        //余りがゼロ(即ち、偶数の場合[真]) ━

2の倍数かどうかは、2で割り切れるか割り切れないか、ということです。 設問文にある通り、「%」は2で割ったときの余りを出す演算子ですから、その演算結果が0なら2の倍数ってことです。