과제 6 - Function (1 ~ 5)
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값을 구하여 결과를 도출하였다.