IT/C언어

[쉽게 풀어쓴 C언어 Express 개정4판] 8장 Exercise & Programming

곰탱이들 2024. 2. 11.

8장 Exercise & Programming

8장 Exercise

 

1. 1

2. 3번: y = sin(x) + sqrt(x * x * -2 * a) + ldexp(1.0 * 10;

3. 1, 4

4. 1

 

5. a. 1.72(double)
    b. 1(double)
    c. 2(double)

 

6. a. 0-9
    b. 2-6

 

7. a. y = log10(x) + exp(x)
    b. y = sin(x) + sqrt(x * x * -2 * a) + ldexp(1.0 * 10;)

 

8. a. void printf_error(int n);
    b. double larger_of(double x, double y);
    c. void side_effect(void);

 

9. int f(void) - return 10+20;
    coid g(int, int) - return:
    double h(double, int); - return 1.0;

 

10. int f(int n):
      printf(“result: %d\n:, f(10));
      return result;

 

11. a. double f(double x, double y) y의 자료형 정의 불분명
      b. int f(double x, double y) 괄호제거
      c. int f(int x, int y); 괄호제거
      d. float get_area(float radius, float pi); 자료형 명시

 

12.

int sum_one2n(int n){

	int result = 0;
		for (; n > 0; n--)
			result = +n;

 

13. a. int half_of(int x) - ;제거
      b. printf_message(); 입력형과 실제 입력 일치해야한다
      c. double half_of(double), double half_of(double x) 원형 입력형 자료형 불일치
      d. sum = x + y; -> return x + y; 변수 sum 선언 누락
      e. int sum(void) 출력 안 한다고 선언 했으나 정수 출력함

 

 

 

 

 

8장 Programming

 

1.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int even(int n);
int absoulte(int n);
int sign(int n);

int main() {

	int n;

	printf("정수를 입력하시오: ");
	scanf("%d", &n);

	printf("even()의 결과: %d\n", even(n));
	printf("absoulte()의 결과: %d\n", absoulte(n));
	printf("sign()의 결과: %d", sign(n));
}

int even(int n) {
	return (n % 2 == 0) ? 1 : 0;
}

int absoulte(int n) {
	return (n > 0) ? n : -n;
}

int sign(int n) {
	return (n > 0) ? 1 : 1;
}

 

2.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int is_multiple(int n, int m);

int main()
{
	int n, m;

	printf("첫 번째 정수를 입력하시오: ");
	scanf("%d", &n);

	printf("두 번째 정수를 입력하시오: ");
	scanf("%d", &m);

	if (is_multiple(n, m))
		printf("%d는 %d의 배수입니다. ", n, m, n / m);
	else
		printf("%d는 %d의 배수가 아닙니다.", n, n);
}

int is_multiple(int n, int m) 
{
	if (n % m)
		return 0;
	else
		return 1;
}

 

3.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

double get_bigger(double num1, double num2) {
	return num1 > num2 ? num1 : num2;
}

int main() {

	double num1, num2;

	printf("실수를 입력하시오: ");
	scanf("%lf %lf", &num1, &num2);

	printf("큰 수는 %.1lf입니다", get_bigger(num1, num2));

	return 0;
}

 

4.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int check_alpha(char a);

int main()
{
	char a;
	printf("문자를 입력하시오: ");
	scanf("%c", &a);

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

	return 0;
}

int check_alpha(char a)
{
	if ('a' <= a && a <= 'z') || ('A' <= a && a <= 'Z')
		return 1;
}

 

5.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

double get_radius() {

	double r;
	printf("원의 반지름을 입력하시오: ");
	scanf("%lf", &r);

	return r;
}
double cal_area(double r) {

	return 3.141592 * r * r;
}
int main() {

	double r;
	r = get_radius();
	printf("원의 면적은 %.2lf입니다.\n", cal_area(r));

	return 0;
}

 

6.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int is_leap(int year);

int main() {
	
	int year;

	printf("연도를 입력하시오: ");
	scanf("%d", &year);

	if (is_leap(year))
		printf("%d년은 윤년입니다 ", year);
	else
		printf("%d년은 윤년이 아닙니다", year);
}

int is_leap(int year) {

	return ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0));
}

 

7.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int round(double f);

int main() {

	double f;

	printf("실수를 입력하시오: ");
	scanf("%lf", &f);

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

	return 0;
}

int round(double f) {
	return (int)(f + 0.5);
}

 

8.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int get_tax(int income);

int main() {

	int income;

	printf("소득을 입력하시오(만원): ");
	scanf("%d", &income);
	printf("소득세는 %d만원입니다", get_tax(income));
}

int get_tax(int income) {
	if (income > 1000)
		return (int)(80 + 0.1 * (income - 1000));
	else
		return (int)(income * 0.08);
}

 

9.

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

// 주사위를 굴리는 함수
int roll_dice() {
	return ((rand)() % 6) + 1;
}

int main() {
	int u_total = 0, c_total = 0;
	srand(time(NULL));

	//주사위를 3번씩 던져서 점수 합산
	for (int i = 0; i < 3; i++) {
		u_total += roll_dice();
		c_total += roll_dice();
	}
	//결과
	printf("사용자 주사위= %d\n", u_total);
	printf("컴퓨터 주사위= %d\n", c_total);

	if (u_total < c_total) {
		printf("컴퓨터 승리");
	}
	else if (u_total > c_total) {
		printf("사용자 승리");
	}
	else {
		printf("비겼습니다");
	}
	return 0;
}

 

