スライド 1

高度プログラミング演習
(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)
void main()
{
{
int amari,b,s;
int n,m;
if(n>m){
scanf("%d %d",&n,&m);
b = n; s = m;
printf("L.C.M = %d\n",
}else {
gojoho(n,m));
b = m; s = n;
}
}
amari = b % s;
if(amari!=0)
gojoho(amari,s);
else return s;
}
ポインタ
• コンピュータの構造
メモリ:
番地 (アドレス): 値
000000:
000001:
CPU
123
2345
Pentium4 3GHz
void main()
{
int a,b;
000000: 123
000001:2345
a=123;
b=2345;
メモリ
Main Memory 512MB
*(&a)=123;
*(&b)=2345;
}
ポインタ型
• int *a;
a
cのアドレス
b
matrix[50]のアドレス
c
38
#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]
}
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
演習問題
1. 小文字を大文字に変える関数を作成せよ。
•
myaA(char *ch)
2. 大文字を小文字に変える関数を作成せよ。
•
myZz(char *ch)
演習問題
• 格子の中で、点から点へは
– 上または右にしか進めないとする。
• 任意の(x0,y0)から任意の(x1,y1)までの経路が何
通りあるか計算するプログラムを作成せよ。
(x1,y1)
(x0,y0)