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

 

배열

 

배열은 ‘같은 타입’의 여러 공간을 하나의 변수로 ‘다루는 것’이며 만들어지는 공간은 ‘연속’된다. 배열을 선언(생성) 하기 위해서는 [ ](대괄호)를 사용한다. 대괄호 안에 배열의 크기를 정하는 정수 값을 넣는다. 그리고 배열에는 ‘인덱스(index)’를 이용해 각 요소에 접근하고 사용할 수 있다. 여기서 인덱스는 간단하게 위치 또는 순서로 의미를 이해하면 된다. 참고로 모든 프로그래밍 언어에서 인덱스는 1이 아닌 0부터 시작한다. 따라서 마지막 순서의 인덱스는 길이에서 1을 뺀 값이 된다. 아래에 배열을 생성하는 여러 가지 형태들을 보여준다.

 

// 배열생성
int iArr1[5]; // 배열생성, 각 공간(5개의정수)은 초기화 되지 않음 (쓰레기값)

int iArr2[5] = { 1, 2, 3, 4, 5 }; // 배열생성과 동시에 초기화(순서대로) 

int iArr3[5] = { 1, 2 }; // 뒤에 나머지 공간3개는 자동으로 0이 대입

int iArr4[5] = { 0, };  // 모든 공간을0대입

int iArr5[] = { 10, 20, 30, 40, 50 }; // 자동으로 길이가5가된다.

 

1. 문자열 배열

 

여기서 char는 1개 문자를 표현하는 자료형이다. char의 배열 형태는 ‘문자열’을 표현할 수 있다. 그리고 문자열의 끝에는 자동으로 ‘널 문자(\0)’가 삽입되어 있다는 것을 주의해야 한다. 널 문자는 정수 0을 의미하며 공백과는 다른 문자이다.(참고로 공백은 정수 32) 따라서 널 문자 때문에 배열 선언 시 원하는 문자열 길이보다 최소 1이상 여유 있게 선언해야 한다. 아래에 문자열 배열을 생성하는 여러 가지 형태들을 보여준다.

 

char szStr1[20] = "Hello"; // char 배열 선언과 동시에 초기화 할 때'문자열'사용가능

char szStr2[20] = { 'H', 'e', 'l', 'l', 'o', }; // szStr1과동일

char szStr3[20] = { 0, }; // 정수0은 널 문자

char szStr4[20]; // 초기화 하지 않은 문자 배열

char szStr[] = "Hello World"; // 길이가 자동으로 잡힌다.(11글자) 

 

2. 다차원 배열

 

다차원 배열은 2차원, 3차원 혹은 그 이상의 배열 형태를 말한다.

예를 들어 int iArr[2][3] = {0, }은 2행 3열의 행렬 형태를 나타낸다. 아래에는 2차원 배열 생성 형태를 나타낸다.

 

// 2차원 배열 생성 시 초기값 넣기
int iArr[2][3] = { {1, 2, 3}, {4, 5, 6} };
int iArr[2][3] = { {1, 2, 3},
		{4, 5, 6} }; 

 

 

예제

#include <stdio.h>

void main()
{
	// 2차원 문자배열로 동물이름 입력 받기 
	char szArrAnimal[3][20] = { 0, }; // 20글자 문자열이 3개 
	int i = 0;
	int iArrLen = 0;

	//				20칸 * 3개 = 60byte / 1개 행의 크기 (20byte) --> 3 (행의개수) 
	iArrLen = sizeof(szArrAnimal) / sizeof(szArrAnimal[0]);
	//		1차원 : iArr[1] ---> 2번째 요소 
	//		2차원 : iArr[1][1] --> 1행, 1열 요소 1개 
	//		       iArr[1] --> 1행 전체 의미 

	printf("동물 이름 입력\n");
	for (i = 0; i < iArrLen; i++)
	{
		printf("%d번 동물 : ", (i + 1));
		gets(szArrAnimal[i]); // 한 행 전체를 의미 = 1차원 문자배열과 같다. 
	}

	for (i = 0; i < iArrLen; i++)
	{
		printf("%d번 동물은 %s입니다.\n", (i + 1), szArrAnimal[i]);
	}

}

 

반응형

 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. 입력(Input)

 

C언어에서 사용자의 입력을 받는 함수는 scanf()이다.

함수 사용 방식은 ‘scanf("입력형식", 입력받을장소(공간, 변수))’처럼 사용한다.

입력 받을 장소는 ‘&’기호를 변수명 앞에 사용해 변수(공간)의 주소 값을 가져온다. scanf()를 사용한다는 것은 화면에서 입력한 내용을 특정 변수의 주소값에 저장한다는 것이다.

 

2. 출력(Output)

 

C언어에서 출력 기능을 가진 함수는 printf() 함수이다. 더 자세히 말해 printf는 형식 지정이 있는 출력을 한다. 여기서 형식 지정이란, 출력에 할 때 자료형에 맞는 형태로 문자를 사용해야 한다는 것이다. 이를 형식지정 문자라 한다.

 

서식문자

기능

%c

정수 값을 ‘문자’로 출력(문자 1개)

%d

정수 값을 10진수로 출력(부호 있음)

%o

정수 값을 8진수로 출력

%x , %X

정수 값을 16진수로 출력

%f

실수 값(소수) 출력

%s

문자열 출력

%p

16진수로 메모리 주소 출력

 

그리고 print에서 많이 사용되는 이스케이프 문자가 있다. 이것은 문자열 안에서 특수한 기능들을 하는 문자들이다.

 

이스케이프 문자

기능

\n

개행(새로운 줄)

\t

탭(tab) - 들여쓰기

\\

\를 문자로 사용

\‘

작은따옴표(‘)를 문자로 사용

\“

큰 따옴표(“)를 문자로 사용

 

예제

#include <stdio.h>

void main()
{	
	int a;
	int b;
	printf("두 수의 입력: ");
	scanf("%d %d", &a, &b);

	printf("a + b = %d\n", a + b);
	printf("a - b = %d\n", a - b);
	printf("a * b = %d\n", a * b);
	printf("a / b = %d\n", a / b);
	printf("a %% b = %d\n", a % b);
}
#incldue <stdio.h>

void main()
{
	int iNum = 0;
    
	printf("숫자 입력 : "); 
	scanf("%d", &iNum); 
    
	printf("입력한 숫자는 %d입니다.\n, iNum");
}

 

결과

두 수 입력 : 20 6
20 + 6 = 26
20 - 6 = 14
20 * 6 = 120
20 / 6 = 3
20 % 6 = 2
숫자 입력 : 5
입력한 숫자는 5입니다.

반응형

+ Recent posts