[サイトマップ] [トップページ]

トップページ > 授業のページ > 旧講義資料 > コンピュータプログラミングII >
プログラミング課題


更新日
2019-07-19

第14回課題

  1. [pe14-1.c] (必須) 次の指示に従ってプログラムを作成しなさい。
    1. リスト 5.3 のプログラムが動作することを確認してから, カードを 5 枚だけ 1 人に配る(最初の 5 枚だけを一列に表示する)ように, 関数 deal を変更しなさい。 deal の変更は関数本体のみとする。

    2. 次の関数定義を先のプログラムの末尾に追加しなさい。
      char *checkPairs(Card *wdeck)
      {
           int i, j;
           char *result = "";
      
           for (i = 0; i < 4; i++) {
                for (j = i + 1; j < 5; j++) {
      /***
                     printf("i:%d %d %s - j:%d %d %s\n", 
                            i, wdeck[i].face, wdeck[i].suit,
                            j, wdeck[j].face, wdeck[j].suit);
      ***/
                     if (wdeck[i].face == wdeck[j].face) {
                            result = "PAIR(S)";
                     }
                }
           }
      
           return result;
      }
      
    また,関数 main における関数 deal の呼び出し箇所の後ろに,関数 checkPairs の戻り値を表示するコードを追加することにより,配られた 5 枚のカードに同じ数 (face) のものが含まれていれば,PAIR(S) と表示するようにしなさい。

  2. [pe14-2.c] (必須) 前のプログラムの関数 checkPairs を,手札がポーカーのワンペアであるかどうかを判定する関数 isOnePair に書き換えなさい。 この関数は,ワンペアのときに ONE PAIR という文字列を返し,そうでないときには空の文字列を返すこととする。

    ツーペアやスリーカード,フォーカードの場合にワンペアと判定しないようにすること。 そのためには isOnePair の本体でペア数を数えるカウンタ用変数を用意する必要があろう。

    さらに,main で isOnePair を呼び出して,ワンペアの場合には,その旨を表示するプログラムにしなさい。

  3. [pea14-1.c] 前のプログラムを,ワンペアに加え,他の少なくと も一つ以上のポーカーの役も判定できるように,役を判定する関数の定 義と呼び出しを追加しなさい。



2019-07-11

第13回課題

  1. [pe13-1.c] (必須) 第12回課題 1 (pe12-1.c) のプログラムを次のとおりに変更しなさい。
    • 点の座標を表示する次の関数 printCoord を追加(下線部には適当な語を入れる)し, この関数を使うプログラムにしなさい。
      void printCoord(____________ pnt)
      {
           printf("(%f, %f)\n", _________ , _________ );
      
           return;
      }
      
    • 2点間の距離の計算を行う関数 calcDist を定義し,これを使うプログラムにしなさい。 calcDist は struct point 型の値を二つ受け取り,距離を double 型で返すように作ること。
    • 上記の変更を行ったプログラムは,次を出力すればよい。
      (1.00, 1.50)
      (4.00, 5.50)
      distance: 5.00
      

  2. [pe13-2.c] (必須) 次の指示に従い,プログラムを作りなさい。
    1. C 言語のキーワード typedef と構造体を使って,平面上の点の座 標を格納するための Point 型を定義しなさい。Point 型は, x 座 標と y 座標を保持するために,double 型のメンバー x と double 型のメンバー y を持つこととする。
    2. 平面上の点を原点を中心に反時計回りに45度回転させた点の座標を計算する関数 rot45deg を作りなさい。

      この関数は Point 型の値を受け取り,回転後の座標を求めて, Point 型の値として返すものとする。 すなわち,この関数のプロトタイプ宣言は

      Point rot45deg(Point p);
      である。なお,パラメータ名 p はプロトタイプ宣言では省略できる。

      また,座標 (x0, y0) の点を 原点を中心に反時計回りに45度回転させた点の座標 (x, y) は 次式で計算できる。

      \begin{displaymath}
