본문으로 바로가기
728x90
반응형

265p


Programming



9. 덧셈, 뺄셈, 곰셈, 나눗셈을 지원하는 계산기 프로그램을 작성하여보자. 이번에는 각 연산들이 몇 번씩 계산되었는지를 기억하게 한다. 각 연산을 지원하는 함수들은 자신이 호출된 횟수를 화면에 출력한다.


 연산을 입력하시오: 1 + 2

 연산 결과: 3

 덧셈은 총 1번 실행되었습니다.


 연산을 입력하시오: 1 * 2

 연산 결과: 2

 곱셈은 총 1번 실행되었습니다.

 

 연산을 입력하시오: 5 + 3

 연산 결과: 8

 덧셈은 총 2번 실행되었습니다.


(a) 정적 지역 변수를 사용하여 프로그램을 작성하여라.

(b) 전역 변수를 사용하여 프로그램을 작성하여라.


 #define _CRT_SECURE_NO_WARNINGS

 #include <stdio.h>

 #include <stdlib.h>


 int a, b; //(b)  전역 변수 사용

 char ch;


 void sum(int a, int b)

 {

static int sum = 0; //(a) 정적 지역 변수 사용

sum += 1;

printf("연산결과: %d\n", a + b);

printf("덧셈은 총 %d번 실행되었습니다.\n", sum);

 }

 void sub(int a, int b)

 {

static int sub = 0;

sub += 1;

printf("연산결과: %d\n", a - b);

printf("뺼셈은 총 %d번 실행되었습니다.\n", sub);

 }

 void mul(int a, int b)

 {

static int mul = 0;

mul += 1;

printf("연산결과: %d\n", a * b);

printf("곱셈은 총 %d번 실행되었습니다.\n", mul);

 }

 void divi(int a, int b)

 {

static int divi = 0;

divi += 1;

if (b == 0){

printf("0으로 나눌수 없습니다\n");

return;

}

printf("연산결과: %d\n", a / b);

printf("나눗셈은 총 %d번 실행되었습니다.\n", divi);

 }


 void main()

 { 

 while (1)

 {

 printf("연산을 입력하시오 : ");

 scanf("%d%c%d", &a, &ch, &b);

 switch (ch)

 {

 case '+':

 sum(a, b); break;

 case '-':

 sub(a, b); break;

 case '*':

 mul(a, b);  break;

 case '/':

 divi(a, b); break;

 }

 }

 system("pause");

 }



10. 돈만 생기면 저금하는 사람을 가정하자. 이 사람을 위한 함수 save(int amount)를 작성하여보자. 이 함수는 저금할 금액을 나타내는 하나의 인수 amount만을 받으며 save(100)과 같이 호출된다. save()는 현재까지 저축된 총액을 기억하고 있으며 한 번 호출될 때마다 총 저축액을 화면에 출력한다.


 얼마를 저축하시겠습니까? (종료는 -1) 200

 지금까지 총 저축액은 200입니다.

 얼마를 저축하시겠습니까? (종료는 -1) 300

 지금까지 총 저축액은 500입니다.

 얼마를 저축하시겠습니까? (종료는 -1) 700

 지금까지 총 저축액은 1200입니다.

 얼마를 저축하시겠습니까? (종료는 -1) -1

 종료


(a) 전역 변수를 사용하여 구현하여라.

(b) 정적 지역 변수를 사용하여 구현하여라.

 

 #define _CRT_SECURE_NO_WARNINGS
 #include <stdio.h>
 #include <stdlib.h>

 int save_money=0; //(a) 전역변수 사용
 void save(int amount)
 {
  static int money=0;  //(b) 전적 지역변수 사용
  money += amount;
  printf("지금까지 총 저축액은 %d입니다\n",money);
 }

 void main()
 {
  do{
   printf("얼마를 저축하시겠습니까?(종료는-1)");
   scanf("%d", &save_money);
   save(save_money);
  } while (save_money != -1);

 }

 

(c) 이 프로그램을 지역 변수만을 사용하여 구현하려면 save() 함수의 정의를 어떻게 변경하여야 하는가?

 

 #define _CRT_SECURE_NO_WARNINGS
 #include <stdio.h>
 #include <stdlib.h>

 int save(int amount,int money)
 {
  money += amount;
  printf("지금까지 총 저축액은 %d입니다\n",money);
  return money;
 }

 void main()
 {
  int amount,money=0;
  do{
   printf("얼마를 저축하시겠습니까?(종료는-1)");
   scanf("%d", &amount);
   money = save(amount,money);
  } while (amount != -1);
 }

 

(d) 예금 인출을 나타내는 함수 draw(int amount)도 작성하여보자. svae()와 draw()를 동시에 사용하려면 저금액은 어떤 종류의 변수로 표현하여야 하는가?

 

 #define _CRT_SECURE_NO_WARNINGS
 #include <stdio.h>
 #include <stdlib.h>

 int cash = 0,money = 0;
 void save(int amount)
 {
  money += amount;
  printf("지금까지 총 저축액은 %d입니다\n\n", money);
 }
 void draw(int amount)
 {
  money -= amount;
  printf("지금까지 총 저축액은 %d입니다\n\n", money);
 }
 void main()
 {
  int ch;
  do{
   printf("입금(1)/출금(2)/종료(-1) : ");
   scanf("%d", &ch);
   switch (ch)
   {
   case 1:
    printf("얼마를 저축하시겠습니까?");
    scanf("%d", &cash);
    save(cash);
    break;
   case 2:
    printf("얼마를 출금하시겠습니까?");
    scanf("%d", &cash);
    draw(cash);
    break;
   default:
    printf("잘못 입력되었습니다.\n\n");
    break;
   }
  } while (ch != -1);
 }

 

728x90
반응형