24. 자연수 두 개를 입력받은 후, 최대 공약수를 구하는 프로그램을 while문을 이용해 작성하시오.
#include <stdio.h>
int main(void)
{
int x, y, r;
printf("두 개의 정수를 입력하시오: ");
scanf_s("%d %d", &x, &y);
while (y != 0)
{
r = x % y;
x = y;
y = r;
}
printf("최대 공약수는 %d입니다.\n", x); return 0;
}
유클리드 호제법이다. 모든 방법이 책에 있으므로 어렵지 않다.
25.
구간 $[a,b]$ 에서 연속인 함수 $f(x)=x^{2}(f(x)\ge 0)$ 에 대해 $x=a,x=b,y=f(x)$ 로 둘러싸인 넓이(정적분)는 다음과 같이 정의된다. $$S(x)=\int_{b}^{a}f(x)dx=\int_{b}^{x}x^{2}dx$$ 구분구적법을 이용하여 $f(x)$ 의 정적분 값을 계산하시오.
이 책을 중 1때 샀는데, 왜 다른 책으로 갈아탔는지 알 것 같다. 연습문제로 구분구적법이 나오면 중1이 어떻게 풀겠어...
우선 정적분의 정의를 살펴보자.
여기에 조건대로 하나하나 대입하면 된다.
#include <stdio.h>
int main(void)
{
double a, b, dx, sum = 0, res, y;
int k, n;
printf("적분 구간 시작은? ");
scanf_s("%lf", &a);
printf("적분 구간 끝은? ");
scanf_s("%lf", &b);
printf("n(적분 구간의 개수)는? ");
scanf_s("%d", &n);
dx = (b - a) / n;
for (k = 1; k <= n; k++)
{
y = (a + k * dx) * (a + k * dx);
res = dx * y;
sum += res;
}
printf("f(x) = x^2의 [%.1lf, %.1lf]구간의 적분 근사치는 %lf입니다.\n", a, b, sum);
return 0;
}
수식 속 기호는 코드에서 다음과 같이 바꾸어 사용했다.
정적분의 정의대로 하면 된다. 구분구적법이므로 n을 무한대로 보내진 않고 개수를 입력받아 계산한다.
26. 다음 조건을 만족시켜 369게임 프로그램을 작성하시오(sprintf(), strchr() 함수 이용)
①1부터 999까지의 진행결과만 출력한다.
②숫자가 3의 배수이거나 숫자에 3이 들어간 경우에는 박수를 친다.
③한 행에 열한 개를 출력한다.
④박수를 쳐야 할 위치에서는 대문자 P를 출력한다.
#include <stdio.h>
#include <string.h>
int main(void)
{
int i;
char str[10];
int count = 0;
for (i = 1; i <= 999; i++)
{
sprintf_s(str, "%d", i);
char* ptr = strchr(str, '3');
char* ptr1 = strchr(str, '6');
char* ptr2 = strchr(str, '9');
if (ptr != NULL)
printf("P\t");
else if (ptr1 != NULL)
printf("P\t");
else if (ptr2 != NULL)
printf("P\t");
else
printf("%s\t", str);
count++;
if (count % 11 == 0)
{
printf("\n");
count = 0;
}
}
return 0;
}
sprint나 strchr은 써본 적이 없어서 난감했다. 배열과 포인터를 알아야 쓸 수 있는 함수다. 교재에서 배열은 7장에, 포인터는 10장에 나온다. 왜 이런 문제를 냈는지 모르겠다. 조건문과 반복문으로도 369를 구현할 수 있다.
그리고 369게임 프로그램을 작성하라더니 조건이 이상하다. 3, 6, 9가 들어가면 박수를 치는 게임인데 3의 배수가 왜 튀어 나왔을까. 그냥 조건 무시하고 내가 아는 369게임 프로그램을 만들었다.
sprintf로 str에 수를 입력한다.
str에 3이 있으면 ptr1이 가리키도록 하고, 6이 있으면 ptr2가 가리키도록 하고, 9가 있으면 ptr3이 가리키도록 한다. 없으면 각 포인터는 NULL을 가리킨다.
포인터가 NULL이 아니라면 3 또는 6 또는 9가 있다는 소리다. 각 경우에 대해 P를 출력하도록 if else문을 작성하고, 아닌 경우엔 문자열을 출력한다.
출력 후 count를 증가시킨다. count가 11이 되면 줄을 바꾼다.
'프로그래밍 > C, C++' 카테고리의 다른 글
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 6 (7,8,9,10) (0) | 2020.08.01 |
---|---|
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 6 (1,2,3,4,5,6) (0) | 2020.07.29 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 5 (19,20,21,22,23) (0) | 2020.07.26 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 5 (13,14,15,16,17,18) (0) | 2020.07.25 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 5 (8,9,10,11,12) (0) | 2020.07.24 |