高度プログラミング演習 (08)
演習問題 与えられた2数のべき乗を計算する関数を再帰関数を用いて作成せよ。 ユークリッドの互除法を用いて最大公約数を求める関数を作成せよ。
与えられた2数のべき乗を計算する #include <stdio.h> int mypow(int a, int b) { if(b==0) return 1; else return a * mypow(a,b-1); } void main() int a,b; scanf("%d %d",&a,&b); printf("%d ^ %d = %d\n",a,b,mypow(a,b));
ユークリッドの互除法 #include <stdio.h> int gojoho(int n, int m) { int amari,b,s; if(n>m){ b = n; s = m; }else { b = m; s = n; } amari = b % s; if(amari!=0) gojoho(amari,s); else return s; void main() { int n,m; scanf("%d %d",&n,&m); printf("L.C.M = %d\n", gojoho(n,m)); }
ポインタ メモリ CPU コンピュータの構造 メモリ: 番地 (アドレス): 値 000000: 123 000001: 2345 番地 (アドレス): 値 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 #include <stdio.h> void main() b { 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
演習問題 小文字を大文字に変える関数を作成せよ。 大文字を小文字に変える関数を作成せよ。 myaA(char *ch) myZz(char *ch)
演習問題 格子の中で、点から点へは 任意の(x0,y0)から任意の(x1,y1)までの経路が何通りあるか計算するプログラムを作成せよ。 上または右にしか進めないとする。 任意の(x0,y0)から任意の(x1,y1)までの経路が何通りあるか計算するプログラムを作成せよ。 (x1,y1) (x0,y0)