본문 바로가기
C/C++

C++ (3주) [C언어 문법 정리 2]

by DeathStar183 2022. 7. 13.

저번주엔 여태까지 배워왔던 C언어를 복습하는 시간이었습니다.

식별자,리터럴,자료형 등등...

 

이번주에는 이렇게 보고 넘어갈겁니다.

(이걸 봐도 상관없고, 제어문을 풀어놓은것도 살펴보는것도 나쁘지 않습니다.)

 

● 제어문 (모든종류)

● 함수(funtion) [C언어 11주차 링크로 대체]

(이번주엔 오직 복습만 합니다.)

 

 

잊으면 절대 안됩니다!

저번에 C++언어가 뭐라고 했었죠?

 

C언어의 문법을 모두 포함, 개선한 언어이며,

C언어 문법은 포함하고 있지만 프로그래밍 스타일은 완전히 다릅니다.

 

 

 

 

 

제어문

위부터 아래로 순차적으로 실행되는 프로그램의 실행순서를 바꾸기 위해서 사용하는 제어문은

C/C++언어뿐만 아니라 다른 언어에서도 가장 중요한 문법

 

제어문의 문법은 간단하지만, 잘 활용할수 있느냐에 따라 프로그래밍을 할수 있는지 없는지를 판가름함

 

보통 for문과 if문의 사용빈도가 제일 높음

 

 

 

 

 

 

조건문 : if

if문 다음 괄호 안의 조건식이 참이면 문장1을 실행하고 거짓이면 문장1은 실행하지 않고 건너뜀

ex. if (조건식) 문장1; (거짓이면) 다음문장;

 

if 조건문을 만드는 과정

     1. 19세 이상이면 이 영화를 볼 수 있습니다.

     2. if(나이가 19세 이상) 영화를 볼 수 있습니다.

     3. if(age>=19) printf("당신은 영화를 볼 수 있습니다!");

 

1. if(age>=19) printf("당신은 영화를 볼 수 있습니다!");

2. if(age>=19) { printf("당신은 영화를 볼 수 있습니다!"); }

 

이 두개의 차이점은 무엇일까?

첫번째 형식은 조건식이 간단할때 선호하는 형식

 

반대로 두번째는 문장이 1줄이라면 보통 잘 사용하지는 않지만,

조건이 참이면 실행할 부분이 무엇인지 확실하게 어디라고 블록을 설정하는 의미로 중괄호로 감싸줌

 

예제 몇개를 살펴보면서 차근차근 복습해보겠습니다!

 

 

 

 

3-1. if문 예제1

 

if문은 60점 미만일때만 작동하고, 그렇지 않으면 넘어간다.

 

 

 

3-2. if문 예제2

if문 다음에 조건식이 아닌 변수만 있으면 그 변수값이 참인지를 묻는것이다.

즉 "!score가 참"이면 printf문을 실행 (참고 C언어에서는 0만 아니면 모두 참으로 인식함)

"!score가 참" 인것은 score가 거짓인지를 묻는것임.  if(score==0)와 동일

if(score)는 "score가 참이면" 이라는 조건으로 if(!score=0)과 동일

0을 입력하면 위 두문장,그외는 아래에 있는 두문장이 실행됨

 

 

 

3-3. if문 예제3

90이상 95미만이면 printf함수 실행

C언어로 특정구간을 표현할때는 첫 if문 처럼 표현함

두번째는 아무런 숫자만 입력하면 실행됨.

90<92는 참이므로 1이 되고(비교 연산자로 묶지 않으면 앞에서부터 차례대로 비교함)

거짓이면 0이되므로 95보다 무조건 작으므로 조건식이 참이 되어버림 (오류)

 

 

 

조건문 : if~else

양자 택일의 상황에서 주로 사용함

 

if문 다음의 괄호 안의 조건식이 참이면 문장1을 실행하고 다음 문장으로 가며,

조건식이 거짓인 경우에는 문장2와 다음 문장을 실행함

 

 

 

if ~ else 조건문을 만드는 과정

 

1. 19세 이상이면 이 영화를 볼 수 있고,

    그렇지 않으면 영화를 볼 수 없습니다.

 

2. if(19세 이상이면) 영화를 볼 수 있습니다.

    else 영화를 볼 수 없습니다.

 

