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

C언어 40차시 함수 연습문제 1

Olivia-BlackCherry 2023. 4. 4. 16:38

목차

    1. 로또 프로그램 만들기 

    총 6자리, 1~45 사이 숫자, 중복 허용안됨

     

    ♣결과

    ♧코드

    <do~ while 구문을 이용하여 중복 체크를 한 경우>

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	srand(time(NULL));
    	 //배열을 이용하여 중복체크
    	int lotto[6] = { 0 };
    	int flag = 1;
    	int pick_n;
    
    	//do while 구문을 이용하여 중복체크
    	for (int i = 0; i < 6; i++) {
    
    		do {
    			pick_n = rand() % 45 + 1;
    			for (int j = 0; j < i; j++) {
    				if (lotto[j] == pick_n) flag = 0;
    			}
    		} while (flag == 0);
    		lotto[i] = pick_n;
    		printf("%d ", pick_n);
    	}
    	return 0;
    }
    //olivia_codingschool

    <배열을 이용하여 중복 체크를 한 경우>

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	srand(time(NULL));
    	 //배열을 이용하여 중복체크
    	int number, lotto[6] = { 0 };
    	int iter_check[45] = { 0 };
    
    	for (int i=0; i < 6; i++) {
    
    		number = rand() % 45 + 1;
    		while (iter_check[number] == 1) number = rand() % 45 + 1;
    		lotto[i] = number;
    		iter_check[number] = 1;
    		printf("%d ", lotto[i]);
    	}
    	return 0;
    }

     

    2.  피보나치 수열 만들기

    ♣결과

    ♧코드

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int fibbonachi(int);
    
    int main(void)
    {
    	int x = 7;
    	for (int i = 0; i < x; i++) {
    		printf("%d ", fibbonachi(i));
    	}
    	return 0;
    }
    
    int fibbonachi(int n)
    {
    	if (n == 0) return 0;
    	else if (n == 1) return 1;
    	else return fibbonachi(n - 2) + fibbonachi(n - 1);
    }
    
    //olivia_codingschool

     

     

    3. 테일러 급수 이용하여 지수 함수 e의 x승 계산하기

    - 테일러 급수란?

    테일러 급수(Taylor series)는 함수를 무한히 미분 가능한 다항식의 합으로 근사하는 방법이다. 테일러 급수를 계산할 때는 주어진 함수의 값과 함께 근사하려는 지점의 값(x)과 계산할 항의 개수(n)가 필요하다.

    ♣결과

    7.389 정도 나옴.

    n이 너무 크면 inf로 나오기 때문에 수를 조정하기를 바란다.

    ♧코드

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <math.h>
    int fact(int);
    
    int main(void) {
    	double numerator, denominator;
    	long double result, sum=0.0;
    	int x = 2;
    	int n = 10;
    
    	for (int i = 0; i < n; i++) {
    		numerator = pow(x, i);
    		denominator = fact(i);
    		result =(long double)numerator / denominator;
    		sum += result;
    	}
    	printf("%.3Lf", sum);
    	return 0;
    }
    
    int fact(int n)
    {
    	if (n <= 1) return 1;
    	else return n* fact(n - 1);
    }
    //olivia_codingschool

     

     

    4. ATM 프로그램 만들기

    - 고객의 선택 1:잔액확인, 2:입금, 3:인출, 4:종료

    ♣결과

    ♧코드

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int deposit();
    int withdraw();
    
    int balance = 0;
    
    int main(void) {
    	int flag = 1;
    	int static customer_choice;
    
    	while (flag == 1) {
    		//고객의 선택 1:잔액확인, 2:입금, 3:인출, 4:종료
    		printf("\n1~4번 중 하나의 숫자를 입력하세요.\n1:잔액확인, 2:입금, 3:인출, 4:종료\n");
    		scanf("%d", &customer_choice);
    
    		switch (customer_choice)
    		{
    		case 1: 
    			printf("남은 잔액은 %d입니다\n", balance);
    			break;
    		case 2: 
    			printf("남은 잔액은 %d입니다\n", deposit());
    			break;
    		case 3: 
    			printf("남은 잔액은 %d입니다\n", withdraw());
    			break;
    		case 4:
    			printf("실행을 종료합니다. 좋은 하루되세요!\n");
    			flag = 0;
    			break;
    		}
    	}
    	return 0;
    }
    
    //입금
    int deposit(void) {
    	int money;
    	printf("얼마를 입금하시겠습니까?");
    	scanf("%d", &money);
    	balance += money;
    	return balance;
    }
    
    //인출
    int withdraw(void) {
    	int money;
    	printf("얼마를 인출하시겠습니까?");
    	scanf("%d", &money);
    	balance -= money;
    	return balance;
    }
    //olivia_codingschool

     

     

    .