Open60

新・明解C言語 入門編(2014年初版発行)演習解答

ユ10ユ10

■演習 1-1

15から37を引いた値を計算して「15から37を引いた値は-22です。」と表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    printf("15から37を引いた値は%dです。\n", 15 - 37);
    
    return 0;
}
ユ10ユ10

■演習 1-2

右に示す表示を行うプログラムを作成せよ。ただし、printf 関数の呼出しは、プログラム中1回限りとする。

#include <stdio.h>

int main(void)
{
    printf("天\n地\n人\n");
    
    return 0;
}
ユ10ユ10

■演習 1-3

右に示す表示を行うプログラムを作成せよ。ただし、printf 関数の呼出しは、プログラム中1回限りとする。

#include <stdio.h>

int main(void)
{
    printf("もしもし。\n\nこんにちは。\nそれでは。\n");
    
    return 0;
}
ユ10ユ10

■演習 1-4

int型変数の宣言に実数値の初期化子(たとえば 3.14 や5.7 など)を与えるとどうなるだろうか。プログラムを作成して確認せよ。

#include <stdio.h>

int main(void)
{
    int number1 = 3.14;
    int number2 = 5.7;

    printf("%d\n", number1);
    printf("%d\n", number2);
    
    return 0;
}
ユ10ユ10

■演習 1-5

「右に示すように、読み込んだ整数値に12を加えた値を表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number;

    printf("整数を入力してください:");
    scanf("%d", &number);

    printf("%dに12を加えると%dです。\n", number, number + 12);

    return 0;
}
ユ10ユ10

■演習 1-6

「右に示すように、読み込んだ整数値から6を減じた値を表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number;

    printf("整数を入力してください:");
    scanf("%d", &number);

    printf("%dに6を減じると%dです。\n", number, number - 6);

    return 0;
}
ユ10ユ10

■演習 1-7

『天』『地』『人」と表示するプログラムを作成せよ。表示にはprintf関数ではなくputs 関数を利用すること。

#include <stdio.h>

int main(void)
{
    puts("天");
    puts("地");
    puts("人");

    return 0;
}
ユ10ユ10

■演習 1-8

「右に示すように、読み込んだ二つの整数値の積を表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number1;
    int number2;

    puts("二つの整数を入力してください。");

    printf("整数1:");
    scanf("%d", &number1);

    printf("整数2:");
    scanf("%d", &number2);

    printf("それらの積は%dです。\n", number1 * number2);

    return 0;
}
ユ10ユ10

■演習 1-9

右に示すように、読み込んだ三つの整数値の和を表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number1;
    int number2;
    int number3;

    puts("三つの整数を入力してください。");

    printf("整数1:");
    scanf("%d", &number1);

    printf("整数2:");
    scanf("%d", &number2);

    printf("整数3:");
    scanf("%d", &number3);

    printf("それらの和は%dです。\n", number1 + number2 + number3);

    return 0;
}
ユ10ユ10

■演習 2-1

右に示すように、二つの整数値を読み込んで、前者の値が後者の何%であるかを表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int x;
    int y;

    puts("二つの整数を入力してください。");

    printf("整数x:");
    scanf("%d", &x);

    printf("整数y:");
    scanf("%d", &y);

    printf("xの値はyの%d%%です。\n", (x * 100) / y);

    return 0;
}
ユ10ユ10

■演習 2-2

右に示すように、二つの整数値を読み込んで、その和と積を表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int a;
    int b;

    puts("二つの整数を入力してください。");

    printf("整数a:");
    scanf("%d", &a);

    printf("整数b:");
    scanf("%d", &b);

    printf("それらの和は%dで積は%dです。\n", a + b, a * b);

    return 0;
}
ユ10ユ10

■演習 2-3

「右に示すように、読み込んだ実数値をそのまま表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    double real;

    puts("実数を入力してください。");

    printf("実数:");
    scanf("%lf", &real);

    printf("あなたは%fと入力しましたね。\n", real);

    return 0;
}
ユ10ユ10

■演習 2-4

整数定数、浮動小数点定数、int 型の変数、double型の変数を、掛けたり割ったりするなど、いろいろな演算を行うプログラムを作成し、本文に示した規則を確認せよ。

#include <stdio.h>

