전공/C

과제 6 - Function (1 ~ 5)

yha97 2021. 6. 21. 16:17

C에서 가장 많이 사용되는 것 중 하나인 Function이다. 주로 function을 통한 연산이나 재귀를 통해 문제를 해결하는 것이 주를 이루었다.

 

개인적으로 하노이의 탑이 나오지 않아 아쉽지만 처음 함수를 배웠을 때 리턴타입의 개념이 확실하게 정립되지 않아 꽤나 어려웠던 기억이 있었다.

 

수를 입력받은 후 세제곱을 출력하는 프로그램이다.

 

#include <stdio.h>

double Cube(int n){
	return n * n * n; // calculating and returning the result
}

int main(){
	int n;
	printf("Enter any number: ");
	scanf("%d", &n); // getting input number from user
	
	printf("Cube of %d is %.2f", n, Cube(n)); // print the output 
	return 0;
}

n을 입력받은 후 세제곱을 계산, 그 값을 리턴하는 함수를 활용했다.

 

두 수를 입력받고 둘 중 큰 수와 작은 수를 출력하는 프로그램이다.

 

#include <stdio.h>

void MaxandMin(int n1, int n2){
	int max, min = 0;
	if(n1 > n2){ // getting max and min from parameter
		max = n1;
		min = n2;
	}
	else{
		max = n2;
		min = n1;
	}
	printf("Maximum = %d\n", max); // printing output
	printf("Minimum = %d\n", min);
	return;
}

int main(){
	int n1, n2;
	printf("Enter two numbers: ");
	scanf("%d %d", &n1, &n2); // getting input number from user
	
	MaxandMin(n1, n2); // printing output with function
	return 0;
}

두 수를 입력받고 parameter로 함수에 전달, if, else를 활용하여 결과를 출력하였다.

 

return type은 void이기 때문에 return;으로 함수를 탈출하였다.

 

수를 입력받고 그 수가 짝수인지, 홀수인지를 출력하는 프로그램이다.

 

#include <stdio.h>

void Check(int n){
	if(n % 2 == 0){ // check if parameter that user entered is even or not
		printf("The number is even."); // print output
	}
	else{
		printf("The number is odd.");
	}
}

int main(){
	int num;
	printf("Enter any number: ");
	scanf("%d", &num); // getting input number from user
	
	Check(num); // sending value to function
	return 0;
}

void형 함수에 parameter로 입력받은 n에 대하여 if~else를 통해 홀, 짝을 구분하고 그에 따라 결과를 출력하였다.

 

재귀를 통해 입력받은 수(base)를 n제곱(exponent)하는 문제이다.

 

#include <stdio.h>

double Power(int b, int e){
	// Power = b ^ e
	// finding power of anumber using recursion
	if(e == 1)
		return b;
	else
		return Power(b, e-1) * b;
}

int main(){
	int base, expo;
	
	// gettig input number from user
	printf("Enter base: ");
	scanf("%d", &base);
	printf("Enter exponent: ");
	scanf("%d", &expo);
	
	// printing output
	printf("%.2f ^ %d = %f", (double)base, expo, Power(base, expo));
	return 0;
}

base값과 expo값을 입력받은 후 곱할수록 expo를 차감하는 방식으로 재귀함수를 구현하였다.

 

double형으로 리턴하며 expo값이 1일 경우 base를 리턴, 점점 곱하는 방식으로 문제를 해결하였다.

 

수를 입력받고 해당 수의 자릿수의 합을 출력하는 프로그램이다.

 

#include <stdio.h>

int SumOfDigits(int n, int sum){
	// getting sum of each digits of numbers using recursion
	if(n < 10)
		return n + sum;
	else{
		sum += n % 10;
		SumOfDigits(n/10, sum);
	}
}

int main(){
	int num, sum = 0; // setting value of representing sum of digits
	printf("Enter any number to find sum of digits: ");
	scanf("%d", &num); // getting input number from user
	
	printf("Sum of digits of %d = %d", num, SumOfDigits(num, sum)); // printing output
	return 0;
}

출력해야할 합의 값을 받아야 하기 때문에 인자를 2개로 설정하여 함수를 구현하였다.

 

n을 10으로 나눈 나머지를 구하고 그 자릿수를 sum에 더한 다음 n = n/10을 인자로 갖는 재귀함수를 통해 sum값을 구하여 결과를 도출하였다.