x = \frac{\sqrt{2}}{2}(x_0 - y_0),\
y = \frac{\sqrt{2}}{2}(x_0 + y_0)
\end{displaymath}

    3. 関数 main の中で Point 型の変数 a を宣言し, a に座標 (2, 0) の点としての初期値を設定しなさい。

      次に, 関数 rot45deg を用いて,a を 45 度回転させた後の座標を求めて表示しなさい。 なお,a の回転を行う文は a = rot45deg(a); である。

      さらに,もう一度,45度回転させた後の座標も表示するプログラムにしなさい。

      出力例)

      Initial coordinates: (2.000000, 0.000000)
      Rotation: (1.414214, 1.414214)
      Rotation: (0.000000, 2.000000)
      

  3. [pea13-1.c] 前の問題における関数 rot45deg を,戻り値を返す代わりに,構造体変数のポインタ(アドレス)を受け取ることによって,その構造体変数の値を変更する関数に変更しなさい。 この rot45deg を使って動作するように,前のプログラムを書き換えなさい。



2019-07-04

第12回課題

  1. [pe12-1.c] (必須) 次のプログラムは,平面上の点の座標を格納する point 構造体を定義し, 点 pointA の x, y 座標を表示するものである。

    まず, 構造体変数 pointA のメンバー x と y に 1.0 と 1.0 が入るように pointA を宣言・初期化し, その後,pointA のメンバー y の値を 1.5 に変更してから,pointA の座標を表示するプログラムとなるよう, 下線部を埋めなさい。

    次に,このプログラムにおいて,点の座標を保持する新たな変数 pointB を宣言して座標 (4.0, 5.5) を与えるコードを加え,その座標も表示するようにしなさい。

    さらに, pointA と pointB の距離を計算して表示するプログラムにしなさい。

    なお,距離の計算には,平方根を求める数学ライブラリ関数 sqrt を使うこと。 また,ソースコードの後に記した実行結果を出力をするプログラムにすること。

    #include <stdio.h>
    
    struct point {
         double x;
         double y;
    };
    
    int main()
    {
         _______________ pointA = ______________ ;
    
         _______ = _______ ;
    
         printf("A: (%.2f, %.2f)\n", ______ , ______ );
    
         return 0;
    }
    
    実行結果
    A: (1.00, 1.50)
    B: (4.00, 5.50)
    distance: 5.00
    

  2. [pe12-2.c] (必須) プログラム中のコメントの指示に従って下線部を埋めなさい。 ipoint は,整数 (int 型) を座標値とする平面上の点のための構造体であり, 横座標のためのメンバー i と縦座標のためのメンバー j を持つ。 プログラムの実行結果はソースコードの後に示したとおりである。 なお,ポインタ変数を使った点の座標表示では配列の添字記法は使わないこと。
    #include <stdio.h>
    
    #define SIZE 5 /* 配列の要素数 */
    
    /* 構造体 ipoint の定義 */
    _______ ipoint {
         ________ ;
         ________ ;
    };
    
    int main()
    {
         _____________ pnt[_____]; /* SIZE 個の要素を持つ構造体 ipoint 型の配列 */ 
         _____________ p; /* 構造体 ipoint 型を指すポインタ変数 */
         int i;
    
         /* 配列 pnt の各要素(点)に横座標と縦座標の値を設定 */
         for (i = ___; _______; _______) {
              ________ = i;
              ________ = i * 2;
         }
    
         /* 全ての点の座標を表示 */
         for (i = ___; _______; _______) {
              printf("(%___, %___)\n", pnt[i]_____, pnt[i]_____);
         }
         putchar('\n');
    
         /* ポインタ変数 p を使って全ての点の座標を表示 */
         p = ___;
         for (i = ___; _______; _______) {
              printf("(%___, %___)\n", p____, p____);
              ___ ;
         }
    
         return 0;
    }
    
    実行結果
    (0, 0)
    (1, 2)
    (2, 4)
    (3, 6)
    (4, 8)
    
    (0, 0)
    (1, 2)
    (2, 4)
    (3, 6)
    (4, 8)
    



2019-06-28