int main(void)
{
    int number1 = 5;
    int number2 = 2;
    double real1 = 5.0;
    double real2 = 2.0;

    printf("int * int = %d\n", number1 * number2);
    printf("int / int = %d\n", number1 / number2);
    printf("double * double = %f\n", real1 * real2);
    printf("double / double = %f\n", real1 / real2);
    printf("int * double = %f\n", number1 * real1);
    printf("int / double = %f\n", number1 / real1);
    printf("double * int = %f\n", real2 * number2);
    printf("double / int = %f\n", real2 / number2);

    return 0;
}
ユ10ユ10

■演習 2-5

「右に示すように、二つの整数値を読み込んで、前者の値が後者の何%であるかを実数で表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int a;
    int b;

    puts("二つの整数を入力してください。");

    printf("整数a:");
    scanf("%d", &a);

    printf("整数b:");
    scanf("%d", &b);

    //パターン1:明示的な型変換
    printf("aの値はbの%f%%です。\n", (double)(a * 100) / b);
    //パターン2:暗黙の型変換
    printf("aの値はbの%f%%です。\n", (a * 100.0) / b);

    return 0;
}
ユ10ユ10

■演習 2-6

「右に示すように、身長を整数値として読み込んで、標準体重を実数で表示するプログラムを作成せよ。標準体重は(身長 - 100) * 0.9 によって求め、その小数点以下を1桁だけ表示すること。

#include <stdio.h>

int main(void)
{
    int height;

    printf("身長を入力してください:");
    scanf("%d", &height);

    printf("標準体重は%.1fです。", (height  - 100) * 0.9);

    return 0;
}
ユ10ユ10

■演習 3-1

右に示すように、二つの整数値を読み込んで、後者が前者の約数であれば「BはAの約数です。」と表示し、そうでなければ「BはAの約数ではありません。」と表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int a;
    int b;

    puts("二つの整数を入力してください。");

    printf("整数A:");
    scanf("%d", &a);

    printf("整数B:");
    scanf("%d", &b);

    if(a % b){
        printf("BはAの約数ではありません。\n");
    }else{
        printf("BはAの約数です。\n");
    }

    return 0;
}
ユ10ユ10

■演習 3-2

List 3-9 の最後の else を、else if (no < 0) に変更するとどうなるかを検討せよ。

#include <stdio.h>

int main(void)
{
    int no;

    printf("整数を入力してください。");
    scanf("%d", &no);

    if(no == 0){
        puts("その数は0です。");
    }else if(no > 0){
        puts("その数は正です。");
    }else if(no < 0){
        puts("その数は負です。");
    }

    return 0;
}
ユ10ユ10

■演習 3-3

「右に示すように、整数値を読み込んで、その絶対値を表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number;

    printf("整数を入力してください:");
    scanf("%d", &number);

    if(number < 0){
        printf("%d\n", -number);
    }else{
        printf("%d\n", number);
    }

    return 0;
}
ユ10ユ10

■演習 3-4

「右に示すように、二つの整数値を読み込んで、それらの値が等しければ『AとBは等しいです。」と、Aのほうが大きければ「AはBより大きいです。』と、Bのほうが大きければ「AはBより小さいです。」と表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int a;
    int b;

    puts("二つの整数を入力してください。");

    printf("整数A:");
    scanf("%d", &a);

    printf("整数B:");
    scanf("%d", &b);

    if(a == b){
        printf("AとBは等しいです。\n");
    }else if(a > b){
        printf("AはBより大きいです。\n");
    }else{
        printf("AはBより小さいです。\n");
    }

    return 0;
}
ユ10ユ10

■演習 3-5

等価演算子や関係演算子が、1あるいは0の値を生成することを確認するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int a;
    int b;

    puts("二つの整数を入力してください。");

    printf("整数a:");
    scanf("%d", &a);

    printf("整数b:");
    scanf("%d", &b);

    if(a == b){
        printf("a == b : 1\n");
    }else{
        printf("a == b : 0\n");
    }
    
    if(a > b){
        printf("a > b  : 1\n");
    }else{
        printf("a > b  : 0\n");
    }
    
    if(a < b){
        printf("a < b  : 1\n");
    }else{
        printf("a < b  : 0\n");
    }
    
    if(a >= b){
        printf("a >= b : 1\n");
    }else{
        printf("a >= b : 0\n");
    }

    if(a <= b){
        printf("a <= b : 1\n");
    }else{
        printf("a <= b : 0\n");
    }

    return 0;
}
ユ10ユ10

