본문 바로가기
쉽게 풀어쓴 C언어 Express (개정3판)

쉽게 풀어쓴 C언어 Express (개정3판) 8장 Programming 문제풀이

by Enhydra lutris 2023. 3. 30.

예전에 써뒀던 글인데 코드 복붙을 잘못해서 들여쓰기가 안되어 있습니다

개발도구에 코드 복붙하시고, 비주얼 스튜디오 기준 Ctrl + K + F를 하면 들여쓰기가 됩니다.


1번


#include <stdio.h>


double square(double x);


int main(void)

{

double m;


printf("정수를 입력하시오: ");

scanf("%lf", &m);

printf("주어진 정수 %lf의 제곱은 %lf입니다.", m, square(m));


return 0;

}


double square(double x)

{

double a;


a = x * x;

return a;

}


2번


#include <stdio.h>


void check_alpha(char a);


int main(void)

{

char ch;

printf("문자를 입력하시오: ");

ch = getchar();

check_alpha(ch);


return 0;

}


void check_alpha(char a)

{

int i;

for(i=97;i<=122;i++)

{

if (i == a)

{

printf("%c는 알파벳 문자입니다.", a);

}

}

}


3번


#include <stdio.h>


double cal_area(double radius);


int main(void)

{

double x;

printf("원의 반지름을 입력하시오:");

scanf("%lf", &x);

printf("원의 면적은 %lf입니다.", cal_area(x));


return 0;

}


double cal_area(double radius)

{

int area;

area = 3.141592 * radius * radius;

return area;

}


4번


#include <stdio.h>


int is_leap(int year);


int main(void)

{

int y;

printf("연도를 입력하시오: ");

scanf("%d", &y);

printf("%d년은 %d일입니다.", y, is_leap(y));


return 0;

}


int is_leap(int year)

{

if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))

{

return 366;

}

else

{

return 365;

}

}


5번


#include <stdio.h>


int round(double f);


int main(void)

{

double a;


printf("실수를 입력하시오: ");

scanf("%lf", &a);

printf("반올림한 값은 %d입니다.", round(a));


return 0;

}


int round(double f)

{

return (int)(f + 0.5);

}


6번


#include <stdio.h>


int even(int n);

int absolute(int n);

int sign(int n);


int main(void)

{

int a;


printf("정수를 입력하시오:");

scanf("%d", &a);

if (even(a) == 1)

{

printf("even()의 결과: 짝수\n");

}

else

{

printf("even()의 결과: 홀수\n");

}


printf("absolute()의 결과: %d\n", absolute(a));


if (sign(a) == 1)

{

printf("sign()의 결과: 양수\n");

}

else if(sign(a) == -1)

{

printf("sign()의 결과: 음수\n");

}

else

{

printf("sign()의 결과: 0\n");

}


return 0;

}


int even(int n)

{

if (n % 2 == 0)

{

return 1;

}

else

{

return 0;

}

}


int absolute(int n)

{

if (n < 0)

{

return n * -1;

}

else

{

return n;

}

}


int sign(int n)

{

if (n < 0)

{

return -1;

}

else if (n > 0)

{

return 1;

}

else

{

return 0;

}

}


7번


#include <stdio.h>


int get_tax(int income);


int main(void)

{

int a;


printf("소득을 입력하시오(만원):");

scanf("%d", &a);

printf("소득세는 %d입니다.", get_tax(a));


return 0;

}


int get_tax(int income)

{

if (income <= 1000)

{

return income * 0.08;

}

else

{

return 1000 * 0.08 + (income - 1000) * 0.1;

}

}


8번


#include <stdio.h>

#include<math.h>


double sin_degree(double degree);


int main(void)

{

double d;


for (d = 0; d <= 180; d += 10)

{

printf("sin(%lf)의 값은 %lf\n", d, sin_degree(d));

}


return 0;

}


double sin_degree(double degree)

{

double result;

result = sin((3.141592 * degree) / 180.0);

return result;

}


9번


#include <stdio.h>

#include <stdlib.h>

#include <time.h>


int b_rand();


int main(void)

{

int i;


srand(time(NULL));


for (i = 0; i < 10; i++) //책 문제에는 5번 호출하라고 써있으나 실행결과에는 10번 호출한 것으로 나와있으므로 10번 호출함

{

printf("%d ", b_rand());

}


return 0;

}


int b_rand()

{

return rand() % 2;

}


10번


#include <stdio.h>

#include <stdlib.h>

#include <time.h>


int b_rand();


int main(void)

{

int b;

char a;


srand(time(NULL));


while (1)

{

printf("앞면 또는 뒷면(1 또는 0):");

scanf("%c", &a);


b = b_rand();


if (a == '1')

{

if (b == 1)

{

printf("맞았습니다.\n");

}

else

{

printf("틀렸습니다.\n");

}

}

else if (a == '0')

{

if (b == 0)

{

printf("맞았습니다.\n");

}

else

{

printf("틀렸습니다.\n");

}

}

else if (a == 'n')

{

break;

}

}

return 0;

}


