C入門2 課題解答例
1. 下には1行しか書いてありませんが、プログラムのつもりです。これはコンパイル・実行できるでしょうか?
まず、考えてから、試してください。
(「どうやって確かめればいいか」と手順を考えることも課題です。)
main(){}
「#include <stdio.h>」は、「標準的な入出力のための情報を取り込むために必要」です。
しかし、上記コードでは、何もしていないので、これはなくてもかまいません。
mainの前のintは省略できます。
mainの後の丸カッコ中にはvoid(など)を書くべきですが、省略もできます。
Cでは改行を(比較的)自由にでき、逆に、改行を取り除いてもかまいません。
mainの中カッコ内の最後には「return 0;」(かそれに相当するもの)を書くべきですが、
多くのコンパイラではそれでもエラーになりません。
以上より、たぶん、たいていのコンパイラで、コンパイルでき、実行もできるでしょう。
それを確かめるためには、上記のコードを書いたファイルを作成し、コンパイル・実行してみればよいわけです。
(ファイル名は問題中に指示していないので、たとえば、kadai2_1.cなどとしましょう。以下同様です。)
ただし、mainの中に何も書いていないので、これは「何もしないプログラム」です。
2. 次のように出力するプログラムを書いてください。ただし、printfは1回だけ使うことにします。
いろいろな解答があると思いますが、1つ書けばよいことにします。
(なお、バグとはプログラム中の誤った箇所のことです。)
五月晴れ
プログラミング
バグもなし
たとえば、以下のようなものが考えられる。
#include <stdio.h>
int main(void)
{
printf("五月晴れ\n プログラミング\n バグもなし\n");
return 0;
}
3. 上のように出力するプログラムを、今度はprintfを3回使って書いてください。
これも、ひねくれたものまでいれるといろいろな解答があると思います。
たとえば、以下のようなものが考えられる。
#include <stdio.h>
int main(void)
{
printf("五月晴れ\n");
printf(" プログラミング\n");
printf(" バグもなし\n");
return 0;
}
4. 次のプログラムは、コンパイルするとエラーになります。
まず、実際にコンパイルしてエラーになることを確かめ、次に、エラーが出ないように書き直してください。
何箇所直す必要がありますか?
#include <stdioh>
int main(void)
{
print("hello, world"\n)
return 0;
}
4箇所直して次のようにすればよい。
(コンパイル時のエラーメッセージのすべてを信用することはできません。
矛盾した内容にコンパイラが混乱するからです。
エラーメッセージの上のほうから順番に直していくのがよいと思います。)
#include <stdio.h>
int main(void)
{
printf("hello, world\n");
return 0;
}
5. 次のプログラムはコンパイル・実行できるでしょうか?まず考えてから試してください。
#include <stdio.h>
int main(void)
{
printf("printf");
return 0;
}
コンパイルも実行もできる。
""で囲まれたものはただの文字列と考えられるから、それが関数名でも問題ない。
6. 次のプログラムはコンパイル・実行できるでしょうか?まず考えてから試してください。
#include <stdio.h>
int main(void)
{
printf("printf("printf")");
return 0;
}
コンパイルできない。
文字列は「"」ではじまり「"」で終わる。
printfの丸カッコ内の「"printf("printf")"」は、「"printf("」で文字列が終わってしまい、
あとの「printf")"」が解釈不能になってしまう。
7. 次のプログラムはコンパイルするとエラーになります。
それは、「printf」が空白でわけられているからですが、エラーメッセージはどうなるでしょう?
実際に試して、なぜそのようなメッセージが出るか考えてください。
#include <stdio.h>
int main(void)
{
pri ntf("hello, world\n");
return 0;
}
ファイル名をkadai2_7.cとしてBCCでコンパイルすると、次のようなエラーメッセージが出た。
エラー E2451 kadai2_7.c 5: 未定義のシンボル pri(関数 main )
エラー E2379 kadai2_7.c 5: ステートメントにセミコロン(;)がない(関数 main )
1番目のメッセージは、「priが何かわからない」と言っている。
コンパイラは、「人間がprintfの間に間違えて空白を入れたな」などと考えることはできない。
2番目のメッセージは、最初のエラーの影響から出ていると考えられる。
priとntfの間の空白を詰めれば、エラーは消える。
(1つのエラーに2つエラーメッセージが出ていることに注意してください。
エラーメッセージの数はあてにならないのです。)
8. コンパイルできるhello.cで、printf("hello,
world\n");のあとに全角の空白を入れ、
(保存してから)コンパイルし、エラーメッセージを見てください。
そして、なぜそのようなメッセージが出るか考えてください。
このようなバグを避ける方法を考えてください。
ファイル名をkadai2_8.cとして、問題のようなプログラムをBCCでコンパイルすると、
次のようなエラーメッセージが出た。
エラー E2206 kadai2_7.c 5: 不正な文字 ' ' (0x8140)(関数 main )
これは、「プログラムに使えない文字が使われている」という意味である。
全角の空白文字はプログラム中では使えないからである。
(""の間、つまり、文字列中では使える。)
しかし、プログラムをよく見てもそのような文字は見えない。それは、「空白」の文字だから。
このようなエラーに対処するには、
1.""の間以外では、日本語入力モードを切るように習慣付ける。
2.上記のエラーメッセージを覚える。(特に、「81」とか「40」という数字)
などが考えられる。