■演習 3-6

三つの整数値を読み込んで、その最小値を求めて表示するプログラムを作成せよ。 ※if文を利用すること。

#include <stdio.h>

int main(void)
{
    int number1;
    int number2;
    int number3;
    int min;

    puts("三つの整数を入力してください。");

    printf("整数1:");
    scanf("%d", &number1);

    printf("整数2:");
    scanf("%d", &number2);

    printf("整数3:");
    scanf("%d", &number3);

    min = number1;

    if(min > number2){
        min = number2;
    }

    if(min > number3){
        min = number3;
    }

    printf("最小値は%dです。\n", min);

    return 0;
}
ユ10ユ10

■演習 3-7

四つの整数値を読み込んで、その最大値を求めて表示するプログラムを作成せよ。 ※if文を利用すること。

#include <stdio.h>

int main(void)
{
    int number1;
    int number2;
    int number3;
    int number4;
    int max;

    puts("四つの整数を入力してください。");

    printf("整数1:");
    scanf("%d", &number1);

    printf("整数2:");
    scanf("%d", &number2);

    printf("整数3:");
    scanf("%d", &number3);

    printf("整数4:");
    scanf("%d", &number4);

    max = number1;

    if(max < number2){
        max = number2;
    }

    if(max < number3){
        max = number3;
    }

    if(max < number4){
        max = number4;
    }

    printf("最大値は%dです。\n", max);

    return 0;
}
ユ10ユ10

■演習 3-8

List 3-15のプログラムを、条件演算子でなくif文を用いて書きかえよ。

#include <stdio.h>

int main(void)
{
    int number1;
    int number2;

    puts("二つの整数を入力してください。");

    printf("整数1:");
    scanf("%d", &number1);

    printf("整数2:");
    scanf("%d", &number2);

    if(number1 > number2){
        printf("それらの差は%dです。\n", number1 - number2);
    }else if(number1 < number2){
        printf("それらの差は%dです。\n", number2 - number1);
    }

    return 0;
}
ユ10ユ10

■演習 3-9

演習 3-6 のプログラムを、if文でなく条件演算子を用いて書きかえよ。

#include <stdio.h>

int main(void)
{
    int number1;
    int number2;
    int number3;
    int min;

    puts("三つの整数を入力してください。");

    printf("整数1:");
    scanf("%d", &number1);

    printf("整数2:");
    scanf("%d", &number2);

    printf("整数3:");
    scanf("%d", &number3);

    min = (number1 < number2) ? number1 : number2;

    min = (min < number3) ? min : number3;

    printf("最小値は%dです。\n", min);

    return 0;
}
ユ10ユ10

■演習 3-10

「右に示すように、三つの整数値を読み込んで、それらの値がすべて等しければ「三つの値は等しいです。」と、どれか二つの値が等しければ「二つの値が等しいです。」と、そうでなければ「三つの値は異なります。』と表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number1;
    int number2;
    int number3;
    int min;

    puts("三つの整数を入力してください。");

    printf("整数1:");
    scanf("%d", &number1);

    printf("整数2:");
    scanf("%d", &number2);

    printf("整数3:");
    scanf("%d", &number3);

    if(number1 == number2 && number2 == number3){
        printf("三つの値は等しいです。\n");        
    }else if(number1 == number2 || number1 == number3 || number2 == number3){
        printf("二つの値は等しいです。\n");
    }else{
        printf("三つの値は異なります。\n");
    }

    return 0;
}
ユ10ユ10

■演習 3-11

右に示すように、二つの整数値を読み込んで、それらの値の差が10以下であれば『それらの差は10以下です。」と、そうでなければ「それらの差は11以上です。」と表示するプログラムを作成せよ。 論理OR演算子を利用すること。

#include <stdio.h>

int main(void)
{
    int a;
    int b;

    puts("二つの整数を入力してください。");

    printf("整数1:");
    scanf("%d", &a);

    printf("整数2:");
    scanf("%d", &b);

    if(a > b && (a - b) <= 10 || a < b && (b - a) <= 10){
        printf("それらの差は10以下です。\n");
    }else if(a > b && (a - b) >= 11 || a < b && (b - a) >= 11){
        printf("それらの差は11以上です。\n");
    }

    return 0;
}
ユ10ユ10

■演習 3-12

List 3-4(p.45)のプログラムを、if文でなくswitch文を用いて書きかえよ。

