강동영의 일상
[쉽게 풀어쓴 C언어 Express] 6일 차 본문
01. 0 또는 1 값을 무작위로 반환하는 coin_rand() 함수를 작성하여 간단한 동전 던지기 게임을 시뮬레이션하여 보자. 컴퓨터가 동전을 던지고 사용자는 앞뒤를 말한다. 컴퓨터는 coin_rand()를 이용하여 생성된 난수가 1이면 동전의 앞면으로 간주하고 0이면 동전의 뒷면으로 간주한다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int coin_rand() {
int coin;
srand(time(NULL));
coin = rand() % 2;
return 0;
}
int main() {
while (1) {
int coin = 0, user = 0;
char go = 0, y = 0, n = 0;
coin_rand();
printf("앞면 또는 뒷면(1 또는 0):");
scanf("%d", &user);
if (coin == user) {
printf("맞았습니다.");
}
else {
printf("틀렸습니다.");
}
printf("\n계속하시겠습니까?(y 또는 n):");
getchar();
scanf("%c", &go);
if (go == 'n')
break;
else if (go == 'y')
continue;
}
return 0;
}
앞면 또는 뒷면(1 또는 0):1
틀렸습니다.
계속하시겠습니까?(y 또는 n):y
앞면 또는 뒷면(1 또는 0):0
맞았습니다.
계속하시겠습니까?(y 또는 n):y
앞면 또는 뒷면(1 또는 0):
02. 화면에 가로로 막대그래프를 그리는 프로그램을 작성하여 보자. 인수의 값만큼의 별표 문자를 출력하는 함수 print_star(int n)를 작성하라. 반복적으로 사용자로부터 값을 입력받아서 print_star()를 호출하여 입력값만큼 막대를 그리는 프로그램을 완성하라. 사용자가 음수를 입력하면 반복을 중단하라.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void print_star(int n);
int main() {
int n;
while (1) {
printf("\n값을 입력하시오(종료는 음수): ");
scanf("%d", &n);
if (n < 0) {
break;
}
print_star(n);
}
return 0;
}
void print_star(int n) {
for (int i = 0; i < n; i++) {
printf("*");
}
}
값을 입력하시오(종료는 음수): 5
*****
값을 입력하시오(종료는 음수): 10
**********
값을 입력하시오(종료는 음수): -1
03. 오일러의 수 e는 자연로그의 밑수로 사용된다. 이 값은 다음과 같은 식에 의하여 근사치를 구할 수 있다. 팩토리얼 값을 계산하는 함수 factorial()을 작성하고 오일러의 수를 계산하는 프로그램을 작성하라.
e = 1 + 1/1! + 1/2! + 1/3! + ⋯ + 1/n!
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int factorial(int user);
int main() {
int user;
double e = 1;
printf("어디까지 계산할까요: ");
scanf("%d", &user);
for(int i = 1; i <= user; i++)
e = e + 1.0 / factorial(i);
printf("오일러의 수는 %lf입니다.", e);
return 0;
}
int factorial(int user) {
if (user == 1)
return user;
else
return (user * factorial(user - 1));
}
어디까지 계산할까요: 30
오일러의 수는 2.718282입니다
04. 두 개의 부동 소수점 수가 근사적으로 같은 값이면 1을 반환하고 근사적으로 같지 않으면 0을 넘겨주는 함수 math_equal(a, b)을 작성하시오. 근사적으로 같다고 하는 것은 다음의 부등식을 만족하는 경우라고 가정한다.
|a - b| / min(|a|,|b|) < e
부동 소수점 수의 절대값을 구하는 함수와 두수 중에서 최솟값을 찾는 함수는 라이브러리 함수를 이용하라. e는 상수로서 0.000001로 정의된다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#define e 0.000001
double math_equal(double a, double b);
double min(double a, double b);
int main() {
double a, b;
printf("실수를 입력하시오: ");
scanf_s("%lf", &a);
printf("실수를 입력하시오: ");
scanf_s("%lf", &b);
math_equal(a, b);
return 0;
}
double min(double a, double b) {
double c = a - b;
if (c == a - b) {
return b;
}
if (c == b - a) {
return a;
}
}
double math_equal(double a, double b) {
double c = a - b;
if ((fabs(c) / (min(fabs(a), fabs(b))) < e)) {
printf("두 개의 실수는 서로 같음");
return 0;
}
if ((fabs(c) / (min(fabs(a), fabs(b))) >= e)) {
printf("두 개의 실수는 서로 다름");
return 1;
}
}
실수를 입력하시오: 1.2345
실수를 입력하시오: 1.2346
두 개의 실수는 서로 다름'coding' 카테고리의 다른 글
| [쉽게 풀어쓴 C언어 Express] 8일 차 (2) | 2023.01.02 |
|---|---|
| [쉽게 풀어쓴 C언어 Express] 7일 차 (0) | 2023.01.01 |
| [쉽게 풀어쓴 C언어 Express] 5일 차 (0) | 2022.11.15 |
| [쉽게 풀어쓴 C언어 Express] 4일 차 (2) | 2022.11.04 |
| [쉽게 풀어쓴 C언어 Express] 3일 차 (2) | 2022.11.03 |