지난 글에서 문자열을 저장하는 배열에 대해서

살펴보았는데요. 


잘 기억나지 않으시다면..

아래 글을 참고해주세요.



[C3-4] 문자열을 저장하는 배열



이번에는 숫자들을 저장하는 것에 대해서

살펴보도록 하겠습니다.


문자 하나를 저장하는 것은 변수,

문자들을 저장하는 것은 배열이었는데요.


역시 마찬가지로,

숫자 하나를 저장하는 것은 변수,

숫자들을 저장하는 것은 배열로 처리가 가능합니다.


사용하는 방법도 거의 비슷해요.

정수 하나를 저장할 변수 a를 만드려면,

int a; 라고 했었는데요.


정수 10개를 저장할 배열 b를 만드려면,

int b[10]; 이라고 해주면 된답니다.


몇 개를 저장할지를 적어주면 된다는 사실만

기억하시면 될 것 같아요.


그러면 배열 b의 첫 번째 공간에 1을 저장하려면,

어떻게 할까요?


b[1] = 1;


이렇게 하면 될까요?



아니랍니다.

b[0] = 1;

이렇게 하셔야 합니다.


컴퓨터는 늘 0번째부터 있다고 생각하셔야 합니다.


그러면 배열 b의 10번째 값에 10을 저장하려면?


b[9] = 10;

이렇게 하시면 됩니다.


그런데, 배열을 만들면서 동시에 값을 저장할수도 있어요.

이렇게요.


int b[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};


이렇게 하시면

b[0]에는 1이,

b[1]에는 2가,

...

b[9]에는 10이 잘 저장된답니다.



그러면 아래 코드의 결과가

어떻게 될 지 한 번 예상해볼까요?



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <stdio.h>

int main()
{
	int a[5] = {1, 2, 3, 4};

	printf("%d %d %d %d %d", a[0], a[1], a[2], a[3], a[4]);

	return 0;
}



잘 보시면, 처음에 배열 a를 만들 때,

공간은 5개를 만들면서 값은 4개만 저장했는데요.


이렇게 만들면서 값을 저장하는 경우에는

차례대로 값을 저장하고,

남은 공간이 있다면 자동으로 0이 저장됩니다.


따라서

a[0] = 1;

a[1] = 2;

a[2] = 3;

a[3] = 4;

a[4] = 0;


이렇게 된 셈이죠.


따라서 출력 결과는 바로,

1 2 3 4 0

이렇게 되겠네요.



다음 예제를 하나 더 보도록 하겠습니다.



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <stdio.h>

int main()
{
	int a[5];
	a[0] = 1;
	a[1] = 2;
	a[2] = 3;
	a[3] = 4;

	printf("%d %d %d %d %d", a[0], a[1], a[2], a[3], a[4]);

	return 0;
}



이 경우에도 위와 같은 결과가 나올까요?



그렇지 않습니다.


5번째 줄에서 배열 a를 만드는데요.

5개의 공간을 만들어줍니다.

그런데, 5개의 공간에는 어떤 값이 들어가있을지 몰라요.


0이 들어가 있을지도, 1이나 -1이 들어가 있을 수도 있구요.

엄청 크거나 작은 값이 들어가 있을 수도 있답니다.


제가 얻은 결과는 바로

1 2 3 4 -1828595088


이렇게 마지막 값은 뭐가 나올지 알 수 없답니다.


그런데, 

Dev C++에서는 무슨 값이 나올지 모르는 저 상황에서

대부분 0이 저장된답니다.


유독 Dev-C++에서만 그런 것 같아요!


우리가 작성하는 C언어가

Dev C++에서만 돌아가면 참 슬프겠죠.

어떤 컴파일러에서도 돌아갈 수 있도록 만드려면

위에 내용을 잘 이해하셔야 할 것 같아요.



아 그리고, 만약에 정수가 아니라,

실수 10개를 저장하는 배열 c를 만드려면,

double c[10]; 이렇게 해주면 된답니다.


간단하죠? 

지난 글에서는 문자를 저장하는 변수에 대해서

살펴보았는데요. 



[C3-3] 문자를 저장하는 변수 - char



이번 글에서는 문자열을 저장하는 방법에 대해서

살펴보도록 하겠습니다.


문자열을 저장할 때에도,

문자를 저장할 때와 마찬가지로

char를 사용합니다.


사용법도 대체로 비슷한데,

조금 다른 부분이 있습니다.


