C言語入門 第2回実力試験 解答例




2014年10月より個人の方を対象に、Study C無料提供を開始しました。
C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。
大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。
インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を強力にサポートします。
ブロック崩しゲーム 3Dツリー クリスマスツリー
また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する
Study C無料利用についての詳細は、このページを参照してください。



第2回実力試験の解答例


2-1. 配列(配列のサイズは5にします)の各要素に1から5を代入し、printf()で各要素の 内容を表示してみましょう。

[解答例]
main()
{
        int     data[5];

        data[0] = 1;
        data[1] = 2;
        data[2] = 3;
        data[3] = 4;
        data[4] = 5;

        printf("data[0] = %d\n", data[0]);
        printf("data[1] = %d\n", data[1]);
        printf("data[2] = %d\n", data[2]);
        printf("data[3] = %d\n", data[3]);
        printf("data[4] = %d\n", data[4]);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


ループを使った場合
main()
{
        int     n;
        int     data[5];

        for (n = 0; n < 5; n++) {
                data[n] = n + 1;
        }
        for (n = 0; n < 5; n++) {
                printf("data[%d] = %d\n", n, data[n]);
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-2. 2-1を配列の最後の要素から表示するように書き換えてみましょう。

[解答例]
main()
{
        int     data[5];

        data[0] = 1;
        data[1] = 2;
        data[2] = 3;
        data[3] = 4;
        data[4] = 5;

        printf("data[4] = %d\n", data[4]);
        printf("data[3] = %d\n", data[3]);
        printf("data[2] = %d\n", data[2]);
        printf("data[1] = %d\n", data[1]);
        printf("data[0] = %d\n", data[0]);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


ループを使った場合

main()
{
        int     n;
        int     data[5];

        for (n = 0; n < 5; n++) {
                data[n] = n + 1;
        }
        for (n = 0; n < 5; n++) {
                printf("data[%d] = %d\n", 4-n, data[4-n]);
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


for文のパラメータを変更して表示させることもできます。

main()
{
        int n, data[5];

        for (n = 0; n < 5; n++) {
                data[n] = n+1;
        }
        for (n = 4; n >= 0; n--) {
                printf("data[%d] = %d\n", n, data[n]);
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-3. 2-1を配列の各要素に10を加えてから表示するように書き換えてみましょう。

[解答例]
main()
{
        int     n;
        int     data[10];

        for (n = 0; n < 10; n++) {
                data[n] = n + 1;
        }
        for (n = 0; n < 10; n++) {
                printf("%d\n", data[n]);
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-4. 次のプログラムに平均値を表示する機能を付け加えてみましょう。

[解答例]
int     print_bar(int);

main()
{
        int i,
            sum,
            mean,
            data[5];

        sum = 0;
        mean = 0;
        for (i = 0; i < 5; i++) {
                printf("input data %d: ", i);
                scanf("%d", &data[i]);
        }
        for (i = 0; i < 5; i++) {
                print_bar(data[i]);
        }
        for (i = 0; i < 5; i++) {
                sum = sum+data[i];
        }
        printf("SUM = %d, MEAN = %d\n", sum, sum/5);
}

print_bar(n)
int n;
{
        int i;

        for (i = 0; i < n; i++) {
                 printf("*");
        }
        printf("\n");
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-5. forループとputchar()を使いAからZを表示させてみましょう。

[解答例]
main()
{
        int     i;

        for (i = 0; i < 26; i++) {
                putchar('A'+i);
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


26という数字は計算でも求めることができます。

main()
{
        int i;

        for (i = 0; i < 'Z'-'A'+1; i++) {
                putchar( 'A'+i );
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-6. 2-5と同じ方法でaからzを表示させてみましょう。

[解答例]
main()
{
        int     i;

        for (i = 0; i < 26; i++) {
                putchar('a'+i);
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-7. 2-5を文字とそのアスキーコード(10進数で)が表示されるように書き換えてみましょう。

[解答例]
main()
{
        int     i;

        for (i = 0; i < 26; i++) {
                printf("%d:%c\n", 'A'+i, 'A'+i);
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-8. 次のアスキーコード表を表示するプログラムをforループとprintf()で作ってみましょう。 printfで16進数を表示させるには%dの代わりに%xを使います。

10進  16進 文字10進  16進 文字10進  16進  文字
------------------------------------------------
 32   0x20      64   0x40    @  96   0x60    `
 33   0x21    !  65   0x41    A  97   0x61    a
 34   0x22    "  66   0x42    B  98   0x62    b
 35   0x23    #  67   0x43    C  99   0x63    c
 36   0x24    $  68   0x44    D 100   0x64    d
 37   0x25    %  69   0x45    E 101   0x65    e
 38   0x26    &  70   0x46    F 102   0x66    f
 39   0x27    '  71   0x47    G 103   0x67    g
 40   0x28    (  72   0x48    H 104   0x68    h
 41   0x29    )  73   0x49    I 105   0x69    i
 42   0x2a    *  74   0x4a    J 106   0x6a    j
 43   0x2b    +  75   0x4b    K 107   0x6b    k
 44   0x2c    ,  76   0x4c    L 108   0x6c    l
 45   0x2d    -  77   0x4d    M 109   0x6d    m
 46   0x2e    .  78   0x4e    N 110   0x6e    n
 47   0x2f    /  79   0x4f    O 111   0x6f    o
 48   0x30    0  80   0x50    P 112   0x70    p
 49   0x31    1  81   0x51    Q 113   0x71    q
 50   0x32    2  82   0x52    R 114   0x72    r
 51   0x33    3  83   0x53    S 115   0x73    s
 52   0x34    4  84   0x54    T 116   0x74    t
 53   0x35    5  85   0x55    U 117   0x75    u
 54   0x36    6  86   0x56    V 118   0x76    v
 55   0x37    7  87   0x57    W 119   0x77    w
 56   0x38    8  88   0x58    X 120   0x78    x
 57   0x39    9  89   0x59    Y 121   0x79    y
 58   0x3a    :  90   0x5a    Z 122   0x7a    z
 59   0x3b    ;  91   0x5b    [ 123   0x7b    {
 60   0x3c    <  92   0x5c    \ 124   0x7c    |
 61   0x3d    =  93   0x5d    ] 125   0x7d    }
 62   0x3e    >  94   0x5e    ^ 126   0x7e    ~
 63   0x3f    ?  95   0x5f    _ 127   0x7f    


[解答例]
main()
{
        int     i;

        printf("10進  16進 文字10進  16進 文字10進  16進  文字\n");
        printf("------------------------------------------------\n");
        for (i = 0; i < 32; i++) {
                printf(" %d   0x%x    %c", 32+i, 32+i, 32+i);
                printf("  %d   0x%x    %c", 64+i, 64+i, 64+i);
                if(96+i < 100)
                        putchar(' ');
                if(96+i == 127)
                        printf(" %d   0x%x    %c\n", 96+i, 96+i, ' ');
                else
                        printf(" %d   0x%x    %c\n", 96+i, 96+i, 96+i);
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


printfの機能で桁数を指定することもできます。

main()
{
        int     i;

        printf("10進  16進 文字10進  16進 文字10進  16進  文字\n");
        printf("------------------------------------------------\n");
        for (i = 0; i < 32; i++) {
                printf(" %d   0x%x    %c", 32+i, 32+i, 32+i);
                printf(" %3d   0x%x    %c", 64+i, 64+i, 64+i);
                if(96+i == 127)
                        printf(" %3d   0x%x    %c\n", 96+i, 96+i, ' ');
                else
                        printf(" %3d   0x%x    %c\n", 96+i, 96+i, 96+i);
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-9. scanf()で入力した文字列の長さを調べ5文字以下ならshort、それより長ければ longと表示するプログラムを作ってみましょう。

[解答例]
main()
{
        char str[80];

        scanf("%s", str);
        if (strlen(str) <= 5){
                printf("short\n");
        }
        else{
                printf("long\n");
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-10. 次のプログラムの合格点60をマクロ定義に変えてみましょう。 また、得点はscanf()で入力できるようにします。

[解答例]
#define BORDER_LINE     60

main()
{
        int tokuten;

        printf("INPUT : ");
        scanf("%d", &tokuten);
        if (tokuten >= BORDER_LINE) {
                printf("goukaku");
        }
        if (tokuten < BORDER_LINE) {
                printf("fugoukaku");
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-11. マクロは文字列や文字定数を置き換えることもできます。文字列をマクロで 置き換えてprintf()で表示してみましょう。

[解答例]
#define STRING  "Test string"

main()
{
        printf( STRING );
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-12. 文字定数をマクロで置き換えてputchar()で表示してみましょう。

[解答例]
#define CHARACTER1      'c'
#define CHARACTER2      'h'
#define CHARACTER3      'a'
#define CHARACTER4      'r'

main()
{
        putchar(CHARACTER1);
        putchar(CHARACTER2);
        putchar(CHARACTER3);
        putchar(CHARACTER4);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-13. カッコで囲んだ式(1+2)をマクロで置き換え、マクロ名を2倍にした結果を表示してみましょう。

[解答例]
#define TEST    (1+2)

main()
{
        printf("%d\n", TEST*2);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-14. カッコで囲まれていない式1+2をマクロで置き換え、マクロ名を2倍にした結果を表示してみましょう(2-13と結果がことなる理由を考えて見ましょう)。

[解答例]
#define TEST    1+2

main()
{
        printf("%d\n", TEST*2);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-15. グローバル変数を宣言して関数main()で代入した値が、他の関数から参照できることを確認してみましょう。

[解答例]
int g;

func()
{
        printf( "g = %d\n", g );
}

main()
{
        g = 10;
        func();
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-16. 2-15の呼び出された関数でもグローバル変数に代入し、関数main()で値が変化しているかを確認してみましょう。

[解答例]
int g;

func()
{
        printf( "func() : g = %d\n", g );
        g = 100;
}

main()
{
        g = 10;
        func();
        printf( "main() : g = %d\n", g );
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-17. 2-16でグローバル変数と同じ名前のローカル変数を宣言して、その影響を観察してみましょう。

[解答例]
int g;

func()
{
        int     g;

        printf( "func() : g = %d\n", g );
        g = 100;
}

main()
{
        g = 10;
        func();
        printf( "main() : g = %d\n", g );
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-18. 次のプログラムを参考にして直方体の3辺から体積と表面積を計算する関数を作ってみましょう。

[解答例]
int a, b;

func(x, y, z)
int x, y, z;
{
        a = x * y * z;
        b = x * y * 2 + x * z * 2 + y * z * 2;
}

main()
{
        func(10, 3, 4);
        printf("%d\n%d\n", a, b);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-19. 次のプログラムの変数sumをグローバル変数に書き換えてみましょう。 また、sumの最初の値に100を代入しておきます(結果は110になります)。

[解答例]
int sum;

add(n)
int n;
{
        sum += n;
        return (sum);
}

main()
{
        sum = 100;
        add(1);
        add(2);
        add(3);
        printf("%d\n", add(4));
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-20. while文を使って文字列" Study "を20回表示してみましょう。

[解答例]
main()
{
        int i;

        i = 0;
        while (i < 20) {
                printf("Study ");
                i++;
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-21. while文を使って 1, 2, 3, ・・・, 20 と表示してみましょう。

[解答例]
main()
{
        int i;

        i = 0;
        while (i < 20) {
                printf("%d ", i+1);
                i++;
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


次のように書くこともできます。

main()
{
        int i;

        i = 1;
        while (i <= 20) {
                printf("%d ", i);
                i++;
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-22. while文を使って 2, 4, 6, ・・・, 40 と表示してみましょう。

[解答例]
main()
{
        int i;

        i = 0;
        while (i < 20) {
                printf("%d ", (i+1)*2);
                i++;
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


main()
{
        int i;

        i = 1;
        while (i <= 20) {
                printf("%d ", i*2);
                i++;
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-23. do...while文を使って2-20から2-22を書き換えてみましょう。

[解答例]
main()
{
        int i;

        i = 0;
        do{
                printf("Study ");
                i++;
        }while (i < 20);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


main()
{
        int i;

        i = 0;
        do{
                printf("%d ", i+1);
                i++;
        }while (i < 20);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


main()
{
        int i;

        i = 0;
        do{
                printf("%d ", (i+1)*2);
                i++;
        }while (i < 20);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-24. for、if、break文を使って2-20から2-22を書き換えてみましょう。 for文は無限ループ(for(;;))で使用します。

[解答例]
main()
{
        int i;

        i = 0;
        for (;;) {
                printf("Study ");
                i++;
                if(i >= 20){
                        break;
                }
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


main()
{
        int i;

        i = 0;
        for (;;) {
                printf("%d ", i+1);
                i++;
                if(i >= 20){
                        break;
                }
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


main()
{
        int i;

        i = 0;
        for (;;) {
                printf("%d ", (i+1)*2);
                i++;
                if(i >= 20){
                        break;
                }
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...


2-25. 次のプログラムをoneからtenまで表示できるように書き換えてみましょう。

[解答例]
main()
{
        int i;

        printf("INPUT:");
        scanf("%d", &i);
        switch (i) {
        case 1:
                printf("one");
                break;
        case 2:
                printf("two");
                break;
        case 3:
                printf("three");
                break;
        case 4:
                printf("four");
                break;
        case 5:
                printf("five");
                break;
        case 6:
                printf("six");
                break;
        case 7:
                printf("seven");
                break;
        case 8:
                printf("eight");
                break;
        case 9:
                printf("nine");
                break;
        case 10:
                printf("ten");
                break;
        default:
                printf("difficult");
                break;
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...