#include <stdio.h>

int main(void)
{
    int number;

    printf("整数を入力してください:");
    scanf("%d", &number);

    switch (number % 2){
    case 0:
    printf("その数は偶数です。\n");
    break;

    case 1:
    printf("その数は奇数です。\n");
    break;

    }

    return 0;
}
ユ10ユ10

■演習 3-13

List 3-17 (p.61)のプログラムを、if 文でなくswitch文を用いて書きかえよ。

#include <stdio.h>

int main(void)
{
    int month;

    printf("何月ですか:");
    scanf("%d", &month);

    switch (month)
    {
    case 3:
    case 4:
    case 5: 
    printf("%d月は春です。\n", month);
    break;

    case 6:
    case 7:
    case 8: 
    printf("%d月は夏です。\n", month);
    break;

    case 9:
    case 10:
    case 11: 
    printf("%d月は秋です。\n", month);
    break;

    case 12:
    case 1:
    case 2: 
    printf("%d月は冬です。\n", month);
    break;
    
    default:
    printf("%d月はありませんよ!!\a\n", month);
    break;
    }

    return 0;
}
ユ10ユ10

■演習 4-1

読み込んだ整数値の符号を判定するList3-9 (p.50)を、入力・表示を好きなだけ繰り返せるよ うに変更したプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number;
    int retry;

    do{

        printf("整数を入力してください:");
        scanf("%d", &number);

        if(number == 0){
            puts("その数は0です。\n");
        }else if(number > 0){
            puts("その数は正です。\n");
        }else{
            puts("その数は負です。\n");
        }

        printf("もう一回?<Yes:1/No:0>");
        scanf("%d", &retry);
        
    }while(retry);

    return 0;
}
ユ10ユ10

■演習 4-2

右に示すように、二つの整数値を読み込んで、小さいほうの数以上で大きいほうの数以下の全整数を加えた値を表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int a;
    int b;
    int max;
    int min;
    int sum = 0;
    int count = 0;

    puts("二つの整数を入力してください。");

    printf("整数a:");
    scanf("%d", &a);

    printf("整数b:");
    scanf("%d", &b);

    if(a > b){
        max = a;
        min = b;
    }else{
        max = b;
        min = a;
    }

    do{
        
        sum = sum + min;
        min = min + 1;
        count = count + 1;

    }while (min <= max);

    printf("%d以上%d以下の全整数の和は%dです。\n", min - count, max, sum);
    
    return 0;
}


ユ10ユ10

■演習 4-3

負の値を読み込んだときに改行文字を出力しないように、List 4-5 のプログラムを書きかえよ。

#include <stdio.h>

int main(void)
{
    int number;

    printf("正の整数を入力してください:");
    scanf("%d", &number);

    if(number >= 0){
        while(number >= 0);
        printf("%d", number);
        number--;
        }
        printf("\n");

    }
    return 0;
}
ユ10ユ10

■演習 4-4

List 4-6 のプログラムを以下のように書きかえたプログラムを作成せよ。
・0のではなく1までカウントダウンする。
・入力された値が0以下であるときには、改行を行わない。

#include <stdio.h>

int main(void)
{
    int number;

    printf("正の整数を入力してください:");
    scanf("%d", &number);

    if(number >= 0){
        while (number > 0){
        printf("%d ", number--);
        }
        printf("\n");
    }
    
    return 0;
}
ユ10ユ10

■演習 4-5

List 4-7 のプログラムを以下のように書きかえたプログラムを作成せよ。
・0からではなく1からのカウントアップを行う。
・入力された値が0以下であるときには、改行を行わない。

#include <stdio.h>

int main(void)
{
    int number;
    int i;

    printf("正の整数を入力してください:");
    scanf("%d", &number);

    i = 1;

    if(0 <= number){
        while(i < number){
        printf("%d ", i++);
        }
        printf("\n");
    }
    
    
    return 0;
}
ユ10ユ10

■演習 4-6

右に示すように、読み込まれた整数値以下である正の偶数を順に表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number;
    int i = 2;

    printf("正の整数を入力してください:");
    scanf("%d", &number);

    while (i <= number){
        printf("%d ", i);
        i += 2;
    }

    puts("");

    return 0;
}
ユ10ユ10

■演習 4-7

