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

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

최옥구 2023. 1. 12. 15:00
반응형

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


  • 문장들이 실행되는 순서를 제어하는 문장을 제어문이라고 하고, 제어문에는 조건문반복문이 있다.
  • 프로그램을 작성할 때는 순차 구조, 선택 구조, 반복 구조의 3가지 기본 제어 구조가 있다.
  • if 문은 조건이 참이면 문장을 실행하고, 거짓이면 실행되지 않게 한다. 또한 이 조건은 숫자로도 표현이 가능한데, 0은 false를 뜻하고, 그 밖에 음수포함 숫자들은 모두 true를 의미한다.  
  • 조건문 안의 문장이 한 줄을 넘어서는 것을 복합문(블록)이라고 한다. 이 복합문을 C 프로그램에 작성하려면 중괄호로 묶어서 조건문의 처음과 끝을 정해놔야 한다. 들여 쓰기와는 상관없다.
  • else는 모든 조건을 충족하지 않을 경우 실행된다. switch문의 default와 같은 의미를 가지고 있다.
  • 조건식은 앞에서 나왔던 관계 연산자논리 연산자로 구체화하고 풍부하게 만들 수 있다.
  • 중첩 if문도 가능하다. 다만, if문을 중첩해서 사용할 경우 프로그램이 순차적으로 진행되면서 if문은 계산을 필수적으로 하기 때문에 프로그램이 무거워진다. 따라서 분명한 이유가 있지 않고, 하나의 조건만 검사해서 넘어가도 되는 조건문이라면 else if를 필수적으로 써야 한다. 이를 사용하면 어느 조건이 맞아서 그 조건문이 실행되면 아래 남아있는 else if문들은 자동으로 넘어가져 연산을 수행하지 않는다.
  • switch문은 if문과 비슷한 조건문이다. 제어식을 먼저 계산하고, 그 제어식에 해당하는 case를 찾아가 문장을 실행한다. 여기서 주의해야 할 것은 각 case별로 break를 마지막에 넣어야 한다는 것이다. 다만 예를 들어 case 1과 case 2가 case만 다르고 안에 실행되는 문장은 같다면 case 1에는 break를 안 넣어서 1이 돼도 2의 문장이 실행되게 할 수 있다. 
  • switch 문에서 제어식의 값은 반드시 정수값으로 계산되어야 한다. 또 상수여야 하기 때문에, case에는 실수나 변수, 수식, 문자열을 사용할 수 없다. 다만 문자는 사용할 수 있는데, 문자는 아스키코드로 정수가 되기 때문이다. 
  • goto 문 함수 내에서 (함수 사이에서의 점 푸는 불가)은 강제적으로 프로그램의 특정 부분으로 실행 방향을 옮기는 명령문이다. 이는 자주 사용되지는 않는데, 프로그램의 가독성을 매우 떨어뜨리기 때문이다. 그리고 goto를 사용하지 않아도, break, continue나 후에 나올 while, for문 같은 반복문을 사용하여 대부분 goto문을 사용하지 않아도 해결할 수 있다. 그렇다고 goto가 쓸데가 없는 것은 아닌데, 중첩된 반복문에 오류가 발생해서 외부로 빠져나가려고 할 때 goto로 한 번에 나갈 수 있다.

1. 수식 !( 1 + 1 >= 2 )의 결과값은 얼마인가? - 1번 / 1 + 1 >= 2는 참으로 0 이외의 수이지만, !가 붙으면서 false 즉 0이 된다.

 

2. 수식 (10 > 20) && (20 > 10)의 결과값은 얼마인가? - 1번 / 10 > 20 == false 

 

3. 조건 "x가 0 또는 1이면"을 올바르게 구현한 것을 모두 골라보자. - 2번

 

4. 다음의 작업을 수행하는 문장을 작성하라

(A) if(60 <= v && v <= 100) printf("정상속도");

(B) if(a > b) { max = a; min = b;} else { max = b; min = a;} 

(C) if(op == 1) printf("one"); else if(op == 2) printf("two"); else if(op == 3) printf("three");

 

5. switch 문은 if-else 문으로 변경하고 if-else 문은 switch 문으로 작성하라.

if( x == -1 )
	num--;
else if( x == 1 )
	num++;
else 
	num = 0;
    
// switch 문으로 변경

switch(x){
	case -1:
    	mum--;
        break;
    case 1:
    	num++;
        break;
    default:
    	num = 0;
        break;
}
switch(code){
	case 'X':
    	x++;	break;
    case 'Y':
    	y++;	break;  
    default:
    	x = y = 0;	break;
}
  
// if 문으로 변경

if(code == 'X')
	x++;
else if(code == 'Y')
	y++;
else x = y = 0;

 

6. 다음의 2개의 if 문을 논리 연산자를 사용하여 하나의  if 문으로 다시 작성하라.

if(10 < x && x < 20)
	printf("%d", x);
if(x < 10 || x > 20)
	printf("%d\n", x);

 

7. 다음의 프로그램의 출력을 쓰라.  - (A) 0 (B)A \n C

 

8. 다음 문장의 오류를 찾아서 모두 수정하라. 오류가 없을 수도 있고 2개 이상의 오류가 있을 수고 있다. 문법적인 오류 뿐만 아니라 논리적인 오류도 지적하라.

if(age > 18)
	printf("성인\n");
else
	pintf("청소년\n");
    
//**********************

if(0 <= age && age <= 18)
	printf("청소년\n");
    
//**********************

if(x == 0)
	printf("x는 0이다.\n");

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

if(speed > 120 && speed <= 150)
	printf("벌금 6만원\n");
else if(speed > 150)
	printf("별금 9만원\n");
else printf("OK\n");

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

if(score > 90){
	printf("장학금 \n");
    printf("우등 \n");
}else printf("좀더 노력하세요.\n");

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

if(x > 0 && y > 0)
	printf("x와 y는 모두 양수 \n");
else printf("x가 양수가 아님.\n");

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

if(age > 0 && age <= 18)	//청소년은 1세부터 18세를 말하는데 or을 쓰면 논리가 맞지 않는다.
	printf("청소년\n");
    
//**********************

int tiger = 3;
switch(tiger){
	case 1:		//case에는 (정수)상수만
    case 2:
	case 3:
    . . .
    break;
}

 

반응형