AR삽질러

C로 시작하는 컴퓨터 프로그래밍4판 - 5장 선택문 본문

C

C로 시작하는 컴퓨터 프로그래밍4판 - 5장 선택문

아랑팡팡 2023. 3. 21. 00:13
728x90

혼자해보기 5-1

임의의 수를 입력받아 5의 배수인지 아닌지 검사하는 프로그램을 작성하시오.

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int num;

	printf("숫자를 입력하세요 : ");
	scanf("%d", &num);

	if (num % 5 == 0) {
		printf("입력하신 %d는 5의 배수입니다.", num);
	}
	else {
		printf("입력하신 %d는 5의 배수가 아닙니다.", num);
	}

	return 0;
}

 

혼자해보기 5-2

임의의 수를 입력받아 3의 배수이면서 6의 배수도 되는지 검사하는 프로그램을 작성하시오.

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int num;
	printf("숫자를 입력하세요 : ");
	scanf("%d", &num);

	if (num % 3 == 0) {
		if (num % 6 == 0) {
			printf("입력하신 %d는 3의 배수이면서 6의 배수입니다.", num);
		}
		else {
			printf("입력하신 %d는 3의 배수이지만 6의 배수는 아닙니다.", num);
		}
	}
	else {
		printf("입력하신 %d는 3의 배수이면서 6의 배수가 아닙니다.", num);
	}


	return 0;
}

 

01. if문과 switch문은 각각 어느 경우에 사용하면 좋은지 설명하시오.

if문은 프로그램의 흐름을 두가지 상황으로 나누는데 반해 switch문은 조건식을 먼저 평가한뒤 그 식의 값이 case상수와 일치하는 쪽으로 분기하여 해당 명령문을 수행한다.

if문 : 조건이 단순하거나 수가적은 경우

switch case : 조건의 수가 많고 복잡한경우

 

02. 다음 프로그램의 오류를 수정하시오.

1) 

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int input;

	printf("양수를 입력하시오.\n");
	scanf("%d", &input);

	if (input)
		printf("입력한수는 \n");
	printf("짝수입니다. 11\n");
	else
		printf("입력한 수 %d는 홀수입니다.\n", input);

	return 0;
}

수정

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int input;

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

	if (input % 2 == 0) {
		printf("입력한수 %d는 짝수입니다.", input);
	}
	else {
		printf("입력한 수 %d는 홀수입니다.\n", input);
	}
	return 0;
}

2)

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int jumsu;

	printf("0점에서 100점 사이의 점수를 입력하세요\n");
	scanf("%d", &jumsu);

	if (jumsu >= 0 && jumsu < 60)
		printf("%d점은 F학점입니다.\n", jumsu);

	else if
		printf("%d점은 D학점입니다.\n", jumsu);

	else if
		printf("%d점은 C학점입니다.\n", jumsu);

	return 0;
}

수정

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int jumsu;

	printf("0점에서 100점 사이의 점수를 입력하세요\n");
	scanf("%d", &jumsu);

	if (jumsu >= 0 && jumsu < 60)
		printf("%d점은 F학점입니다.\n", jumsu);

	else if(jumsu >= 60 && jumsu < 70)
		printf("%d점은 D학점입니다.\n", jumsu);

	else if(jumsu >= 70 && jumsu < 80)
		printf("%d점은 C학점입니다.\n", jumsu);

	return 0;
}

 

3)

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int jumsu;

	printf("0점에서 100점 사이의 점수를 입력하세요.\n");
	scanf("%d", &jumsu);

	swith(jumsu) {
		case jumsu >= 0 && jumsu < 60;
			printf("불합격입니다.\n");
			break;

			case jumsu >= 60;
				printf("합격입니다.\n");
				break;
	}

	return 0;
}

수정

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int jumsu;

	printf("0점에서 100점 사이의 점수를 입력하세요.\n");
	scanf("%d", &jumsu);

	switch(jumsu / 10) {
		
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
		case 6: 
			printf("불합격입니다.\n");
			break;
		default: printf("합격입니다.");
			break;
	}

	return 0;
}

 

4) 

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int score;

	printf("당신의 점수를 입력하세요 : ");
	scanf("%d", &score);

	switch (score / 10) {
	case 10:

	case 9: printf("점수는 %d이고 성적은 %c입니다.\n", score, 'A');

	case 8: printf("점수는 %d이고 성적은 %c입니다.\n", score, 'B');

	case 7: printf("점수는 %d이고 성적은 %c입니다.\n", score, 'C');

	case 6: printf("점수는 %d이고 성적은 %c입니다.\n", score, 'D');

	default: printf("점수는 %d이고 성적은 %c입니다.\n", score, 'F');
	}

	return 0;
}

