Skip to content

CHAPTER 04

Tony Kim edited this page Oct 27, 2019 · 6 revisions

연산자

  • 1번 문제

질량과 속력을 실수로 입력받아 운동 에너지를 구하는 프로그램

#include<stdio.h>
int main(void) {
	float a, b;

	printf("질량(kg)? ");
	scanf_s("%f", &a);
	printf("속력(m/s)? ");
	scanf_s("%f", &b);

	printf("운동에너지: %.2f J", a / 2 * b * b);

	return 0;
}
[실행 결과]

질량(kg)? 2.7
속력(m/s)? 4
운동에너지: 21.60 J
  • 2번 문제

화씨 온도(F)를 실수로 입력받아 섭씨 온도(C)로 변환해서 출력하는 프로그램

#include<stdio.h>
int main(void) {
	float a;

	printf("화씨온도? ");
	scanf_s("%f", &a);

	printf("%.2f F = %.2f C", a, (a - 32) * 5 / 9);

	return 0;
}
[실행 결과]

화씨온도? 60
60.00 F = 15.56 C
  • 3번 문제

질량과 부피를 실수로 입력받아 밀도를 구하는 프로그램

#include<stdio.h>
int main(void) {
	float a, b;

	printf("질량(g)? ");
	scanf_s("%f", &a);
	printf("부피(세제곱센티미터)? ");
	scanf_s("%f", &b);

	printf("밀도: %f", a / b);

	return 0;
}
[실행 결과]

질량(g)? 25
부피(세제곱센티미터)? 1000
밀도: 0.025000
  • 4번 문제

용매의 질량과 용질의 질량을 정수로 입력받아 용액의 퍼센트 농도를 구하는 프로그램

#include<stdio.h>
int main(void) {
	float a, b;

	printf("용매(g)? ");
	scanf_s("%f", &a);
	printf("용질(g)? ");
	scanf_s("%f", &b);

	// %를 출력하기 위해서는 %%를 사용해야한다.
	printf("농도: %.2f %%", b / (a + b) * 100);
	
	return 0;
}
[실행 결과]

용매(g)? 100
용질(g)? 15
농도: 13.04 %
  • 5번 문제

반지름과 높이를 정수로 입력받아 원기둥의 부피를 구하는 프로그램

#include<stdio.h>
int main(void) {
	float a, b;

	printf("반지름의 길이?  ");
	scanf_s("%f", &a);
	printf("높이? ");
	scanf_s("%f", &b);

	printf("원기둥의 부피: %f", 3.141592 * a * a * b);

	return 0;
}
[실행 결과]

반지름의 길이?  5
높이? 10
원기둥의 부피: 785.398000
  • 6번 문제

점 A의 좌표 (x1, y1)과 점 B의 좌표 (x2, y2)를 입력받아 두 점 A, B를 지나는 직선의 기울기를 구하는 프로그램

#include<stdio.h>
int main(void) {
	float a, b, c, d;

	printf("한 점의 좌표 (x1, y1)? ");
	scanf_s("%f %f", &a, &b);
	printf("또 다른 점의 좌표 (x2, y2)? ");
	scanf_s("%f %f", &c, &d);

	printf("직선의 기울기: %f", (d - b) / (c - a));

	return 0;
}
[실행 결과]

한 점의 좌표 (x1, y1)? 10 20
또 다른 점의 좌표 (x2, y2)? 30 40
직선의 기울기: 1.000000
  • 7번 문제

직각 삼각형에서 직각을 낀 두 변 a, b의 길이를 입력받아 빗변의 길이를 구하는 프로그램

#include<stdio.h>
#include<math.h> // sqrt()함수
int main(void) {
	double a, b;

	printf("및변? ");
	scanf_s("%lf", &a);
	printf("높이? ");
	scanf_s("%lf", &b);

	// sqrt() == 루트 연산
	printf("빗변의 길이: %lf", sqrt(a * a + b * b));

	return 0;
}
[실행 결과]

및변? 10
높이? 20
빗변의 길이: 22.360680
  • 8번 문제

반지름의 길이를 입력받아 구의 부피를 구하는 프로그램

#include<stdio.h>
#include<math.h> //pow()함수
// PI값을 정의
#define PI 3.141592

