본문 바로가기

학습공간/C, 프로그래밍기초

[3주차] prinf 함수 scanf 함수 조금 깊게, 반복문

반응형

6장

printf 와 scanf 함수에 대한 고찰

 

printf 함수 이야기

- printf 함수는 문자열을 출력하는 함수이다. 그리고 특수 문자 출력도 가능하다.

이렇게 출력을 하면 앞집 강아지가 말했다. “멍! 멍!” 정말 귀엽다. 라고 출력이 되야 한다.

하지만 컴파일 시켜보면 에러 메시지가 뜨게 된다. 왜냐하면 컴퓨터는 문자열1과 문자열2를

인식 하는데 그 사이에 정체불명의 글귀가 끼어 있기 때문이다.

그렇다면 큰 따옴표 같은 특수문자들의 출력은 어떻게 할까?

출력하고자 하는 특수문자 앞에 \(백 슬래쉬)를 붙여서 출력하게 하면 된다.

 

다양한 종류의 특수 문자 (외울 필요는 없다. 필요할 때 참고)

특수 문자

의 미

\a

경고음 소리 발생

\b

백스페이스(backspace)

\f

폼 피드(form feed)

\n

개행

\r

캐리지 리턴(carriage return)

\t

수평 탭

\v

수직 탭

\\

백 슬래시(\)

\'

작은 따옴표

\"

큰 따옴표

 

- 함수 이름 printf fformatted (서식화 된)를 의미한다.

 

서식이란 사전적 의미로 ‘서류를 작성하는 양식’ 이라는 뜻이지만, 여기서 서식화 되었다는 것은 양식을 스스로 만들었다는 의미가 강하다. 그렇다면 출력양식을 정의하여 서식화 된 출력을 시도해 보자.

이와 같이 정수형 age 라는 변수에 십진수로 12 라는 숫자를 저장하고

printf 함수에서 %d 라는 10진수로 출력, %x 라는 16진수로 출력이라고 서식화 시켰다.

 

서식문자의 종류와 그 의미 (이것 역시 자주 쓰이는 것만 빼고 나머지는 참고하도록 하자.)

서식 문자

출력 형태

%c

단일 문자

%d

부호 있는 10진 정수

%i

부호 있는 10진 정수, %d와 같음

%f

부호 있는 10진 실수 (소수점 6자리까지)

%s

문자열

%o

부호 없는 8진 정수

%u

부호 없는 10진 정수

%x

부호 없는 16진 정수, 소문자 사용

%X

부호 없는 16진 정수, 대문자 사용

%e

e 표기법에 의한 실수

%E

E 표기법에 의한 실수

%g

값에 따라서 %f, %e 둘 중 하나를 선택

%G

값에 따라서 %f, %E 둘 중 하나를 선택

%%

% 기호 출력

 

%e %E (부동소수점 표현 방식) 그리고 %g 와 %G

 - 실수를 효율적으로 표현할 수 있다. 방식만 알아두도록 하자.

%g%G 같은 경우 실수가 소수점 6자리까지 표현이 가능하다면 %f 로 출력을 해주고

소수점 6자리가 넘게 되면 %e%E 와 같이 부동 소수점 표기 방식으로 출력 된다.

 

필드 폭을 지정하여 출력하기

서식 문자

출력의 형태

%8d

필드 폭을 8칸 확보하고 오른쪽 정렬해서 출력하라.

%-8d

필드 폭을 8칸 확보하고 왼쪽 정렬해서 출력하라.

숫자는 굳이 8이 아니더라도 자신이 원하는 만큼의 폭을 잡고서 쓰면 된다.

scanf 함수 이야기 는 실수 출력할 때 float double에선 %f %lf를 쓰라는 것

 

7장

다양한 형태의 반복문

반복문(루프) 이란?

