Chapter05 프로그래밍 연습

milpy·2022년 4월 13일
0

C 기초 플러스 6판

목록 보기
7/18

01

분수로 주어지는 시간을 시간 수와 분 수로 변환하는 프로그램을 작성하라.
60을 나타내는 기호 상수를 만들기 위해 #define이나 const를 사용하라.
사용자가 반복적으로 값을 입력할 수 있도록 while 루프를 사용하고, 0 또는 0보다 작은 값이 입력되면 루프를 끝낸다.

#include <stdio.h>

#define MIN_TO_HOUR 60

int main(void)
{
	int time, hour, min;

	scanf("%d", &time);
	
	while (time > 0)
	{
		hour = time / MIN_TO_HOUR;
		min = time % MIN_TO_HOUR;

		printf("%dH %dM\n", hour, min);

		scanf("%d", &time);
	}
	return 0;
}

02

하나의 정수를 요구하여, 그 값부터 시작하여 그보다 10만큼 큰 값까지의 모든 정수들을 출력하는 프로그램을 작성하라. (즉, 입력이 5이면, 5에서 15까지 출력한다.) 각각의 출력값을 스페이스 또는 탭이나 개행으로 분리시켜라.

#include <stdio.h>

int main(void)
{
	int num;
	int cnt = 0;

	scanf("%d", &num);

	while (cnt <= 10)
	{
		printf("%d ", num + cnt);
		cnt++;
	}

	return 0;
}

03

사용자에게 날 수를 입력하도록 요구하여, 그 값을 주 수와 나 수로 변환하는 프로그램을 작성하라. 예를들어, 18일은 2주, 4일로 변환되어야 한다. 결과를 다음과 같은 포맷으로 출력하라.

#include <stdio.h>

int main(void)
{
	int date, week, day;

	scanf("%d", &date);
	
	while (date > 0)
	{
		week = date / 7;
		day = date % 7;
		printf("%d일은 %d주, %d일입니다.\n", date, week, day);

		scanf("%d", &date);
	}

	return 0;
}

04

사용자에게 키를 센치미터 단위로 입력하도록 요구하여 센티미터와, 피트와 인치를 함께 출력하는 프로그램을 작성하라. 센티미터와 인치는 소수부도 하용해야 한다. 프로그램은, 사용자가 양수가 아닌 값을 입력할 때까지 키를 계속 입력할 수 있어야 한다. 그리고 다음 예와 같은 포맷으로 출력해야 한다.

예시

센티미터 단위로 키를 입력하시오 : 182
182.0센티미터는 5피트, 11.7인치 입니다.
센티미터 단위로 키를 입력하시오(끝내려면 <= 0) : 168.7
168.0센티미터는 5피트, 6.1인치 입니다.
센티미터 단위로 키를 입력하시오(끝내려면 <= 0) : 0
안녕!

코드

#include <stdio.h>

#define CM_TO_INCH 0.39370
int main(void)
{
	float cm, inch;
	int ft;

	printf("센티미터 단위로 키를 입력하십시오 : ");
	scanf("%f", &cm);
	
	while (cm > 0)
	{
		inch = cm * CM_TO_INCH;
		ft = (int)inch / 12;
		inch -= (ft * 12); 

		printf("%.1f센티미터는 %d피트, %.1f인치입니다.\n", cm, ft, inch);	

		printf("센티미터 단위로 키를 입력하십시오(끝내려면 <= 0) : ");
		scanf("%f", &cm);
	}
	printf("안녕!\n");

	return 0;
}

05

처음 20가지 정수들의 합을 구하는 프로그램인 addemup.c(리스트 5.13)를 수정하라. (첫째 날에 $1, 둘째 날에 $2, 셋째날에 $3와 같이 급료를 받으면, 20일이 지났을 때 모두 얼마를 받게되는지 계산하는 프로그램이라고 생각할수 있다). 계산을 어디까지 진행할 것인지 즉 사용자가 일한 날자를 알려줄수 있도록 프로그램을 수정하라. 즉, 20을 값을 읽어 저장하는 변수로 대체하라.

#include <stdio.h>

int main(void)
{
	int count, sum, date;

	scanf("%d", &date);

	count = 0;
	sum = 0;

	while (count++ < date)
		sum = sum + count;

	printf("%d일동안 번 돈은 ", date);
	printf("총 $%d입니다.\n", sum);

	return 0;
}

06

프로그래밍 연습 05의 프로그램을, 정수들의 제곱의 합을 구하도록 수정하라. (첫째 날에 $1, 둘째 날에 $4, 셋째 날에 $9와 같이 급료를 받으면, 총 얼마를 받게 될까? 이 조건으로 근로계약을 맺는 것이 훨씬 낫다!) C 언어는 제곱함수를 제공하지 않는다. n * n이 n의 제곱이라는 사실을 사용하라.

#include <stdio.h>

