1. 변수
변수(variable) : 프로그램이 사용하는 데이터를 일시적으로 저장할 목적으로 사용하는 메모리 공간(>메인 메모리에 생성됨)
조금 더 직관적으로 풀어보자면, '데이터를 담는 상자'라고 볼 수 있다.
데이터의 종류에 따라 여러가지 데이터 타입이 존재한다.(ex. 정수, 실수, 문자 등)
-변수 선언
컴파일러에게 어떤 타입의 변수가 사용되는지 미리 알리는 것
선언 시에는 변수의 자료형(데이터타입)을 앞에 선언하고, 변수명(상자의 이름)을 지정해준다.
int x; //x라는 변수가 정수라는 데이터 타입을 사용할 것을 보임
float y; //y라는 변수가 실수라는 데이터 타입을 사용할 것을 보임
char c; //c라는 변수가 문자라는 데이터 타입을 사용할 것을 보임
....
-변수 초기화
변수를 초기화해준다는 것은, 변수(상자)안에 넣을 초기값을 지정해준다는 것이다.
물론, 변수의 데이터타입에 맞는 초기값을 입력해야한다.
int i; //i라는 변수를 선언함
i=100; //변수에 초기값을 입력함
int i = 100; //변수 선언하면서 초기값을 입력할 수도 있다.
-대입 연산
대입연산(assignment operation)은 변수에 값을 저장해주는 연산이다.
앞서 소개한 변수 초기화 역시 대입연산에 해당된다. (변수에 값을 저장했으니..)
대입연산은 오른쪽에서 왼쪽 방향으로 이루어지며, 기호는 '='이다.(수학 기호인 =와는 다르다.)
이러한 경우는 어떨까?
x=x+1
수학적 관점에서 보면 전혀 맞지않는 '수식'이지만, 컴퓨터의 '대입연산'의 관점에서 보면 맞는 표현이다.
'x=x+1'이라는 것은 본래 x에 지정된 값에 1을 더해서 다시 x에 넣어준다는 것이다.
예를 들어,
int x=100; //x에 100이라는 초기값을 저장
x=x+1; //x에 100+1, 즉 101을 저장
printf("%d",x);
>>>101
x에 100이라는 정수를 지정한 상태에서 1을 더하여 다시 저장하는 것이므로, x=x+1은 올바른 표현이다.
또한 'x=x+1'이라는 표현을 통해 저장된 값은 변경이 가능함을 알게 되었다.(x에 지정된 값:100->101)
-변수의 이름, 식별자
식별자(identifier)란, 변수와 함수의 이름이다. 즉, 변수와 함수를 식별할 수 있게 해주는 이름이다.
변수 선언을 통해 변수명(식별자)를 자유롭게 만들 수 있지만 아래의 규칙을 따라야한다.
-식별자를 만드는 규칙
-식별자는 영어(대소문자), 숫자, 밑줄문자(_)로 구성된다. (한글도 사용가능하다)
-중간에 공백이 들어가면 안된다. ex) student number은 공백이 들어가므로 x, student_number과 같이 밑줄로 대체한다
-첫번째 문자에 숫자를 입력할 수 없다. ex) 1list (x), 2nd_a1(x)
-대문자와 소문자를 구별한다. ex) List1과 list1은 다른 변수이다.
-c언어의 키워드와 똑같은 이름은 허용되지 않는다.
-키워드
c언어에서 고유한 의미를 가지는 단어이다. (예약어라고도 불린다)
예를 들어, int라는 단어는 정수라는 자료형을 선언할 때 사용되는 키워드이므로, 식별자(변수명)으로 지정할 수 없다.
다음은 키워드의 예시이다.
-식별자의 예
sum -> 문제가 없다
_count -> 문제가 없다
2nd_try -> 숫자로 시작하므로 x
dollor# -> 기호가 포함되므로 x
double ->키워드이므로 x
2. (변수를 이용한) 산술연산
산술연산이란 덧셈, 나눗셈과 같이 기본적인 연산을 의미한다.
산술연산 | 연산자 | c에서의 수식 | 수학에서의 기호 |
덧셈 | + | x+y | x+y |
뺄셈 | - | x-y | x-y |
곱셈 | * | x*y | xy 혹은 x×y |
나눗셈 | / | x/y | x/y 혹은 x÷y |
나머지 | % | x%y | x mod y |
변수와 산술연산을 이용하여 사칙연산 프로그램을 작성해보자.
#include <stdio.h>
int main(void){
float x, y; //변수 선언
x = 10.5;
y = 20.5; //x,y 변수 초기화
printf("두 수의 합(%.1f + %.1f) = %.1f\n",x, y, x+y);
printf("두 수의 차(%.1f - %.1f) = %.1f\n",x, y, x-y);
printf("두 수의 곱(%.1f * %.1f) = %.1f\n",x, y, x*y);
return 0;
}
결과는 이러할 것이다.
두 수의 합(10.5 + 20.5) = 31.0
두 수의 차(10.5 - 20.5) = -10.0
두 수의 곱(10.5 * 20.5) = 215.2
혹자는 여기서 의문이 들 수도 있다. "10.5*20.5의 값은 215.25이므로, 반올림하면 215.3이 나올텐데 왜 215.2가 나올까?"
혹은 "내 컴퓨터에서는 215.3이 나오는데 무슨 차이일까?"
버전에 따라 215.2 와 215.3으로 나뉘는 이유는 이러하다.
215.2가 나오는 이유는 Round-to-Even method라는 반올림 방식을 사용해서 그러하고,
215.3이 나오는 이유는 일반적인 Rounding(반올림)을 사용하는 버전이기 때문이다.
그렇다면 Round-to-Even method가 무엇인지 알아보자.
- Round-to-Even method
Round-to-Even method를 직관적으로 이해하기 위해 다음의 사진을 참고해보자.
x.5에서 반올림하려는 자리의 바로 앞자리가 짝수(0포함)라면, 0.5를 그대로 내린다.
ex) 2.5-> 2 , 4.5 ->4
x.5에서 반올림하려는 자리의 바로 앞자리가 홀수라면, 0.5를 그대로 올린다. (그냥 반올림이다.)
ex) 1.5-> 2 , 3.5 ->4
예를 들어 Round-to-Even method를 이용하여 2.05 * 10.5를 소수점 두자리까지 반올림하려고 한다.
2.05*10.5는 21.525 이고, 25에서 2는 짝수이므로 5를 버려야한다. 따라서 21.52가 된다.
#include <stdio.h>
#pragma warning(disable:4996)
int main(void) {
float x, y;
x = 10.5;
y = 2.05;
printf("두 수의 곱(%.2f * %.2f) = %.2f\n", x, y, x * y);
return 0;
}
>>>두 수의 곱(10.50 * 2.05) = 21.52
-근데 왜 이런 방식을 사용하는걸까?
일반적인 반올림처럼 0.5를 항상 올림처리하면 반올림 시 큰값으로 쏠리는 현상이 발생한다.
따라서 큰수의 법칙하에서 균형을 맞추기 위해 0.5 앞의 숫자가 짝수라면 내리고, 홀수면 올리는 방식으로 균형을 맞추는 것이다.(별로 중요하지는 않다..)
'CS > C언어' 카테고리의 다른 글
[C언어] 3. 자료형(2) - 실수, 형 변환 (0) | 2024.06.04 |
---|---|
[C언어] 3. 자료형(1) - 정수, 상수, 문자 (0) | 2024.06.03 |
[C언어] 2. 변수와 자료형 기초(2) (0) | 2024.06.03 |
[C언어] 1. C언어의 기본 개념(2) (1) | 2024.06.03 |
[C언어] 1. C언어의 기본 개념(1) (0) | 2024.06.03 |