3. if(age>=19) printf("당신은 영화를 볼 수 있습니다!");

    else printf("당신은 영화를 볼 수 없습니다!");

 

 

 

 

3-4. if~else 문 예제 1

양자택일의 문제에서는 주로 if~else문을 사용해서 작성함

물론, 그냥 if문만 사용해도 작성 가능

 

 

 

 

 

3-5. if~else 문 예제 2

scanf에서 입력 받은 두수중 더 큰수가 max에 대입됨

 

 

 

 

 

3-6. if~else 문 예제 3

 

 

 

 

 

 

다중 if ~ else문

더 많은 조건에 따라 분기해야 되는 프로그램은 다중 if ~ else문을 사용함

else문에 다시 if ~ else문을 사용하는 것이고 마지막은 else로 끝남

 

 

 

 

 

3-7. 다중 if~else 문 예제 1

 

 

 

 

 

3-8. 다중 if~else 문 예제 2

다중 if ~ else문을 사용하여 입력받은 수를 출력함

마지막의 else문은 1~3 이외의 숫자를 입력한 경우에 출력

 

 

 

 

 

 

3-9. 다중 if~else 문 예제 3

scanf함수로 점수를 읽어들여 다중 if ~ else문에 해당하는곳을 찾아 출력함

 

 

 

 

 

조건문 : Switch ~ case

switch~case문은 다중 if~else문처럼 경우(case)의 수가 많을 경우 자주 사용하는 조건문

결과가 정수형(int, char, enum)인 경우만 선택할 수 있으므로 범위 검사 문제에는 적당하지 않음

 

switch다음의 조건식은 결과가 정수형(int, char, enum)인 수식만 가능

case 다음에 쓰는 상수1, 상수2 등을 레이블(label)이라 함

 

case문의 레이블 다음에는 구두점 콜론(:)을 씀

break문은 자신을 포함하고 있는 블록(루프)을 벗어나는데 사용

 

조건식은 각 case문에서 차례대로 비교되고 조건식의 결과와 상수 레이블이 일치하면

그 아래 문장을 실행하고 break문을 만나면 switch~case문을 탈출

 

보통은 각 case별로 실행할 내용이 다르므로 case문마다 마지막에 break문을 모두 사용하지만,

break문을 반드시 써야 하는 것은 아님

 

마지막 case에 해당하는 default문은 위의 case 레이블에 만족하는 경우가 없을 때 실행되는 부분으로

다중 if~else의 마지막 else에 해당함

 

어렵게 적어놔서 그렇지 쉽게 풀자면

switch는 어떠한 상황, case는 해결 방법이라 생각하시면 됩니다.

 

 

 

 

 

3-9. switch ~ case vs 다중 if ~ else 비교

 

 

 

 

 

 

반복문 : for

특정한 부분을 반복

C 프로그래밍에서 가장 많이 등장하는 중요한 문법

 

반복 횟수를 알고 있는 경우 많이 사용

for문은 제어 변수 초기식, 조건식, 증감식(증가나 감소식을 줄여서)의 세 부분으로 구성

각각은 구두점 세미콜론(;)으로 분리

 

제어 변수는 반복문을 제어하는 변수로 제어 변수 초기식은 루프가 시작될 때 한 번만 수행.

(j=0과 같이 제어 변수에 초기값을 할당)

 

조건식은 반복문이 언제까지 실행될 것인지를 지정하며 조건식이 참이면 반복문의 루프는 돌고,

거짓이면 루프를 빠져나옴

 

증감식은 반복 실행될 문장이 모두 실행된 후 실행되며 보통 제어 변수를 증가나 감소시킴

 

for문 사용방법

 

for(i=0;i<10;i++) //++i, i=i+1, i+=1 라고 해도 됨

i는 0부터 9까지 1씩 증가하므로 10번 반복

 

for(j=10;j>0;j--)

j는 10부터 1까지 1씩 감소하므로 10번 반복

 

for(i=1,j=1;i<=99;i+=2,j++)

i=1, j=1의 초기값을 가지고 i가 99일 때까지 i는 2씩 증가(i=i+2) 시키고, j는 1씩 증가시킴

초기식과 증감식이 2개라서 콤마 연산자로 구분

 

for( ; ; ) //무한루프, break문을 써서 탈출해야 함