- 예를 들어 “Hello World!” 라는 메시지를 10번 출력 하고자 할 때 printf 함수를 10번이나 써야 하는 수고를 들이게 된다. 반복문을 사용하면 printf 함수를 1번만 쓰고 이 문장을 10번 수행해 주세요. 라고 명령을 내리는 것과 같다.

   C 언어에서는 while문do ~ while문 그리고 for문 이렇게 세 가지 형태가 있다.

 

while문은 반복을 위한 문장이다.

- while문의 기본 원리는 아주 간단하다. 특정 조건을 주고 그 조건이 만족될 때까지 계속해서 반복을 수행하는 것이다.

위 소스를 보면 while문이 대충 어떻게 쓰여 지는지 눈치 챘을 것이다.

만약에 i++; 문장이 없었더라면 i 는 계속 0 이므로 while 루프에서 조건이 만족될 때

까지 돌게 되므로 반복문에서 빠져나올 수 없게 된다. 이러한 현상을 무한루프에 빠졌다. 라고 한다. 이처럼 반복문을 사용할 땐 적정 시점에서 반복문을 무너뜨려 빠져나와야 한다.

 

while ( 반복 조건 )

{

        반복 내용

}

반복문은 여러 번 겹쳐서 사용도 가능. 보통 두 번 정도 겹쳐 사용함. 그 이상은 복잡함.

while문으로 짜는 구구단 출력 프로그램 (알고리즘의 흐름을 이해하면서 짜 보기)

문제 1] 사용자로부터 숫자 하나를 입력 받아서, 그 수만큼 Hallo World! 출력

문제 2] 사용자가 입력하는 정수를 계속해서 더해 나간다. 만약에 0이 입력되면

        지금까지 입력된 정수의 덧셈 결과를 출력하고 프로그램 종료.

문제 3] 입력된 정수의 평균을 구하는 프로그램. 제일 먼저 입력할 정수의 개수를

        사용자로부터 입력 받는다. 그리고 그 수만큼 정수를 입력 받아 평균을 출력.

 

 

 

 

 

 

 

 

do ~ while문에 의한 문장의 반복 (사용 빈도가 적은 편임..)

while문과 똑같다. 하지만 완전히 똑같은 것이 아니라 약간의 차이가 있다.

while문은 조건 검사를 시작하고 문장을 수행하지만 do~while문은 조건검사를 뒤에 한다.

따라서. while문은 조건이 만족되지 않으면 루프를 한 번도 실행하지 않게 되지만,

do~while문은 반드시 한번은 루프를 실행하게 되어 있다. (조건이 거짓이더라도..)

그 차이고 사용자들은 특별한 경우가 아닌 이상, 보통 while문으로 해결한다.

 

 

do

{

      반복 내용

 

 } while( 반복 조건 );

 

 

 

 

 

 

이 프로그램은 사용자로부터 숫자를 입력받고 난 다음에야 비로소 계속 진행을 할 것인지

말 것인지를 결정짓게 된다. 따라서 루프를 최소한 한번은 실행해야 한다. 이러한 경우에

while문 보다 do~while문을 사용하는 것이 더 자연스럽다.

 

for문에 의한 문장의 반복 (가장 많이 사용하는 반복문)

 

for문의 기본 원리와 의미

- while, do~while문은 기본적으로 반복 조건 검사 문장만을 포함하지만, for문은 이것

외에도 변수의 초기화 연산과 증가 및 감소를 실행할 수 있는 두 개의 문장을 더 포함한다.

 

for ( 초기문 ; 조건문 ; 증감문 ) 

{

        반복하고자 하는 내용

}

 

초기문 : 반복문에 들어가기 전에 필요로 하는 초기화 문장을 의미함

조건문 : 반복의 조건

증감문 : 루프를 빠져 나오기 위해서 반복의 조건을 무너뜨리기 위한 문장

 

세 가지 모두 필수로 써야 하는 것은 아니다. 필요한 것만 채워주면 된다.

 

for문의 이해를 위한 다양한 예제

* 1~n까지의 합 구하기

* 양수들의 평균 (음수일 때 for문 탈출)

* 초기값 조건문 증감문 모두 없을 경우

 

반응형