第11回課題

  1. [pe11-1.c] (必須) 単一の空白かタブ文字で区切って入力した語の列(単語)を,1行に1単語ずつ出力するプログラムを作りなさい。 文字の入力と出力は EOF (Ctrl-d) が入力されるまで繰り返し行うようにすること。 文字操作ライブラリ関数を使うこと。

    実行例

    abc def ghi(入力行; 最後にエンターで改行文字も入力している)
    abc
    def
    ghi
    

  2. [pe11-2.c] (必須) キーボードから入力する数字列を double 型の数値に変換し,その二乗を求めて表示するプログラムを作りなさい。 数字列の読み込みには関数 fgets を使うこと。 数字列には小数点が入ることもある。 数字列の長さは,小数点を含み10文字まで扱えるようにすること。

  3. [pea11-1.c] 標準ライブラリ関数 strcat と同様の働きをする関数 mystrcat を定義しなさい。 また,関数 mystrcat を使ったプログラムを作成しなさい。



2019-06-20

第10回課題

  1. [pe10-1.c] (必須) 次のプログラムの下線部を,コメントの指示に従って埋めなさい。
     
    #include <stdio.h>
    
    int main()
    {
        char *p = NULL;
        
    /* 文字列リテラル "abc" の先頭アドレスを表示する */
        printf("Address of \"abc\": %___\n", "abc");
    
    /* 文字列リテラル "ABC" の先頭アドレスを p を使って表示する */
        _______ ;
        printf("Address of \"ABC\": %p\n", p);
    
    /* p を使って A と表示する */
        printf("print \"A\": %___\n", ___ );
    
    /* p を使って BC と表示する */
        ____ ;
        printf("print \"BC\": %___\n", ___ );
    
    /* p を使った 2 通りの方法で ABC と表示する */
        ____ ;
        printf("print \"ABC\": %___\n", p);
    
        printf("print \"ABC\": ");
        while (*p != ___) {
          printf("%___", *p);
          ____ ;
        }
        printf("\n");
    
        return 0;
    }
    

  2. [pe10-2.c] (必須) 次の文
    char * suit[] = {"Hearts", "Diamonds", "Clubs", "Spades"};
    により宣言・初期化された配列 suit を使って,
    Hearts
    Diamonds
    Clubs
    Spades
    と出力するプログラムを作りなさい。繰り返しの構文を使うこと。 さらに
    H D C S
    を出力するコードを追加しなさい。この出力も配列 suit と繰り返し構文で行うこと。

    次に,suit の各要素が指している文字列が辞書順になるように,suit の要素を入れ替えるコードを追加しなさい。 なお,汎用的なソート用のコードを書く必要はなく,suit に限定して辞書順になればよい。

    さらに,その配列 suit を用いて,次の出力

    Clubs
    Diamonds
    Hearts
    Spades
    C D H S
    を行うコードを追加しなさい。

  3. [pea10-1.c] 以下の指示に従ってプログラムを完成させなさい。
    1. char 型ポインタが指す(または,char 型配列に格納された)文字列のうち,先頭から size 個の文字を別の文字型配列にコピーし,さらにコピー先の配列の内容を文字列にする関数
      char *arrayncopy(char *dest, const char *src, const int size)
      を作りなさい。 ここで dest はコピー先の配列(の先頭アドレス)であり,src はコピー元の文字列(の先頭アドレス),size はコピーする要素数である。

    2. 次のとおりに宣言・初期化された配列 str1 のうち,Hello の部分だけを別の配列 str2 にコピーして,str2 の内容を表示するプログラムを作りなさい。 関数 arrayncopy を用いて配列をコピーし,その戻り値を使って表示を行うこと。
      char str1[] = "Hello World!";



2019-06-13

