티스토리 뷰
3-1 덧셈 프로그램 구현을 위해 필요한 + 연산자
연산자 - 연산을 요구할 때 사용되는 기호
C 언어는 데이터의 저장을 위해서 '변수'라는 것을 제공한다.
3-2 C 언어는 데이터 저장을 위해 변수를 제공한다.
변수 - 데이터를 저장할 수 있는 메모리 공간에 붙여진 이름(혹은 메모리 공간 자체)을 의미
변수는 크게 정수형 변수와 실수형 변수 두 가지로 나뉜다.
정수형 변수(int형, char형, long형)
실수형 변수(float형, double형)
선언하는 변수의 특징을 나타내는 char, int, double 등을 가리켜 '자료형' 혹은 '데이터 타입(Data Type)'이라고 한다.
int val; //int형 변수 val의 선언
(정수를 저장할 수 있는 메모리 공간을 할당하고, 그 메모리 공간에 val이라는 이름을 부여한다.)
단! 정수를 저장하기 위한 메모리 공간이므로 정수를 저장해야 한다.
int val;
val = 20;
만일 선언하고자 하는 변수의 종류가 같다면 동시에 선언하는 것이 가능하다. 또한 선언과 동시에 값을 초기화하는 것도 가능하다.
int a, b;
int c=30, d=40;
a=10;
b=20;
만일 변수를 선언만 하고 초기화하지 않을 경우 변수에는 의미 없는 값이 들어가게 되는데, 이를 '쓰레기 값'이라고 표현하고, 물론 얼마인지 예측할 수 없다.
변수 선언 시 주의사항
1. 변수를 함수 내에 선언 할 경우, 제일 먼저 등장해야 한다.
int a;
int b;
a=10;
b=20;
은 문제가 없다. 하지만
int a;
a=10;
int b;
b=20;
이런 식으로 중간에 변수선언이 나오게 되면 문제가 발생한다.
2. 변수의 이름은 알파벳, 숫자, 언더바(_)로 구성된다.
3. C 언어는 대 소문자를 구분한다. 따라서 변수 Val과 변수 val은 서로 다른 변수이다.
4. 공백이 포함될 수 없다.(스페이스 바, 엔터, 탭)
변수의 이름을 정할 때 반드시 의미를 지니는 이름을 주려고 노력해야 한다. (만일 나이를 저장할 수 있는 변수를 한다면 age로 변수 이름을 주는 것이 좋다. 이런식으로 의미를 지니는 이름을 주면 프로그램이 이해하기가 쉽다.)
변수와 마찬가지로 상수도 값을 저장할 수 있는 메모리 공간을 지닌다. 그러나 상수이므로 데이터 변경은 불가능하다.
3-3 C 언어에는 다양한 연산자가 존재한다
●대입 연산자(=)와 산술 연산자(+, -, *, /, %)
이항연산자 - 두 개의 피연산자를 요구하는 연산자
연산자 |
연산자의 의미 |
결합성 |
= |
오른 쪽에 있는 값을 왼쪽에 대입한다. Ex) a=20 |
← |
+ |
왼쪽과 오른쪽에 있는 값을 더한다. Ex) a=4+3 |
→ |
- |
왼쪽에 있는 값에서 오른쪽에 있는 값을 뺀다. Ex) a=4-3 |
→ |
* |
왼쪽과 오른쪽에 있는 값을 곱한다. Ex) a=4*3 |
→ |
/ |
왼쪽에 있는 값을 오른쪽에 있는 값으로 나눈다. Ex) a=4/3 |
→ |
% |
왼쪽에 있는 값을 오른쪽에 있는 값으로 나눠서 나머지를 반환한다. Ex) a=4%3 |
→ |
●기타 대입 연산자(+=, -=,*=, /=, %=)
a = a + b |
같은 의미 |
a+=b |
a = a – b |
같은 의미 |
a-=b |
a = a * b |
같은 의미 |
a*=b |
a = a / b |
같은 의미 |
a/=b |
a = a % b |
같은 의미 |
a%=b |
부호 연산으로서의 + 와 - 연산자
+와 -연산자는 이항 연산자로서의 기능뿐 아니라, 단항 연산자로서의 기능도 지니고 있다.
ex) -1(음수 표현), +4(양수 표현)
부호 연산자와 기타 대입 연산자를 혼동하는 경우가 있는데, 자세히 살펴보기 바란다. a+=b와 a=+b는 엄연히 다른 의미를 지닌다.
●증가, 감소 연산자
연산자는 값을 하나 증가, 혹은 감소 시키는 경우에 사용되는 단항 연산자들이다. 활용빈도가 높으면서도 혼동하기 쉬운 것들이므로 확실히 이해하고 넘어가기 바란다.
연산자 |
연산자의 의미 |
결합성 |
++a |
값을 1 증가 후 연산을 진행(선 증가, 후 연산) Ex) printf(“%d”, ++a) |
← |
a++ |
연산을 진행한 후 값을 1 증가(선 연산, 후 증가) Ex) printf(“%d”, a++) |
→ |
--b |
값을 1 감소 후 연산을 진행(선 감소, 후 연산) Ex) printf(“%d”, --b) |
→ |
b-- |
연산을 진행한 후 값을 1 감소(선 연산, 후 감소) Ex) printf(“%d”, b--) |
→ |
참고로 ( ) 연산자는 일반적인 수학의 ( ) 의 의미와 같다. 즉, 먼저 연산 하라는 뜻이다.
int val1 = 10;
int val2 = (val1--)+2;
printf("%d \n",val2);
실행결과는??
12가 된다.
그 이유는 val1-- 는 모든 연산이 끝난 후에 감소를 하기 때문에, 괄호가 있었지만 먼저 val1 + 2 연산을 수행하고 나서 1감소했기 때문이다.
●관계 연산자(<, >, ==, !=, <=, >=)
연산자 |
연산자의 의미 |
결합성 |
< |
Ex) a < b a가 b보다 작은가? |
→ |
> |
Ex) a > b a가 b보다 큰가? |
→ |
== |
Ex) a == b a와 b가 같은가? |
→ |
!= |
Ex) a != b a와 b가 같지 않은가? |
→ |
<= |
Ex) a <= b a가 b보다 작거나 같은가? |
→ |
>= |
Ex) a >= b a가 b보다 크거나 같은가? |
→ |
관계 연산자는 조건을 만족하면 true, 만족하지 못하면 false를 반환한다. 여기서 야기하는 true는 1을 의미하고, false는 0을 의미한다.
●논리 연산자(&&, ll, !)
논리 연산자 - and, or, not을 표현하는 연산자
연산자 |
연산자의 의미 |
결합성 |
&& |
피연산자가 모두 참이면 true를 반환(and) Ex) a && b |
→ |
ll |
피연산자 중 하나라도 참이면 true를 반환(or) Ex) a ll b |
→ |
! |
피연산자가 true면 false를, false면 true를 반환(not) Ex) !a |
← |
관계 연산자가 논리 연산자보다 먼저 진행된다.
val1 = 10;
result = (!val1);
printf("%d \n", val1);
실행결과는 0이 출력된다.
컴퓨터는 0이 아닌 모든 값을 true로 인식하므로, val1이 지니고 있던 10은 true로 인식되어, not 연산이 되어 false인 0이 출력되는 것이다.
●비트 단위 연산자(~, &, ^, |, <<, >>)
비트 단위 연산자 - 비트 단위(0 or 1)로 연산을 할 때 사용하는 연산자를 말하는 것
●콤마(,) 연산자
printf("Hello"), printf("World!");
둘 이상의 문장이 콤마(,)연산자에 의해서 한 줄에 걸쳐 선언될 수 있음을 보여준다.
우선 순위 - 덧셈, 뺄셈보다는 곱셈, 나눗셈이 먼저 진행 되어야 한다는 것
결합성 - 곱셈과 나눗셈은 먼저 나오는 것을 먼저 계산하면 된다. 그러니깐 왼쪽에 있는 것부터 계산을 해야 하는 것.
즉, 우선 순위가 같은 연산자가 둘 이상 있을 경우에 무엇을 먼저 연산 하느냐를 결정짓는 것
우선순위 표는 교과서를 참조!
3-4 키보드로부터 데이터를 입력 받고 싶다!
int val;
scanf("%d", &val);
변수 앞에 &가 붙어 있음을 주의 깊게 보자.
scanf 함수는 데이터의 경계를 공백(스페이스바, tab키, enter키)으로 구분한다.
3-5 C 언어의 키워드들
int, return과 같은 것들은 이미 기능적 의미가 정해져 있다. 이런 것들을 키워드라고 한다.
키워드는 변수로 사용할 수 없다.
auto |
_Bool |
break |
case |
char |
_Complex |
const |
continue |
default |
restrict |
do |
double |
else |
enum |
extern |
float |
for |
goto |
if |
_Imaginary |
inline |
int |
long |
register |
return |
short |
signed |
sizeof |
static |
struct |
switch |
typedef |
union |
unsigned |
void |
volatile |
while |
|
|
|
연습문제 3-1
문제 1
문제 2
문제 3
문제 4
문제 5
이번 장에서 공부한 내용 정리
1. 변수가 무엇인지에 대해서 살펴보았다. 더불어 상수에 대해서도 간략히 언급하였다.
2. 다양한 종류의 연산자에 대해서 살펴보았다. 특히 증가 및 감소 연산자에 대해서 주의를 기울여야 한다.
3. 키보드로부터 데이터를 입력받는 scanf 함수의 사용 방법에 대해서 살펴보았다. 그러나 입력받을 변수의 이름 앞에 & 연산자를 붙이는 이유에 대해서는 언급하지 않았다.
'Programming > C' 카테고리의 다른 글
[C언어] 열형강의 C 프로그래밍 [6장 - printf와 scanf 함수에 대한 고찰] (0) | 2020.06.09 |
---|---|
[C언어] 열형강의 C 프로그래밍 [5장 - 상수와 기본 자료형] (0) | 2020.06.09 |
[C언어] 열형강의 C 프로그래밍 [4장 - 데이터 표현 방식의 이해] (0) | 2020.06.09 |
[C언어] 열형강의 C 프로그래밍 [2장 - 프로그램의 기본 구성] (0) | 2020.06.09 |
[C언어] 열형강의 C 프로그래밍 [1장 - 이것이 C언어다] (0) | 2020.06.09 |
- Total
- Today
- Yesterday
- 자바
- Java
- block storage
- 전자정부프레임워크
- 코딩
- 자료구조
- 블록 스토리지
- 파일 스토리지
- file storage
- 열혈강의 프로그래밍
- C언어
- 도커
- 쿠버네티스
- C
- Spring
- Framework
- docker
- 열혈강의
- 정규식
- M2E
- anyframe
- OSI7layer
- 개념
- 특징
- RDB
- Kubernetes
- object storage
- 숫자체크
- 오브젝트 스토리지
- 문자체크
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |