プログラミング実習II (2025) 課題

[T4] 第5章 関数(1)


(T4_1) 本問については,プログラムは問題 2 のみを提出し,考察については 1, 2 双方について記すこと.

  1. [リスト 5.1] をコンパイルせよ.コンパイルは失敗するので,どのようなエラーメッセージが表示されるか,そしてそれがどういう意味 (と考えられるか) かをレポートに記せ.
  2. [リスト 5.3] の powint を以下に示す関数 powint におきかえたプログラムを手入力し,コンパイル,実行することで,教科書と同じ実行結果が得られることを確認せよ(関数 powint を置き換える理由は,本ページの末尾《補足》で述べます).
int powint(int x, int p) // 正整数x の p 乗を求める関数 powint() の定義
{
    int i;
    int y = 1;           // 戻り値 y の初期化

    for ( i = 0; i < p; i++ ) {	// i の値を次々に加算し,p に達するまで繰り返し
        y *= x;
    }

    return y;            // y をこの関数の戻り値とする
}

(T4_2) 以下のプログラムを手入力した上でコンパイルおよび実行し,どのような結果が得られるかをレポートに記せ(このプログラムは「キックオフ C言語」のソースコード 3.2 に変更を加えたものです).
さらに,このプログラムに関する以下の1〜6の質問に対して考察欄にて詳しく説明せよ.

  1. int square( int x ) の int 型変数 x は何と呼ばれるか.また, x の値はどのように決まるか.
  2. int square( int x ) の先頭の int は整数型を意味するが,何が整数型であるのか.
  3. square 関数の中の return 文によりどのようなことが行われるか.また,return 文の y は何と呼ばれるか.
  4. main 関数の中の z = square( i ); の i は何と呼ばれるか.また,この文によりどのような操作が行われているか.
  5. square 関数の中では変数 i や z は現れていないが,これでよいのか?
  6. 結局,このプログラムは何をしているのか?
#include <stdio.h>

int square( int x ){

    int y;

    y = x * x;

    return y;

}

int main(void){

    int i;
    int z;

    for( i = 0; i < 10; i++ ){
        z = square( i );
        printf("(%d, %d) \n", i, z );
    }

    return 0;
}

(T4_3) 前問のプログラムは,簡単な式を扱う場合や表示のみが目的であれば,以下のように簡潔に書くこともできる.前問との相違に注意しながら,これを手入力し,コンパイル,実行して出力を確認せよ.


#include <stdio.h>

int square( int x ){

    return x * x;

}

int main( void ){

    for( int i = 0; i < 10; i++ ){
        printf("(%d, %d) \n", i, square( i ) );
    }

    return 0;
}


(T4_4) 半径が与えられたとき,円の面積(半径の2乗と円周率の積)を求めて表示するプログラムを作成せよ.ただし関数 area は,半径を引数とし,面積を戻り値とする.

#include <stdio.h>
#include <math.h>

double area( double r ){

	double s;

    printf("pi = %.10f\n", M_PI);


	return s;
}

int main( void )
{
    double r, a;

    scanf("%lf", &r);



    printf(" 半径 %f の円の面積は %f \n", r, a );

    return 0;
}
 


(T4_5) 2個の整数 x,y を入力(引数)とし,x3 + 3 x2y + 3 xy2 + y3 を計算して出力する(戻り値として返す)関数 int comp( int x, int y ) を作成せよ.
次に,整数 x を引数とし,その 3 乗 x3 を計算して戻り値とする関数 int cubic( int x ) を作成せよ.
最後に,main 関数の中で,キーボードから 2 個の整数を受け取り,int 型の変数 a および b に代入する. a と b の和の 3 乗 (a+b)3 を関数 comp を用いて計算した結果と,関数 cubic を用いて計算した結果を表示し,それらが一致することを確認せよ(様々な a と b の値に対して検証すること).


(T4_6) 1以上10以下の数に対してそれぞれの 3 乗を表示するプログラムを作成せよ. 3 乗の計算には,(T4_1) で扱った関数 powint を使用し,powint を呼び出す際には for 文を用いること.

 表示例
  i   i^3
------------
  1    1
  2    8
  3   27
  4   64
  5  125
    :


《補足》 課題(T4_1) にて,関数 powint を[リスト 5.3] に記載されたものから,上記の関数に置き換えた理由を以下に記します.必ず目を通して下さい.