char로 선언된 변수의 경우,

무조건 한 글자를 저장하죠.


문자열에서는 여러 글자를 저장해야 하잖아요?


그래서 몇 글자를 저장할지 적어주어야 합니다.


1글자를 저장할 때 사용했던 방법은

char a;

였는데요.


만약 3글자를 저장하려면

char a[3];


만약 10글자를 저장하려면

char a[10];


이런 식으로 해주시면 됩니다.


생각보다 참 간단하죠?


그런데 주의하실 것이 있어요.

문자열에는 널문자라는 것이 저장되어야 한답니다.

널문자는 문자열의 끝을 의미하구요.

기호로는 '\0'으로 표시합니다.


따라서 "abc"라는 문자열을 저장하려면,

3개의 공간이 아니라,

널문자가 하나 더 들어가야 하므로

4개의 공간을 만들어줘야 합니다.


char a[4] = "abc";

이렇게요.


이렇게 저장된 문자열은

printf("%s", a);

이런 식으로 해주시면

a에 저장된 문자열이 화면에 출력된답니다.


만약 "abc"에서 첫 글자를 'a'가 아닌

'd'로 바꾸고 싶다면 어떻게 할까요?



그러면

a[0] = 'd';

이렇게 a의 위치 정보를 사용하셔서

그 값을 바꿔주시면 됩니다.


a의 0번째 값에 'd'를 저장한다.

정도의 의미가 되겠습니다.



근데 왜 [1]이 아니라 [0]일까요?


컴퓨터는 값을 셀 때 1부터가 아니라,

0부터 센다고 생각하시면 편리합니다.


우리는 1번째, 2번째, ...

컴퓨터는 0번째, 1번째, ...

이렇게요.


그래서 우리가 생각할 때에는 1번째 값을 바꾸지만,

컴퓨터에게는 0번째 값을 바꿔달라고 해야한답니다.



그러면 아래 코드의 결과가

어떻게 될지 한 번 예상해볼까요?



 1
 2
 3
 4
 5
 6
 7
 8
 9
10

#include <stdio.h> int main() { char a[4] = "abc"; printf("%s %c %c %c", a, a[0], a[1], a[2]); return 0; }



예상이 잘 되시나요?


화면에는 이렇게 출력이 된답니다.


abc a b c



%s를 사용하여 a에 저장된 문자열이 다 출력되구요.


%c를 사용하여 a에 저장된 문자열을 하나씩 끊어서

출력할 수도 있답니다.



자, 이제 문자열을 사용하실 수 있으시겠죠? 

이번에는 문자를 저장하는 변수를 살펴보겠습니다.


정수형 변수와 실수형 변수를 저장하려면...

이전 글을 참고해주세요. 



[C3-1] 정수형 변수 - int


[C3-2] 실수형 변수 - double



문자를 저장할 때 사용하는 형식은 바로

char입니다.

char는 character의 약자인데요.

character는 바로 '문자'라는 뜻이랍니다.


사용법은 int나 double과 유사하구요.


char a;


위의 코드는 바로

char라는 문자를 저장할 수 있는 형태로

변수 a를 만들라는 의미입니다.


이렇게 쓰고 나면,

문자를 a에 저장할 수 있어요.


a = 'b';

또는 a = 'C';

이런 식으로 변수 a에다가 값을 저장할 수 있어요.

(a = 'b';는 "변수 a에 문자 b를 저장한다."는

의미입니다.)


여기서 주의하실 점은

한 글자만 저장할 수 있다는 것과,

작은 따옴표를 붙여주셔야 한다는 점입니다.


여러 글자를 저장하는 것은

변수를 확장한 배열이라는 개념을 사용하셔야 하구요.

이건 다음에 배워보도록 할게요.


변수 a에 저장된 값을 확인하기 위해서

printf() 함수를 사용하면 되는데요.


printf("%c", a);

이런 식으로 해주시면

변수 a에 저장된 값이 화면에 출력된답니다.



그러면 아래 코드의 결과값이

어떻게 될지 예상해볼까요?



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <stdio.h>

int main()
{
	char a = 'a', b = 'A';

	printf("%c %c %c%c", a, b, a, b);

	return 0;
}



예상이 잘 되시나요?


화면에는 이렇게 출력이 된답니다.


a A aA



이렇게 문자를 저장할 수 있는 char형 변수를

사용하면 하나의 문자를 저장할 수 있답니다.



