プログラミング実習II (2026) 課題
2 個の整数の最大公約数を求めて表示するプログラムを作成する(通常,最大公約数は greatest common "divisor" という).
x と y の最大公約数を求める関数 int gcd( int x, int y ) を作成する.ただし,関数 gcd では,[リスト 5.19] の関数 int gcm( int x, int y ) と同じ計算を行うこととする.gcd では,ユークリッドの互除法で計算が行われている.以下の「表示例」が出力されるように,適切な箇所に printf 文を挿入することを通して,while 文で行われている処理・計算を理解し,レポートにて説明せよ.複数箇所で printf 文を挿入して構わない.表示例: x = 560, y = 462 のとき 表示例: x = 3355, y = 2379 のとき
560 ÷ 462 = 1 … 98 3355 ÷ 2379 = 1 … 976
462 ÷ 98 = 4 … 70 2379 ÷ 976 = 2 … 427
98 ÷ 70 = 1 … 28 976 ÷ 427 = 2 … 122
70 ÷ 28 = 2 … 14 427 ÷ 122 = 3 … 61
28 ÷ 14 = 2 122 ÷ 61 = 2
gcd( 560, 462 ) = 14 gcd( 3355, 2379 ) = 61
#include <stdio.h>
int gcd( int, int );
int main( void ){
int x, y, 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 ){
}
「キックオフ C言語」 3.10節 練習問題 8(【関数の役割分担・void関数】マンハッタン距離とは…)に解答せよ。作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.
「キックオフ C言語」 3.10節 練習問題 6(【関数の役割分担・座標の平行移動】次の関数を…)に解答せよ。作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.
「グローバル変数」「ローカル変数」とはどのようなものであるかを資料を参考にしてレポートにて説明せよ.その上で,以下を解答せよ.
main関数やその他の関数内の変数 i, j の値が表示される.各々について,なぜその値が表示されるかを説明せよ.
// ローカル変数とグローバル変数
// 変数のスコープ
#include <stdio.h>
int i = 0;
int func1( void ){
printf("func1-1 : i = %d, j = %d \n", i, j );
int i = 2;
int j = 7;
printf("func1-2 : i = %d, j = %d \n", i, j );
return 0;
}
int func2(int i){
printf("func2-1 : i = %d\n", i);
i += 3;
printf("func2-2 : i = %d\n", i);
return i;
}
int j = 5;
int main( void )
{
printf("main-1 : i = %d, j = %d \n", i, j );
int i = 1;
printf("main-2 : i = %d\n", i);
func1();
printf("main-3 : i = %d\n", i);
i = func2( i );
printf("main-4 : i = %d\n", i);
return 0;
}
以下のプログラムにおける accumulator( n ) は,複数回呼び出されたときに,
それまでに与えられた n を積算して返す関数である.
ただし,グローバル変数を用いているため,(さらにプログラムを追加すると)意図しない値の書き換えが起こる恐れがあり,実用上このようなプログラムは書くべきではない.
この問題が解消されるように,グローバル変数を用いないプログラムに書き換えよ.ただし,main 関数は変更しないこと.
キックオフ C 言語の p. 114-115,および C言語によるプログラミング p. 210-216 が参考になる.
#include <stdio.h>
int sum = 0;
int accumulator( int n ) {
sum = sum + n;
return sum;
}
int main( void ) {
printf("%d\n", accumulator(1)); // 1 = 1
printf("%d\n", accumulator(5)); // 1 + 5 = 6
printf("%d\n", accumulator(3)); // 1 + 5 + 3 = 9
printf("%d\n", accumulator(4)); // 1 + 5 + 3 + 4 = 13
return 0;
}