IT/C언어

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

곰탱이들 2024. 2. 12.

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(정적 전역, 시작부터 종료까지, 내부

    extern int c(외부참조, 시작부터 종료까지, 외부

    int d(지역, main 시작부터 종료, 무연결)

    register int e(지역 레지스터, main 시작부터 종료까지, 무연결)

    static int f(정적 지연, main 시작부터 종료까지, 무연결)

    int g(지역, main 시작부터 종료까지, 무연결)

 

3. a. #### I는 전역변수, ffor에 따라 반복

    b. 10 지역변수가 먼저지면 f함수는 값을 반환X

    c. 3\n2 지역 변수가 우선

    d. 정적변수이기에 값이 초기화X

 

4. a. register 변수는 지역만 가능하다

    b. 순환X, nn-1로 변경

 

5

a. 5

    4

    3

    2

    1

    0

    16가 반환됨(0일 때 1반환)

 

b. 5

    4

    3

    2

    1

    0

    2*(2*(2*(2*(2*(2*2+1)+1)+1)+1)+1)+1 = 95 반환

 

6.

int recursive(int n){

	int i, sum = 0;
		for (i = n; i >= 1; i--)
			sum += i;

	return sum;
}

9장 Programming

 

1.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int add(int, int);
int sub(int, int);
int mul(int, int);
int div(int, int);

int main() {

	char op;
	int x, y;
	int i;

	for (i = 0; i < 10; i++) {
		printf("연산을 입력하시오: ");
		scanf(" %d %c %d", &x, &op, &y);
		if (op == '+')
			printf("연산결과: %d \n", add(x, y));
		else if (op == '-')
			printf("연산결과: %d \n", sub(x, y));
		else if (op == '*')
			printf("연산결과: %d \n", mul(x, y));
		else if (op == '/')
			printf("연산결과: %d \n", div(x, y));
		else
			printf("지원되지 않는 연산자입니다. \n");
	}
}

int add(int x, int y) {
	static int count;
	count++;
	printf("덧셈은 총 %d번 실행되었습니다.\n", count);
	return (x + y);
}

int sub(int x, int y) {
	static int count;
	count++;
	printf("뺄셈은 총 %d번 실행되었습니다. \n", count);
	return (x - y);
}

int mul(int x, int y) {
	static int count;
	count++;
	printf("곱셈은 총 %d 실행되었습니다. \n", count);
	return (x * y);
}

int div(int x, int y) {
	static int count;
	count++;
	printf("나눗셈은 총 %d번 실행되었습니다. \n", count);
	return(x / y);
}

 

2.

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

void get_dice_face() {
	int i, num = 0;
	int n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, n6 = 0;
	while (1) {
		for (i = 0; i < 100; i++) {
			num = rand() % 6 + 1;
			if (num == 1)
				n1++;
			if (num == 2)
				n2++;
			if (num == 3)
				n3++;
			if (num == 4)
				n4++;
			if (num == 5)
				n5++;
			if (num == 6)
				n6++;
		}
		if (n1 + n2 + n3 + n4 + n5 + n6 == 100)
			break;
	}
	printf("1->%d\n", n1);
	printf("2->%d\n", n2);
	printf("3->%d\n", n3);
	printf("4->%d\n", n4);
	printf("5->%d\n", n5);
	printf("6->%d\n", n6);
}
int main(void) {
	srand(time(NULL));
	get_dice_face();

	return 0;
}

 

3.

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

int check() {
	static int call_count = 0;
	call_count++;
	if (call_count > 3) {
		printf("로그인 시도휫수 초과\n");
		return 0;
	}
	printf("비밀번호: ");
	int n;
	scanf("%d", &n);
	if (n == 1234) {
		printf("로그인 성공!!\n");
		return 1;
	}
	return 0;
}

int main() {
	check();
	check();
	check();
	check();
	return 0;
}

 

4.

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

void get_random() {
	static inited = 0;
	if (inited == 0) {
		srand(time(NULL));
		printf("초기화 실행\n");
		inited = 1;
	}
	else {
		printf("%d\n", rand());
	}
}

int main() {
	get_random();
	get_random();
	get_random();
	get_random();
	return 0;
}

 

5.

// math.c

double pi = 3.14;

// main.c

#include <stdio.h>

extern double pi;

int main() {
    printf("pi = %.2f\n", pi);
    return 0;
}

 

6.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int sum(int n) {
	if (n != 0)
		return n + sum(n - 1);
	else
		return n;
}

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

	result = sum(n);

	printf("1부터 %d까지의 합=%d", n, result);

	return 0;
}

 

7.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int power(int n1, int n2);

int main() {

	int base, powerRaised, result;

	printf("밑수: ");
	scanf("%d", &base);

	printf("지수: ");
	scanf("%d", &powerRaised);

	result = power(base, powerRaised);

	printf("%d^%d = %d\n", base, powerRaised, result);

	return 0;
}

int power(int base, int powerRaised) {

	if (powerRaised != 0)
		return (base * power(base, powerRaised - 1));
	else
		return 1;
}

 

8.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int show_digit(int x) {
	if (x / 10 > 0) {
		show_digit(x / 10);
	}
	printf("%d ", x % 10);
}

int main() {

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

	return 0;
}

 

9.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void reverseSentence();

int main() {
	printf("문장을 입력하시오: ");
	reverseSentence();
	printf("\n");
	return 0;
}

void reverseSentence() {
	char c;
	scanf("%c", &c);
	if (c != '\n') {
		reverseSentence();
		printf("%c", c);
	}
}

 

10.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

double recursive(double n) {
	if (n != 1)
		return 1.0 / n + recursive(n - 1);
	else
		return(n);
}

int main() {
	double num;
	scanf("%lf", &num);
	printf("%f", recursive(num));

	return 0;
}

 

 

 

 

11.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int fib(int n) {

	if (n == 0) return 0;
	if (n == 1)return 1;
	return (fib(n - 1) + fib(n - 2));
}
int main() {
	for (int i = 0; i < 10; i++)
		printf("fib(%d) = %d\n", i, fib(i));
	return 0;
}

 

12.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int balance = 10000;

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 deposit;

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

    balance += deposit;

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

void withdrawal() {

    int withdrawal;

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

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

int main() {

    int menu;

    while (1) {
        show_menu();
        scanf("%d", &menu);

        switch (menu) {
        case 1:
            printf("잔고는 %d원입니다.\n", balance);
            break;
        case 2:
            deposit();
            break;
        case 3:
            withdrawal();
            break;
        case 4:
            printf("ATM을 종료합니다.\n");
            return 0;
        default:
            printf("잘못된 입력입니다.\n");
            break;
        }
    }
     return 0;
}

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

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

 

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

10장 Exercise & Programming 10장 Exercise 1. 2번 2. 3번 3. 3번, 4번 4. 1번 5. 4번 6. #define MAX_SIZE 4 int b[4]; int i; for(i=0;i max) max = list[i]; } printf("최대값은 %d\n", max); printf("최소값은 %d\n", min); return 0; } 3 #include #def

gomszone.tistory.com

 

 

 

 

 

댓글