C언어 프로그래밍, C언어 기초 문법 

조건문(Conditional)

 

조건문은 주어진 조건에 따라 프로그램의 흐름을 바꾸고, 주어진 조건에 만족할 때 수행하는 ‘제어문’이다.

C언어에서 조건문은 2가지 형태로  사용한다.

 

1.if

 

if문은 가장 대표적인 조건문이다. if문의 기본 문법은 다음과 같다.

 

if(조건문){
	실행문1;
	실행문2;
}

 

 

조건식의 결과가 참(True)이면 중괄호 내부의 실행문들이 실행된다. 만약 조건식의 결과가 거짓(False)이면 실행문을 실행하지 않고 중괄호 밖의 다음으로 넘어간다. 조건식은 보통 비교 연산자를 사용해서 참, 거짓을 판별하는 경우가 많다. 그리고 조건식에 특별한 연산자 없이 숫자만 사용할 경우, 0(거짓)이 아닌 음수를 포함한 모든 숫자는 참으로 간주해서 수행문을 수행한다.

 

 

 

 

2. if~else문

 

 

조건식이 여려 경우일 때 if~else문을 이용할 수 있다. 다음과 같이 사용한다.

 

if ( 조건식1 )
{
	수행문1;  // 조건식1이 참일 경우 수행문1 실행
}
else if ( 조건식2 )
{
	수행문2; // 조건식1이 거짓이고, 조건식2가 참일 경우 수행문2 실행
}
else
{
	수행문3; // 조건식 1,2가 모두 거짓일 때 수행문3 실행
}

 

 

if문의 조건식1이 참이면 수행문 1을 수행하고 끝이 나고, 거짓이면 else if문의 조건식 2로 넘어간다. 만약 조건식 2가 참이면 수행문 2를 수행하고 조건문을 빠져나가며, 거짓이면 else문의 수행문 3을 수행 후 조건문을 빠져나간다.

else if문의 사용 수 는 제한이 없으며 조건의 수에 따라 결정하면 된다. else문은 조건식을 적지 않으며, 위의 모든 조건식들을 만족하지 않을 시 수행문을 수행하는 역할을 한다.

 

참고로, if문에서 수행문이 한 줄일 경우 중괄호를 사용하지 않아도 된다. 하지만 코드가 길어질 경우 수정 작업이 힘들어진다. 따라서 중괄호를 하는 습관을 들이는 것이 좋다.

 

 

 

3. switch~case문

 

하나의 조건으로 많은 경우의 수를 처리하고자 할 때 사용한다. switch의 조건식 결과는 ‘정수’만을 허용한다.(반드시 연산이 가능해야 한다) 그리고 case문의 값은 ‘정수 상수’만 가능하며 중복이 불가능하다. 이 구문에서 가장 중요한 것 중 하나가 바로 ‘break'다. break는 스위치 문을 빠져나가게 하는 기능을 가지고 있다. 만약 case를 만족하고 수행을 했는데, break가 없다면 그 아래 있는 모든 case는 만족한 것으로 간주해 스위치 문이 끝날 때까지 전부 수행하게 된다. 사용법은 다음과 같다.

 

switch(조건식)  // 연산 가능한 조건식
{
case 정수상수:
	수행문1;
	break;
case 정수상수:
	수행문2;
	break;
default :
	수행문;
}

 

위 구문은 조건식의 결과에 따라 해당하는 case문의 수행문을 수행하고 break를 만나면 스위치문을 빠져나간다. 여기서 default는 if문에서 else와 같이 모든 case의 경우가 해당되지 않을 때 수행하는 구간이다.

 

if문과 switch문은 서로 표현방식만 다를 뿐 기능은 같다. 따라서 코드를 작성할 때 알맞은 방식을 선택해 사용하면 된다.

 

 

예제

#include <stdio.h>

void main()
{
	int iAge = 0;
	printf("나이를 입력하세요 : ");
	scanf("%d", &iAge);

	// 조건식에는 보통 비교연산자를 사용 (참이면 1, 거짓이면 0)
	if (iAge > 19) // 조건식 
	{
		int iValue = 1; 	
		printf("성인입니다.\n");
		printf("iValue = %d\n", iValue);
	}
}

 

#include <stdio.h>

void main()
{
	// switch ~ case 응용
	// ~ 월을 입력 받고, 계절 출력 
	int iMonth = 0;
	printf("현재 월을 입력하세요 : ");
	scanf("%d", &iMonth);

	switch (iMonth)
	{
	case 3:
	case 4:
	case 5:
		printf("봄\n");
		break;
	case 6:
	case 7:
	case 8:
		printf("여름\n");
		break;
	case 9:
	case 10:
	case 11:
		printf("가을\n");
		break;
	case 12:
	case 1:
	case 2:
		printf("겨울\n");
		break;
	default :
		printf("잘못 입력하였습니다.\n");

	}
}
반응형

 c언어 프로그래밍, 기초 문법

 

