C \ C++/C 스터디 예제 풀이

[누렁이] 1과 예제 풀이

안정민 2023. 3. 18. 21:04

1. Horner 법칙을 이용하여 다항식을 계산하는 C프로그램을 작성하여라

#include <stdio.h>
#define MAX_SIZE 101

double horner(int* coeff, int n, int x);

int main() {

	int coeff[MAX_SIZE] = { 1, 2, 3, 4, 5 };	//계수
	int n = 5;  //차수
	double result, x;

	printf("x의 값은? >>> ");
	scanf_s(" %lf", &x);

	result = horner(coeff, n, x);

	printf("다항식 ");
	for (int i = n - 1; i >= 0; i--) {
		if (i == 0) {
			printf("%d", coeff[i]);
			break;
		}
		if (coeff[i] == 0)
			continue;

		printf("%d*x^%d + ", coeff[i], i);
	}
	printf("에서 x = %.1f일때 다항식의 값은 %.1f입니다.", x, result);

	return 0;
}

double horner(int* coeff, int n, int x) {
	//n번의 덧셈과 n번의 곱셈으로 해결
	double result = coeff[n - 2] + coeff[n - 1] * x;

	for (int i = n - 3; i >= 0; i--) {
		result = result * x + coeff[i];
	}

	return result;
}

2. 정수 3개를 오름차순으로 출력하는 C프로그램을 작성하여라

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
    int a = 0, b = 0, c = 0;
    printf("세 개의 정수:");
    scanf("%d%d%d", &a, &b, &c);
    {
        if (a > c)
        {
            if (b > c)
            {
                printf("%d %d %d\n", a, b, c);
            }
            else
            {
                printf("%d %d %d\n", a, c, b);
            }
        }
        else
        {
            printf("%d %d %d\n", c, a, b);
        }
    else
    {
        if (b > c)
        {
            if (a > c)
            {
                printf("%d %d %d\n", b, a, c);
            }
            else
            {
                printf("%d %d %d\n", b, c, a);
            }
        }
        else
        {
            printf("%d %d %d\n", c, b, a);
        }
    }
    return 0;
} 

/ a, b, c 리스트로 받아서 sorting

3. 계승함수 n! 에 대해 순환함수와 반복함수로 프로그램을 만들어라

-반복함수

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int factorial(int n);
int main(void){
int n, r;
printf("정수 입력 >>> ");
scanf("%d", &n);
r = factorial(n);
printf("result >>> %d", r);
}

int factorial(int n) {
	int k, v = 1;
	for (k = n; k > 0; k--)
		v = v * k;
	return(v);
}

-순환함수

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
int factorial(int n);
int main(void) {
	int n, r;
	printf("정수 입력 >>> ");
	scanf("%d", &n);
	r = factorial(n);
	printf("result >>> %d", r);
}

int factorial(int n) {
	if (n == 1) return (1);
	else return(n * factorial(n - 1));
}

4. 피보나치 수열에 대한 C함수를 작성하여라

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int fibonacci(int n);

int main(void) {
	int n, r, i;
	printf("정수 입력 >>> ");
	scanf("%d", &n);
	for (i = 0; i < n; i++) {
		r = fibonacci(i);
		printf("%d", r);
	}
	return 0;
}

int fibonacci(int n) {
	if (n == 0) return 0;
	else if (n == 1) return 1;
	else return (fibonacci(n - 1) + fibonacci(n - 2));
}

5. 이항계수를 계산하는 반복함수를 작성

#include <stdio.h>

int factorial(int n) {
    int i, result = 1;
    for (i = n; n > 0; n--)
        result *= n;
    return result;
}

int nCk(int n, int k) {
    if (k == 0 || k == n) return 1;
    else if ((0 < k) && (k < n)) {
        int i, numerator = 1;
        if (k > n / 2) k = n - k;
        for (i = 1; i <= k; i++, n--)
            numerator *= n;
        return numerator / factorial(k);
    }
    else return 0;
}

int main(void) {
    int n, k, result;
    n = 7; k = 5;
    result = nCk(n, k);
    printf("%dC%d = %d\n", n, k, result);
    return 0;
}

6. Ackermann함수를 계산하는 C함수를 계산하여라

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int A(int m, int n);

int main(void) {
	int m, n;
	printf("정수 1을 입력 >>");
	scanf_s("%d", &m);
	printf("정수 2을 입력 >>");
	scanf_s("%d", &n);
	int num = A(m, n);
	printf("계산의 결과 값은 %d이다.", num);
	
	return 0;
}

int A(int m, int n) {
	while (m != 0) {
		if (n == 0) {
			m = m - 1;
			n = 1;
		}
		else {
			m = m - 1;
			n = A(m, n - 1);
		}
	}
	return n + 1;
}

7. 하노이의 탑 순환함수 프로그램

++업로드