C언어/참고서: C언어 콘서트

C언어 44차시 함수 연습문제 4

Olivia-BlackCherry 2023. 4. 5. 17:55

목차

    1. 계산기 프로그램 작성하기, 연산별 count도 함께 출력하기

    ♣결과

    ♧코드

    local variable, if-else if-else 구문 사용

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    int add(int, int);
    int subtract(int, int);
    int multiple(int, int);
    int division(int, int);
    
    int main(void)
    {
    	int x, y;
    	char operator;
    	int add_count, subtract_count, multiple_count, division_count;
    	add_count = subtract_count = multiple_count = division_count = 0;
    
    	while (1) {
    
    		printf("식을 입력하세요 3 + 2/ 종료는ctrl+c\n");
    		scanf("%d %c %d", &x, &operator, &y);
    		
    		if (operator=='+') {
    			add_count++;
    			printf("연산결과:%d  ,+ 연산 횟수:%d  \n", add(x, y), add_count);
    		}
    		else if (operator=='-') {
    			subtract_count++;
    			printf("연산결과:%d  ,+ 연산 횟수:%d  \n", subtract(x, y), subtract_count);
    		}
    		else if (operator=='*') {
    			multiple_count++;
    			printf("연산결과:%d  ,+ 연산 횟수:%d  \n", multiple(x, y), multiple_count);
    		}
    		else if (operator=='/') {
    			division_count++;
    			printf("연산결과:%d  ,+ 연산 횟수:%d  \n", division(x, y), division_count);
    		}
    		else {
    			printf("시스템을 종료합니다");
    			break;
    		}
    
    	}
    	
    	return 0;
    }
    
    int add(int x, int y)
    {
    	return x+y;
    }
    
    int subtract(int x, int y)
    {
    	return x - y;
    }
    
    int multiple(int x, int y)
    {
    	return x * y;
    }
    
    int division(int x, int y)
    {
    	return x / y;
    }
    
    //olivia_codingschool

    static variable , swtich문 사용

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int add(int, int);
    int sub(int, int);
    int mult(int, int);
    int div(int, int);
    
    int main(void)
    {
    	int op1, op2, result, quit;
    	char op;
    
    	while(1){
    		printf("연산을 입력하시오(종료는 Ctrl-Z):");
    		quit = scanf("%d %c %d", &op1, &op, &op2);
    		if( quit != 3 ) 
    			return 0;
    		switch( op){
    		case '+':
    			result = add(op1, op2);
    			break;
    		case '-':
    			result = sub(op1, op2);
    			break;
    		case '*':
    			result = mult(op1, op2);
    			break;
    		case '/':
    			result = div(op1, op2);
    			break;
    		}
    		printf("연산 결과:%d\n", result);
    	}
    
    	return 0;
    }
    int add(int op1, int op2)
    {
    	static int count =0;
    	count++;
    	printf("덧셈은 총 %d번 호출되었습니다\n", count);
    	return op1+op2;
    }
    
    int sub(int op1, int op2)
    {
    	static int count =0;
    	count++;
    	printf("뺄셈은 총 %d번 호출되었습니다\n", count);
    	return op1-op2;
    }
    int mult(int op1, int op2)
    {
    	static int count =0;
    	count++;
    	printf("곱셈은 총 %d번 호출되었습니다\n", count);
    	return op1*op2;
    }
    int div(int op1, int op2)
    {
    	static int count =0;
    	count++;
    	printf("나눗셈은 총 %d번 호출되었습니다\n", count);
    	return op1/op2;
    }
    //olivia_codingschool

     

     

    2. 계속 돈을 입금할 때 총액 계산(static, local variable)

    ♣결과

    ♧코드

    <static variable>

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    int add(int, int);
    
    int main(void)
    {
    	int amount;
    
    	while (1) {
    		printf("얼마를 입금하시겠습니까? 0:종료\n");
    		scanf("%d", &amount);
    		if (amount == 0) break;
    		printf("지금까지의 저축액은 %d입니다.", save(amount));
    	}
    	
    	return 0;
    }
    
    int save(int amount)
    {
    	static int all_amount;
    	all_amount += amount;
    	return all_amount;
    }//olivia_codingschool

    <global variable)

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    int add(int, int);
    int all_amount;
    int main(void)
    {
    	int amount;
    
    	while (1) {
    		printf("얼마를 입금하시겠습니까? 0:종료\n");
    		scanf("%d", &amount);
    		if (amount == 0) break;
    		printf("지금까지의 저축액은 %d입니다.", save(amount));
    	}
    	
    	return 0;
    }
    
    int save(int amount)
    {
    	all_amount += amount;
    	return all_amount;
    }

     

     

    3. 재귀호출 이용해서 각 자리수 출력하기(높은 자리부터)

    ♣결과

    >>1 4 5 6

    ♧코드

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int show_digit(int);
    int x = 1456;
    int main(void)
    {
    	show_digit(x);
    	return 0;
    }
    
    int show_digit(int x)
    {
    	if (x > 0) {
    		show_digit(x/10);
    		printf("%d ", x%10);
    	}
    }
    //olivia_codingschool

     

     

    4. 재귀호출이용해서 1의 3제곱, 2의 3제곱,..., 5의 세제곱까지의 합을 구하시오

    ♣결과

    >> 225

    ♧코드

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <math.h>
    int f(int);
    int n = 5;
    int sum = 0;
    
    int main(void)
    {
    	f(n);
    	printf("%d", sum);
    }
    int f(int n)
    {
    	if (n > 0) {
    		f(n - 1);
    		sum += pow(n, 3);
    	}
    }
    //olivia_codingschool

     

     

    .