「右に示すように、読み込まれた整数値以下である正の2のべき乗の数を順に表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number;
    int i = 2;

    printf("正の整数を入力してください:");
    scanf("%d", &number);

    while (i <= number){
        printf("%d ", i);
        i *= 2;
    }

    puts("");

    return 0;
}
ユ10ユ10

■演習 4-8

読み込んだ値が1未満であれば改行文字を出力しないようにList 4-8を書きかえたプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number;

    printf("正の整数を入力してください:");
    scanf("%d", &number);

    if(number >= 0){
        while(number-- > 0){
        putchar('*');
        }
        putchar('\n');
    }
    return 0;
}
ユ10ユ10

■演習 4-9

読み込んだ値の個数だけ+と-を交互に表示するプログラムを作成せよ。なお、0以下の整数が入力された場合は、何も表示しないこと。

#include <stdio.h>

int main(void)
{
    int number;

    printf("正の整数:");
    scanf("%d", &number);

    while (number > 0){
        putchar('+');
        --number;
        if(number > 0){
            putchar('-');
        }
        --number;
    }
    putchar('\n');

    return 0;
}
ユ10ユ10

■演習 4-10

読み込んだ整数値の個数だけ*を縦に連続して表示するプログラムを作成せよ。なお、0以下の整数が入力された場合は、何も表示しないこと。

#include <stdio.h>

int main(void)
{
    int number;

    printf("正の整数:");
    scanf("%d", &number);

    while (number > 0){
        putchar('*');
        putchar('\n');
        --number;    
    }

    return 0;
}
ユ10ユ10

■演習 4-11

List 4-10のプログラムを、結果の出力時に読み込んだ値も表示するように書きかえよ。

#include <stdio.h>

int main(void)
{
    int number;

    do{
        printf("正の整数を入力してください:");
        scanf("%d", &number);
        if(number <= 0){
            puts("\a正でない数を入力しないでください。");
        }
    }while(number <= 0);
    
    printf("%dを逆から", number);

    while (number > 0){
        printf("%d", number % 10);
        number /= 10;
    }
    
    puts("です。");

    return 0;
}
ユ10ユ10

■演習 4-12

正の整数値を読み込んで、その桁数を表示するプログラムを作成せよ。※ヒント:List 4-10 のプログラムの while文の繰返しの回数は、noの桁数と一致する。

#include <stdio.h>

int main(void)
{
    int number;
    int count = 0;

    printf("正の整数を入力してください:");
    scanf("%d", &number);

    printf("%dは", number);

    while (number > 0){
        number /= 10;
        count++;
    }
    
    printf("%d桁です。\n", count);

    return 0;
}
ユ10ユ10

■演習 4-13

1からnまでの和を求めるプログラムを作成せよ。nの値はキーボードから読み込むこと。

#include <stdio.h>

int main(void)
{
    int number;
    int sum = 0;

    printf("nの値:");
    scanf("%d", &number);

    for(int i = 0; i <= number; i++){
        sum += i; 
    }

    printf("1から%dまでの和は%d\n", number, sum);

    return 0;
}
ユ10ユ10

■演習 4-14

「右に示すように、1234567890を繰り返し表示するプログラムを作成せよ。読み込まれた整数値の個数だけ数字を表示すること。

#include <stdio.h>

int main(void)
{
    int number;
    int count = 0;

    printf("正の整数を入力してください:");
    scanf("%d", &number);

    for(int i = 0; count <= number; i++){
        if(i == 10){
            i = 0;
        }
        printf("%d", i);
        count++;
    }
    putchar('\n');

    return 0;
}
ユ10ユ10

■演習 4-15

右に示すように、身長と標準体重(p.37)の対応表を表示するプログラムを作成せよ。なお、表示する身長の範囲(開始値、終了値、増分)は整数値として読み込んで、標準体重は小数部を2桁表示すること。

#include <stdio.h>

int main(void)
{
    int min;
    int max;
    int per;

    printf("何㎝から:");
    scanf("%d", &min);

    printf("何㎝まで:");
    scanf("%d", &max);

    printf("何㎝ごと:");
    scanf("%d", &per);

    for( ; min <= max; min += per){
        printf("%dcm    %.2fkg\n", min, (min - 100) * 0.9);
    }

    return 0;
}
ユ10ユ10

■演習 4-16

