繰り返し処理 - while -

課題1

今日は1円、明日は2円、明後日は4円というように翌日には2倍の金額を 貯金して合計1万円を超える日を、下記の実行結果のように 表示させたい。下記のプログラムをwhile1.cとして作成し、 正しく実行されることを確認せよ。

#include <stdio.h>

int main(void){

    int i, j, sum;

    i = 1;
    j = 1;
    sum = 0;

    while (sum < 10000){
       sum += j;
       printf("%2d日目までの合計金額  %8d円\n", i, sum);
       i++;
       j *= 2;
    }

    return 0;
}
% ./a.out
 1日目までの合計金額         1円
 2日目までの合計金額         3円
 3日目までの合計金額         7円
 4日目までの合計金額        15円
 5日目までの合計金額        31円
 6日目までの合計金額        63円
 7日目までの合計金額       127円
 8日目までの合計金額       255円
 9日目までの合計金額       511円
10日目までの合計金額      1023円
11日目までの合計金額      2047円
12日目までの合計金額      4095円
13日目までの合計金額      8191円
14日目までの合計金額     16383円

課題2

任意の個数の数字(小数を含む)を入力し、 その合計と平均を計算させるプログラムが示されて いる。プログラムをwhile2.cとして書き、 正しく実行されることを確認せよ。入力を中止するには、Ctrl-d(Ctrlボタンを 押しながらdボタンを押す)で行うものとする。

#include <stdio.h>

int main(void){

    int n;
    double dat, sum, mean;

    sum=0.0;
    n=0;
    while (scanf("%lf", &dat)!=EOF){
        sum += dat;
        n++;
    }
    printf("合計 = %9.4f\n", sum);

    mean = sum/n;
    printf("平均 = %9.4f\n", mean);

    return 0;
}
(実行例)
% ./a.out
1
2.1
3.2
0.8
5
^d  ← Ctrl-dで入力中止
合計 =   12.1000
平均 =    2.4200

課題3

下記のプログラムをwhile3.c として書き、様々な数値で試して、課題2の実行結果との違いを確認せよ。

#include <stdio.h>

int main(void){

    int n, sum, mean;
    double dat;

    sum=0;
    n=0;
    while (scanf("%lf", &dat)!=EOF){
        sum += dat;
        n++;
    }
    printf("合計 = %9.4f\n", sum);

    mean = sum/n;
    printf("平均 = %4d\n", mean);

    return 0;
}
(実行例)
% ./a.out
1
2.1
3.2
0.8
5
^d
合計 = ?????????   ← わざと?マークで隠してある
平均 = ?????????

課題4

あらかじめ人数が分かっている学生集団において、英語、数学、国語の各科目ごとの 点数を入力した後に、各々の平均点を知りたい。while文を使用して、下記 の実行結果を参考にしながら、要求を満たすプログラムをwhile4.cとして作成し、正 しく実行することを確認せよ。 ただし、平均点は小数とし、3つの平均点は小数点が揃うように表示させよ。

(実行例:赤字が入力された数字)
% ./a.out
学生の人数?
3

学生1の英語: 50
学生1の数学: 70
学生1の国語: 60

学生2の英語: 40
学生2の数学: 20
学生2の国語: 30

学生3の英語: 100
学生3の数学: 100
学生3の国語: 90

英語の平均点: 63.333
数学の平均点: 63.333
国語の平均点: 60.000

課題5

年齢を尋ねるプログラムを作りたい。if文を用いて、100歳以上の入力には下記のような 特別のメッセージを表示し、また負の数字に対してはエラーを表示させたい。 主旨を満足するプログラムをwhile5.cとして書き、 正しく処理、表示されることを確認せよ。

(実行結果)
% ./a.out
あなたの年齢を入力してください 30
あなたの年齢は30才ですね。
%
% ./a.out
あなたの年齢を入力してください105
あなたの年齢は105才ですね。長生きしていますね。
%
% ./a.out
あなたの年齢を入力してください-10
正しく入力してください
%

課題6

上記のwhile5.cを元に、入力エラーに対しては、正しく入力されるまで入力を 求めるプログラムを作成したい。 while文を用いて、主旨を満足するプログラムをwhile6.cとして書き、 正しく処理、表示されることを確認せよ。

(実行結果)
% ./a.out
あなたの年齢を入力してくださ 30
あなたの年齢は30才ですね。
%
% ./a.out
あなたの年齢を入力してください 105
あなたの年齢は105才ですね。長生きしていますね。
%
% ./a.out
あなたの年齢を入力してください -10
正しく入力してください
あなたの年齢を入力してください -3
正しく入力してください
あなたの年齢を入力してください 15
あなたの年齢は15才ですね。
%

須ア純一 京都大学大学院 工学研究科社会基盤工学専攻 空間情報学講座
[C言語 演習問題トップページ] [須ア純一ホームページ]