새소식

C, C++/C Basic

# C언어 예제, 과제 2 (정답)

  • -

이전 예제와 과제에서는 위에서부터 아래로 순차적으로 실행되었다.
그러나 이번 예제, 과제부터는 선택 구조나 반복 구조 등의 제어문을 이용해 프로그램 실행 순서에 변화를 가져올 수 있다.

 순서도 논리 구조

② 순서도 기호

선택 구조의 예시

경시대회 시상 기준에 대해 시상 내역을 구하는 프로그램을 작성하는 경우와 같이, "시상 기준"과 같은 조건에 따라 처리되는 내용이 달라지는 경우에 선택 구조를 사용한다. 선택 구조는 크게 세 가지 유형으로 나눌 수 있다.

 

 

③.① 첫 번째 유형

: 상황에 따라 임의의 문장이 실행되어야 하고, 실행되지 말아야 하는 경우다.

예를 들면 나이가 50이상인 사원들에게는 특별보너스를 추가적으로 지급하고 그렇지 않은 경우에는 특별보너스를 지급하지 않는 경우에 해당된다.

이런 유형을 순서도와 C 언어로 나타내면 다음과 같은데 조건이 참이면 문장1, 문장 2를 실행하고 그렇지 않으면 실행하지 않는다. C 언어에서 조건이 참인 경우에 실행되어야 할 문장이 여러 개라면 다음과 같이 중괄호({ })로 묶어야 한다.

 

 

③.② 두 번째 유형

: 조건에 따라 실행되어야 할 문장이 달라져야 하는 경우가 있다. 

예로 나이가 50이상인사원들에게는 특별보너스를 50만원 지급하고, 그렇지 않은 경우에는 특별보너스를 30
만원 지급하는 경우에 해당된다.

이런 유형을 순서도와 C 언어로 나타내면, 조건이 참이면 문장1을 실행하고 그렇지 않으면 문장2를 실행한다.

 

 

③.③ 세 번째 유형

: 조건이 거짓인 경우에 또 다른 조건 구조를 연결하는 구조다.

이런 유형을 순서도와 C 언어로 나타내면 다음과 같은데 조건1이 참이면 문장1을 실행하고 그렇지 않고 조건2가 참이면 문장2를 실행한다. 만약 두 조건 모두 거짓이면 문장3을실행한다.

 

관계 연산자

관계 연산자는 조건을 만족하면 참이 되고, 조건을 만족하지 않으면 거짓이 된다.

 

다음은 a 값이 b 값보다 크면 a 값을 출력하고 그렇지 않으면 b 값을 출력하는 순서도와 C 프로그램이다.

물론 변수 a와 b에는 값이 저장되어 있어야 한다.

 

논리 연산자

프로그램을 작성하다보면 두 가지 이상의 조건을 요구하는 경우가 있다. 예로 “나이가 7살 이하이거나 60살 이상인가” 또는 “남자면서 19살 이상인가”를 들 수 있다. 이때 사용하는 연산자가 논리 연산자로 참 또는 거짓의 값을 다루며 그 결과 역시 참 또는 거짓이 된다.

 

다음은 a가 8이상이고 60미만이면 ‘유료’를 출력하고, 그렇지 않으면 ‘무료’를 출력 하는 순서도와 C 프로그램이다.


예제

 

예제8

두 수 중 큰 수 찾기

사용자로부터 입력 받은 두 수를 변수 a, b에 저장하고, a 값이 b 값보다 크면 a 값을 출력하고, 그렇지 않으면 b 값을 출력한다.

#include <stdio.h>

int main()
{
	int a, b;
    
	printf("정수(2개): ");
	scanf("%d %d", &a, &b);
    
	if (a > b)
	{
		printf("큰 수: %d\n", a); // a가 b보다 크면 a 값을 출력한다.
	}
	else
	{
		printf("큰 수: %d\n", b);  //그렇지 않으면 b 값을 출력한다.
	}
	return 0;
}

 

 

예제9

양수, 0, 음수 판별하기

