본문 바로가기
혼공학습단 C

C언어 W2-1 (3강)

by 알래스카코코넛 2023. 7. 11.
반응형

Chapter3. 변수와 데이터 입력

3-1. 변수

변수 선언 방법

여러가지 자료형:

char - 문자형

int - 정수형

float, double - 실수형

char 배열 - 문자열 배열

 

변수 선언 방법:

자료형 + 변수명

ex) int a, float b, char word....

 

변수 초기화: 

a = 10; 처럼 대입연산자인 '=' 기호를 사용하여 왼쪽에는 저장 공간(변수), 오른쪽에는 저장할 값을 입력한다.

 

예시)

#include <stdio.h>
int main()
{
	int a, b;
	double da;
	char word;

	a = 10, b = a;
	int c = a + b;
	da = 5.3;
	word = 'W';

	printf("변수 a의 값: %d\n", a);
	printf("변수 b의 값: %d\n", b);
	printf("변수 c의 값: %d\n", c);

	printf("da의 값 : %lf (소수점 지정 안함)\n", da);
	printf("da의 값 : %.1lf(소수점 첫째자리까지로 지정)\n", da);
	printf("변수 word:%d", word);

	return 0;
}

위 코드 결과

주목할 점은, C는 파이썬과는 달리 변수 선언 전에 int a; double b;처럼 미리 어떤 자료형인지를 언급해줘야 한다는 것이다. 또한, int a,b;처럼 같은 자료형은 한번에 선언해줘도 된다.

또 하나는 내가 파이썬에서도 자주 헷깔렸던 건데, int a = 10;의 순서를 바꾸면 안된다. 

int a;
10 = a;

이런 식으로 하면 안된다는 것이다.

 

정수 자료형

정수 자료형의 종류에는 char, short, int, long, long long 등이 있는데, 나는 주로 char이랑 int위주로 사용할 계획이다. 그런데 char는 문자에만 사용되므로 정수 자료형이 아닐 줄 알았는데, 아스키 코드로도 쓰이기 때문에 정수 자료형에 포함된다고 한다. 

추가로, 잘 쓰이지는 않지만 long은 큰 값을 저장하기 위해 사용한다. 양수만 저장할때는 unsigned 자료형을 쓰기도 하고, %u로 출력한다.

 

실수 자료형

실수 자료형에는 float, double, long double이 있는데, 학교에서 전공 수업시간에 float만 계속 써와서 편한 것도 있고 해서 보통은 float를 많이 쓴다. 따라서 일반적으로는 신경 쓸 일이 없긴 한데, float와 double은 차이점이 있기 때문에 주의해야 할 때도 있다. 예를 들어, 다음 코드를 보자. 

//유효숫자를 알아보자
#include <stdio.h>
int main()
{
	float f1 = 3.154235342442541875665;
	double db = 3.154235342442541875665;

	printf("f1 = %.20f\n", f1);
	printf("db = %.20lf\n", db);

	return 0;
}

출력창

왼쪽 사진을 보면 warning C4305: '초기화 중': 'double'에서 'float'(으)로 잘립니다. 라고 나타나고, 실제 출력 결과도 초기값과 다르다. 

그 이유는 컴퓨터가 실수를 표현하는 방식이 가진 오차 때문인데, 따라서 float형은 소수점 7자리, double 형은 15자리 범위 내의 값을 사용하는걸 권장한다. 따라서, 주로 float를 사용하지만 더 정밀한 값을 대입하려면 double을 사용하라는 의미이다. 그런데 왜 이런 오차가 발생하는지는 조금 더 공부가 필요할 것 같다. 우주 공학같은 정밀 기계 분야에는 이런 오차때문에 에러가 주로 나는 걸까? 그것 까지는 모르겠다. 

 

문자열 저장

다시 책 정리로 돌아와서, 문자'열'을 담을 때는 C와 파이썬의 차이점이 특히 부각된다. 파이썬은 문자든 문자열이든 따옴표, 쌍따옴표를 쓰고 딱히 변수 선언에도 차이를 안두는데, C는 차이가 크다. 

 

char 배열명[길이+1] = "문자열";

 

위와 같이 선언한다. 

예: char words[6] = "hello";

 

이렇게 문자랑 문자열 선언 방법이 조금 다른게 입력받을 때 더 두드러지는데, 예를 들어 헤더파일에 <string.h>를 넣어야 하는 점이 있다. 그래서 가끔 내가 C언어는 문자열 입력도 복잡하게 받는다고 놀리는데, 이 부분은 나중에 입력 부분에서 다시 언급하도록 하겠다.

아무튼 문자열 관련 코드:

#include <stdio.h>
int main()
{
	char hi[6] = "Hello";
	printf("변수: %s\n", hi);
	printf("변수+World! : %s %s\n", hi, "World!");

	return 0;
}

결과

미리 문자열 배열을 지정할수도, 나중에 "World!"처럼 따로 언급할 수도 있다.

만약 새로운 문자열을 저장하려면 strcpy 함수를 이용한다. 이는 추후 다루고, 지금은 예시로 이렇게 쓰는구나 정도만 보겠다. 만약 strcpy가 되지 않는다면, #define_CRT_SECURE_NO_WARNINGS를 소스코드 맨 첫줄에 넣으면 된다.

#include <stdio.h>
int main()
{
	char hi[6] = "Hello";
	printf("변수: %s\n", hi);

    strcpy(hi, "Hi!");
    printf("바뀐 변수: %s\n", hi);

	return 0;
}

3-2 데이터 입력

기본 문법: scanf("%d", &a)

단, 문자열 입력 시 &를 사용하지 않는다. 이게 매번 헷깔렸는데, 특히 처음 배울 때는 C랑 파이썬을 같이 배워서 두 부분이 다르니까 더 헷깔렸었다. 지금은 혼란스럽지 않도록 잘 외워둬야겠다. 컴퓨터구조를 배우면 좀 낫댔는데, 어째 저번학기에 컴구조 수업을 들었는데도 사실 아직 왜 다른지 잘 모르겠다.

#include <stdio.h>
int main()
{
	char word;
	char srt[10];
	
	printf("문자(1개)입력: ");
	scanf("%c", &word);
	
	printf("문자열 입력:");
	scanf("%s", srt);
	printf("\n 입력한 문자는 %c, 입력한 문자열은 %s다.\n", word, srt);
	return 0;
}

여기서 주의해야 할 점은, 문자열에 띄어쓰기가 들어가면 거기서 문자열을 자른다. 이런 띄어쓰기도 모르는 멍청이  녀석

이번 단원을 통해 자료형과 간단한 입력에 대해 알아보았다. 다음 챕터는 연산자에 대해 정리하겠다.

반응형

'혼공학습단 C' 카테고리의 다른 글

C언어 W5(8강 배열)  (0) 2023.08.08
C언어 W4(7강 함수)  (0) 2023.07.24
C언어 W3(5 ~ 6강)  (0) 2023.07.20
C언어 W2-2(4강)  (0) 2023.07.13
혼공학습단 10기 C언어 W1  (0) 2023.07.06