第9回課題

  1. [pe9-1.c] (必須) 次のコードをコメントに従って完成させなさい。 表示する際には必ず配列 a を用いること。
    #include <stdio.h>
    
    int main()
    {
         char a[] = "abcd";
         int i;
         
         printf("#1:");
         /* a と表示する */
         printf("___\n", ___);
    
         printf("#2:");
         /* abcd と表示する */
         printf("___\n", ___ );
    
         printf("#3:");
         /* abc と表示する */
         a[___] = '__' ;
         printf("%s\n", ___ );
    
         printf("#4:\n");
         /* abc を 1 行につき 1 文字ずつ表示する。*/
         for (i = 0; _________ ; i++)
             printf("_____", _____);
         
         return 0;
    }
    
    実行結果は次のとおりになる。
    #1:a
    #2:abcd
    #3:abc
    #4:
    a
    b
    c
    

  2. [pe9-2.c] (必須) リスト 3.7 を英文 the quick brown fox jumps over the lazy dog 内の文字をアルファベット順に並べ替えて出力するプログラムに変更しなさい。空白文字の順序はアルファベットより前である。

    関数 main は以下のとおりにすること。 ただし,下線部には適当なものを入れること。 変数 num_char は配列 a に格納された文字列内の文字数(空白も1文字)を保持する。 配列 a を別の文字列に変更しても動作するプログラムにすること。

    なお,C 言語では,文字同士を不等号などで比較することは可能であり, 例えば,'a' < 'b' は真である(文字の実体は文字コード(整数)だから)。

    int main()
    {
         char a[] = "the quick brown fox jumps over the lazy dog";
         int num_char = ___________ ;
    
         printf("Number of characters in a:\n");
         printf("%d\n", num_char);
    
         printf("Original array a:\n");
         printf("%s\n", a);
    
         bubbleSort(a, num_char);
    
         printf("Sorted array a:\n");
         printf("%s\n", a);
    
         return 0;
    }
    



2019-06-07

第8回課題

  1. [pe8-1.c] (必須) 次のプログラムにおいて,注釈(コメント)部分 #a と #b の表示結果が同じになるように下線部を埋めなさい。 ただし,#b の下線部では配列の添字 [ ] を使わないこと。 また,#1 から #4 の表示結果も同じになるように下線部を埋めなさい。 同様に #5 と #6 の表示も同じになるようにしなさい。 なお,関数 main の中のコメントは記述不要である。
    #include <stdio.h>
    
    int main()
    {
        int a[5] = {1, 3, 5, 7, 9};
        int *p = NULL;
        int i;
    
        printf("#a %p\n", &a[0]);    /* #a */
        printf("#b %p\n", _____ );   /* #b */
    
        printf("#1 ");
        for (i = 0; i < 5; ++i)
            printf("%d ", a[i]);       /* #1 */
        printf("\n");
    
    /* ポインタを使った配列参照 */
        ____ ;
        printf("#2 ");
        for (i = 0; i < 5; ++i)
            printf("%d ", *(p + i));   /* #2 */
        printf("\n");
    
        printf("#3 ");
        for (i = 0; i < 5; ++i)
            printf("%d ", p[ ____ ]);  /* #3 */
        printf("\n");
    
        printf("#4 ");
        for (i = 0; i < 5; ++i) {
            printf("%d ", *p);         /* #4 */
            _____ ;
        } 
        printf("\n");
    
    /* 配列添字を使わない配列参照 */
        printf("#5 %d\n", a[3]);       /* #5 */
        printf("#6 %d\n", *(a ____ )); /* #6 */
    
        return 0;
    }
    

  2. [pe8-2.c] (必須) まず,下記のプログラムを実行して, 予想どおりの結果が得られるか,確認しなさい。

    次に, 関数 incByVal と incByRef を使って,1 から 5 までの整数を,それぞれ 1 回ずつ表示するよう, このプログラムに必要な変更を施しなさい。

    ただし,incByVal に関わる変更は,関数 incByVal の本体のみとすること。 また,関数 incByRef は戻り値を返さないまま (void) とすること。

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



2019-05-31