int main(void) {
	double a, b;

	printf("반지름의 길이? ");
	scanf_s("%lf", &a);

	// base^n 을 계산하는 함수
	b = pow(a, 3);

	printf("구의 부피: %lf", 4 * PI * b / 3);

	return 0;
}
[실행 결과]

반지름의 길이? 5
구의 부피: 523.598667
  • 9번 문제

동영상의 재생시간을 초 단위로 입력받아 몇 시간 몇 분 몇 초인지 출력하는 프로그램

#include<stdio.h>
int main(void) {
	int h, m, s;

	printf("재생시간(초)? ");
	scanf_s("%d", &s);

	m = s / 60;
	h = m / 60;
	s = s % 60;
	m = m % 60;

	printf("재생시간은 %d시간 %d분 %d초입니다.", h, m, s);

	/*
	if문을 사용해 변형 가능
	if(h == 0 && m != 0) {
		printf("재생시간은 %d분 %d초입니다.", m, s);
	}
	if (h == 0 && m == 0) {
		printf("재생시간은 %d초입니다.", s);
	}
	if (h != 0) {
		printf("재생시간은 %d시간 %d분 %d초입니다.", h, m, s);
	}*/

	return 0;
}
[실행 결과]

재생시간(초)? 4000
재생시간은 1시간 6분 40초입니다.
  • 10번 문제

항공권 예약 시 여정의 총 소요시간을 시간 단위로 입력받아서 며칠 몇 시간 몇 분인지 출력하는 프로그램

#include<stdio.h>
int main(void) {
	int day, hour, min;
	float a;

	printf("비행 소요시간(시간)? ");
	scanf_s("%f", &a);

	day = a / 24;
	hour = a - day * 24;
	min = (a - (int)a) * 60;
	printf("비행 소요시간은 %d일 %d시간 %d분 입니다.", day, hour, min);

	/*제어문 사용
	if (a >= 24) {
		day = a / 24;
		hour = a - day * 24;
		min = (a - (int)a) * 60;
		printf("비행 소요시간은 %d일 %d시간 %d분 입니다.", day, hour, min);
	}
	else {
		hour = a;
		min = (a - (int)a) * 60;
		printf("비행 소요시간은 %d시간 %d분 입니다.", hour, min);
	}*/
	return 0;
}
[실행 결과]

비행 소요시간(시간)? 31.5
비행 소요시간은 1일 7시간 30분 입니다.
  • 11번 문제

제품의 가격과 할인율(%)을 입력받아서 할인가와 에누리 금액을 출력하는 프로그램

#include<stdio.h>
int main(void) {
	float a, b;

	printf("제품의 가격? ");
	scanf_s("%f", &a);
	printf("할인율(%%)? ");
	scanf_s("%f", &b);

	/*제어문 사용
	if (b > 100 || b < 0) {
		printf("할인율은 0보다 작거나 100보다 클 수 없다.");
		return 0;
	}
	if (a < 0) {
		printf("물건의 값은 0보다 작을 수 없다.");
		return 0;
	}*/
	printf("할인가: %.0f원 (%.0f원 할인)", a - a * (b / 100), a * (b / 100));

	return 0;
}
[실행 결과]

제품의 가격? 24000
할인율(%)? 20
할인가: 19200원 (4800원 할인)
  • 12번 문제

네비게이션 앱에서 이동거리와 예상 속력으로 도착 예정 시간을 구하는 프로그램

#include<stdio.h>
int main(void) {
	float a, b;
	int min;

	printf("이동 거리(km)? ");
	scanf_s("%f", &a);
	printf("예상 속력(km/h)? ");
	scanf_s("%f", &b);

	// 입력받은 실수를 정수형으로 변환
	min = int(a / b * 60);

	printf("도착까지 예상 소요 시간은 %d분입니다.", min);

	return 0;
}
[실행 결과]

이동 거리(km)? 12
예상 속력(km/h)? 30
도착까지 예상 소요 시간은 24분입니다.
  • 13번 문제

직선의 시작점의 좌표 (x1, y1)과 끝점의 좌표(x2, y2)를 입력받아 두 점을 연결하는 직선의 길이를 구하는 프로그램

