80 likes | 236 Views
高度プログラミング演習 (0 8 ). 演習問題. 格子の中で、点から点へは 上または右にしか進めないとする。 任意の (x0,y0) から任意の (x1,y1) までの経路が何通りあるか計算するプログラムを作成せよ。. (x1,y1). (x0,y0). ポインタ. コンピュータの構造. メモリ: 番地 (アドレス): 値 000000: 123 000001: 2345. CPU. Pentium4 3GHz. void main() { int a,b; a=123; b=2345; *(&a)=123;
E N D
演習問題 • 格子の中で、点から点へは • 上または右にしか進めないとする。 • 任意の(x0,y0)から任意の(x1,y1)までの経路が何通りあるか計算するプログラムを作成せよ。 (x1,y1) (x0,y0)
ポインタ • コンピュータの構造 メモリ: 番地 (アドレス): 値 000000: 123 000001: 2345 CPU Pentium4 3GHz void main() { int a,b; a=123; b=2345; *(&a)=123; *(&b)=2345; } 000000: 123 000001:2345 メモリ Main Memory 512MB
ポインタ型 • int *a; a cのアドレス #include <stdio.h> void main() { int *a,*b; int c=38; int matrix[100]; int i; a=&c; printf(“%d”,*a); b=&matrix[50]; b[0]=39; // matrix[50] *(b+1)=40; // matrix[51] } b matrix[50]のアドレス c 38 matrix[0] matrix[1] matrix[2] matrix[3] matrix[50] matrix[51]
ポインタ型を使った関数呼び出し #include <stdio.h> void foo(int *a,int *b) { *a = *a + *b; } void main() { int a=10,b=20; foo(&a,&b); printf(“%d\n”,a); }
例題問題 • 2つの引数をとり、それぞれの変数の内容を入れ替える関数を作成せよ。 • myswap(int *a, int *b) int a=3,b=8; myswap(&a,&b); a の中身は 8 b の中身は 3
練習問題 • 3つの整数の引数をとり、小さい順に並べ替える関数を作成せよ。 • mysort(int *a, int *b, int *c) • 小文字を大文字に変える関数を作成せよ。 • myaA(char *ch)
演習問題 • 大文字を小文字に変える関数を作成せよ。 • myZz(char *ch) • 4つの引数をとり、大きい順に並び替える関数を作成せよ。 • mysort4(int *a, int *b, int *c, int *d);