第2回 プログラミング入門 演習

【演習の注意事項】を良く読んで解答してください
【演習室1〜6以外で課題を解く場合の注意】も参考にしてください

Cプログラミングの初歩
 --( はじめてのCプログラミング)---
(その1)

【主な内容】

プログラムの動作を予測したり、実際にプログラムを作成し実行してもらいます。

演習課題

以下の例題と、3つのレベル (初級レベル、中級レベル、上級レベル) の全ての課題に回答しなさい。各課題毎にファイルを作成しなさい。

今回の課題はテキスト(文書)ファイルで提出するものと C言語のプログラムファイルで提出するものがあります。 前者は ".txt"、後者は ".c" という拡張子をつけて下さい。 各課題にはファイル名が指定してあるので、その指示にしたがって下さい。

なお、実行例やコマンドなどで赤色の字はキーボードから入力したもの、 深緑の字はコンピュータからの表示を示しています。 また、%はプロンプト(皆さんの環境ではstd1dc1{s1160000}1:等に相当する)を示しており、皆さんが入力するのはその次の文字からになります。

例題
講義資料(ハンドアウト)の例題 lec02-1.c, lec02-2.c のソースプログラムをコピーし、そのプログラムの動作を予測した上で、コンパイル・実行を試してみなさい。
コピーの方法:
% cd ~/Prog0/Ex02
% cp /home/course/prog0/public_html/2008/lec/source/lec02-1.c .
% cp /home/course/prog0/public_html/2008/lec/source/lec02-2.c .

初級レベル

(A-1)
次のプログラムを実行したときに得られる出力結果を 予想し、ファイルに記述しなさい。
なお、記述後、実際にプログラムを実行し確認してみること。

ファイル名:ex02a1.txt

#include <stdio.h>

main()
{
    printf("I am");
    printf("a\n");
    printf("student.");
}


(A-2)
自分の学籍番号と名前を表示するプログラムを作成しなさい。

ファイル名:ex02a2.c


(A-3)
以下の変数宣言について、正しいものには○を、間違っているものには×をつけなさい。 また、間違っているものについては具体的にどのような理由によるのかを書きなさい。 なお、実際に確認用プログラムを作成し、コンパイル・実行して、確認すること。
(以下の問題項目はコピー&ペーストができます)

ファイル名:ex02a3.txt

(  ) int 1st;
(  ) int _1st;
(  ) int while;
(  ) int ave;
(  ) int result#2;
(  ) int no1, no2;
(  ) int no3  no4;
(  ) int sum-ave;
(  ) int sum_ave;
例)
(X) int for;  予約語を使用している。
[確認プログラムの例]  (変数を宣言し、値を代入してみるプログラム)
#include <stdio.h>
main()
{
    int 1st;
    1st=999;
}


(A-4)
以下の式について、正しいものには○を、間違っているものには×をつけなさい。ただし、i、j、k、q、r は整数型の変数であるものとします。 なお、実際に確認用プログラムを作成し、コンパイル・実行して、確認すること。
(以下の問題項目はコピー&ペーストができます)

ファイル名:ex02a4.txt

(  ) r=i+j;
(  ) i+j=r;
(  ) i+j;
(  ) r=(j*i)%(i-j)/k;
(  ) q=r=i+j;
(  ) q=i**j;
[確認用プログラムの例]  (変数を宣言し、計算を行なうプログラム)
#include <stdio.h>
main()
{
    int i,j,k,q,r;
    r=i+j;
}



中級レベル

(B-1)
以下のprintf文について、正しく表示されるものには○を、コンパイルエラーになるものには×、正しく表示されないものには△をつけなさい。 ただし、i、j は整数型の変数とし、適当な値が代入されているものとします。 なお、実際にテストプログラムを作成し、コンパイル・実行を試してみること。
(以下の問題項目はコピー&ペーストができます)

ファイル名:ex02b1.txt

(  ) printf("今日は%d日です。\n",i);
(  ) printf("今日は%d日です。\n,i");
(  ) printf("今日は%d日です。\n" i);
(  ) printf("今日は%d日です。\n");
(  ) printf("今日は%d日です。\n",22);
(  ) printf("今日は22日です。\n");
(  ) printf("今日は%d日です。\n",i+1);
(  ) printf("%d日は%d度でした。\n");
(  ) printf("%d日は%d度でした。\n",i);
(  ) printf("%d日は%d度でした。\n,j",i);
(  ) printf("%d日は%d度でした。\n",j,i);
(  ) printf(%d日は%d度でした。,j,i);
[確認用プログラムの例]  (変数を宣言し、値を代入し、表示を行なうプログラム)
#include <stdio.h>
main()
{
    int i,j;
    i=12;
    j=23;
    printf("今日は%d日です。\n",i);
}


(B-2)
以下のプログラムを、コンパイルエラーがなくなり、正しく動作するように修正しなさい。

ファイル名:ex02b2.c

#include (stdio.h)

main
{
    print("Hello\n")
}


(B-3)
以下の(a)、(b)の変数宣言は下記プログラムのPart1-3のどこに入れると良いか?実際にプログラム中に入れて完成しなさい。

ファイル名:ex02b3.c

(a) int i,j;
(b) int result;
#include <stdio.h>
main()
/* Part 1 */
{
/* Part 2 */

    i=2;
    j=3;
/* Part 3 */
    result=i*j;
    printf("result = %d\n",result);
}



上級レベル

(C-1)
次のプログラムを実行したときに得られる出力結果を予想し、ファイルに記述しなさい。

ファイル名:ex02c1.txt

#include <stdio.h>
main()
{
    int i, j, k, res;

    i=4;
    j=5;
    k=6;
    res=i+(j+i*k)*j;
    printf("%d+(%d+%d*%d)*%d=?\n%d\n",i,j,i,k,j,res);
}


(C-2)
次のプログラムを実行したときに得られる出力結果を予想し、ファイルに記述しなさい。

ファイル名:ex02c2.txt

#include <stdio.h>
main()
{
    int i, j, k, res;

    i=4;
    j=5;
    k=6;
    res=(i*j+k%i)*i;
    printf("result = %d\n",res);
}


(C-3)
以下のプログラムは、ある計算を行ない、その結果を表示するプログラムである。 ところが、コンパイルエラーはでないけれども、プログラムミスがあるようで、正しい値が表示されない。 printfの書式(" "で囲まれた部分)には誤りが無いものとして、正しく動作するようにプログラムを修正しなさい。 なお、ミスの原因をコメント(注釈:/* */で囲む)としてソースプログラム中に書いておくこと。

ファイル名:ex02c3.c

/* ここにミスの原因を記入する */
#include <stdio.h>

main()
{
    int a,b,c,res;
    a=2;
    b=3;
    c=4;
    res=a*b;
    printf("%d * %d = %d\n",a,b,c,res);
    res=(2*a+b)%c;
    printf("(2*%d+%d)%%%d = %d\n",a,b);
    /* printfで%を表示させたい場合は%%を使用する */
}


(C-4)
変数 a、b、c、d、e にそれぞれ 8、9、6、5、4 を代入し、それらの合計と平均を計算・表示するプログラムを作成しなさい。 ただし、平均は実行例のように整数すなわち商と余りで表示すること。

ファイル名:ex02c4.c

[実行例]
% ./a.out
合計 = 32
平均(商) = 6
平均(余り) = 2



何か疑問や間違いがあれば以下に連絡して下さい。
プログラミング入門演習問題担当(prog0)