사용자로부터 입력 받은 수를 변수 a에 저장하고, a가 0보다 작으면 “음수”를, 그렇지 않고 0보다 크면 “양수”를, 그렇지 않으면 “0”을 출력한다.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main()
{
	int a;
	printf("정수: ");
	scanf("%d", &a);

	if (a < 0) 
	{
		printf("음수"); // a<0이 참이면 “음수”를 출력한다.
	}
	else if (a > 0) 
	{
		printf("양수"); // a<0가 거짓이고, a>0가 참이면 “양수”를 출력한다.
	}
	else 
	{
		printf("0"); // 둘 다 거짓이면 “0”을 출력한다.
	}
	return 0;
}

 

 

예제10

세 수 중 가장 큰 수 찾기(1)

a가 b보다 크고 a가 c보다 크면 a가 가장 큰 수가 되고, a가 b보다 크고 a가 c보다 크지않으면 c가 가장 큰 수가 된다. a가 b보다 크지 않고 b가 c보다 크면 b가 가장 큰 수가 되고, a가 b보다 크지 않고 b가 c보다 크지 않으면 c가 가장 큰 수가 된다.

#include <stdio.h>

int main()
{
	int a, b, c;
	printf("정수(3개) : ");
	scanf("%d %d %d", &a, &b, &c);
	if (a > b) {                                   
		if (a > c)
			printf("가장 큰 수 : %d\n", a); // a>b가 참이고 a>c가 참이면 a 값을 출력한다. 
		else
			printf("가장 큰 수 : %d\n", c); //  a>b가 참이고 a>c가 거짓이면 c값을 출력한다.
	}
	else {
		if (b < c)
			printf("가장 큰 수 : %d\n", b); // a>b가 거짓이고 b>c가 참이면 b 값을 출력한다.
		else
			printf("가장 큰 수 : %d\n", c); // b가 거짓이고 b>c가 거짓이면 c 값을 출력한다.
	}
	return 0;
}

 

예제11

세 수 중 가장 큰 수 찾기(2)

사용자로부터 첫 번째 수를 입력받아 max에 저장한다. 두 번째로 입력받은 수 a와 max를 비교하여 a가 max보다 크면 max에 a를 저장한다. 세 번째 수도 마찬가지 방법으로 수행한다. 결국 가장 큰 수가 max에 저장된다.

#include <stdio.h>

int main()
{
	int a, max;
	printf("첫번째 정수: ");
	scanf("%d", &max);
	printf("두번째 정수: ");
	scanf("%d", &a);

	if (a > max)
		max = a;
	printf("세번째 정수: ");
	scanf("%d", &a);

	if (a > max)
		max = a;
	printf("가장 큰 수는: %d\n", max);

	return 0;
}

 

 

예제12

홀수, 짝수 판별하기

사용자로부터 입력받은 수를 2로 나누었을 때 나머지가 0이면 ‘짝수’, 나머지가 0이 아니면 ‘홀수’다. 예를 들어 입력받은 수가 10이라면 2로 나누었을 때 나머지가 0이 된다. 따라서 10은 ‘짝수’가 된다. 만약 입력받은 수가 15라면 2로 나누었을 때 나머지가 1이 되어0이 아니므로 15는 ‘홀수’가 된다.

#include <stdio.h>

int main()
{
	int a;
	printf("정수: ");
	scanf("%d", &a);
	if (a % 2 == 0) {
		printf("짝수\n"); // a가 2로 나누어떨어지면 “짝수”를 출력한다.

	}
	else {
		printf("홀수\n"); // 그렇지 않으면 “홀수”를 출력한다.

	}
	return 0;
}

 

 

 

예제13

3의 배수 판별하기

사용자로부터 입력받은 수를 3으로 나눈 나머지가 0이면 입력받은 수는 3의 배수이고, 그렇지 않으면 3의 배수가 아니다.
예를 들어, 10은 3으로 나눈 나머지가 0이 아니므로 3의 배수가 아니다. 반면 15는 3으로나눈 나머지가 0이므로 15는 3의 배수가 된다.

#include <stdio.h>

int main()
{
	int a;
	printf("정수: ");
	scanf("%d", &a);

	if (a % 3 == 0) {
		printf("3의 배수\n"); // a가 3으로 나눈 나머지가 0이면 “3의 배수”를 출력한다.

	}
	else {
		printf("3의 배수 아님\n"); // 그렇지 않으면 “3의 배수 아님”을 출력한다.

	}

	return 0;
}

 