수정

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int score;

	printf("당신의 점수를 입력하세요 : ");
	scanf("%d", &score);

	switch (score / 10) {
	case 10:

	case 9: printf("점수는 %d이고 성적은 %c입니다.\n", score, 'A');
		break;

	case 8: printf("점수는 %d이고 성적은 %c입니다.\n", score, 'B');
		break;
	case 7: printf("점수는 %d이고 성적은 %c입니다.\n", score, 'C');
		break;
	case 6: printf("점수는 %d이고 성적은 %c입니다.\n", score, 'D');
		break;
	default: printf("점수는 %d이고 성적은 %c입니다.\n", score, 'F');
		break;
	}

	return 0;
}

 

03. 조건 연산자로 작성된 프로그램을 if문을 이용한 프로그램으로 바꾸시오.

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int value, x;
	scanf("%d", &x);
	value = x > 0 ? 1 : 0;

	int answer = 20, x;
	scanf("%d", &x);
	(answer == x) ? printf("정답\n") : printf("오답\n");


	return 0;
}
#include<stdio.h>
#pragma warning(disable:4996)

int main() {
    int value, x;
    scanf("%d", &x);
    if (x > 0) {
        value = 1;
    }
    else {
        value = 0;
    }

    int answer = 20;
    scanf("%d", &x);
    if (answer == x) {
        printf("정답\n");
    }
    else {
        printf("오답\n");
    }

    return 0;
}

 

04. 임의의 양의 정수를 입력받아 '2의 배수인지' 또는 '3의배수인지','2와 3의 배수인지','2와3의 배수가 아닌지'를 확인하는 프로그램을 작성하시오.

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int num;
	printf("양수입력 : ");
	scanf("%d", &num);

	if (num % 2 == 0 && num % 3 == 0) {
		printf("입력하신 %d는 2와 3의 배수입니다.", num);
	}
	else if (num % 2 == 0 ) {
		printf("입력하신 %d는 2의 배수입니다.", num);
	}
	else if (num % 3 == 0) {
		printf("입력하신 %d는 3의 배수입니다.", num);
	}
	else {
		printf("입력하신 %d는 2와 3의 배수가 아닙니다.", num);
	}

	return 0;
}

 

05. 제시한 조건에 맞게 프로그램을 작성하시오.

1) 정수 3개를 입력받아 3개 수중에서 최댓값을 구하는 프로그램을 제어문을 이용하여 작성하시오.

#include<stdio.h>
#pragma warning(disable:4996)

int main() {
    int num1, num2, num3, max;

    printf("세 개의 정수를 입력하세요: ");
    scanf("%d %d %d", &num1, &num2, &num3);

    max = num1;
    if (num2 > max) {
        max = num2;
    }
    if (num3 > max) {
        max = num3;
    }

    printf("입력한수 %d %d %d중에서 최댓값은 %d 입니다.\n",num1, num2, num3, max);

    return 0;
}

2) 1)번에서 작성한 프로그램을 조건 연산자를 이용한 프로그램으로 바꾸시오.

#include<stdio.h>
#pragma warning(disable:4996)

int main() {
    int num1, num2, num3, max;

    printf("세 개의 정수를 입력하세요: ");
    scanf("%d %d %d", &num1, &num2, &num3);

    max = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2 : num3);


    printf("입력한수 %d %d %d중에서 최댓값은 %d 입니다.\n",num1, num2, num3, max);

    return 0;
}

3) 정수 3개를 입력받아 3개 수 중에서 중간값을 구하는 프로그램을 제어문을 이용하여 작성하시오.

#include<stdio.h>
#pragma warning(disable:4996)


int main() {
    int num1, num2, num3, mid;

    printf("세 개의 정수를 입력하세요: ");
    scanf("%d %d %d", &num1, &num2, &num3);

    if (num1 >= num2) {
        if (num2 >= num3) {
            mid = num2;
        }
        else if (num1 >= num3) {
            mid = num3;
        }
        else {
            mid = num1;
        }
    }
    else {
        if (num1 >= num3) {
            mid = num1;
        }
        else if (num2 >= num3) {
            mid = num3;
        }
        else {
            mid = num2;
        }
    }

    printf("입력한 수 %d %d %d 중에서 중간값은 %d 입니다.\n", num1, num2, num3, mid);

    return 0;
}

4) 3)번에서 작성한 프로그램을 조건 연산자를 이용한 프로그램으로 바꾸시오.

#include<stdio.h>
#pragma warning(disable:4996)