프로그래밍 언어는 일반적으로 수학에서 사용하는 연산기호와 유사한 연산자들의 집합을 지원한다. 다음에 C언어에서 사용되는 여러 가지 연산자들이 있다.

 

1. 기본 연산자

 

 

연산자

기능

+

덧셈

-

뺄셈

/

나누기

*

곱하기

%

나머지 값

 

 

2. 복합 대입 연산자

 

대입 연산자(=)에 다른 연산자가 합쳐진 것이다. 예를 들어 +=, -=, /=, >=, <= 등이 있다.

이것은 자연스레 많이 사용하게 되는 연산자이므로 가볍게 알고 넘어가면 된다.

 

 

3. 단항 연산자

 

단항 연산자는 항이 하나밖에 없는 경우(피연산자가 1개)다.

연산자

기능

++, --

피연산자 값을 1 증가 또는 1 감소

-(부호 연산자)

피연산자 값에 부호 적용

 

 

4. 비교 연산자

 

비교 연산자는 밑에서 나올 조건문과 반복문에서 ‘조건식’으로 사용이 된다. 조건을 만족하면 정수 1 즉, True(참)을 반환하고, 조건을 불만족하면 정수 0 즉, False(거짓)을 반환한다.

C언어에서는 0이 아닌 모든 값을 ‘참’으로 간주한다. 여기서 모든 값이란 0이 아닌 음수를 포함한 모든 숫자, 문자 등을 의미한다. 비교 연산자에는 등가 비교와 대소 비교가 있다.

 

연산자

기능

==

같다

!=

다르다

<

크다

>

작다

>=

크거나 같다

<=

작거나 같다

 

 

5. 논리 연산자

 

연산자

기능

&&

AND연산자, 둘 다 참이면 참, 하나라도 거짓이면 거짓

| |

OR연산자, 둘 중 하나라도 참이면 참, 둘 다 거짓이면 거짓

!

참 / 거짓의 결과를 반대로

 

비교 연산자와 같이 조건문과 반복문의 ‘조건식’에서 사용된다. 조건을 만족하면 정수 1(참) 반환, 조건을 불만족하면 정수 0(거짓)을 반환한다.

OR 연산은 좌측 식이 참이면 우측식을 연산하지 않고 바로 참이 된다. AND 연산은 좌측식이 거짓이면 우측식을 연산하지 않고 바로 거짓이 된다. 이렇게 되는 이유는 불필요한 연산을 줄여 프로그램 메모리 낭비를 줄이기 위해서다. 참고로 모든 연산자들에는 우선순위가 있기에 여러 가지 연산자들을 사용할 때에는 반드시 ( )를 하는 습관을 들이는 것이 좋다. 소괄호를 제대로 하지 않으면 원하지 않는 결과가 나올 수 있다.

 

 

6. 비트 연산자

 

연산자

기능

&

AND, 둘 다 1이어야 1, 아니면 0

|

OR, 둘 중 하나만 1이면 1, 둘 다 0이면 0

^

XOR, 두 값이 다르면 1, 같으면 0

~

비트 전환, 0은 1로, 1은 0으로

<<

비트를 좌측으로 쉬프트(이동)

>>

비트를 우측으로 쉬프트(이동)

 

비트 연산은 2진수로 연산을 하며, 일반적인 연산보다 속도가 빠르다. 왜냐하면 컴퓨터는 값을 bit단위로 저장하고 있기 때문이다. 그 차이가 크지 않기 때문에 굳이 비트 연산을 사용하지 않아도 무방하다. 가독성이 떨어지기 때문에 꼭 필요한 경우에 사용하면 된다.

 

 

 

7. 조건 연산자 (삼항 연산자)

 

삼항 연산자의 형태는 ‘조건식 ? 식1 : 식2“이다.

조건식이 참(1)이면 식 1을 수행하고, 조건식이 거짓(0)이면 식 2를 수행한다. 코드에 ? 가 있다면 삼항 연산자이니 콜론(:)을 찾아 식을 구별하면 된다.

 

 

8. 형 변환

 

형변환은 자료형의 변환을 의미한다. 2가지 형태로 형 변환을 할 수 있다.

 

1) 자동 형변환

C언어에서는 기본적으로 형변환을 해주는 기능이 있다. 먼저, 정수에서 실수로 형변환이 될 경우 없던 소수점이 생긴다. 하지만 오차가 발생할 가능성이 있어 사용자가 주의를 해야 한다.

두 번째로 실수에서 정수로 변환이 될 경우 소수점 이하의 수는 소멸하고 정수 부분만 남는다.

마지막으로 큰 타입 정수를 작은 타입의 정수로 변환이 이뤄진다.

 

2) 명시적 형변환(Casting)

값 앞에 (type)을 명시하여 변환하는 방식이다. 예를 들어 (int) 3.14 --> 3처럼 실수를 명시적으로 정수 형태로 변환한다.

 