第7回課題

  1. [pe7-1.c] (必須) 次のプログラムをコメントに従って完成させなさい。
    #include <stdio.h>
    
    int main()
    {
        int i = 10;
        int *p;       /* ポインタ変数 p の宣言 */
    
    /* 変数 i のアドレスを 2 通りの方法で表示する (変数 p への初期値設定) */
        printf("address of i: %p\n", &i);
        ____ = ____ ;
        printf("address of i: %p\n\n", p);
    
    /* 変数 i の値を 2 通りの方法で表示する */
        printf("i: %d\n", i);
        printf("i: %d\n\n", ____ p);
    
    /* p を使って変数 i の値を 10 増やし,その値を表示する */
        ____ += 10;
        printf("i: %d\n", i);
    
        return 0;
    }
    

  2. [pe7-2.c] (必須) プログラム中のコメントに従っての下線部を埋めなさい。

    また,このプログラムの実行結果より,同じ配列の各要素がメモリ(記憶域)上に連続して配置されることを確認しなさい。

    なお,最初の printf で使われている %lu は sizeof 演算子によって得られる値の型である unsigned long int 型の値を表示すためのものである。

    #include <stdio.h>
    
    int main()
    {
         int a[] = {10, 20, 30, 40, 50};
         int size;
         int i;
         ______ = NULL; /* ポインタ変数 p の宣言と初期化 */
                        /* p には size や a の要素のアドレスを格納する */
    
         /* int 型のサイズ */
         printf("size of int is %lu bytes.\n", ___________ );
         putchar('\n');
    
         /* 配列 a の要素数を sizeof 演算子で求める */
         size = _____________________ ;
         printf("number of elements of array \"a\" is %d.\n", size);
    
         /* 変数 size のアドレス */
         printf("address of \"size\" is %p.\n", _____ );
    
         /* 配列要素 a[0] のアドレス */
         printf("address of a[0] is %p.\n\n", &a[0] );
    
         /* 配列 a の各要素の添字,アドレス,値 */
         printf("subscript, address and value of a[i]:\n");
         for (i = 0; i < size; i++) {
              printf("  %d, %p , %d \n", i, ___ , ___);
         }
         putchar('\n');
    
         /* ポインタ変数 p の初期値 */
         printf("initial value of p is %p.\n", p);
    
         /* ポインタ変数 p を使って a[0] のアドレスと値を表示する */
         p = ____ ;
         printf("a[0]: %__, %__\n", __ , __ );
    
         /* ポインタ変数 p を使って a[3] のアドレスと値を表示する */
         p += ____ ;
         printf("a[3]: %__, %__\n", __ , __ );
    
         /* ポインタ変数 p を使って a[1] のアドレスと値を表示する */
         p -= ____ ;
         printf("a[1]: %__, %__\n", __ , __ );
    
         /* ポインタ変数 p を使って size のアドレスと値を表示する */
         p = ____ ;
         printf("size: %__, %__\n", __ , __ );
    
         return 0;
    }
    



2019-05-24

第6回課題

  1. [pe6-1.c] (必須) int 型の一次元配列とその要素数を受け取って, 配列内の値の総和を求めて返す関数 arraySum を書きなさい。

    さらに,関数 main から 関数 arraySum を呼び出して, 各月の日数 (うるう年でない; すなわち2月の日数は28日) から 1 年間の日数を求めて出力するプログラムにしなさい。

    各月の日数を格納する配列は main 内で用意して,arraySum に渡すこと。 arraySum の戻り値(一年間の日数)を表示するコードも main に書くこと。 また,関数 arraySum が,パラメータを通じて main 内の配列を書き換えることのできないプログラムにすること。

  2. [pe6-2.c] (必須) 1 x 1 から 9 x 9 までの九九の結果を2次元配列に格納し,表示するプログラムを作りなさい。

  3. [pea6-1.c] 51 行 3 列の二次元配列を用意して,その1列目に 1 から 10 の数を入れ,2列目に1列目の2乗の値を,3列目に1列目の3乗の値を入れなさい。 これにより, 配列の内容は次のようになる。
    0, 0, 0
    1, 1, 1
    2, 4, 8
    3, 9, 27
    ...
    50, 2500, 125000
    

    さらに,ユーザーがキーボードから入力した値が,その配列中にあるか どうかを調べ, 値が二次元配列に存在すれば

    n is found at (x, y).
    と表示し,存在しなければ
    n is not found.
    と表示するようにしなさい。 ここで,n は入力した値であり,x, y は値が見つかった行と列である。 同じ値が複数存在する場合は一つが表示されればよいこととする。 例えば,9 の入力に対しては 9 is found at (3, 1). のように出力されるようにする。 なお,この検索を行う部分は関数化せず,main の中に記述してよい (二つの値を返す関数定義の方法をまだ扱っていないため)。