整数値を読み込んで、その整数以下の奇数を表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number;

    printf("整数値:");
    scanf("%d", &number);

    for(int i = 1; i <= number; i += 2){
        printf("%d ", i);
    }

    putchar('\n');

    return 0;
}
ユ10ユ10

■演習 4-17

「右に示すように、1からnまでの整数値の2乗値を表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number;

    printf("nの値:");
    scanf("%d", &number);

    for(int i = 1; i <= number; i++){
        printf("%dの2乗は%d \n", i, i * i);
    }

    putchar('\n');

    return 0;
}
ユ10ユ10

■演習 4-18

整数値を読み込んで、その個数だけを表示するプログラムを作成せよ。ただし、5個表示するごとに改行すること。

#include <stdio.h>

int main(void)
{
    int number;

    printf("何個*を表示しますか:");
    scanf("%d", &number);

    for(int i = 1; i <= number; i++){
        if(i % 5 == 0){
            putchar('*');
            putchar('\n');    
        }else{
            putchar('*');
        }
    }
    putchar('\n');

    return 0;
}
ユ10ユ10

■演習 4-19

読み込んだ整数値の全約数を表示するList 4-15を書きかえて、約数の表示が終了した後に、約数の個数を表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number;
    int count = 0;

    printf("整数値:");
    scanf("%d", &number);

    for(int i = 1; i <= number; i++){
        if(number % i == 0){
            printf("%d\n", i);
            count++;
        }
    }
    printf("約数は%d個です。", count);
    putchar('\n');

    return 0;
}
ユ10ユ10

■演習 4-20

右に示すように、縦横のタイトルが付いた九九の表を表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    printf("   |");

    for(int i = 1; i <= 9; i++){
        printf("%3d", i);
    }
    putchar('\n');

    printf("---+---------------------------\n");

    for(int i = 1; i <= 9; i++){
        printf(" %d |", i);
        for(int j = 1; j <= 9; j++){
            printf("%3d", i * j);
        }
        putchar('\n');
    }

    return 0;
}
ユ10ユ10

■演習4-21

「右に示すように、読み込んだ整数を辺の長さとしてもつ正方形を表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int number;

    puts("正方形を作ります。");

    printf("何段ですか");
    scanf("%d", &number);

    for(int i = 1; i <= number; i++){
        for(int j = 1; j <= number; j++){
            putchar('*');
        }
        putchar('\n');
    }

    return 0;
}
ユ10ユ10

■演習 4-22

List 4-17 (p.98)のプログラムを書きかえて、横長の長方形を表示するプログラムを作成せよ。 ※二つの辺の長さを読み込んで、小さいほうを行数として、大きいほうを列数とすること。

#include <stdio.h>

int main(void)
{
    int height;
    int width;
    int line;
    int column;

    puts("長方形を作ります。");

    printf("高さ:");
    scanf("%d", &height);

    printf("横幅:");
    scanf("%d", &width);

    if(height > width){
        column = height;
        line = width;
    }else if(height < width){
        column = width;
        line = height;
    }

    for(int i = 1; i <= column; i++){
        for(int j = 1; j <= line; j++){
            putchar('*');
        }
        putchar('\n');
    }

    return 0;
}
ユ10ユ10

■演習 4-23-1

List 4-18 および List 4-19(いずれもp.99)を書きかえて、左上側および右上側が直角となる直 角二等辺三角形を表示するプログラムを作成せよ(それぞれ個別のプログラムとして作成すること)。

#include <stdio.h>

int main(void)
{
    int length;

    puts("左上直角二等辺三角形を作ります。");

    printf("短辺:");
    scanf("%d", &length);

    for(int i = 0; i < length; i++){
        for(int j = 0; j < (length - i); j++){
            putchar('*');
        }
        putchar('\n');
    }

    return 0;
}
ユ10ユ10

■演習 4-23-2

List 4-18 および List 4-19(いずれもp.99)を書きかえて、左上側および右上側が直角となる直 角二等辺三角形を表示するプログラムを作成せよ(それぞれ個別のプログラムとして作成すること)。

#include <stdio.h>

int main(void)
{
    int length;

    puts("右上直角二等辺三角形を作ります。");

    printf("短辺:");
    scanf("%d", &length);

    for(int i = 0; i < length; i++){
        for(int j = 0; j < i; j++){
            putchar(' ');
        }

        for(int j = 0; j < (length - i); j++){
            putchar('*');
        }

        putchar('\n');
    }

    return 0;
}
ユ10ユ10

