LoginSignup
2
5

More than 3 years have passed since last update.

C言語の初歩的なトピックの理解を確認する10の問題

Last updated at Posted at 2018-12-12

10個作る前に力尽きました。

これは何?

これは、大学の授業等で教養としてC言語を学習した人、またはC言語を独学で身につけようとしている人が、基礎的なトピックを十分理解しているか?を確認するための問題です。

まずソースコードのみを見て問題を考えた後、実際に実行して答え合わせをしてください。

もしまだ未習の部分がある場合は、Waseda Course Channel等で確認してください。

問題

変数・標準出力

何が出力されるでしょうか?

#include <stdio.h>
int main(void) {
    int i, b = 3;
    for (i = 0; i < 5; i++) {
        int b = 5;
        printf("%d %d\n", i, b);
    }
    printf("%d %d\n", i, b);
}

繰り返し

Nを自由に設定するとき、forで記述されたループと同じ挙動になるのは(a),(b),(c)のどれでしょうか?(for (;;)は無限ループの意味です)

int i;
for (i = 0; i < N; i++) {
    printf("%d\n", i);
}
// (a)
i = 0;
for (;;) {
    if (!(i < N)) break;
    printf("%d\n", i);
    i++;
}
// (b)
i = 0;
for (;;) {
    printf("%d\n", i);
    if (!(i < N)) break;
    i++;
}
// (c)
i = 0;
for (;;) {
    printf("%d\n", i);
    i++;
    if (!(i < N)) break;
}

他にも、while文, do-while文について確認しましょう。

配列・ポインタ

ポインタについては言いたいことがいっぱいありますが、とりあえず以下の問題がわかれば授業が求めるレベルには達しているといえるでしょう。

int *p, a[] = {3, 2, 5, 7, 9, 0};
p = a;
while (*p) printf("%d\n", *++p);  // 何が表示される?
char *s = "hello";
while (*s) printf("%d\n", *s++);  // 何が表示される?
int b, *c, **d;
c = &b;
d = &c;
**d = 5;
printf("%d\n", b);  // 何が表示される?
int m[][3] = {
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
};
int i, *m1 = m[1];
for (i = 0; i < 3; i++) printf("%d\n", m1[i]); // 何が表示される?

関数呼び出し

何が表示されるでしょうか?

#include <stdio.h>
void f(int r) {
    if (r < 0) return;
    printf("%d\n", r);
    f(r - 1);
    f(r - 2);
}
int main(void) {
    f(5);
}

文字列

何が表示されるでしょうか?(間違いを修正しました。下のコメント参照)

int main(void) {
    char a[] = "ABCDabcd", *c = a;
    while (*c) printf("%c\n", *c++ - 'A' + 'G');
}

その他のトピック

上に挙げた他にも、条件分岐, switch文, 構造体, 文字列, 数学関数, プリプロセッサマクロなどの理解を確認してみてください。

次のステップ

【C言語】初心者が中級者になるまでに身につけるべきトピック」へ続く

2
5
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5