C-C++/쉽게 풀어 쓴 C 언어 EXPRESS

[쉽게 풀어 쓴 C 언어 EXPRESS] 8장 정리 & Exercise(이론) 답

최옥구 2023. 1. 14. 07:00
반응형

책의 8장의 전체적인 부분을 요약했습니다. 개인 공부 겸 책으로 공부하시는 분들이 리뷰 느낌으로 한번 더 보시면 좋을 것 같아서 작성하였습니다. 


  • 함수란 특정 작업을 수행하는 명령어들의 모음에 이름을 붙인 것을 말한다. 
  • 함수는 되풀이되는 작업들에 이름을 붙이고 선언함으로써 코딩의 효율성과 가독성을 높일 수 있다. 
  • 함수에는 <stdio.h>의 printf()와 같이 미리 작성되어 있는 라이브러리 함수와 프로그래머가 함수를 직접 만드는 사용자 정의 함수가 있다.
  • 함수 안에는 함수의 이름, 입출력, 작업에 필요한 문장들이 정의되어야 한다. 반환형과 함수 이름, 매개 변수를 합쳐서 함수 헤더한다. 
  • 함수 몸체에는 함수가 수행하는 작업에 필요한 문장들이 들어가 있다. 함수 구현부의 길이에 제한은 없지만, 지나치게 길어지면 하나 이상의 작업을 하는 것과 같기 때문에 다른 함수로 분할하여 구현하는 것이 바람직하다. 
  • 함수를 사용하기 위해서는 함수 호출을 해야 한다. 함수는 매개변수가 있는 함수와 없는 함수가 있으며, 있는 함수의 경우(자료형이 있음) 인자와 함께 함수를 호출하면 매개변수가 함수 내에서 사용되면서 값을  return 한다. 만약 인자가 없는 함수라면 void형 함수로 작성한다. 
  • 반환값은 함수당 하나만 발생하며, return (value)와 같은 형식으로 작성하면 된다. 반환값이 없는 함수는 retuurn; 만 쓰거나 생략해도 된다. 
  • main에서 함수를 사용하기 위해서는 호출하기 이전에 정의가 되어있어야 한다. 그렇기 때문에 함수를 main() 보다 위에 작성하여 호출하면 문제가 없지만, main()보다 아래에서 함수를 구현하면 컴파일러는 이 함수가 무엇인지 알지 못해 오류를 낸다. 이를 해결하려면 함수 원형을 맨 위에 작성해 주면 해결된다. 
  • C언어에는 많은 효율적인 라이브러리 함수들이 존재한다. 가령 rand() 함수는 정해진 범위 내에서 랜덤 한 수를 출력한다. 물론 때마다 다르게 출력하기 위해서는 시간을 시드값으로 설정을 해주어야 한다. 이 라이브러리함수를 사용하면 쉽게 프로그래밍을 할 수 있다. 
  • 함수를 사용하면 소스코드의 중복을 없앨 수 있고, 다른 프로그램을 제작할 때 사용할 수 있으며, 복잡한 문제를 단순한 부분으로 분해(모듈화)할 수 있어서 코드를 수정하거나 업데이트를 할 때 수월하게 진행할 수 있다. 
  • 함수는 특정한 한 가지 직업(기능)만을 맡아야 한다. 하나의 함수가 여러 개의 기능을 해서는 안 되고, 다른 함수와는 구별이 돼야 한다.

1. 함수에 대한 설명 중 잘못된 것은?  - 4번 / 함수 안에 문장이 하나도 없다면 함수를 쓰는 이유가 없습니다. 최소한 return은 있어야 합니다.

 

2. 다음 함수 원형 정의 중에서 int형을 반환하는 함수는? - 3번 

 

3. 다음의 함수 원형 정의 중에서 잘못된 것은? - 1번 / 식별자 y가 정의되어있지 않습니다.

 

4. int func(int);의 원형을 가지는 함수의 호출로 옳은 것은? - 2번 

 

5. 다음 라이브러리 함수 호출의 반환값을 쓰라. - (A) 1.72 (B) 1 (C) 2 

 

6. 다음 수식의 반환값의 범위는? - (A) 0 ~ 9 (B) 2 ~ 4

 

7. 다음의 수학식을 계산하는 문장을 작성해 보자. 

(A) double y = log10(x) + pow(e, x);

(B) double y = sin(x) + sqrt(x * x - 2 * a) + pow(2, 10);

 

8. 다음과 같은 기술에 부합하는 함수 도형을 작성하라.

void print_error(int n){
	printf("에러 발생");
	return;
}

//***********************

double larger_of(double x, double y){
	double max = (x > y) ? x : y;
    printf("%lf가 더 큼", max);
}

//***********************

void side_effect(){
	return;
}

 

9. 왼쪽 박스의 함수 원형 정의에 적절한 return 문을 박스에서 찾아서 서로 연결하라.  - 1 => 1, 2 => 3, 3 => 2

 

10. 다음은 1부터 10까지의 합을 계산하는 프로그램이다. 프로그램의 빈칸을 채워라.

1 - int f(int);

2 - f(10);

3 - return result;

 

11. 다음의 함수 원형 정의가 올바른지를 결정하고 만약에 잘못된 점이 있다면 이유를 설명하고 바르게 수정하라.

(D) y의 자료형을 지정해주어야 한다.  double y

(E) 함수의 자료형에 괄호를 지운다. int f(double x, double y);

(F) 제대로 형식 지정을 해줘야 한다. int f(int x, int y);

(G) 올바릅니다.

 

12. 다음의 프로그램에서 붉은색으로 표시된 부분을 함수로 작성하여 프로그램을 수정하시오. 함수는 인수와 반환값을 갖도록 설계하라.

#include <stdio.h>

int sumf(int n){
	int sum = 0;
	for(int i = 0; i <= n; i++)
    	sum += i;
    return sum;
 }

int main(void){
	int i, n, sum = 0;
	printf("정수를 입력하시오 : ");
    scanf("%d", &n);
    sum = sumf(n);
    printf("0부터 %d까지의 합은 %d입니다.\n", n, sum);
    return 0;
}

 

13. 다음 코드에서 잘못된 곳(컴파일 오류 및 경고)을 지적하라. 논리적인 오류도 지적하라.

int half_of(int x);		// 세미콜론을 빼야합니다.
{
	return x / 2;	
}

//*******************

void print_message(void);

int main(void)
{
	print_message(3);	 // 매개변수가 없는 함수이기 때문에 3을 넣을 수 없습니다.
}

//*******************

double half_of(int);

int main(void)
{
	printf("%f", half_of(10.0)); 	// double형은 %lf를 써야합니다.
    return 0;
}
double half_of(double x)
{
	return x / 2.0;	
}

//*******************

int sum(int x, int y)
{
	sum = x + y;	// 값을 리턴해야합니다.
}

//*******************

void sum(void) 		// void 형은 값을 리턴하지 않습니다.
{
	int x = 1, y = 2, z =3;
    return x + y + z;
}
반응형