■演習 4-24

右に示すように、読み込んだ整数の段数をもつピラミッドを表示 「ピラミッドを作ります。 するプログラムを作成せよ。
ヒント:第i行目には (1 - 1) 2 +1個の'*'記号を表示することになる。

#include <stdio.h>

int main(void)
{
    int number;

    printf("何段ですか:");
    scanf("%d", &number);

    for(int i = 1; i <= number; i++){
        for(int j = 1; j <= (number - i); j++){
            putchar(' ');
        }

        for(int j = 1; j <= (i - 1) * 2 + 1; j++){
            putchar('*');
        }

        for(int j = 1; j <= (number - i); j++){
            putchar(' ');
        }
        putchar('\n');
    }

    return 0;
}
ユ10ユ10

■演習 4-25

右に示すように、読み込んだ整数の段数をもつ下向き数字ピラミッドを表示するプログラムを作成せよ。第i行目にはi%10によって得られる数字を表示すること。

#include <stdio.h>

int main(void)
{
    int number;

    puts("下向き数字ピラミッドを作ります。");

    printf("何段ですか:");
    scanf("%d", &number);

    for(int i = 1; i <= number; i++){
        for(int j = 1; j <= i; j++){
            putchar(' ');
        }

        for(int j = 1; j <= (number - i) * 2 + 1; j++){
            printf("%d", i % 10);
        }

        for(int j = 1; j <= i; j++){
            putchar(' ');
        }
        putchar('\n');
    }

    return 0;
}
ユ10ユ10

■演習 5-1

List 5-3を書きかえて、先頭から順に 0, 1,2,3,4を代入するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int array[5];

    for(int i = 0; i < 5; i++){
        array[i] = i;
    }

    for(int i = 0; i < 5; i++){
        printf("array[%d] = %d\n", i, array[i]);
    }
    return 0;
}
ユ10ユ10

■演習 5-2

List 5-3を書きかえて、先頭から順に5, 4, 3, 2,1を代入するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int array[5];

    for(int i = 0; i < 5; i++){
        array[i] = (5 - i);
    }

    for(int i = 0; i < 5; i++){
        printf("array[%d] = %d\n", i, array[i]);
    }

    return 0;
}
ユ10ユ10

■演習 5-3

List 5-5を書きかえて、先頭から順に5, 4,3, 2,1で初期化するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
    int array[5] = {5, 4, 3, 2, 1};

    for(int i = 0; i < 5; i++){
        printf("v[%d] = %d\n", i, array[i]);
    }

    return 0;
}
ユ10ユ10

■演習 5-4

List 5-6を書きかえて、配列aの要素の並びを逆順にしたものをbにコピーするプログラムを作成 せよ。

#include <stdio.h>

int main(void)
{
    int a[5] = {17, 23, 36};
    int b[5];

    for(int i = 0; i < 5; i++){
        b[i] = a[4 - i];
    }

    puts("  a    b");
    puts("--------");

    for(int i = 0; i < 5; i++){
        printf("%4d%4d\n", a[i], b[i]);
    }

    return 0;
}
ユ10ユ10

■演習 5-5

List 5-8(p.117)の配列の要素数をオブジェクト形式マクロで定義するように変更したプログラ ムを作成せよ。要素の交換を行う回数に関する規則性を見つける必要がある。

#include <stdio.h>

#define NUMBER 7

int main(void)
{
    int array[NUMBER];

    for(int i = 0; i < NUMBER; i++){
        printf("array[%d]:", i);
        scanf("%d", &array[i]);
    }

    for(int i = 0; i < NUMBER / 2; i++){
        int temp = array[i];
        array[i] = array[6 - i];
        array[6 - i] = temp;
    }

    puts("反転しました。");
    for(int i = 0; i < NUMBER; i++){
        printf("array[%d] = %d\n", i, array[i]);
    }

    return 0;
}
ユ10ユ10

■演習 5-6

変数aがdouble 型で、変数bがint 型であるとする。以下の代入によって、それぞれの変数の値 はどうなるかを説明せよ。
a = b = 1.5;

代入演算子=による代入は右側から行われるため、まず変数bに1.5が代入される。しかし、変数bはint型であるため小数点以下が切り捨てられ、変数bには1が代入される。次に変数aに変数bの値1が代入されるが、変数aはdouble型であるため1.000000となる。