2019-05-16

第5回課題

  1. [pe5-1.c] (必須) 1 年間の日数 を, 各月の日数から計算して出力するプログラムを作りなさい。 各月の日数は,プログラム内で配列に格納しておくこと。 合計の計算には for ループを用いること。 なお,2 月の日数は 28 日とする。
  2. [pe5-2.c] (必須) キーボードから入力した10個以内の整数を逆順に出力(表示)するプログラムを作成しなさい。 ただし,このプログラムは,最初に,整数の個数をキーボードから読み込み,続いて与えられた個数の整数を読み込むものとする。 例えば,4 個の整数 11, 5, 13, 27 を与えるには 4 11 5 13 27 と入力する (入力値は改行で区切ってよい)。 ここで 4 は int 型の通常の変数に,11, 5, 13, 27 は配列に格納する。

    また,用意した配列の範囲外を利用しないように, 例えば次のようなコードで,必ず適切な入力値であることのチェックを行うこと。

    if (n > SIZE) {
      printf("Too many integers\n");
      return 1;	
    }
    
    ここで n は入力する整数の個数であり, SIZE は配列の要素数として使用されている記号定数とする。

    実行例 1:

    4
    11 5 13 27
    27 13 5 11
    

    実行例 2:

    11
    Too many integers
    

  3. [pea5-1.c] サイコロ振りのシミュレーションの結果を, ヒストグラムにするプログラムを作りなさい。



2019-05-10

第4回課題

  1. [pe4-1.c] (必須) 下記のプログラムに対して,次の操作を順に行いなさい。

    1. 実行結果を予想してから,プログラムを実行してみなさい。
    2. 関数 count 内の変数 i の宣言部分を int i = 0; に変更しなさい。 実行結果を予想してから,実行しなさい。
    3. 関数 count が 1 から 10 までの整数を main に返し, それが表示されるようにプログラムを変更しなさい。 ただし,変更は関数 count の本体のみとする。

    #include <stdio.h>
    
    int count(void);
    
    int main(void)
    {
         int i;
    
         for (i = 0; i < 10; i++) {
             printf("loop %d:" , i);
             printf("count() returns %d\n", count());
         }
    
         return 0;
    }
    
    
    int count(void)
    {
         int i;
    
         return ++i;
    }
    

  2. [pe4-2.c] (必須) 講義資料第 1.9 節の再帰関数 fibonacci を用いて,フィボナッチ数列の最初の10個の値を求めて表示するプログラムを作りなさい。

  3. [pea4-1.c] 講義資料のリスト 1.8 に次の変更を加えることにより, 再帰呼出しの過程を,末尾に示した実行結果のとおりに出力するプログラムにしなさい。

    • 関数 factorial は,呼び出される度に “factorial(number) called” と出力する。 ここで number は factorial が受け取った引数の値。
    • 関数 factorial は, 計算結果を return で返す前に “numberの階乗 returned by factorial(number)” の形式で表示する。 (関数 factorial 内に計算結果を一旦格納する変数を用意して使うとよい)
    • 関数 main での関数呼出しは factorial(5) のみとし, 画面への出力は全て関数 factorial が行う。

    実行結果

    factorial(5) called
    factorial(4) called
    factorial(3) called
    factorial(2) called
    factorial(1) called
    1 returned by factorial(1)
    2 returned by factorial(2)
    6 returned by factorial(3)
    24 returned by factorial(4)
    120 returned by factorial(5)
    



2019-04-26