#include<stdio.h>
#include<math.h> // sqrt()함수
int main(void) {
	int a, b, c, d;
	int x, y;

	printf("직선의 시작점 (x1, y1)? ");
	scanf_s("%d %d", &a, &b);
	printf("직선의 끝점 (x2, y2)? ");
	scanf_s("%d %d", &c, &d);

	x = a - c;
	y = b - d;

	// sqrt() == 루트 연산
	printf("직선의 길이: %f", sqrt((x * x) + (y * y)));

	return 0;
}
[실행 결과]

직선의 시작점 (x1, y1)? 0 0
직선의 끝점 (x2, y2)? 10 20
직선의 길이: 22.360680
  • 14번 문제

기본 요금과 월사용량(kWh)을 입력받아 전기 요금을계산하는 프로그램

#include<stdio.h>
int main(void) {
	int a, b;

	printf("기본 요금? ");
	scanf_s("%d", &a);
	printf("월 사용량(kwh)? ");
	scanf_s("%d", &b);

	printf("전기요금: %d원", a + b * 190);

	return 0;
}
[실행 결과]

기본 요금? 1600
월 사용량(kwh)? 320
전기요금: 62400원
  • 15번 문제

환전 수수료율은 1.75%로 정해져 있다고 가정하고 원-달러 매매 기준율과 환전 우대율(%)를 입력받아 달러를 살 때 적용되는 환율을 결정하고, 구입하고자 하는 달러가 얼마인지 입력받아 몇 원에 해당하는지 출력하는 프로그램

#include<stdio.h>
int main(void) {
	double a, b, c;

	printf("원/달러 매매기준율? ");
	scanf_s("%lf", &a);
	printf("환율우대율(0~100)? ");
	scanf_s("%lf", &b);

	printf("달러 살 때 환율은 %lf입니다.", a + (a * 0.0175 * (1 - (0.01 * b))));

	printf("\n구입할 달러(USD)? ");

	scanf_s("%lf", &c);
	printf("USD %.2lf 살 때 ==> KRW %.2lf", c, c * (a + (a * 0.0175 * (1 - (0.01 * b)))));

	return 0;
}
[실행 결과]

원/달러 매매기준율? 1190
환율우대율(0~100)? 70
달러 살 때 환율은 1196.247500입니다.
구입할 달러(USD)? 2000
USD 2000.00 살 때 ==> KRW 2392495.00
  • 16번 문제

컴퓨터 시스템에서 32비트 데이터의 최하위 바이트부터 red, green, blue의 순서로 3개 입력받아서 RGB 색상을 만들어서 출력하는 프로그램

#include<stdio.h>
int main(void) {
	int r, g, b;
	int color = 0;

	printf("red? ");
	scanf_s("%d", &r);
	printf("green? ");
	scanf_s("%d", &g);
	printf("blue? ");
	scanf_s("%d", &b);

	// 255보다 큰 값 == 오버플로우
	if (r > 255) {
		r = 0;
	}
	if (g > 255) {
		g = 0;
	}
	if (b > 255) {
		b = 0;
	}

	// 비트 연산 or, 쉬프트 연산 <<
	color = color | (r << 16);
	color = color | (g << 8);
	color = color | b;

	// %06X == 값이 0이어도 000000으로 출력
	printf("RGB 트루컬러: %06X", color);

	return 0;
}
[실행 결과]

red? 256
green? 255
blue? 128
RGB 트루컬러: 00FF80
  • 17번 문제

32비트 크기의 데이터(부호 없는 정수형)에는 0~31번 비트가 존재한다. 7번째비트만 1인 값, 15번째비트만 1인값, 23번째 비트만 1인 값, 31번재 비트만 1인 값을 구해서 16진수와 10진수로 출력하는 프로그램

#include<stdio.h>
int main(void) {
	unsigned short a = 2;

	// 쉬프트 연산으로 값을 구한다.
	printf(" 7번 비트만 1인 값: %08x %d\n", a << 6, a << 6);
	printf("15번 비트만 1인 값: %08x %d\n", a << 14, a << 14);
	printf("23번 비트만 1인 값: %08x %d\n", a << 22, a << 22);
	printf("31번 비트만 1인 값: %08x %d\n", a << 30, a << 30);

	return 0;
}
[실행 결과]

07번 비트만 1인 값: 00000080 128
15번 비트만 1인 값: 00008000 32768
23번 비트만 1인 값: 00800000 8388608
31번 비트만 1인 값: 80000000 -2147483648
Clone this wiki locally