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

C언어 28차시 반복문 연습문제 3

Olivia-BlackCherry 2023. 3. 27. 22:50

1. 피보나치 수열 구하기

♣결과

♧코드

<if-else if, else 구문>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int i, n, a, b, c;
	printf("피보나치 수열의 몇 번째 항까지 구할까요?");
	scanf("%d", &n);

	printf("0 1 ");
	for (i = 0; i <= n; i++) {
		if (i == 0) a = 0;
		else if (i == 1) b = 1;
		else {
			c = a + b;
			printf("%d ", c);
			a = b;
			b = c;
		}
	}
	printf("\n");
	return 0;
}

<더 간단히>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
	int i, a = 0, b = 1, c, n;

	printf("몇 번째 항까지 구할까요? ");
	scanf("%d", &n);
	for (i = 0; i <= n; i++) {
		printf("%d, ", a);
		c = a + b;
		a = b;
		b = c;
	}
	return 0;
}

 

 

2. 남은 연료의 양 계산하기

♣결과

♧코드

//오류를 찾아보자! 

//olivia_codingschool

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int full, now, input_value;
	char status;
	full = 1000;
	now = 200;
	printf("지금은 %d리터 남아있습니다.", now);

	while (now > 100) {
		printf("충전하려면 +, 소모하려면 -를 붙여 숫자를 입력해주세요.\n");
		scanf("%c%d", &status, &input_value);
		printf("%c %d \n", status, input_value);

		if (status == '-') {
			printf("-입니다\n");
			now = now - input_value;
		}
		if (status == '+') {
			printf("+입니다\n");
			now = now + input_value;
		}
	}
	printf("연료가 10프로 미만으로 남았습니다");
	

	return 0;
}

// 다른 방법

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	double capacity, supply, pumped;
	capacity = 1000.0;
	
	printf("현재 채워진 연료는 얼마인가요?\n");
	scanf("%lf", &supply);

	while (supply > capacity * 0.10) {
		printf("연료의 변화량은 얼마인가요?\n");
		scanf("%lf", &pumped);
		supply = supply + pumped;
		if (supply < 0.0)
			supply = 0.0;
		if (supply > capacity)
			supply = capacity;
		printf("현재 남은 양은 %lf입니다\n", supply);
	}
	printf("\n남은 연료의 양이 얼마 되지 않습니다.\n");
	return 0;
}

 

 

3. 소수 판별하기

♣결과

♧코드

//olivia_codingschool

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int i, j, number, is_prime;
	is_prime = 1;
	printf("구하고자 하는 숫자를 입력하세요\n");
	scanf("%d", &number);

	for (i = 2; i <= number; i++) {
		if (i == number) continue;
		if (number % i == 0) {
			is_prime = 0;
			break;
		}
	}
	if (is_prime == 1)
		printf("%d는 소수이다.", number);

	return 0;
}

 

 

4. 피타고라스 정리를 만족하는 세 삼각형의 변 구하기

1) 삼각형의 가장 긴 변은 나머지 두 변의 합보다 작다

2) 직각 삼각형의 가장 긴 한 변의 제곱은 나머지 두 변의 제곱의 합과 같다.

♣결과

♧코드

<if-else 구문>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int a, b, c;

	for (a = 1; a <= 100; a++) {
		for (b = 1; b <= 100; b++) {
			for (c = 1; c <= 100; c++) {
				if ((a + b > c) && (c * c == a * a + b * b)){
					printf("a=%d b=%d c=%d\n", a, b, c);
				}
				else if ((a + c > b) && (b * b == a * a + c * c)) {
					printf("A=%d B=%d C=%d\n", a, b, c);
				}
				else if ((b + c > a) && (a * a == b * b + c * c)) {
					printf("%d %d %d\n", a, b, c);
				}
			}
		}
	}
	return 0;
}

<논리 연산자 연결>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int a, b, c;

	for (a = 1; a <= 100; a++) {
		for (b = 1; b <= 100; b++) {
			for (c = 1; c <= 100; c++) {
				if (((a + b > c) && (c * c == a * a + b * b)) || ((a + c > b) && (b * b == a * a + c * c)) || ((b + c > a) && (a * a == b * b + c * c)))
					printf("a=%d b=%d c=%d\n", a, b, c);
			}
		}
	}

	return 0;
}

 

5. 도박꾼이 목표 금액에 도달하는 확률 

초기 금액 50달러

목표 금액 250달러

한 번의 도박에 1달러를 건다.

총 1000회의 도박을 한다. 1회의 도박마다 가진 돈을 다 잃거나 목표 금액인 250달러에 도달하면 도박을 중지한다. 

1000회의 횟수 동안 도박사가 이길 확률이 얼마나 될지를 계산해보자.

♣결과

♧코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
	int stake = 50;
	int goal = 250;
	int T = 1000;
	int t;

	int bets = 0;
	int wins = 0;
	srand(time(NULL));
	for (t = 0; t < T; t++) {

		int cash = stake;
		while (cash > 0 && cash < goal) {
			bets++;
			if ((double)rand() / RAND_MAX < 0.5) cash++;
			else                     cash--;
		}
		if (cash == goal) wins++;
	}

	printf("초기 금액 $%d \n", stake);
	printf("목표 금액 $%d \n", goal);
	printf("%d 중의 %d번 승리\n", T, wins);
	printf("이긴 확률=%f \n", 100.0 * wins / T);
	return 0;
}

 

 

6. 파이 계산하기 - Gregory-Leibniz 무한수열 이용

출처: 어서와 자바는 처음이지

파이를 구하는 방법이다. 

파이: 원에서 원주와 반지름의 비율을 나타내느느 상수

파이를 계산하는 방법 중 하나로 Gregory-Leibniz의 무한수열을 활용한다. 

프로그램을 작성해보자.

 

♣결과

♧코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
	int i, n;
	printf("숫자를 입력하세요");
	scanf("%d", &n);
	double x, y, pie;
	pie = 0;
	
	for (i = 1; i <= n; i++) {
		if (i == 1) x = 1;
		else x = x + 2;

		if (i % 2 == 1) pie = pie + 4 / x;
		else pie = pie - 4 / x;
	}
	printf("%lf\n", pie);
	return 0;
}