10.

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

int randint();

int main() {

	srand(time(NULL));

	for (int i = 0; i < 10; i++) {
		printf("%d ", randint());
	}
	return 0;
}

int randint() {

	return rand() % 81 + 10;
}

 

 

 

 

 

11.

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

//주사위 굴리는 함수
int roll_dice() {
	return +rand() % 6;
}

int main() {
	int user_total = 0;
	int com_total = 0;

	srand(time(NULL));
	for (int i = 0; i < 3; i++) {
		int user = roll_dice();
		int com = roll_dice();

		user_total += user;
		com_total += com;
	}

	printf("사용자 주사위=(%d, %d, %d)=%d\n", roll_dice(), roll_dice(), roll_dice(), user_total);
	printf("컴퓨터 주사위=(%d, %d, %d)=%d\n", roll_dice(), roll_dice(), roll_dice(), com_total);
	if (user_total > com_total) {
		printf("사용자 승리");
	}
	else if (user_total < com_total) {
		printf("컴퓨터 승리");
	}
	else {
		printf("무승부");
	}
	return 0;
}

 

12.

#include <stdio.h>

int get_first_digit(int n) {
    while (n >= 10) {
        n /= 10;
    }
    return n;
}

int main() {
    int num = 1099999;
    int first_digit = get_first_digit(num);

    printf("정수를 입력하시오: %d\n", num);
    printf("가장 상위 자리수: %d\n", first_digit);

    return 0;
}

 

13.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

//두 점 사이 계산 공식
double get_distance(double x1, double y1, double x2, double y2) {
	return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}

int main() {

	double x1, y1, x2, y2;
	printf("첫번째 점의 좌표를 입력하시오: ");
	scanf("%lf %lf", &x1, &y1);

	printf("두번째 점의 좌표를 입력하시오: ");
	scanf("%lf %lf", &x2, &y2);

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

	return 0;
}

 

14.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int is_prime(int n) {
	if (n < 2) return 0;
	for (int i = 2; i * i <= n; i++) {
		if (n % i == 0) return 0;
	}
	return 1;
}

int main() {

	int n;
	
	printf("양의 정수를 입력하시오: ");
	scanf("%d", &n);
	for (int j = 2; j <= n - 2; j++) {
		if (is_prime(j) && is_prime(n - j)) {
			printf("%d = %d + %d\n", n, j, n - j);
		}
	}
	return 0;
}

 

15.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int factorial(int n);

int main() {
	
	int i;
	double result = 1;

	printf("어디까지 계산할까요: ");
	scanf("%d", &i);

	for (; i > 0; i--) {
		result += 1.0 / factorial(i);
	}
	printf("오일러의 수는 %lf입니다", result);
}

int factorial(int n) {

	int result = 1;

	for (; n > 1; n--)
		result *= n;

	return result;
}

 

16.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void show_menu();   // 메뉴 표시 함수
void deposit(int* balance);   // 입금 처리 함수
void withdrawal(int* balance);  // 출금 처리 함수

int main() {

    int balance = 0;

    while (1) {
        int choice;

        show_menu();

        scanf("%d", &choice);

        switch (choice) {
        case 1:
            printf("잔고는 %d원입니다.\n", balance);
            break;
        case 2:
            deposit(&balance);  // 입금 처리 함수 호출
        case 3:
            withdrawal(&balance);  // 출금 처리 함수 호출
            break;
        case 4:
            printf("프로그램을 종료합니다.\n");
            return 0;
        default:
            printf("잘못된 입력입니다.\n");
            break;
        }
    }
    return 0;
}
// 메뉴 표시 함수
void show_menu() {

    printf("********** Welcome to Express ATM **********\n");
    printf("<1> 잔액\n");
    printf("<2> 입금\n");
    printf("<3> 출금\n");
    printf("<4> 종료\n");
    printf("메뉴를 선택하시오: ");
}

// 입금 처리 함수
void deposit(int* balance) {

    int deposit;

    printf("입금 금액을 입력하시오: ");
    scanf("%d", &deposit);

    *balance += deposit;

    printf("잔고는 %d원입니다.\n", *balance);
}

// 출금 처리 함수
void withdrawal(int* balance) {

    int withdrawal;

    printf("출금 금액을 입력하시오: ");
    scanf("%d", &withdrawal);

    if (withdrawal > *balance) {
        printf("잔액이 부족합니다.\n");
    }
    else {
        *balance -= withdrawal;
        printf("잔고는 %d원입니다.\n", *balance);
    }
}

9장 Exercise & Programming은 아래 클릭하시면 됩니다.

[쉽게 풀어쓴 C언어 Express] 9장 Exercise & Programming

 

[쉽게 풀어쓴 C언어 Express] 9장 Exercise & Programming

9장 Exercise & Programming 9장 Exercise 1. a. int number; b. double ratio; c. register int index; d. extern int counter; e. static int setting; 2. int a(전역 변수, 시작부터 종료까지, 외부) static int b(정적 전역, 시작부터 종료까

gomszone.tistory.com

 

 

 

 

 

댓글