예제14

나이에 따른 입장료

입장료 정가가 5,000원인 경우 나이에 따른 요금체계가 다음과 같은 경우 나이를 입력 받아 입장료를 구한다.
입력 받은 나이가 8 미만이면 “0”을, 그렇지 않고 60 미만이면 정가인 5,000을, 그렇지 않으면 정가의 50%인 2,500을 출력한다.

#include <stdio.h>

int main()
{
	int age, charge = 5000;
	printf("나이: ");
	scanf("%d", &age);

	if (age < 8) {
		printf("입장료: 0\n");  // age<8이면 “입장료: 0”을 출력한다.

	}
	else if (age < 60) {
		printf("입장료: %d\n", charge); // 그렇지 않고 age<60이면 charge 값을 출력한다.

	}
	else {
		printf("입장료: %d\n", charge * 0.5); // 그렇지 않으면 charge*0.5를 출력한다.

	}
    
	return 0;
}

 

 

 

예제15

3의 배수이면서 5의 배수 판별하기

사용자로부터 입력받은 수를 3으로 나눈 나머지가 0이고 5로 나눈 나머지도 0이면 3의 배수이면서 5의 배수이다.
예를 들어, 10은 3으로 나누었을 때 나머지가 1이 되어 0이 아니다. 따라서 10은 ‘3의 배수이면서 5의 배수’가 아니다.
반면 15는 3으로 나누었을 때 나머지가 0이 되고, 5로 나누었을 때도 나머지가 0이 되므로 15는‘ 3의 배수이면서 5의 배수’가 된다.

#include <stdio.h>

int main()
{
	int a;
	printf("정수: ");
	scanf("%d", &a);

	if (a % 3 == 0 && a % 5 == 0) {
		printf("3과 5의 배수\n"); // a를 3으로 나눈 나머지가 0이고 a를 5로 나눈 나머지도 0이면 “3과 5의 배수”를 출력한다.
	}
	else {
		printf("3과 5의 배수 아님\n");  // 그렇지 않으면 “3과 5의 배수 아님”을 출력한다.
	}

	return 0;
}

 

예제16

나이에 따른 공원입장료

공원 입장료는 다음과 같은 경우 나이를 입력 받아 입장료를 구한다.
입력 받은 나이가 8미만이거나 60세 이상 이면 “무료”를 출력하고, 그렇지 않으면 “5,000원”을 출력한다.

#include <stdio.h>

int main()
{
	int age;
	printf("나이: ");
	scanf("%d", &age);
	if (age < 8 || age >= 60) {

		printf("입장료: 무료\n"); // age<8이거나 age>=60이면 “입장료: 무료”를 출력한다.
	}
	else {
		printf("입장료: 5000원\n"); // 그렇지 않으면 “입장료: 5000원”을 출력한다.
	}
	return 0;
}

 

 

 


과제

 

과제6

두 수를 입력받아 둘 중 작은 수를 출력하는 순서도와 C 프로그램을 작성하여라.

 

 

과제7

두 수를 입력받아 두 수의 차를 출력하는 순서도와 C 프로그램을 작성하여라.

 

 

과제8

양수, 0, 음수를 판별하는 순서도와 C 프로그램을 다음과 같이 작성하면 어떤 문제가 발생하는 찾아 서술하여라.

과제9

세 수를 입력받아 가장 작은 수를 출력하는 순서도와 C 프로그램을 작성하여라.

 

과제10

세 수를 입력받아 가장 작은 수를 출력하는 순서도와 C 프로그램을 작성하여라.

 

과제11

홀수, 짝수를 판별하는 다음 순서도의 ①과 ②를 채우고 그에 맞는 C 프로그램을 작성하여라.

 

과제12

3의 배수를 판별하는 다음 순서도의 ①을 채우고 C 프로그램을 작성하여라.

과제13

다음과 같은 요금 체계에 대해 거리에 따른 요금을 출력하는 순서도와 C 프로그램을 작성하여라.

 

 

과제14

하나의 수를 입력받아 5 또는 7의 배수인지 판별하는 순서도와 C 프로그램을 작성하여라.

 

과제15

다음 공원 입장료에 대한 요금을 구하는 순서도의 ①을 채우고 C 프로그램을 작성하여라.

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.