초기식, 조건식, 증감식이 모두 생략되어 있는데 이렇게 하면 반복 횟수를 무한하게,

즉 무한 루프를 만들 수 있음

 

무한 루프는 반복문 안에 break문을 써서 탈출하도록 해야 함

 

 

다양한 for문의 형태

 

 

3-10. 2중 for문

2중 for문을 사용하여 1을 1번 2를 2번 등으로 찍음

정렬을 고려해 3칸 간격으로 정렬해서 출력

 

 

 

 

 

반복문 : while

while문은 미리 반복 횟수를 알수 없고 조건에 따라서 반복하려는 경우에 사용

조건식이 참이면 루프 안에서 반복하고, 거짓이면 루프를 벗어남

 

while을 이용한 무한루프

조건식에 참인 값을 쓰면 됨.

0이외의 어떠한 값이라도 가능하지만 보통 1을 써서 사용함

 

while(1) { 반복 실행할 문장; }

 

for문 vs while문 비교

 

 

 

 

반복문 : do ~ while

do~while문은 while문처럼 미리 반복 횟수를 알 수 없고, 최소한 한번은 반복 문장을 실행할 경우에

많이 사용 do{ 반복 실행될 문장; }while(조건식);

 

일단 반복 실행될 문장을 한번 실행하고 while의 조건식을 검사한다.

조건이 참이면 루프 안에 반복 실행될 문장을 계속 실행하고 거짓이면 루프를 벗어남

 

while(조건식) 다음에 세미콜론 (;)을 붙여야 하는 것을 조심

 

while vs do ~ while

 

반복문들의 무한 루프 방법

 

 

 

 

분기문 : break

반복문(for, while, do~while)이나 switch~case문에서 안쪽 루프를 하나 벗어나는데 사용

무한 루프에는 특별한 조건에서 루프를 탈출 하도록 반드시 break문을 작성

 

          for( ; ; ){ //무한 루프 printf("끝내려면 0+0을 입력하세요\n");

          printf("계산하려는 수식(예:10+20)을 입력하세요:");

          scanf("%d%c%d",&num1,&op,&num2);

          if(num1==0 && num2==0) break; }

 

//for문 끝

 

 

 

 

 

3-11. 1부터 어떤수까지 더해야 10000을 넘는가?

 

 

 

 

분기문 : continue

for, while, do~while문에서 루프의 조건식을 검사하는 부분으로 다시 되돌아감

break문처럼 루프를 빠져나가는 것이 아니라 돌던 루프의 continue 아래 부분을 실행하지 않고

다시 조건을 검사하는 부분으로 감

 

 

 

 

 

3-12. 1부터 100까지 홀수만 출력하기

n%2가 0인 경우에는 짝수일 때이며, 짝수일땐 printf를 실행하지 않고 n만 증가한 후

조건식으로 다시 검사 하는 부분으로 되돌아감

 

 

 

 

분기문 : goto

goto문은 무조건 해당 레이블로 분기

goto label;

:

label : 문장;

 

goto SS;

SS:

goto문은 프로그램 어느 곳이라도 레이블을 만들어 바로 이동할 수 있는 편리함이 있지만

프로그램을 이해하기 어렵게 하므로 사용하지 않는 것이 좋음

 

루프가 다중으로 중첩되어 있는 경우 break문을 사용하더라도 루프 밖으로 완전히 빠져 나올 수 없는데

goto문을 사용하면 한 번에 다중 루프를 빠져 나올 수 있음

 

 

 

 

함수 C언어 11주차 내용 참고 (여기서 간단하게 설명되어 있음)

https://thisgame.tistory.com/18

 

C언어 심화 (11주차) [함수]

제어문동안 배운것들 ■조건문 : if, if ∼else ■반복문 : for ■조건문 : switch ∼case ■반복문 : while, do ∼while ■분기문 : break, continue, goto ■함수 개요 ■함수의 선언, 정의, 호출 이번주에 보고..

thisgame.tistory.com

 

해당 내용은 인덕대학교 2021년도 2학기 C프로그래밍 한성현 교수님 강좌에서 발췌한 내용입니다.

강좌 내용을 원저작자 허락없이 무단 이용시, 처벌의 대상이 될수 있습니다.

댓글