第3回課題

  1. [pe3-1.c] (必須) トランプの全カード 52 枚の山から,カード 1 枚を引いて山に戻すことをシミュレートして,引いたカードの数(1 から 13 のいずれかの数のカードを等確率で引くとする)を返す関数 faceOfCard を定義しなさい。 faceOfCard の本体では printf などを使った画面への出力を行わないこと。

    この課題ではソースファイルに関数 main を定義しないこと。すなわち,このソースファイルだけでは,動作するプログラムはできなくてよい。 また,このソースファイル内では乱数の種も設定しない。

  2. [pe3-2.c] (必須) 前の問題で作成した関数 faceOfCard を使って,カード引きを10回行い,各カードの数とそれらの平均を表示するプログラムを作りなさい。

    この課題のソースファイルでは関数 main のみを定義すること。 乱数の種を設定するライブラリ関数 srand の呼び出しも main 内で行い,プログラムを実行する度に,ランダムにカードの数が変わるようにすること。

    faceOfCard のプロトタイプ宣言は,ヘッダファイルを利用せず,ソースファイル内で直に行うこと。

  3. [pea3-1.c] 三つの実数を受け取って,それらを三辺の長さとする三角形が成立する かどうかを判定する 関数 istriangle を作りなさい。 istriangle は,三角形が成立するならば整数 1(真)を,成立しないならば 0(偽)を返すこととする。

    ヒント: 三辺の長さを a, b, c とすると, a + b > c, b + c > a, c + a > b条件をすべて満たすならば,三辺は三角形を構成する

    この関数を用いて, キーボードから読み込んだ 3 つの実数を三辺とする三角形が成立するときに限り, その三角形の面積を求めて表示するプログラムを作りなさい。 三辺の長さから三角形の面積 S を求める式は次の通りである。

    \begin{displaymath}
S = \sqrt{t(t - a)(t - b)(t - c)},\ t = (a + b + c) / 2
\end{displaymath}

    ここで,C 言語では,変数名は小文字で始めるのが慣例であることに注意しなさい。 また,数学ライブラリ関数を利用する際の留意事項を確認しておきなさい。



2019-04-19

第2回課題

  1. [pe2-1.c] (必須) 画面に Hello World! と表示して改行する関数 hello を作りなさい。 また,関数 main から関数 hello を呼び出すことで,画面に Hello World! と表示するプログラムとして完成させなさい。 キーワード void を記述できる箇所には void と書くこと。

  2. [pe2-2.c] (必須) double 型の数値を受け取って,その 3 乗値を求めて返す関数 cube を作りなさい。 戻り値のデータ型も double 型とする。 また,関数 main も定義 (= 作成) して,1 から 10 までの各整数の 3 乗を関数 cube で全て求めて表示するプログラムとして完成させなさい。

  3. [pea2-1.c] 整数を受け取って,その数を一辺とする正方形を * で描く関数 printsquare を定義しなさい。 さらに,関数 main からこの関数を呼び出して, キーボードから入力された整数値を * の個数とする正方形を描くプログラムにしなさい。

    例えばキーボードから 3 を入力したときに,画面に次の出力をするプログラムになればよい。

    ***
    ***
    ***
    



2019-04-12

第1回課題

  1. [pe1-1.c](必須) 変数 a と b に標準入力(キーボード)から値を読み込み, それらの値を一度出力した後で,変数 ab に a と b の積を代入し,「? x ? = ?」(数の表示は小数点以下第2位まで)の形で結果を出力するプログラムの空白部分を埋めなさい。

    (変数,四則演算,scanf と printf による入出力)

    /* pe1-1.c: multiplication program */
    #include <stdio.h>
    
    int main()
    {
        double a, b, ab;
    
        scanf("%lf%lf", [        ]);
        printf("a: %f\n", [     ]);
        printf("b: %f\n", [     ]);
    
        [         ];
        [                        ];
    
        return 0;
    }
    

  2. [pe1-2.c](必須) 変数 n に正の整数を読み込んで 1 + 2 + ... + n を求めるプログラムの空白部分を埋めなさい。 なお,このプログラムは n までの和を求める途中の過程も表示する。

    (反復構造,合計を求めるアルゴリズム)

    /* pe1-2.c: summation program */
    #include <stdio.h>
    
    int main()
    {
        [    ]  i, n, sum;
    
        printf("Enter integer.\n");
        scanf([           ]);
    
        sum = [    ];
        for (i = 1; [            ]) {
            sum += [     ]
            printf("%d\t%d\n", i, sum);
        }
    
        return 0;
    }
    

  3. [pea1-1.c] 変数 n に正の整数を読み込んで 1 + 1/2 + ... + 1/n を求めるプログラムを作りなさい。

    (データ型)





[サイトマップ] [トップページ]