HOME»基本情報技術者試験掲示板»令和元年秋期午後問9
投稿する
厳密には、else以降に複数の文を書きたいときは、ブロック{}でくくるのが正解です。
コンパイラとしては問題ありません。
しかし私としては、人間側が混乱する恐れがある為、
ブロックで括ったほうが良いと思います。
令和元年秋期午後問9 [2280]
C言語初心者さん(No.1)
https://www.fe-siken.com/kakomon/01_aki/pm09.html
下記のプログラムで、elseの下にtblH[chr]とtblL[chr]がありますが、
iやnやtなどのif条件(0x20 <= chr ) &&(chr <= 0x7E)を満たしているものに対しても、
else以下の文(tblH[chr]とtblL[chr])が実行されているのがわかりませんでした。
ご回答可能でしたら、なぜ実行されているのかお教え願います。
else以降に制御できる文は1つだけで、
else以降に複数の文を書くのは間違いと教科書に書かれておりました。
下記のプログラムは書き方として正しいのでしょうか。
[プログラム]
for(chr = 0x00; chr <= 0xFF; chr ++){
if((0x20 <= chr ) &&(chr <= 0x7E))
tblC[chr] = chr;
else
tblC[chr] =MASKCHR;
tblH[chr] = hex[chr>>4];
tblL[chr] = hex[ 設問1回答a ];
}
下記のプログラムで、elseの下にtblH[chr]とtblL[chr]がありますが、
iやnやtなどのif条件(0x20 <= chr ) &&(chr <= 0x7E)を満たしているものに対しても、
else以下の文(tblH[chr]とtblL[chr])が実行されているのがわかりませんでした。
ご回答可能でしたら、なぜ実行されているのかお教え願います。
else以降に制御できる文は1つだけで、
else以降に複数の文を書くのは間違いと教科書に書かれておりました。
下記のプログラムは書き方として正しいのでしょうか。
[プログラム]
for(chr = 0x00; chr <= 0xFF; chr ++){
if((0x20 <= chr ) &&(chr <= 0x7E))
tblC[chr] = chr;
else
tblC[chr] =MASKCHR;
tblH[chr] = hex[chr>>4];
tblL[chr] = hex[ 設問1回答a ];
}
2020.04.26 00:10
メタルさん(No.2)
★FE ブロンズマイスター
>>else以降に複数の文を書くのは間違いと教科書に書かれておりました
厳密には、else以降に複数の文を書きたいときは、ブロック{}でくくるのが正解です。
2020.04.26 07:37
メタルさん(No.3)
★FE ブロンズマイスター
間違っていたらごめんなさい。
if文は二つやり方があって、
一つ目は
if(省略)
処理1
else
処理2
処理3
二つ目は
if(省略)
{
処理1
}else{
処理2
}
処理3
一つ目のif文だと、if直後の一行目の処理1がif文の条件にあった時のみ実行され、else直後の一行目の処理2が、
ifの条件に合わなかった時のみ実行される処理とされます。
処理3は二行目以降なのでif文と関係のない、
無条件で実行される処理になります。
これと全く同じ処理を{}つきで表記すると二つ目のif文になります。
ブロックを省略すると直後の行の処理だけif文の条件分岐に含まれるのです。
つまり、処理3はいかなる条件でも常に実行されます。
if文は二つやり方があって、
一つ目は
if(省略)
処理1
else
処理2
処理3
二つ目は
if(省略)
{
処理1
}else{
処理2
}
処理3
一つ目のif文だと、if直後の一行目の処理1がif文の条件にあった時のみ実行され、else直後の一行目の処理2が、
ifの条件に合わなかった時のみ実行される処理とされます。
処理3は二行目以降なのでif文と関係のない、
無条件で実行される処理になります。
これと全く同じ処理を{}つきで表記すると二つ目のif文になります。
ブロックを省略すると直後の行の処理だけif文の条件分岐に含まれるのです。
つまり、処理3はいかなる条件でも常に実行されます。
2020.04.26 07:54
メタルさん(No.4)
★FE ブロンズマイスター
>>下記のプログラムは書き方として正しいのでしょうか。
コンパイラとしては問題ありません。
しかし私としては、人間側が混乱する恐れがある為、
ブロックで括ったほうが良いと思います。
2020.04.26 07:59
メタルさん(No.5)
★FE ブロンズマイスター
あくまでC言語の仕様を理解しているか、テストのためのコードなのでしょう。
2020.04.26 08:03
C言語初心者さん(No.6)
メタルさん
C言語初心者です。
ご回答誠にありがとうございます。
大変参考になりました。
ご指摘の通り、ブロックで括られていたら納得できるのですが、
回答いただいた1つ目のif文の使い方は知りませんでした。
今後は、1つ目の書き方を踏まえて問題に取り組みます。
本当にありがとうございました。
C言語初心者です。
ご回答誠にありがとうございます。
大変参考になりました。
ご指摘の通り、ブロックで括られていたら納得できるのですが、
回答いただいた1つ目のif文の使い方は知りませんでした。
今後は、1つ目の書き方を踏まえて問題に取り組みます。
本当にありがとうございました。
2020.04.26 12:24
メタルさん(No.7)
★FE ブロンズマイスター
ご理解いただけて何よりです。
どういたしまして。
どういたしまして。
2020.04.26 13:03