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

[E9] 第8章 ポインタ


(E9_1) 下のプログラムをコンパイルして実行せよ.表示される結果 (1) と (2) に対して, なぜそのような結果が表示されるのかを, 次の例に倣って説明せよ.


(E9_2) 下のプログラムの実行し,行われている計算を確認してレポートで説明せよ.

その上で,

に相当する演算が行われるように,関数 calc の中身を書き換えよ. 実行し, となることを確認せよ.

(E9_3) プログラムが,下記の動作をするように関数 sort2 と sort3 を完成せよ(main は変更不要).


(E9_4) ポインタを用いて複数の値を関数の呼び出し元に返すことができる.
正の整数 n に対して,n = 2s × u を満たす非負の整数 s と奇数 u を求めて表示したい.以下のプログラムの関数 factoring1 を完成せよ. 例えば,n = 360 のとき,s = 3, u = 45(360 = 23 × 45)である.

さらに,正の整数 n に対して,n = 2s × 3t × u を満たす非負の整数 s,t と u を求めて表示したい.u は 3 で割り切れない奇数とする.以下のプログラムの関数 factoring2 を完成せよ. 例えば,n = 360 のとき,s = 3, t = 2, u = 5(360 = 23 × 32 × 5)である.


(E9_5) 下のプログラムを実行し,配列とポインタの類似性を確認せよ.
#include <stdio.h>

int main( void )
{
	int a[4] = { 100, 101, 102, 103 };

	printf("%p %p %p %p \n", &a[0], &a[1], &a[2], &a[3] );
	printf("%p %p %p %p \n", a, a+1, a+2, a+3 );

	printf("%d %d %d %d \n", a[0], a[1], a[2], a[3] );
	printf("%d %d %d %d \n", *a, *(a+1), *(a+2), *(a+3) );

	printf("\n");

	return 0;
}

(E9_6) キックオフC言語 9章 ソースコード 9.1 の関数 str_length, ソースコード 9.2 の関数 str_copy,ソースコード 9.3 の関数 str_concat をポインタを使用した ものに書き換えることで,以下のプログラムを完成せよ.
#include <stdio.h>
#define M 128

int str_length( char *str ){


}

void str_copy( char *dest, char *src ){


}

void str_concat( char *dest, char *src ){


}

int main(void)
{
	char str1[M] = "Kwansei Gakuin";
	char str2[M];

	printf("length = %d \n", str_length( str1 ) );

	str_copy( str2, "University");

	str_concat( str1, " ");
	str_concat( str1, str2 );

	printf("%s \n", str1 );

	return 0;
}


(E9_7*) 2 次元平面上の点 (x,y) を, 原点を中心に半時計回りに r_degree 度だけ回転させた点に変換する関数 void rotate(double *x, double *y, double r_degree) を作成せよ. 下のようなプログラムで次の結果が得られることを確認せよ (0 が -0.00000000 等と表示される等, 小数点表示やその誤差は気にしなくてよい).


(E9_A) 「キックオフ C言語」の第9章 ソースコード 9.7 を作成して実行せよ.「ポインタの配列」の扱いについて,ソースコード 9.8 と併せて観察すること.