Notice
Recent Posts
Recent Comments
Link
강동영의 일상
[쉽게 풀어쓴 C언어 Express] 7일 차 본문
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'coding' 카테고리의 다른 글
| [쉽게 풀어쓴 C언어 Express] 9일 차 (0) | 2023.01.03 |
|---|---|
| [쉽게 풀어쓴 C언어 Express] 8일 차 (2) | 2023.01.02 |
| [쉽게 풀어쓴 C언어 Express] 6일 차 (0) | 2022.11.16 |
| [쉽게 풀어쓴 C언어 Express] 5일 차 (0) | 2022.11.15 |
| [쉽게 풀어쓴 C언어 Express] 4일 차 (2) | 2022.11.04 |