Notice
Recent Posts
Recent Comments
Link
«   2026/08   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Archives
Today
Total
관리 메뉴

강동영의 일상

[쉽게 풀어쓴 C언어 Express] 7일 차 본문

coding

[쉽게 풀어쓴 C언어 Express] 7일 차

rokaf6444 2023. 1. 1. 02:30

01. 순환 기법을 이용하여 지숫값을 계산하는 함수 power(int base, int power_raised)를 작성하라. power(2,3)가 호출되면 2^3을 계산하여 반환한다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int power(int base, int power_raised) {
	int sum = 1; // sum == 모든 곱의 결과값

	for (int i = 0; i < power_raised; i++)
		sum = sum * base; // base를 power_raised만큼 곱하고 sum에 저장

	return sum; // 함수의 결과값을 반환
}

int main() {
	int base, power_rasied; // 각각 밑수와 지수

	printf("밑수: ");
	scanf("%d", &base);
	printf("지수: ");
	scanf("%d", &power_rasied);

	int result = power(base, power_rasied);
	printf("%d^%d = %d", base, power_rasied, result);

	return 0;
}

 

밑수: 2
지수: 10
2^10 = 1024

 

 

 

02. 주어진 정수가 몇 개의 자릿수를 가지고 있는지 계산하는 프로그램을 순환을 이용하여 작성해보자. 예를 들어서 12345의 경우에는 5가 출력된다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int number_size(int number) {
	int size;

	if (number == 0) {
		return 0; // 10으로 나눌 값이 0 -> 자릿수 계산이 끝남, 반환값은 0
	}
	else
	size = number_size(number / 10) + 1; // 일의 자릿수 제거, 자릿수 1씩 측정

	return size;
}

int main() {
	int number, answer; // scanf로 값을 입력, number 값 초기화 불필요

	printf("정수를 입력하시오: ");
	scanf("%d", &number); // 자릿수를 구할 정수값을 입력

	answer = number_size(number);
	printf("자릿수의 개수: %d", answer);

	return 0;
}

 

정수를 입력하시오: 12345
자릿수의 개수: 5

 

 

 

03. 다음과 같은 수식의 값을 계산하는 순환적인 프로그램을 작성하라.

 

1/1 + 1/2 + 1/3 + ⋯ + 1/n

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

double func_sum(int n) {
	double sum = 0; // 실수 변수 필요

	if (n == 1) {
		return 1;
	}
	sum = func_sum(n - 1) + 1.0 / n; // 점점 쉬워지는 방향

	return sum;
	}

int main() {
	int user; // 입력한 값
	double result; // 수식의 값

	printf("n의 값: ");
	scanf("%d", &user);

	result = func_sum(user);
	printf("%lf", result);

	return 0;
}

 

n의 값: 10
2.928968

 

 

 

04. 순환 호출을 이용하여 피보나치수열을 계산해 보자. 피보나치수열이란 다음과 같이 정의되는 수열이다.

 

             {0                                           n = 0}

fib(n) = {1                                           n = 1}

             {fib(n - 1) + fib(n - 1)    otherwise}

 

즉 일반적인 경우, 앞의 두 개의 숫자를 더해서 뒤의 숫자를 만들면 된다. 정의에 따라 수열을 만들어 보면 다음과 같다.

 

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int fib(int n) {
	if (n == 0) {
		return 0; // fib(0) = 0
	}
	if (n == 1) {
		return 1; // fib(1) = 1
	}
	else {
		int answer = fib(n - 2) + fib(n - 1); // fib(n) = fib(n - 2) + fib(n - 1) -> n = 0, 1 제외

		return answer;
	}
}

int main() {
	int user;

	printf("정수를 입력하시오: ");
	scanf("%d", &user);

	for (int i = 0; i <= user; i++) { // 사용자가 입력한 정수까지 출력
		printf("fib(%d)=%d\n", i, fib(i));
	}
	return 0;
}

 

정수를 입력하시오: 15
fib(0)=0
fib(1)=1
fib(2)=1
fib(3)=2
fib(4)=3
fib(5)=5
fib(6)=8
fib(7)=13
fib(8)=21
fib(9)=34
fib(10)=55
fib(11)=89
fib(12)=144
fib(13)=233
fib(14)=377
fib(15)=610