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

[T5] 第5章 関数(2)


(T5_1) 2 個の整数の最大公約数を求めて表示するプログラムを作成する (通常,最大公約数は greatest common "divisor" という)

表示例: x = 560, y = 462 のとき

   560 ÷ 462  =  1 … 98
   462 ÷  98  =  4 … 70
    98 ÷  70  =  1 … 28
    70 ÷  28  =  2 … 14
    28 ÷  14  =  2

  gcd( 560, 462 ) = 14

表示例: x = 3355, y = 2379 のとき

  3355 ÷ 2379  =  1 … 976
  2379 ÷  976  =  2 … 427
   976 ÷  427  =  2 … 122
   427 ÷  122  =  3 …  61
   122 ÷   61  =  2

  gcd( 3355, 2379 ) = 61
#include <stdio.h>

int gcd( int, int );

int main( void ){

	int x, y;
	int g;

	printf("Enter an integer: ");
	scanf("%d", &x);

	printf("Enter another integer: ");
	scanf("%d", &y);





	printf("gcd( %d, %d ) = %d \n", x, y, g );

	return 0;
}

int gcd( int x, int y ){


}


(T5_2) main 関数以外の関数から,さらに別の関数を呼び出すことができる.以下のようなプログラムを作成せよ.


(T5_3) 以下のプログラムを作成せよ.平方根の計算には,標準ライブラリの数学関数 sqrt を用いるが,その使用はプログラム内で 1 箇所のみとする.


(T5_4) 下のプログラムについて, 次をレポートに記せ.

  1. 「グローバル変数」「ローカル変数」とはどのようなものであるかを資料を参考にして説明せよ.
  2. 以下のプログラムを入力,コンパイル,実行せよ.
    実行すると9行の出力「(????) x = ???, y = ???」が表示される. 結果をレポートにコピーし,各行について,xとyがどのような種類の変数であるかを,「...の」の箇所に以下のいずれかを選択して記入する形式で答えよ.
      (main) x = ???, y = ???  ...のx  ...のy
      (func) x = ???, y = ???  ...のx  ...のy
      (main) x = ???, y = ???  ...のx  ...のy
      (func) x = ???, y = ???  ...のx  ...のy
      (main) x = ???, y = ???  ...のx  ...のy
      (func) x = ???, y = ???  ...のx  ...のy
      (main) x = ???, y = ???  ...のx  ...のy
      (func) x = ???, y = ???  ...のx  ...のy
      (main) x = ???, y = ???  ...のx  ...のy
    
#include <stdio.h>

int x;

void func_a( void );
void func_b( void );
void func_c( int );
int func_d( int );

int main( void )
{
	int y;

	x = 10;
	y = 50;

	printf( "(main) x = %3d, y = %3d\n", x, y );

	func_a( );

	printf( "(main) x = %3d, y = %3d\n", x, y );

	func_b( );

	printf( "(main) x = %3d, y = %3d\n", x, y );

	func_c( y );

	printf( "(main) x = %3d, y = %3d\n", x, y );

	y = func_d( y );

	printf( "(main) x = %3d, y = %3d\n", x, y );

	return 0;
}

void func_a( void )
{
	int y;

	y = 100;
	x += 5;

	printf( "(func) x = %3d, y = %3d\n", x, y );
}

void func_b( void )
{
	int y;

	y = 100;
	y += 5;

	printf( "(func) x = %3d, y = %3d\n", x, y );
}

void func_c( int y )
{
	x += 10;
	y += 10;

	printf( "(func) x = %3d, y = %3d\n", x, y );
}

int func_d( int y )
{
	x += 20;
	y += 20;

	printf( "(func) x = %3d, y = %3d\n", x, y );

	return y;
}

※「グローバル変数」は便利な面もあるが,プログラミングのミスにより意図と異なる値の書き換えなどを犯してしまいがちで,使用には注意が必要である.特 に今回は「関数」の習得が目標であり,引数・戻り値の概念を理解することが重要であるため,宿題課題[E5]ではグローバル変数を用いずに解答して下さ い.