이제 문자를 저장할 수 있으시겠죠? 

이번에는 실수형 변수에 대해서 살펴봅시다.


실수형 변수란,

소수점이 있는 값을 저장하는 변수인데요.


소수점이 없는, 정수형 변수는...

이전 글을 참고해주시구요. 



[C3-1] 정수형 변수 - int



int로 선언된 변수는 소수점을 저장할 수가 없어요.

그래서 실수를 저장할 때에는

다른 방법을 찾아야 하는데요.


실수를 저장하는 가장 잘 알려진 형식은

double입니다.

(예전에는 float를 많이 썼답니다.)


사용법은 int와 거의 동일합니다.


double a;


위의 코드의 의미는

double이라는 실수를 저장할 수 있는 형태로

변수 a를 만들어달라는 의미이구요.


이렇게 쓰고 나면,

a = 3.14;

또는 a = 6.28;

이런 식으로 변수 a에다가

값을 저장할 수 있습니다.

(a = 3.14;라는 의미는 "a와 3.14가 같다"가 아니라,

"a에 3.14라는 값을 저장한다"라는 의미입니다.)


물론, 변수를 만들면서 저장할 수도 있답니다.

double a = 3.14;

이렇게요.


변수 a에 저장된 값을 확인하기 위해서

printf() 함수를 사용해보도록 할게요.


printf("%lf", a);

이런 식으로 해주시면

변수 a에 저장된 값을 화면에 출력해준답니다.

여기서 %lf는 실수를 출력해주는 서식문자이구요.


아참,

double로 만든 변수도 정수를 저장할 수 있답니다.

double a = 1;

이렇게요.



그러면 아래 코드의 결과값이

어떨지 예상해볼까요?



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <stdio.h>

int main()
{
	double a = 1, b = 3.14;

	printf("%lf %lf %.2lf", a, b, b);

	return 0;
}



예상이 되시나요?


화면에는 이렇게 출력이 된답니다.


1.000000 3.140000 3.14


첫 번째 %lf로 변수 a에 저장된 값이 출력되는데요.

소수점 6째 자리까지 출력이 됩니다.


두 번째 %lf로 변수 b에 저장된 값이 출력되구요.

마찬가지로 소수점 6째 자리까지 출력이 됩니다.


세 번째 %.2lf로 변수 b에 저장된 값이 출력되는데요.

이번에는 소수점 2째 자리까지 출력됩니다.



double 사용법,

int와 많이 유사하죠? 

이번에는 변수에 대해서 배워봅시다.


혹시 printf() 함수의 사용법을 모르신다면...

이전 글을 참고해주세요.



[C2-1] 단순 출력 - printf()


[C2-3] 정수 출력 - %d



변수란 무엇일까요?


변수란 '변'하는 '수'입니다.

간단하죠?


a라는 변수가 있다고 해볼게요.

변수 a에는 1을 저장했다가,

나중엔 2를 저장했다가,

더 나중에는 3을 저장할 수도 있어요.


값이 고정되지 않고,

계속해서 값을 바꿔볼 수 있답니다.


이러한 것을 변수라고 해요.


그럼 C언어에서 변수를 어떻게 만드는지 알아봅시다.



일단 가장 먼저 알아야 하는 것은

바로...


어떤 종류의 값을 저장할 지를

결정하는 것입니다.


C언어에서는 정수를 저장할지,

아니면 실수를 저장할지에 따라서

서로 다른 형태로 저장을 하게 되어 있어요.

(정수는 소수점이 없는 값이에요.)



오늘은 정수를 저장하는 방법 중에서

가장 유명한 int에 대해 살펴보도록 할게요.


int a;


위의 코드의 의미는

int라는 정수를 저장할 수 있는 형태로

변수 a를 만들어달라는 의미입니다.


이렇게 쓰고 나면,

a = 1;

또는 a = 2;

이런 식으로 변수 a에다가

값을 저장할 수 있어요.

(a = 1;이라는 의미가 "a와 1이 같다"가 아니라,

"a에 1을 저장한다"라는 의미랍니다.)


아니면 변수를 만들면서 저장할 수도 있어요.

int a = 1;

이렇게요.



변수 a에는 이것 저것 바꿔가면서

값을 저장할 수 있다고 했는데요.


그러면 변수 a에 들어있는 값을 확인하려면?

어떻게 할까요?


바로 printf() 함수를 사용하면 됩니다.