int main() {
    int num1, num2, num3, mid;

    printf("세 개의 정수를 입력하세요: ");
    scanf("%d %d %d", &num1, &num2, &num3);

    mid = (num1 >= num2) ? ((num2 >= num3) ? num2 : ((num1 >= num3) ? num3 : num1)) : ((num1 >= num3) ? num1 : ((num2 >= num3) ? num3 : num2));

    printf("입력한 수 %d %d %d 중에서 중간값은 %d 입니다.\n", num1, num2, num3, mid);

    return 0;
}

 

06. if~else if문을 이용하여 다양한 도형의 면적을 계산하는 프로그램을 작성하시오. 면적을 계산할 도형은 삼각형, 직사각형, 정사각형, 원으로, 원하는 도형의 면적을 계산하기 위한 정보도 도형에 따라 프로그램에서 요청하도록 하시오.

#include<stdio.h>
#pragma warning(disable:4996)

int main() {
    int shape;
    float area;

    printf("도형을 선택하세요: \n");
    printf("1. 삼각형\n");
    printf("2. 직사각형\n");
    printf("3. 정사각형\n");
    printf("4. 원\n");
    scanf("%d", &shape);

    if (shape == 1) {
        float base, height;
        printf("삼각형의 밑변을 입력하세요: ");
        scanf("%f", &base);
        printf("삼각형의 높이를 입력하세요: ");
        scanf("%f", &height);
        area = 0.5 * base * height;
        printf("삼각형의 면적은 %.2f 입니다.", area);
    }
    else if (shape == 2) {
        float width, height;
        printf("직사각형의 가로 길이를 입력하세요: ");
        scanf("%f", &width);
        printf("직사각형의 세로 길이를 입력하세요: ");
        scanf("%f", &height);
        area = width * height;
        printf("직사각형의 면적은 %.2f 입니다.", area);
    }
    else if (shape == 3) {
        float side;
        printf("정사각형의 한 변의 길이를 입력하세요: ");
        scanf("%f", &side);
        area = side * side;
        printf("정사각형의 면적은 %.2f 입니다.", area);
    }
    else if (shape == 4) {
        float radius;
        printf("원의 반지름을 입력하세요: ");
        scanf("%f", &radius);
        area = 3.141592 * radius * radius;
        printf("원의 면적은 %.2f 입니다.", area);
    }
    else {
        printf("잘못된 입력했습니다.");
    }

    return 0;
}

 

07. switch ~ case문을 이용하여 달(month)을 입력받고 그 달에 며칠(day)이 있는지 출력하는 프로그램을 작성하시오. 이때 날수가 같은 달에는 break문을 사용하지 않고 프로그램을 작성하시오.(단, 2월은 29일까지 있다고 가정한다.).

#include<stdio.h>
#pragma warning(disable:4996)

int main() {
    int month, day;

    printf("월을 입력하세요(1~12): ");
    scanf("%d", &month);

    switch (month) {
    case 2:
        day = 29;
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        day = 30;
        break;
    default:
        day = 31;
        break;
    }

    printf("%d월은 %d일까지 있습니다.", month, day);

    return 0;
}

 

08. 통신사가 연령대가 낮은 고객들을 유치하기 위한 전략을 아래와 같이 세웠다. switch~case문을 이용하여 연령대를 입력받아 연령대별 제공 서비스를 보여주는 프로그램을 작성하시오.

<연령대별 제공 서비스>
- 50대 이상 : 1년간 데이터 매달 1G 제공
- 40대 : 1년간 데이터 매달 1G 제공, 3개월 통신요금 10% 할인
- 30대 : 1년간 데이터 매달 1G 제공, 6개월 통신요금 10% 할인
- 20대 : 1년간 데이터 매달 1G 제공, 6개월 통신요금 10% 할인
- 이외에는 커피쿠폰 5매 증정
#include<stdio.h>
#pragma warning(disable:4996)

int main() {
    
    int age;
    printf("연령대를 입력하세요 : ");
    scanf("%d", &age);

    switch (age / 10) {
    
    case 9:
    case 8:
    case 7:
    case 6:
    case 5:
        printf("50대 이상 : 1년간 데이터 매달 1G 제공");
        break;
    case 4:
        printf("40대 : 1년간 데이터 매달 1G 제공, 3개월 통신요금 10%할인");
        break;
    case 3:
        printf("30대 : 1년간 데이터 매달 1G 제공, 6개월 통신요금 10%할인");
        break;
    case 2:
        printf("20대 : 1년간 데이터 매달 1G 제공, 6개월 통신요금 10%할인");
        break;
    default:
        printf("커피쿠폰 5매 증정");
        break;
    }

    return 0;
}
728x90
반응형
LIST