본문 바로가기
작업/Programming

Perfect C 프로그래밍 연습 10장 1, 3, 4, 5번 해결

 

 

10장은 함수를 만들어 코딩을 하는 연습을 제공하고 있어요.

함수를 사용하다 보니 코딩이 상당히 쉬워졌네요. 후...

 

 

코드는 1번을 제외하고는 모두 main 부분을 생략하여

함수 정의, main 내부 구문, 함수 내용으로 코드를 올렸습니다.

 

 


문제 1.

 

#include <stdio.h>

double inchtocm(double inch);  //inch -> cm


int main(){

	//문제1
    double value; //inch값 입력

    printf("cm로 변환할 inch값 입력 = ");

    //scanf 형식에서 버퍼의 크기가 추가된 scanf_s 사용
    scanf_s("%lf", &value, sizeof(double));

    //출력 매개로 함수 사용
    printf("%.2f inch는 %.2f cm 입니다.\n", value, inchtocm(value));

}

double inchtocm(double inch) {
    //cm로 변환하는 식 적용 후 값 반환
    return inch * 2.54;
}

 

1번 문제는 함수 사용의 이해를 돕고자 풀코드를 올렸습니다.

 

 

함수는 정의하는 부분, 호출하는 부분, 내용을 설명하는 부분의 3가지로 구분됩니다.

정의하는 부분은 main()에 들어가기 이전에 자료형, 함수 이름, 함수에 사용할 매개변수를 선언하는 것입니다.

 

 

호출은 main() 내부의 구문에서 함수를 사용할 때 발생하며,

함수의 내용을 main() 밖의 영역에서 기술함으로써 구실을 할 수 있도록 합니다.

 

 

1번 문제에서 함수로 사용된 것은 길이 단위를 inch에서 cm로 바꾸는 식입니다.

 


문제 3.

 

섭씨온도를 화씨온도로 변환

 

//문제3
double CtoF(double temC); //함수 정의 C -> F


//main()
double C = 0; //섭씨온도

//섭씨온도 0.5씩 올리고 화씨온도 구하기
while(C<100.5){

	printf("섭씨온도 %.1lf℃ 의 화씨온도는 %.2lf℉ 입니다.\n", C, CtoF(C));

    C+=0.5; 
}

// 함수 설명 C -> F
double CtoF(double temC){
    return temC/5. * 9 + 32;
}

 

 

 

문제 3번에서 만든 함수는 입력된 섭씨온도를 인자로 받고,

화씨온도로 변환하는 계산을 적용한 후에 반환하는 구조입니다.

while() 반복문을 통해서 섭씨온도를 0.5℃씩 올리면서 그에 대응되는 화씨온도를 출력했습니다.

 


문제 4.

 

세 개의 정수 중 가장 큰 수 찾기

 

void PrintMax(int a, int b, int c); //가장 큰 값 출력

  //main()
    int num1, num2, num3;

    printf("세 정수를 입력하세요.");
    scanf_s("%d %d %d", &num1, &num2, &num3, sizeof(int));

    PrintMax(num1, num2, num3); //함수 호출



//가장 큰 값 출력
void PrintMax(int a, int b, int c){
    int max = a;
    if(max<b) max=b;
    if(max<c) max=c;

    printf("세 정수 %d %d %d 중 가장 큰 수 = %d",a, b, c, max);
}

 

인자로 받은 3개의 정수 값 중에서 가장 큰 수를 출력하는 구성으로 함수를 만들었습니다.

max는 최대 값을 저장할 수 있도록 하였으며, 처음에는 a값을 넣었습니다.

 

 

이후 if문을 통해 다른 두 값을 비교하여 큰 수가 max에 최신화되도록 했습니다.

 


문제 5.

 

 

다섯 제곱을 구하는 함수 구성

 

void cube(double val); //세제곱 함수

double square(double val); //제곱 함수

 //main()
    double num; //임의의 수

    printf("임의의 수 입력 = ");
    scanf_s("%lf", &num, sizeof(double));

    cube(square(num)); //함수 호출
    
    
//제곱 값 구하기
double square(double val){
    return pow(val, 2); //수의 제곱 값 반환
}


//5제곱 값 구하기
void cube(double val){
    printf("%.lf의 다섯제곱 값 = %.lf",sqrt(val), val*pow(sqrt(val),3));
}

 

 

 

제곱 값을 구하는 함수에 math.h 라이브러리의 수학 함수를 적용하였습니다.

5 제곱 값을 구하는 함수는 임의로 만들었습니다.

 

 

sqrt() 함수는 제곱근을 구하는 함수입니다.

 

 

val*pow(sqrt(val),3))의 식을 해석하자면

val = 제곱 값 ( x^2 )

 

sqrt(val) = 제곱근 값 ( x^2의 제곱근 = x )

 

 

 

5 제곱을 구하는 방식으로는

제곱 값을 이미 구한 val에 세제곱에 해당하는 pow()식을 적용한 것입니다.

 

 

사실 다섯 제곱은 그냥 pow(x, 5) 형태로 만들면 됩니다...ㅋㅋ;;

문제에서 요구하는대로 만들다 보니 저렇게 나온 거예요. ㅠ

 

 

-끝-