int main(void)
{
	int count, sum, date;

	scanf("%d", &date);

	count = 0;
	sum = 0;

	while (count++ < date)
		sum = sum + (count * count);

	printf("%d일동안 번 돈은 ", date);
	printf("총 $%d입니다.\n", sum);

	return 0;
}

07

사용자에게 하나의 float형 수를 입력하도록 요구하여ㅡ 그 수의 세제곱을 출력하는 프로그램을 작성하라. 그 값의 세제곱을 구하여 출력하는 사용자 함수를 작성하라. main() 함수는 이 함수에 입력받은 값을 전달 한다.

#include <stdio.h>

void TripleCal(float);

int main(void)
{
	float num;
	scanf("%f", &num);
	
	TripleCal(num);

	return 0;
}

void TripleCal(float num)
{
	printf("%.1f * %.1f * %.1f = %.1lf\n", num, num, num, (num * num * num));
}

08

모듈러스(나눈 나머지를 구하는) 연산을 적용하는 결과를 나타내는 프로그램을 작성하라. 사용자는 먼저 입력 후 변경되지 않은 채로 남을 두 번째 피 연산자에 사용될 정수를 입력해야 한다. 그리고 나서 모듈러스를 구하기 위한 수를 입력하는데, 0이나 그 이하를 입력하면 프로세스가 종료된다. 예제 실행은 다음과 같다.

예시

이 프로그램은 모듈러스(두 수를 나눈 나머지)를 구하는 프로그램이다.
두 번째 피연산자로 제공할 정수를 입력하시오 : 256
이제 첫 번째 피연산자를 입력하시오 : 438
438 % 256 = 182
첫 번째 피연산자(<= 0 이면 종료)용 다음 수를 입력하시오 : 1234567
1234567 % 256 = 135
첫 번째 피연산자(<=0 이면 종료)용 다음 수를 입력하시오 : 0
종료

코드

#include <stdio.h>

int main(void)
{
	int first, second;
	
	printf("이 프로그램은 모듈러스(두 수를 나눈 나머지)를 구하는 프로그램이다.\n");

	printf("두 번째 피연산자로 제공할 정수를 입력하시오 : ");
	scanf("%d", &second);
	
	printf("이제 첫번째 피연산자를 입력하시오 : ");
	scanf("%d", &first);

	while (first > 0)
	{
		printf("%d %% %d = %d\n", first, second, (first % second));

		printf("첫 번째 피연산자(<=0 이면 종료)용 다음 수를 입력하시오 : ");
		scanf("%d", &first);
	}
	printf("종료\n");

	return 0;
}

09

사용자에게 화씨온도를 입력하도록 요구하는 프로그램을 작성하라. 이 프로그램은 화씨온도를 double형 수로 읽고, 그것을 Temperatures()라는 사용자 함수에 전달인자로 전달해야 한다. 이 함수는 그 값에 상당하는 섭씨온도와 절대온도룰 계산하여 출력하되, 세 가지 온도를 소수점 아래 두 자리까지의 정밀도로 표시해야 한다. 이 프로그램은 각각의 값에 단위 표시를 하여 구별할 수 있도록 해야 한다.다음은 화씨온도를 섭씨온도로 변환하는 공식이다.

섭씨온도 = 5.0 / 9.0 * (화씨온도 - 32.0)

일반적으로 절대온도는 과학 분야에서 사용된다. 절대 온도 0은 자연에서 가능한 최저 온도를 나타낸다. 다음은 섭씨온도를 절대온도로 변환하는 공식이다.

정대온도 = 겁씨온도 + 273.16

Temperatures() 함수는 const를 사용하여 변환 공식에 나타나는 세개의 상수를 기호 표현으로 나타내야 한다. main() 함수는 사용자가 온도를 반복적으로 입력할 수 있도록 루프를 사용해야 한다. 그 루프는 q 또는 수치형이 아닌 값이 입력되면 종료된다. scanf()눈 앍은 항목 수를 반환(리턴)하므로, 수를 읽으면 1을 반환할 것이고, 사용자가 q를 입력하면 1을 반환라지 않을 것 이라는 사실을 이용하라. == 연산자는 등가성(equality)을 검사하므로, scanf() 값이 1을 반환하는지 비교하는데 사용할수 있다.

코드

#include <stdio.h>

void Temperatures(const double);

int main(void)
{
	double f;

	printf("화씨 온도를 입력하세요 : ");
	
	while (1 == scanf("%lf", &f))
	{
		Temperatures(f);
		printf("화씨 온도를 입력하세요 : ");
	}

	return 0;
}

void Temperatures(const double F)
{
	const double C = 5.0 / 9.0 * (F - 32.0);
	
	const double K = C + 273.16;

	printf("화씨 온도 : %.2lf\n", F);
	printf("섭씨 온도 : %.2lf\n", C);
	printf("절태 온도 : %.2lf\n", K);
}

0개의 댓글