반응형

 C언어 프로그래밍 기초 

1. 주석(Comment)

 

주석의 사전적인 의미는 낱말이나 문장의 뜻을 쉽게 풀이한 것 또는 그런 글을 말한다.
C언어에서 주석은 짜놓은 코드를 설명하거나 표시를 할 때 사용하는 것이다. 주석은 컴파일러가 소스를 읽을 때 무시하는 문장이 된다.

주석을 사용하는 방법은 2가지가 있다.

- 한 줄짜리 주석 : 슬러시(/) 기호를 2번 사용한다.
- 여러 줄 주석 : /* 내용 */ 같이 사용하면 된다.

 

2. 자료형(Data Type)

 

실수치, 정수, 불린 자료형 따위의 여러 종류의 데이터를 식별하는 분류로서, 더 나아가 해당 자료형에 대한 가능한 값, 해당 자료형에서 수행을 마칠 수 있는 명령들, 데이터의 의미, 해당 자료형의 값을 저장하는 방식을 결정한다. 쉽게 말해 자료형이란 변수의 종류를 의미한다. 변수에 값을 담기 이전에 정수, 실수, 문자, 문자열 등 어떤 값들을 지닐 수 있는지 자료형을 미리 정해주어야 한다. 

C언어에서의 기본 자료형의 종류는 다음과 같다.

 

 

종 류

크 기

값의 표현범위

정수형

char

1byte

-128~ +127

short

2byte

-32,768~+32.767

int

4byte

-2,147,483,648~

+2,147,483,647

long

4byte

-2,147,483,648~

+2,147,483,647

long long

8byte

900경 이상

실수형

float

4byte

소수점 이하 6자리까지 정확도 보장

double

8byte

소수점 이하 15자리까지

long double

8byte

소수점 이하 19자리까지

 

정수형에는 부호가 있는 경우와 부호가 없는 경우로 나눌 수 있다. 먼저, 부호가 있는 변수를 만들 때 signed를 사용한다. 이것은 기본 형식이므로 따로 사용할 필요가 없다. 다음, 부호가 없는 정수형을 만들고 싶을 땐 unsigned를 선언 시에 사용해주면 된다. 

그럼 0부터 양수를 사용하게 되고 값의 표현범위도 양수 범위의 2배정도로 늘어난다. 예를 들어 int일 경우 값의 표현범위가 0 ~ 42억이 되는 것이다. 참고로 int와 double은 C언어에서 기본적으로 사용되는 정수와 실수 자료형이다.

 

3. 변수(Variable)

 

변수는 하나의 값을 저장할 수 있는 메모리 공간이다. 여기서 메모리 공간은 프로그램이 실행되는 동안 사용하는 공간(RAM)이다. 쉽게 말해 변수를 무엇인가를 담을 수 있는 상자이다.

변수를 만드는 방법(변수 선언)에는 크게 2가지가 있다.

① 자료형 변수명 = 초기값;

② 자료형 변수명;

첫 번째 방식은 변수 선언과 동시에 초기값을 지정하는 형태다. 두 번째 형태는 초기값 지정 없이 변수만을 선언하는 형태다. 참고로 C언어에서는 모든 문장의 끝에 ‘세미콜론(;)’을 사용한다.
변수 선언 시, 변수명을 정할 때 몇 가지 규칙이 존재한다. 변수명을 정할 때는 이 규칙들을 주의해서 사용해야 한다.


① 영문자, 숫자, 언더 바(_) 만 가능(한글이 가능하나 사용하지 않음)
   변수명 중간에 공백이 있어도 안 된다. (공백도 특수문자이기 때문이다.)


② 첫 글자는 반드시 영문이어야 한다. 그리고 대소문자 구분을 확실하게 해야 한다.
   프로그래밍 언어에서는 무조건 대소문자가 구분된다. (같은 명이라도 대소문자에 따라 
   다른 변수라고 인식한다.)


③ 예약어 사용이 불가능하다. 예약어란 C언어 내부에서 이미 정해진 함수와 같은 경우를 
   말하며 이와 같은 이름으로 변수명을 설정하면 오류가 나게 된다.


④ 변수명에 의미를 부여해 이름만 봐도 어떤 것을 나타내는지 알 수 있도록 정하는 것이 
   좋다. 예를 들어, 점수를 의미하는 변수를 만들시 Score1, score2 같이 만든다.

 

 

 

예제

 

#include<stdio.h>

void main() {
	char cValue = 'A'; // 변수명 cValue에 문자 'A'대입
	int iValue = 65; // 변수명 iValue에 정수 65대입

	printf("cValue 문자: %c\n", cValue); 
	printf("cValue 정수: %d\n", cValue);

	printf("iValue 문자: %c\n", iValue);
	printf("iValue 정수: %d\n", iValue);
    }

 

반응형

+ Recent posts