" async="async"> ', { cookie_domain: 'auto', cookie_flags: 'max-age=0;domain=.tistory.com', cookie_expires: 7 * 24 * 60 * 60 // 7 days, in seconds }); 책 알려주는 남자 :: 쉽게 풀어쓴 C언어 Express 9장 Programming

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;

}


(b) 전역 변수 사용

#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;

}




2.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int get_dice_face(int x);

void main()
{
int x;
srand((unsigned)time(NULL));
get_dice_face(x);
}

int get_dice_face(int x)
{
int i;
static int count1=0;
static int count2=0;
static int count3=0;
static int count4=0;
static int count5=0;
static int count6=0;
for(i=1; i<=1000; i++)
{
x=rand()%6+1;
if(x==1) count1++;
if(x==2) count2++;
if(x==3) count3++;
if(x==4) count4++;
if(x==5) count5++;
if(x==6) count6++;
if(i%100==0)
printf("%d %d %d %d %d %d\n", count1, count2, count3, count4, count5, count6);
}
return x;
}


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);

}

}


블로그 이미지

얼음꿀차

책을 한 번 읽긴 읽어야겠는데 막상 읽자니 뭘 읽을지 고민되는 당신을 위해 읽을만한 책들을 알려드립니다!

,