9장 Programming
1.
(a) 정적 지역 변수 사용
#include <stdio.h>
int add(int x, int y);
int sub(int x, int y);
int mul(int x, int y);
int dvd(int x, int y);
int main()
{
int x, y;
char op;
while(1)
{
printf("연산을 입력하시오: ");
scanf("%d %c %d", &x, &op, &y);
switch(op)
{
case '+' : printf("연산 결과: %d\n", add(x, y)); break;
case '-' : printf("연산 결과: %d\n", sub(x, y)); break;
case '*' : printf("연산 결과: %d\n", mul(x, y)); break;
case '/' : printf("연산 결과: %d\n", dvd(x, y)); break;
}
}
}
int add(int x, int y)
{
static int count=0;
count++;
printf("덧셈은 총 %d번 실행되었습니다\n", count);
return x+y;
}
int sub(int x, int y)
{
static int count=0;
count++;
printf("뺄셈은 총 %d번 실행되었습니다\n", count);
return x-y;
}
int mul(int x, int y)
{
static int count=0;
count++;
printf("곱셈은 총 %d번 실행되었습니다\n", count);
return x*y;
}
int dvd(int x, int y)
{
static int count=0;
count++;
printf("나눗셈셈은 총 %d번 실행되었습니다\n", count);
return x/y;
}
#include <stdio.h>
static int count_add=0;
static int count_sub=0;
static int count_mul=0;
static int count_dvd=0;
int add(int x, int y);
int sub(int x, int y);
int mul(int x, int y);
int dvd(int x, int y);
int main()
{
int x, y;
char op;
while(1)
{
printf("연산을 입력하시오: ");
scanf("%d %c %d", &x, &op, &y);
switch(op)
{
case '+' : printf("연산 결과: %d\n", add(x, y)); break;
case '-' : printf("연산 결과: %d\n", sub(x, y)); break;
case '*' : printf("연산 결과: %d\n", mul(x, y)); break;
case '/' : printf("연산 결과: %d\n", dvd(x, y)); break;
}
}
}
int add(int x, int y)
{
count_add++;
printf("덧셈은 총 %d번 실행되었습니다\n", count_add);
return x+y;
}
int sub(int x, int y)
{
count_sub++;
printf("뺄셈은 총 %d번 실행되었습니다\n", count_sub);
return x-y;
}
int mul(int x, int y)
{
count_mul++;
printf("곱셈은 총 %d번 실행되었습니다\n", count_mul);
return x*y;
}
int dvd(int x, int y)
{
count_dvd++;
printf("나눗셈셈은 총 %d번 실행되었습니다\n", count_dvd);
return x/y;
}
3.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int get_random(void);
void main()
{
printf("%d\n", get_random());
printf("%d\n", get_random());
printf("%d\n", get_random());
}
int get_random()
{
static int inited=0;
if(inited==0)
{
printf("초기화\n");
srand((unsigned)time(NULL));
inited=1;
}
}
4.
#include <stdio.h>
double recursive(double n);
int main()
{
double n;
printf("정수 N을 입력하시오: ");
scanf("%lf", &n);
printf("recursive(%.0lf)의 결과: %.4lf", n, recursive(n));
}
double recursive(double n)
{
if (n==1)
return 1.0;
else
return 1.0/n + recursive(n-1);
}
5.
#include <stdio.h>
void save (int amount);
void draw (int amount);
int money=0;
void main()
{
int n, amount;
do
{
printf("메뉴를 선택하세요: 저축(1), 인출(2), 종료(3): ");
scanf("%d", &n);
if(n==1)
{
printf("저축할 금액: ");
scanf("%d", &amount);
save(amount);
}
else if(n==2)
{
printf("인출할 금액: ");
scanf("%d", &amount);
draw(amount);
}
else if (n==3)
break;
else
printf("잘못 입력하셨습니다.\n");
} while(1);
}
void save(int amount)
{
money += amount;
printf("현재 잔액은 %d입니다.\n", money);
}
void draw(int amount)
{
if (money>=amount)
{
money -= amount;
printf("현재 잔액은 %d입니다.\n", money);
}
else
{
printf("잔액이 부족합니다.\n");
money=money;
printf("현재 잔액은 %d입니다.\n", money);
}
}
6.
#include <stdio.h>
int get_tri_number(int n);
void main()
{
int n;
printf("입력하시오: ");
scanf("%d", &n);
printf("해당 삼각수의 값은 %d이다.", get_tri_number(n));
}
int get_tri_number(int n)
{
if(n==1)
return 1;
else
return n + get_tri_number(n-1);
}
7.
#include <stdio.h> // 순환함수 사용한 경우
int recursive (int n, int k);
void main()
{
int n, k;
printf("nCk 중 n과 k의 값을 차례대로 입력하시오: ");
scanf("%d %d", &n, &k);
printf("이항계수의 값은 %d이다.", recursive(n, k));
}
int recursive (int n, int k)
{
if ( k==0 || k==n)
return 1;
else
return recursive(n-1, k-1) + recursive (n-1, k);
}
#include <stdio.h> // 반복함수 사용한 경우
int F_1(int x);
int F_2 (int x, int y);
void main()
{
int n, k, result;
printf("nCk 중 n과 k의 값을 차례대로 입력하시오: ");
scanf("%d %d", &n, &k);
if ( k==0 || k==n)
result = 1;
else // nCk를 n!/(n-k)!/k! 로 식 전환
result = F_1(n-1)/F_1(k-1)/F_2(n, k) + F_1(n-1)/F_1(k)/F_2(n-1, k);
printf("이항계수의 값은 %d이다.", result);
}
int F_1(int x) // n!과 k!로 쓰임
{
int i, f=1;
if (x==1)
return 1;
else
{
for(i=1; i<=x; i++)
f = f*i;
return f;
}
}
int F_2(int x, int y) // (n-k)! 로 쓰임
{
int i, f=1;
if ( x-y ==1 || x-y <1)
return 1;
else
{
for(i=1; i<=x-y; i++)
f = f*i;
return f;
}
}
8.
#include <stdio.h>
void show_digit(int n);
void main()
{
int n;
printf("입력하시오: ");
scanf("%d", &n);
show_digit(n);
}
void show_digit(int n)
{
if (n<10)
printf("%d ", n);
else
{
show_digit(n/10);
printf("%d ", n%10);
}
}
'프로그래밍 > 쉽게 풀어쓴 C언어 Express' 카테고리의 다른 글
쉽게 풀어쓴 C언어 Express 10장 Exercise (2) | 2018.11.02 |
---|---|
쉽게 풀어쓴 C언어 Express 10장 Summary (0) | 2018.10.29 |
쉽게 풀어쓴 C언어 Express 9장 Exercise (0) | 2018.10.19 |
쉽게 풀어쓴 C언어 Express 9장 Summary (0) | 2018.10.19 |
쉽게 풀어쓴 C언어 Express 8장 Programming (0) | 2018.10.05 |