int b_rand()

{

return rand() % 2;

}


11번


#include <stdio.h>

#include <stdlib.h>

#include<time.h>


double f_rand();


int main(void)

{

int i;


srand(time(NULL));


for (i = 0; i < 5; i++)

{

printf("%lf ", f_rand());

}


return 0;

}


double f_rand()

{

return rand() / (double)RAND_MAX;

}


12번


#include <stdio.h>


void print_value(int n);


int main(void)

{

int n;


while (1)

{

printf("값을 입력하시오(종료는 음수):");

scanf("%d", &n);

if (n < 0)

{

break;

}

print_value(n);

}


return 0;

}


void print_value(int n)

{

for (int i = 0; i < n; i++)

{

printf("*");

}

printf("\n");

}


13번


#include <stdio.h>


int is_multiple(int n, int m);


int main(void)

{

int n,m;


printf("첫번째 정수를 입력하시오:");

scanf("%d", &n);

printf("두번째 정수를 입력하시오:");

scanf("%d", &m);


if (is_multiple(n, m) == 1)

{

printf("%d는 %d의 배수입니다.", n, m);

}

else

{

printf("%d는 %d의 배수가 아닙니다.", n, m);

}


return 0;

}


int is_multiple(int n, int m)

{

if (n % m == 0)

{

return 1;

}

else

{

return 0;

}

}


14번


#include <stdio.h>

#include <math.h>


double distance(double x1, double y1, double x2, double y2);


int main(void)

{

double x1, x2, y1, y2;


printf("첫번째 점의 좌표를 입력하시오:(x, y)");

scanf("%lf %lf", &x1, &y1);

printf("두번째 점의 좌표를 입력하시오 :(x, y)");

scanf("%lf %lf", &x2, &y2);


printf("두점 사이의 거리는 %lf입니다.", distance(x1, y1, x2, y2));

}


double distance(double x1, double y1, double x2, double y2)

{

double result;

result = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);

return sqrt(result);

}


15번


#include <stdio.h>


int is_prime(int x);


int main(void)

{

int i,j;


for (i = 2; i <= 100; i++)

{

if (is_prime(i) == 1)

printf("%d ", i);

}


return 0;

}


int is_prime(int x)

{

int i;

for (i = 2; i < x; i++) {

if (x % i == 0)

{

return 0;

}

}

return 1;

}


16번


#include <stdio.h>


double factorial(int n);


int main(void)

{

int n;

double e = 1.0;


printf("어디까지 계산할까요: ");

scanf("%d", &n);


for (int i = 1; i <= n; i++)

{

e += (1 / factorial(i));

}

printf("오일러의 수는 %lf입니다.", e);


return 0;

}


double factorial(int n)

{

double result = 1;


for (int i = 1; i <= n; i++)

result *= i;

return result;

}


17번


#include <stdio.h>

#include <math.h>


int f_equal(double x, double y);

int main(void)

{

double a, b;


printf("실수를 입력하시오: ");

scanf("%lf", &a);

printf("실수를 입력하시오: ");

scanf("%lf", &b);


if (f_equal(a, b) == 1)

{

printf("두 개의 실수는 서로 같음\n");

}

else

{

printf("두 개의 실수는 서로 다름\n");

}

return 0;

}


double f_abs(double x)

{

if (x > 0)

{

return x;

}

else

{

return -x;

}

}

double f_min(double x, double y)

{

if (x > y)

{

return y;

}

else

{

return x;

}

}

int f_equal(double x, double y)

{

double value;

value = f_abs(x - y) / f_min(f_abs(x), f_abs(y));

if (value < 0.000001)

{

return 1;

}

else

{

return 0;

}

}


18번


#include <stdio.h>


int add(int x, int y);

int subtract(int x, int y);

int multiply(int x, int y);

int divide(int x, int y);

int remainder(int x, int y);


int main(void)

{

int a, x, y, result;

char b;

printf("=============================================\nMENU\n=============================================\n1. 덧셈\n2. 뺄셈\n3. 곱셈\n4. 나눗셈\n5. 나머지\n");

do

{

printf("원하는 메뉴를 선택하시오(1-5):");

scanf("%d", &a);

printf("숫자 2개를 입력하시오:");

scanf("%d %d", &x, &y);


if (a == 1)

{

result = add(x, y);

}

else if (a == 2)

{

result = subtract(x, y);

}

else if (a == 3)

{

result = multiply(x, y);

}

else if (a == 4)

{

result = divide(x, y);

}

else if (a == 5)

{

result = remainder(x, y);

}

printf("연산 결과 %d\n계속하려면 y를 누르시오:", result);

scanf(" %c", &b);

} while (b == 'y');

}


int add(int x, int y)

{

return x + y;

}


int subtract(int x, int y)

{

return x - y;

}


int multiply(int x, int y)

{

return x * y;

}

int divide(int x, int y)

{

return x / y;

}


int remainder(int x, int y)

{

return x % y;

}

댓글