본문 바로가기
IT/프로그래밍

C언어 본색 파트1 Chapter 9 연습문제 솔루션

by nutrient 2021. 5. 31.
728x90
728x170

 

 

1번

#include <stdio.h>
int abs(int x);

int main(void) {
	int a;
	int result=0;

	printf("정수를 입력하세요 : ");
	scanf("%d", &a);
	result = abs(a);
	printf("절대값은 : %d입니다. \n", result);

	return 0;
}

int abs(int x) {
	if(x >= 0)
		return x;
	else
		return -x;
}

/*

절대값을 반환하는 함수를 구현하는 문제입니다.
입력값이 0보다 작으면 -를 붙여 양수로 변환시킵니다.

*/

 

2번

#include <stdio.h>
int sum(int x);

int main(void) {
	int i;

	for(i=1; i<=12; i++)
	{
		printf("%d ", sum(i));
	}

	printf("\n");
}

int sum(int x) {
	if (x <= 2)
		return 1;
	else
		return sum(x-1) + sum(x-2);
}

/*

토끼의 개체수 증가를 구하는 문제입니다.
재귀 함수 호출을 통해 문제를 해결합니다.

*/

 

3번

#include <stdio.h>
int plus(int i, int j);			// i + j
int minus(int i, int j);		// i - j
int multiply(int i, int j);		// i * j
float divide(int i, int j);		// i / j

int main() {
	int a, b;
	int result;
	double result2;

	printf("input two numbers : ");
	scanf("%d %d", &a, &b);

	result = plus(a, b);
	printf("a + b = %d \n", result);
	result = minus(a, b);
	printf("a - b = %d \n", result);
	result = multiply(a, b);
	printf("a * b = %d \n", result);
	result2 = divide(a, b);
	printf("a / b = %lf \n", result2);

	return 0;
}

int plus(int i, int j) {
	return i + j;
}

int minus(int i, int j) {
	return i - j;
}

int multiply(int i, int j) {
	return i * j;
}

float divide(int i, int j) {
	return (double) i / j;
}

/*

각 함수의 원형을 만들어주면 되는 간단한 문제입니다.

*/

 

4번

#include <stdio.h>
int getArea(int x, int y);

int main(void) {
	int a, b;
	int result;

	printf("밑변 길이 : ");
	scanf("%d", &a);
	printf("높이 : ");
	scanf("%d", &b);

	result = getArea(a, b);
	printf("사각형의 넓이는 %d입니다. \n", result);
	
	return 0;
}

int getArea(int x, int y) {
	return x * y;
}

/*

scanf를 이용하여 값을 입력받고 getArea라는 함수를 통해 값을 반환하는 간단한 문제입니다.

*/

 

5번

#include <stdio.h>
int square(int x);
int cube(int x);
int quartic(int x);
int quintic(int x);

int main() {
	int a;
	int result;
	
	printf("A TABLE OF POWERS \n");
	printf("------------------------------------------------------------\n");
	printf("   INTEGER      SQUARE      CUBE      QUARTIC      QUINTIC\n");
	printf("------------------------------------------------------------\n");
	for(a=1; a<=3; a++)
	{
		printf("\t%3d\t", a);
		result=square(a);
		printf("%6d\t", result);
		result=cube(a);
		printf("%8d\t", result);
		result=quartic(a);
		printf("%5d\t", result);
		result=quintic(a);
		printf("%10d \n", result);
	}

	return 0;
}

int square(int x) {
	return x*x;
}

int cube(int x) {
	return x*x*x;
}

int quartic(int x) {
	return x*x*x*x;
}

int quintic(int x) {
	return x*x*x*x*x;
}

/*

제곱, 세제곱, 네제곱, 다섯제곱을 계산하는 함수를 각기 만들어 출력합니다.

*/

 

6번

#include <stdio.h>
int Add(int x, int y);
int Count();

int main(void) {
	int a, b, c;
	int result;
	
	c = 0;

	while(c < 100)
	{
		printf("숫자 두 개를 입력하세요(0 0 -> exit) : ");
		scanf("%d %d", &a, &b);
			
		if(a == 0 && b == 0) {
			break;
		}
		else {
			result = Add(a, b);
			printf("덧셈 결과 : %d \n", result);
		}

		c = Count();
	}		
	
	printf("총 연산 수 : %d \n", c);
	return 0;
}

int Add(int x, int y) {
	return x + y;
}

int Count() {
	static int c = 0;
	c++;

	return c;
}

/*

정적 변수로 c를 잡아 총 연산을 몇 번 했는지 확인하는 데 이용합니다.
Count()함수는 정적 변수 c값을 증가시키는 데 이용되며 c를 반환합니다.
Count()함수내에서 c는 정적 변수이기 때문에 Count()가 계속 호출되도 이전 값을 유지합니다.

*/

 

7번

#include <stdio.h>
int Alpha(char x);

int main(void) {
	char ch;
	int result;

	printf("알파벳을 입력하세요 : ");
	scanf("%c", &ch);
	result = Alpha(ch);
	printf("입력한 %c는 알파벳 순서로 %d번째 문자입니다. \n", ch, result);

	return 0;
}

int Alpha(char x) {
	int num;
	
	if(x >= 65 && x <= 90) {
		num = x - 64;
		return num;
	}
	else {
		num = x - 96;
		return num;
	}
}

/*

char형의 변수는 int형으로 자동 캐스팅될 수 있으며, 각각의 문자는 고유의 키값을 가지고 있습니다.
이를 아스키 코드라고 하며, Alpha함수가 if-else문을 이용하여 분기되어 있는 것은 대소문자에 모두 대응하기 위해서입니다.
현재 위 코드는 알파벳 이외의 기호나 숫자를 입력했을 때도 대응하므로 else 대신 else if를 사용하여 조건을 추가해줄 필요가 있으나,
문제의 의도는 함수를 이해하는 데 있으므로 간단히 else로만 처리하도록 합니다.

*/

 

8번

#include <stdio.h>
int sum(int x);

int main(void) {
	int a;
	int result;

	printf("input your number = ");/
	scanf("%d", &a);
	result = sum(a);
	printf("1부터 %d까지의 합 : %d \n", a, result);

	return 0;
}

int sum(int x) {
	if(x <= 1)
		return 1;
	else 
		return x + sum(x-1);
}

/*

재귀함수를 이용하여 1부터 입력값까지의 합을 구하도록 하였습니다.
1보다 작게 되면 재귀 호출이 멈추어야하기 때문에 이때는 1을 리턴합니다.

*/
728x90
그리드형

댓글