글
중간고사 익일 10시 30분 창조관 447호
test1.c test2.c
------ ------
int a; extern int a; ..... test1.c, test2.c 공유
static int b; static int b; ..... 독립적인 저장공간 사용
main() func()
{ {
... ...
func(); }
...
}
<- 직접 재귀 함수
간접 재귀 함수 ->
하노이의 탑
#include <stdio.h>
void hanoi(int n, char a, char b, char c);
int main(void)
{
/* 3개의 원반을 옮기는 하노이 탑 문제 */
/*초기막대 a, 작업막대 b, 목표막대 c */
return 0;
}
void hanoi(int n, char a, char b, char c)
{
if (n<1)
printf("invalid number of discs\n");
else if ( n==1 )
printf("원반 %d : %c ==> %c\n", n, a, c);
else {
hanoi(n-1, a, c, b);
printf("원반 %d : %c ==> %c\n", n, a, c);
hanoi(n-1, b, a, c);
}
}
==== 실습시간 ====
1. nCr 구하기
#include <stdio.h>
double factorial(int k);
int main(void)
{
int a, b;
double c;
printf("nCr을 구해봅시다!\n");
printf("n의 값을 입력하세요 : ");
scanf("%d",&a);
printf("r의 값을 입력하세요(n값보다 작게) : ");
scanf("%d",&b);
c=factorial(a)/(factorial(b)*factorial(a-b));
printf("결과는 %g 입니다.",c);
return 0;
}
double factorial(int k)
{
int i;
double j;
j=1.0;
for(i=1;i<=k;i++)
j *= i;
return(j);
}
또는
#include <stdio.h>
double factorial(int k);
int main(void)
{
int a, b;
double c;
printf("nCr을 구해봅시다!\n");
printf("n의 값을 입력하세요 : ");
scanf("%d",&a);
printf("r의 값을 입력하세요(n값보다 작게) : ");
scanf("%d",&b);
c=factorial(a)/(factorial(b)*factorial(a-b));
printf("결과는 %g 입니다.",c);
return 0;
}
double factorial(int k)
{
int i;
double j;
j=1.0;
for(i=k;i>=1;i--)
j *= i;
return(j);
}
p139 (5.3.2)
#include <stdio.h>
void print_star(int k, int n);
int main(void)
{
int a,b;
scanf("%d",&a);
for(b=1;b<=a;b++)
print_star(b,b);
return 0;
}
void print_star(int k, int n)
{
int i,j;
for(i=1;i<=k;i++)
putchar(' ');
for(j=1;j<=n;j++)
putchar('*');
putchar('\n');
}
p.139 연습문제 5.3.2.b
#include <stdio.h>
void print_star(int k, int n);
int main(void)
{
int a,b;
scanf("%d",&a);
for(b=1;b<=a;b++)
print_star(a-b,2*b-1);
return 0;
}
void print_star(int k, int n)
{
int i,j;
for(i=1;i<=k;i++)
putchar(' ');
for(j=1;j<=n;j++)
putchar('*');
putchar('\n');
}