printf("%d", a);

이런 식으로 해주시면

변수 a에 저장된 값을 화면에 출력해준답니다.



그러면 아래 코드의 결과값이

어떨지 예상해볼까요?



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <stdio.h>

int main()
{
	int a = 2;

	printf("%d %d %d", a, a + 1, a * 3);

	return 0;
}



예상이 되시나요?


화면에는 이렇게 출력이 된답니다.


2 3 6


첫 번째 %d로 변수 a에 저장된 값이 출력되구요.


두 번째 %d로 변수 a에 저장된 값에 1만큼 더한 값이

출력되구요.


세 번째 %d로 변수 a에 저장된 값에 3만큼 곱한 값이

출력된답니다.



혹시 int형 변수를 두 개 만들고 싶다면,

int a;

int b;

이렇게 하셔도 되구요.


int a, b;

이렇게 하셔도 된답니다.

이 방법이 더 간단하죠? 

이전 글에서 서식문자 %c

printf() 함수에서 어떻게 쓰는지 살펴보았는데요.


아직 printf() 함수에서 서식문자 %c를 안써보셨다면...

이전 글을 참고해주세요. 



[C2-5] 문자 출력 - %c



위의 글에서 %c의 사용법을 살펴보았는데요.

서식문자 %c는 한 번에 한 글자만 출력이 가능했어요.


그래서...

여러 글자, 즉 문자열을 출력할 때에 좀 불편했죠.


그런데 다행히도 %s라는 서식문자가 있어요.

정말 다행이죠.


그러면 %s를 어떻게 쓸까요?

밑의 코드를 잘 봐주세요.



1
2
3
4
5
6
7
8
#include <stdio.h>

int main()
{
	printf("%s", "ABCD");

	return 0;
}



어때요?

사용법이 %c랑 비슷하긴 하죠?


네, 맞아요.

%c랑 비슷하기는 한데,

좀 신경쓰셔야 할 부분도 있답니다.


바로...

여러 글자를 한꺼번에 쓸 때에는

작은 따옴표 ' '가 아니라,

큰 따옴표 " "로 감싸줘야 한다는 사실입니다!


즉, printf("%s", 'ABCD');라고 쓰면 안된다는 것이죠.


다시 정리하면,

한 글자작은 따옴표!

여러 글자큰 따옴표!


잊지 마세요! 


아차차..

보통 한 글자문자라고 하구요.

여러 글자문자열이라고 한다는 점도

기억해두시면 좋을 것 같아요! 

'C언어 학습 공간 > 기본 출력' 카테고리의 다른 글

[C2-5] 문자 출력 - %c  (0) 2018.10.29
[C2-4] 실수 출력 - %lf  (0) 2018.10.26
[C2-3] 정수 출력 - %d  (0) 2018.10.26
[C2-2] 개행 출력 - \n  (0) 2018.10.26
[C2-1] 단순 출력 - printf()  (0) 2018.10.25

앞서 printf() 함수에서 정수와 실수를

출력하는 방법에 대해 살펴보았는데요.


혹시 printf() 함수에서 %d%lf라는

서식문자를 사용해본 적이 없다면...

이전 글을 참고해주세요. 



[C2-3] 정수 출력 - %d


[C2-4] 실수 출력 - %lf



앞선 두 글에서는 서식문자를 사용하여

printf() 함수에서 정수와 실수를 출력해 보았습니다.


서식문자로 숫자만 출력을 할 수 있느냐?


그렇지 않습니다.

문자를 출력하는 서식문자도 있습니다.


한 글자를 출력할 때 사용하는

서식문자는 바로 %c이구요.


여러 글자(문자열)를 출력할 때 사용하는

서식문자는 바로 %s입니다.

(이건 다음에 살펴볼게요.)


그러면 %c를 어떻게 쓸까요?

밑의 코드를 잘 봐주세요.



1
2
3
4
5
6
7
8
#include <stdio.h>

int main()
{
	printf("%c", 'A');

	return 0;
}



사용법은 %d%lf와 비슷해보이죠?


맞아요.

상당히 비슷한데요.

주의하실 부분이 있습니다.


위의 코드는 알파벳 A를 화면에 출력하는데요.

한 글자를 나타낼 때에는 반드시!

작은 따옴표 ' '로 문자를 감싸줘야 한답니다.


즉, printf("%c", A);라고 쓰면 안된다는 것이죠.

(변수 A에 있는 값을 문자로 출력한다는 의미입니다.

지금 당장은 모르셔도 되는 부분이에요.)



그러면, 서식문자 %c를 사용하여

화면에 AB를 출력하려면 어떻게 할까요?



printf("%c%c", 'A', 'B');라고 하면 된답니다.



printf("%c %c", 'A', 'B');라고 한다면,

A B 이렇게 띄어쓰기가 될 것이구요.


이런 식으로

한 글자마다 %c를 사용해서 출력할 수 있답니다.



그런데 출력할 글자가 너무 길다면?


너무 많은 %c를 사용해야겠죠?


이건 꽤나 불편한 일이네요.


그래서 다음 글에서는

여러 문자(문자열)을 한 번에 출력할 수 있는

서식문자인 %s에 대해서 알아보겠습니다. 

'C언어 학습 공간 > 기본 출력' 카테고리의 다른 글

[C2-6] 문자열 출력 - %s  (0) 2018.10.30
[C2-4] 실수 출력 - %lf  (0) 2018.10.26
[C2-3] 정수 출력 - %d  (0) 2018.10.26
[C2-2] 개행 출력 - \n  (0) 2018.10.26
[C2-1] 단순 출력 - printf()  (0) 2018.10.25

이번에는 printf() 함수에서

실수를 출력하는 방법을 살펴보도록 하죠.


printf() 함수에서 %d라는 서식문자를 사용해서

정수를 출력해본 적이 없다면...

이전 글을 참고해주세요. 



[C2-3] 정수 출력 - %d



printf() 함수를 사용해서

3.14를 출력해보겠습니다.


당연히, 가장 간단한 방법으로는

다음과 같이 할 수 있겠네요.



1
2
3
4
5
6
7
8
#include <stdio.h>

int main()
{
	printf("3.14");

	return 0;
}



그런데 이 방법은 계산된 결과를 출력할 수가 없어요.



예를 들어서,

3.14 * 2의 결과를 출력하고 싶다면요?


그러면 서식문자를 사용해야겠죠?


소수점이 있는, 실수의 경우에는

%lf라는 서식문자를 사용합니다.


정수를 출력할 때 사용하는 서식문자인 %d

쓰는 방법은 동일합니다.


밑의 코드를 살펴볼까요?



1
2
3
4
5
6
7
8
#include <stdio.h>

int main()
{
	printf("%lf", 3.14 * 2);

	return 0;
}



printf() 함수에서는 쌍따옴표 사이에

서식문자를 사용할 수 있잖아요?


그러니까 printf("%lf", 3.14 * 2);처럼 쓸 수 있습니다.


3.14 * 2 = 6.28이니까,

화면에 6.28이 출력되겠죠?


정말 그런지 실행해봅시다.



6.280000



뭔가 맞는 것 같기도 하고,

다른 것 같기도 하고,

애매하죠?


6.28과 6.280000은 같은 값이니까 같다고 해야할지,

표현이 다르긴 하니까 다르다고 해야할지 애매합니다.


소수점 둘째 자리까지만 출력되면 참 좋을텐데요.

그쵸?


이럴 때 사용하는 방법이 있답니다.


%lf 대신에 %.2lf라고 적어주면,

소수점 둘째 자리까지만 출력이 된답니다.

(소수점 셋째 자리에서 반올림한 결과)


%lf 사이에 .2를 적으면,

소수점 둘째 자리까지 출력한다.

라고 이해하시면 참 쉽습니다.


자동으로 반올림된다는 사실도 꼭 기억하시구요!


소수점 첫째 자리까지만 출력하려면,

%.1lf를 쓰면 되구요.

(소수점 둘째 자리에서 반올림한 결과)


소수점 다섯째 자리까지 출력하려면,

%.5lf를 쓰면 되겠죠?

(소수점 여섯째 자리에서 반올림한 결과)



그러면 결과적으로,

printf("%.2lf", 3.14 * 2);라고 하면,

6.28이 잘 출력된답니다. 

'C언어 학습 공간 > 기본 출력' 카테고리의 다른 글

[C2-6] 문자열 출력 - %s  (0) 2018.10.30
[C2-5] 문자 출력 - %c  (0) 2018.10.29
[C2-3] 정수 출력 - %d  (0) 2018.10.26
[C2-2] 개행 출력 - \n  (0) 2018.10.26
[C2-1] 단순 출력 - printf()  (0) 2018.10.25

+ Recent posts