반응형

안녕하세요.

오늘은 C언어 반복문에 대해 알아보도록 하겠습니다.

 

반복문

규칙적인 구문을 반복해야할 때에는 반복문을 이용할 수 있습니다.

반복문에는 for문과 while문, do-while문이 있습니다.

 

for 문

구문

1
2
3
4
for(초기식; 조건식; 증감식)
{
    구문;
}
cs

다음과 같은 순서로 반복됩니다.

1. 조건식이 참이면 구문을 실행하니다.

2. 증감식으로 변수를 증감합니다.

3. 1~2를 계속 반복하고 조건식이 거짓이면 for문을 빠져나갑니다.

예제

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
void main()
{
    int i;
    for (i = 1; i <= 5; i++)
    {
        printf("%d\n", i);
    }
}
cs

i값이 1씩 증가하면서 1~5를 출력합니다.

 

while 문

구문

1
2
3
4
while(조건식)
{
    구문;
}
cs

다음과 같은 순서로 반복됩니다.

1. 조건식이 참이면 구문을 실행합니다.

2. 조건식이 거짓이 될 때 까지 반복합니다.

예제

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
void main()
{
    int i = 1;
    while ( i <= 5 )
    {
        printf("%d\n", i);
        i++;
    }
}
cs

 

do-while 문

구문

1
2
3
4
do
{
    구문;
}while(조건식)
cs

while과 동일하지만 조건식이 만족하지 않더라도 한번은 구문이 실행됩니다.

 

예제

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
void main()
{
    int i = 1;
    do
    {
        printf("%d\n", i);
        i++;
    } while (i > 5);
}
cs

continue

반복문에서 특정 조건일 때는 구문을 실행시키지 않기 위해서는 continue문을 사용할 수 있습니다.

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
void main()
{
    int i;
    for (int i = 1; i <= 5; i++)
    {
        if (i == 3)
        {
            continue;
        }
        printf("%d\n", i);
    }
}
cs

i가 3일 때 continue문 다음 구문을 실행하지 않고, 다음 반복문을 실행시킨다.

 

break

반복문에서 break문을 만나면 해당 반복문 밖으로 빠져나오게 됩니다.

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
void main()
{
    int i;
    for (int i = 1; i <= 5; i++)
    {
        if (i == 3)
        {
            break;
        }
        printf("%d\n", i);
    }
}
cs

i가 3일때 break문이 실행되면서 for에서 빠져나오게 됩니다.

반응형
반응형

안녕하세요.

오늘은 C언어 조건문에 대해 알아보도록 하겠습니다.

 

조건문

게임에서 HP가 0일떄 쓰러지는 모션을 취해야하거나, 시작지역으로 이동하려면 꼭 조건문의 조건의 만족할 때만 코드가 실행되야 할 것 입니다.

따라서 특정 조건에 따라서 코드가 실행되도록 하기 위해서는 조건문이 필요합니다.

 

if문

문법

1
2
3
4
if(조건)
{
   구문;
}
cs

만약에 조건이 만족하면 구문을 실행한다는 뜻이 됩니다.

조건이 0이면 실행되지 않고, 0 이외의 값을 가지면 실행이 됩니다.

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
void main()
{
    if (1)
    {
        printf("Hello!!\n");
    }
 
    if (0)
    {
        printf("World!!\n");
    }
}
cs

"Hello!!"만 출력되고, "World!!"는 출력되지 않게됩니다.

 

if-else문

문법

1
2
3
4
5
6
7
8
if(조건)
{
   구문1;
}
else
{
   구문2;
}
cs

if-else문은 if 조건이 만족할 때에는 구문1을 실행하고 조건이 만족하지 못할 때는 else문에 있는 구문2를 실행하게 됩니다.

구문1, 구문2가 함께 실행되는 경우는 없습니다.

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
void main()
{
    int nNum = 5;
    
    if (nNum >= 5)
    {
        printf("%d >= 5", nNum);
    }
    else
    {
        printf("%d < 5", nNum);
    }
}
 
cs

nNum값이 5이기 때문에 5보다 이상인 조건에 만족하기 때문에 " 5 >= 5"가 출력이 됩니다.

 

if-else if-else문

문법

1
2
3
4
5
6
7
8
9
10
11
12
if(조건1)
{
   구문1;
}
else if(조건2)
{
   구문2;
}
else
{
   구문3;
}
cs

if-else if-else문은 if의 조건1이 만족하지 않으면 else if의 조건2를 확인해서 만족하면 구문2를 실행하고, 조건2도 만족하지 않는다면, 구문3을 실행시킵니다.

만약 else if문을 사용하지 않는다면, if - else문으로 다음과 같이 구현해야함으로 가독성이 떨어질 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if(조건1)
{
   구문1;
}
else
{
    if(조건2)
    {
       구문2;
    }
    else
    {
       구문3;
    }
}
cs

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
void main()
{
    int nNum = 15;
    
    if (nNum < 5)
    {
        printf("if %d < 5", nNum);
    }
    else if (nNum > 10)
    {
        printf("else if %d > 5", nNum);
    }
    else
    {
        printf("else %d >= 5 and nNum > 10", nNum);
    }
}
 
cs

nNum가 15이기 때문에 "else if 15 > 5"가 출력이 됩니다.

 

조건 연산자(혹은 삼항 연산자)

간단한 if-else조건문 경우에는 조건 연산자를 이용할 수 있습니다.

문법

조건 ? 구문1 : 구문2;

예제

1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
void main()
{
    int nNum = 5;
    
    nNum > 5 ? printf("%d > 5", nNum) : printf("%d <= 5", nNum);
}
 
 
cs

"5 <= 5"가 출력됩니다.

 

if문팁

다음과 같이 if문의 조건에 두가지 혹은 n가지 조건들을 논리연산자(&&, ||, !)로 넣을 수 있습니다.

if( nNum > 5 || nNum < 0 )

이런식으로 구현할 수있습니다.

다음과 같이 데이터를 리턴하는 함수도 넣을 수 있습니다.

if ( func1() && func2() )

위 구문에서 만약에 fun1함수 리턴값이 false값(=0)이라면 func2함수를 호출하지 않습니다.

 

switch-case문

변수값에 따라서 실행구문이 달라진다면 if문 보다 switch-case문이 가독성이 더좋습니다.

문법

1
2
3
4
5
6
7
8
9
switch(변수)
{
    case 상수1:
        break;
    case 상수2:
        break;
    default:
        break;
}
cs

switch문의 변수는 정수만 가능하고(실수형변수는 안됩니다) 변수와 같은 상수를 가진 case문의 구문을 실행하게 됩니다. break문이 없다면 바로 다음 case문을 실행하게 됩니다.

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
void main()
{
    int nNum = 5;
    
    switch (nNum)
    {
    case 5:
        printf("nNum 5\n");
        break;
    case 6:
        printf("nNum 6\n");
        break;
    default:
        printf("default\n");
        break;
    }
}
cs

"nNum 5"가 출력됩니다.

다음과 같이 case 5에 break;문이 없다면 어떻게 될까요??

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
void main()
{
    int nNum = 5;
    
    switch (nNum)
    {
    case 5:
        printf("nNum 5\n");
    case 6:
        printf("nNum 6\n");
        break;
    default:
        printf("default\n");
        break;
    }
}
cs

break문이 없다면 바로 다음구문으로 실행되어 "nNum 5"과 "nNum 6"가 출력됩니다.

switch-case문은 해당 구문으로 이동되면서 작동되는 것을 확인할 수 있습니다.

반응형
반응형

안녕하세요.

오늘은 C언어의 연산자에 대해 알아보도록 하겠습니다.

 

연산자

수나 식을 일정한 규칙에 의해 계산하기 위해서 연산자를 사용합니다.

 

산술 연산자

1. 이항연산자

피연산자를 덧셈, 뺼셈, 곱셈, 나눗셈, 나머지 연산을 말합니다.

연산자 설명 사용
+ 더하기 A+B
- 빼기 A-B
* 곱하기 A*B
/ 나누기 A/B
% 나머지 A%B

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
void main()
{
    int num1 = 50;
    int num2 = 6;
 
    printf("num1 + num2 : %d\n", num1 + num2);
    printf("num1 - num2 : %d\n", num1 - num2);
    printf("num1 * num2 : %d\n", num1 * num2);
    printf("num1 / num2 : %f\n", (float)num1 / (float)num2); // 소수점 출력을 위해서 float로 강제 형변환합니다.
    printf("num1 %% num2 : %d\n", num1 % num2);
}
cs

2. 단항 연산자

피연산자에 증가(++),감소(--)와 양수(+),음수(-)를 표시하는 연산자입니다.

연산자 설명 사용
+ 양수표현 +A
- 음수표현 -A
++ 1씩증가 A++, ++A
-- 1씩감소 A--, --A

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
void main()
{
    int num = 50;
 
    printf("num : %d\n", num);
    printf("-num : %d\n"-num);
    printf("num++ : %d\n", num++);    // 다음 코드에서 1증가
    printf("++num : %d\n"++num);    // 현재 코드에서 1증가
    printf("num-- : %d\n", num--);    // 다음 코드에서 1감소
    printf("--num : %d\n"--num);    // 현재 코드에서 1감소
}
 
cs

3. 대입 연산자

오른쪽 식을 왼쪽값에 대입합니다.

연산자 설명 사용
= 오른쪽 식을 왼쪽 값에 대입 C = A + B

복합 산술연산자 ( 이항연산자와 대입연산자를 같이 사용)

연산자 설명 사용
+= 왼쪽 수에 오른쪽 수 더해 왼쪽 수에 대입 A += B (A = A + B)
-= 왼쪽 수에 오른쪽 수 빼기를 해 왼쪽 수에 대입 A -= B (A = A - B)
*= 왼쪽 수에 오른쪽 수 곱해서 왼쪽 수에 대입 A *= B (A = A * B)
/= 왼쪽 수에 오른쪽 수 나누어 왼쪽 수에 대입 A /= B (A = A / B)
%= 왼쪽 수에 오른쪽 수 나눈 나머지를 왼쪽 수에 대입 A %= B (A = A % B)

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
void main()
{
    int num = 10;
 
    printf("num : %d\n", num);
    num += 6;    // num = num + 6
    printf("num : %d\n", num);
    num -= 8;    // num = num - 8
    printf("num : %d\n", num);
    num *= 4;    // num = num * 4
    printf("num : %d\n", num);
    num /= 2;    // num = num / 2
    printf("num : %d\n", num);
    num %= 2;    // num = num % 3
    printf("num : %d\n", num);
}
cs

비교 연산자(혹은 관계 연산자)

왼쪽값과 오른쪽 값을 비교합니다.

연산자 설명 사용
< 오른쪽 값이 왼쪽 값보다 클 때 1, 아니면 0 A < B
> 왼쪽 값이 오른쪽 값보다 클 때 1, 아니면 0 A > B
<= 오른쪽 값이 왼쪽 값보다 같거나 클 때 1, 아니면 0 A <= B
>= 왼쪽 값이 오른쪽 값보다 같거나 클 때 1, 아니면 0 A >= B
== 왼쪽 값과 오른쪽 값이 같을 때 1, 아니면 0 A == B
!= 왼쪽 값과 오른쪽 값이 다를 때 1, 아니면 0 A != B

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
void main()
{
    int num1 = 10;
    int num2 = 15;
 
    printf("num1 < num2 : %d\n", num1 < num2);
    printf("num1 > num2 : %d\n", num1 > num2);
    printf("num1 <= num2 : %d\n", num1 <= num2);
    printf("num1 >= num2 : %d\n", num1 >= num2);
    printf("num1 == num2 : %d\n", num1 == num2);
    printf("num1 != num2 : %d\n", num1 != num2);
}
 
cs

 

논리 연산자

왼쪽과 오른쪽을 논리연산(AND, OR, NOT)합니다.

연산자 설명 사용
&& 왼쪽과 오른쪽 논리값이 모두 1일 때 1 (AND 연산) A && B
|| 왼쪽과 오른쪽 논리값이 하나라도 1일 때 1 (OR 연산) A > B
! 논리값이 0이면 1, 1이면 0 !A

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
void main()
{
    int num1 = 1;
    int num2 = 1;
 
    printf("num1 && num2 : %d\n", num1 && num2);
    printf("num1 || num2 : %d\n", num1 || num2);
    num1 = 1;
    num2 = 0;
    printf("num1 && num2 : %d\n", num1 && num2);
    printf("num1 || num2 : %d\n", num1 || num2);
 
    printf("!num1 : %d\n"!num1);
}
 
cs

 

비트 연산자

비트(2진수) 연산을 위해서는 비트 연산자를 사용합니다.

연산자 설명 사용
& 비트(2진수)단위 AND 연산 A & B
| 비트(2진수)단위 OR 연산 A | B
~ 비트(2진수)단위 NOT 연산 ~A
^ 비트(2진수)단위 XOR 연산 A ^ B
<< 왼쪽으로 비트 이동 A << B
>> 오른쪽으로 비트 이동 A >> B

예제

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
31
#include <stdio.h>
 
void main()
{
    int num1 = 14;
    int num2 = 7;
 
    // num1      1110
    // num2  AND 0111
    //           0110 
    printf("num1 & num2 : %d\n", num1 & num2);
    // num1      1110
    // num2  OR  0111
    //           1111
    printf("num1 | num2 : %d\n", num1 | num2);
    
    // num1      NOT 1110 ->  ‭1111 1111 1111 1111 1111 1111 1111 0001‬
    printf("num1 : %d\n", ~num1);
    
    printf("11111num1 : %d\n", num1);
 
    // num1       1110
    // num2  XOR  0111
    //            1001
    printf("num1 ^ num2 : %d\n", num1 ^ num2);
 
    // 1110 >> 2 -> 0011
    printf("num1 >> 2 : %d\n", num1 >> 2);
    // 1110 << 2 -> 11 1000
    printf("num1 << 2 : %d\n", num1 << 2);
}
 
cs

 

포인터 연산자

변수가 참조하는 주소값과 포인터 변수가 가르키는 값을 얻기 위해 사용합니다.

연산자 설명 사용
& 변수의 주소값 &A
* 포인터 변수의 가르키는 값 *A

예제

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
void main()
{
    int num = 10;
    int* p = &num;
    
    printf("&num: %p\n"&num);
    num = 5;
    printf("*p: %d\n"*p);
}
cs

 

조건 연산자(혹은 삼항 연산자)

조건식으로 참 / 거짓에 따라 수식을 실행합니다.

연산자 설명 사용
조건식 ? 식1 : 식2 조건식이 참이면 식1이 적용, 거짓이면 식2 적용 A < B ? A = 5 : B = 10

예제

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
void main()
{
    int num1 = 14;
    int num2 = 7;
    (num1 < num2) ? (num1 = 5) : (num1 = 10);
 
    printf("num1: %d\n", num1);
    
}
 
cs

 

반응형
반응형

안녕하세요.

오늘은 변수에 데이터를 입력과 출력에 대해 알아보도록 하겠습니다.

 

출력

데이터를 출력하기 위해서는 "printf"라는 함수를 사용합니다.

형식

printf("서식", 데이터);

서식은 다음과 같이 넣을 수 있습니다.

서식 데이터 타입 비고
%d int 부호 있는 10진수 정수
%u unsigned int 부호 없는 10진수 정수
%o int 8진수
%x int 16진수 정수 소문자
%X int 16진수 정수 대문자
%f float 실수
%lf double 실수
%e float, double 부동소수점 e(소문자) 방식 실수
%E float, double 부동소수점 E(대문자) 방식 실수
%c char 문자
%s,%S char*, char[] 문자열
%p void* 포인트형

데이터에는 변수 혹은 상수를 넣어서 출력을 합니다.

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
void main()
{
    int nNum = -10;
    float fNum = 12345.6789123f;
    double dbNum = 89789.123456f;
    char ch = 'H';
    char chString[20= "Hello World";
 
    printf("%%d %d\n", nNum);
    printf("%%u %u\n", nNum);
    printf("%%o %o\n", nNum);
    printf("%%x %x\n", nNum);
    printf("%%X %X\n", nNum);
    printf("%%f %f\n", fNum);
    printf("%%lf %lf\n", dbNum);
    printf("%%e %e\n", dbNum);
    printf("%%E %E\n", dbNum);
    printf("%%c %c\n", ch);
    printf("%%s %s\n", chString);
 
}
 
cs

 

 

입력

데이터를 입력받기 위해서는 "scanf"라는 함수를 사용합니다.

※ Visual Studio 사용시 
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
이런 에러가 발생한다면 다음과 같이 하면 됩니다.

1. scanf대신 scanf_s를 사용합니다.

2. "#define _CRT_SECURE_NO_WARNINGS" 추가합니다.

 

형식

scanf("서식", &변수(변수주소));

서식은 다음과 같이 넣을 수 있습니다.

서식 데이터 타입 비고
%d int 부호 있는 10진수 정수
%u unsigned int 부호 없는 10진수 정수
%o int 8진수
%x int 16진수 정수 소문자
%f float 실수
%lf double 실수
%e float 부동소수점 e방식 실수
%c char 문자
%s,%S char*, char[] 문자열

변수는 scanf 함수는 서식에 맞춰서 변수주소로 접근해서 데이터를 입력을 합니다.

그로인해 변수앞에 변수의 주소값을 지칭하는 "&"를 추가합니다.

 

예제

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
void main()
{
    int nNum1, nNum2, nNum3, nNum4;
    float fNum1, fNum2;
    double dbNum;
    char ch = 'H';
    char chString[20= "Hello World";
 
    
    printf("%%d : ");
    scanf("%d"&nNum1);
    while (getchar() != '\n');
 
    printf("%%u : ");
    scanf("%u"&nNum2);
    while (getchar() != '\n');
 
    printf("%%o : ");
    scanf("%o"&nNum3);
    while (getchar() != '\n');
 
    printf("%%x : ");
    scanf("%x"&nNum4);
    while (getchar() != '\n');
 
    printf("%%f : ");
    scanf("%f"&fNum1);
    while (getchar() != '\n');
 
    printf("%%lf : ");
    scanf("%lf"&dbNum);
    while (getchar() != '\n');
 
    printf("%%e : ");
    scanf("%e"&fNum2);
    while (getchar() != '\n');
 
    printf("%%c : ");
    scanf("%c"&ch);
    while (getchar() != '\n');
 
    printf("%%s : ");
    scanf("%s", chString); // 문자열은 chString 변수 자체가 주소이기 때문에 &를 제외합니다.
 
    printf("%%d %d\n", nNum1);
    printf("%%u %u\n", nNum2);
    printf("%%o %o\n", nNum3);
    printf("%%x %x\n", nNum4);
    printf("%%f %f\n", fNum1);
    printf("%%lf %lf\n", dbNum);
    printf("%%e %e\n", fNum2);
    printf("%%c %c\n", ch);
    printf("%%s %s\n", chString);
}
 
cs

 

※ "while (getchar() != '\n');" 코드 추가가 되는 이유

다음과 같이 입력후 엔터를 눌렀을 때 개행문자(\n)가 입력될 수 있기 때문에 추가합니다.

 

반응형
반응형

안녕하세요.

오늘은 저번 주에 변수와 상수에 이어서 배열에 대해 알아보도록 하겠습니다.

 

배열이란??

int형 변수 10개를 선언은 다음과 같이 할 수 있습니다.

int nNum1, nNum2, nNum3, nNum5, nNum6, nNum7, nNum8, nNum9, nNum10;

100개나 1000개를 선언하려면 하나씩 적기도 너무 번거롭고 관리도 어렵습니다.

이때 사용할 수 있는 게 배열입니다.

배열을 사용하게 되면 여러 개의 데이터를 수월하게 관리할 수 있게 됩니다.

형식

다음과 같이 초기화 하면서 배열 초기값을 넣을 수 있습니다.

데이터형 변수명[크기] = {배열1초기값, 배열2초기값, 배열3초기값...};

다른 방법으로 다음과 같이 초기화한 후 배열 값을 대입할 수도 있습니다.

데이터형 변수명[크기];

변수명[0] = 배열값;

변수명[1] = 배열 값;

 

예제

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
#include <stdio.h>
 
void main()
{
    int arrNum[10];
 
    arrNum[0= 1;
    arrNum[1= 2;
    arrNum[2= 3;
    arrNum[3= 4;
    arrNum[4= 5;
    arrNum[5= 6;
    arrNum[6= 7;
    arrNum[7= 8;
    arrNum[8= 9;
    arrNum[9= 10;
 
    printf("arrNum[0] : %d\n", arrNum[0]);
    printf("arrNum[1] : %d\n", arrNum[1]);
    printf("arrNum[2] : %d\n", arrNum[2]);
    printf("arrNum[3] : %d\n", arrNum[3]);
    printf("arrNum[4] : %d\n", arrNum[4]);
    printf("arrNum[5] : %d\n", arrNum[5]);
    printf("arrNum[6] : %d\n", arrNum[6]);
    printf("arrNum[7] : %d\n", arrNum[7]);
    printf("arrNum[8] : %d\n", arrNum[8]);
    printf("arrNum[9] : %d\n", arrNum[9]);
}
 
cs

 

배열을 선언에 준 후 배열 값 0~9로 접근합니다.

그리고 배열을 "int arrNum[10];"으로 선언하면 메모리상에 연속으로 할당이 되게 됩니다.

 

 

다차원 배열

행, 열을 가진 데이터를 배열에 넣기 위해서는 다차원 배열을 이용할 수 있습니다.

예를 들면 학생들의 영어, 수학, 과학 성적을 배열에 넣는 경우에는 2차원 배열을 사용해서 넣을 수 있습니다.

형식

데이터형 변수명[행개수][열개수] = {배열1초기값, 배열2초기값, 배열3초기값...};

데이터형 변수명[행 개수][열개수];[행개수][열개수];

변수명[0][0] = 배열 값;

변수명[0][1] =배열 값;

변수명[1][0] = 배열 값;

변수명[1][1] = 배열 값;

 

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
#include <stdio.h>
 
void main()
{
    int arrNum[2][5];
 
    arrNum[0][0= 1;
    arrNum[0][1= 2;
    arrNum[0][2= 3;
    arrNum[0][3= 4;
    arrNum[0][4= 5;
    arrNum[1][0= 6;
    arrNum[1][1= 7;
    arrNum[1][2= 8;
    arrNum[1][3= 9;
    arrNum[1][4= 10;
    
 
    printf("arrNum[0][0] : %d\n", arrNum[0][0]);
    printf("arrNum[0][1] : %d\n", arrNum[0][1]);
    printf("arrNum[0][2] : %d\n", arrNum[0][2]);
    printf("arrNum[0][3] : %d\n", arrNum[0][3]);
    printf("arrNum[0][4] : %d\n", arrNum[0][4]);
    printf("arrNum[1][0] : %d\n", arrNum[1][0]);
    printf("arrNum[1][1] : %d\n", arrNum[1][1]);
    printf("arrNum[1][2] : %d\n", arrNum[1][2]);
    printf("arrNum[1][3] : %d\n", arrNum[1][3]);
    printf("arrNum[1][4] : %d\n", arrNum[1][4]);
}
 
cs

 

"int arrNum[2][5];"은 메모리상에는 다음과 같이 할당됩니다.

 

반응형
반응형

안녕하세요.

오늘은 변수와 상수에 대해 알아보도록 하겠습니다.

 

변수

숫자나 문자의 값들을 메모리에 넣어서 사용하기 위해서는 변수를 이용합니다.

형식

변수 초기값을 넣으려면 다음과 같이 합니다.

자료형 변수명 = 초기값;

초기값을 없이 변수를 선언 할 수 도 있습니다.

자료형 변수명;

 

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
 
void main()
    int nNum = 5;           // 정수 5를 int형(정수형) nNum에 대입합니다.
    char cCh = 'A';         // 문자 'A'를 char형(문자형) cCh에 대입합니다.
    int nNum1, nNum2;       // 변수 2개를 한번에 선언할 수 있습니다.
    float fNum3 = 4.8f;     // 실수 4.8을 float형(실수형) fNum3에 대입합니다.
    nNum1 = 15;
    nNum2 = 7;
 
    printf("nNum = %d\n", nNum);
    printf("cCh = %c\n", cCh);
    printf("nNum1 = %d\n", nNum1);
    printf("nNum2 = %d\n", nNum2);
    printf("fNum3 = %f\n", fNum3);
}
 
cs

자료형(Data Type)

 

변수명의 규칙

1. 알파벳(대소문자 구분), 숫자(첫글자에는 쓸수없음)로 선언합니다.

2. 공백을 사용할 수 없습니다.

3. 예약어(Keyword)를 사용할 수 없습니다.

4. 특수문자는 "_"만사용할 수 있습니다.

 

상수

상수에는 리터럴 상수와 심볼릭 상수가 있습니다.

리터럴 상수

1, 5 등과 같이 바로 넣어서 사용할 수 있는 상수를 말합니다.

심볼릭 상수

변하지 않는 변수를 말합니다.

const, #define을 사용하여 선언합니다.(const는 자료형이 있고, #define은 자료형이 없습니다)

보통 대문자를 사용하여 선언하게 됩니다.

형식

const int MAX_LEVEL 100;

#define MAX_SIZE 50

 

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
#define MAX_SIZE 50
 
void main()
{
    const int MAX_LEVEL = 100;
    const float HALF = 0.5f;
 
    printf("MAX_SIZE = %d\n", MAX_SIZE);
    printf("MAX_LEVEL = %d\n", MAX_LEVEL);
    printf("HALF = %f\n", HALF);
}
 
cs

 

반응형
반응형

안녕하세요.

오늘은 저번 시간에 간단하게 알아본 Hello World를 출력하는 프로그램을 이용하여, 

C언어의 기본 구조를 이해해보도록 하겠습니다.

아래는 저번시간에 만든 Hello World 출력 프로그램의 코드입니다.

하나하나 코드를 분석해보도록 하겠습니다.

1
2
3
4
5
6
7
#include <stdio.h>
 
void main()
    // Hello World를 출력합니다.
    printf("Hello World");
}
cs

 

#include <stdio.h>

stdio.h라는 파일을 포함하겠다는 뜻입니다.

stdio.h는 Standard Input/Output library의 약어로 여러형의 입출력 함수가 포함된 헤더파일입니다.

C언어로 코딩할때 항상 필요한 라이브러리 입니다.

 

void main()

C언어는 main이라는 함수부터 시작됩니다.

항상 시작점은 main함수입니다.

함수는 보통 리턴값을 가지게 되는데 void를 사용하면 반환값이 필요없습니다.

 

// Hello World를 출력합니다.

코드에 대한 설명을 하기 위해서는 "//" 이나 "/* */"을 사용할 수 있습니다. 

 

printf("Hello World");

printf함수는 문자열을 출력해주는 함수입니다.

모든 명령은 ";"(세미콜론)으로 끝냅니다.

 

반응형
반응형

안녕하세요.

오늘은 C언어에 대해 간단히 알아본 뒤 가장 간단한 프로그램인 Hello World를 출력하는 프로그램을 만들어 보도록 하겠습니다.

 

C언어란??

1972년 켄 톰슨과 데니스 리치가 벨 연구소에서 유닉스 운영 체제에서 사용하기 위하여 개발한 프로그래밍 언어가 C언어입니다.

많은 프로그래밍 언어에 기반에 되는 언어입니다, 

다른 언어들보다는 조금 어렵게 느껴질 수 있으나, C언어를 배우면 다른 언어를 배우기 조금더 수월하다고 생각이 듭니다.

절차적 프로그래밍 언어입니다.

 

개발툴 설치

C언어로 만든 코드를 컴파일할 수 있는 컴파일러가 필요합니다.

Dev-C++이나 Visual Studio(이하 VS)가 필요합니다.

다음 링크를 참조해주세요.

Dev-C++ 다운로드 & 설치

Visual Studio 2019 다운로드 및 설치

저는 아무래도 VS가 익숙하기 때문에 VS를 사용하여 강좌를 진행하도록 하겠습니다.

 

VS를 이용한 Hello World를 출력하는 프로그램 만들기

 

1. 설치한 VS를 실행합니다.

2. 새 프로젝트 만들기를 선택합니다.

3. 빈 프로젝트를 선택한 후 다음을 누릅니다.

4. 프로젝트이름을 적고, 저장될 경로를 지정합니다. 그 후 만들기 버튼을 누릅니다.

5. 프로젝트를 만들었으니, 이제는 코드를 입력할 파일을 만들겠습니다.

솔루션 탐색기에 소스 파일에 오른쪽 클릭 한 후 추가 - 새 항목을 선택합니다.

C++ 파일을 선택한 후 파일이름을 변경하고 난 뒤에 추가 버튼을 누릅니다.

8. Hello World를 출력하는 코드를 작성합니다.

1
2
3
4
5
6
#include <stdio.h>
 
void main()
{
    printf("Hello World");
}
cs

9. 컴파일을 합니다.

메뉴 - 빌드 - 컴파일을 누릅니다.(Ctrl+F7)

10. 빌드를 합니다.

메뉴 - 빌드 - HelloWorld빌드를 선택합니다.

11. 실행을 합니다.

메뉴 - 디버그 - 디버그하지 않고 시작을 누릅니다.

Ctrl+F5를 해도 됩니다.

사실 9(컴파일), 10(빌드)과정을 제외하고 바로 Ctrl+F5키를 누르면 빌드를 한 후 실행을 하게 됩니다.

반응형
반응형

안녕하세요.

오늘은 코드를 편집하거나 컴파일 시 많이 사용하는 Visual Stdio 2019를 설치해 보도록 하겠습니다.

 

Visual Studio란

마이크로 소프트에서 개발한 통합 개발 환경을 말합니다. 윈도우 운영체제에서 작동합니다.

 

Visual Studio 2019 다운로드 및 설치

1. 다음 사이트에서 Visual Studio Installer를 다운로드 받습니다.

https://visualstudio.microsoft.com/ko/vs/

 

Visual Studio 2019 | 무료 다운로드

Visual Studio에서 코드 완성, 디버깅, 테스트, Git 관리 및 클라우드 배포를 사용하여 코드를 작성할 수 있습니다. 지금 Community를 무료로 다운로드하세요.

visualstudio.microsoft.com

Community버전을 Installer 다운로드 받습니다.

 

다운로드 받은 Installer를 실행합니다.

계속 버튼을 누릅니다.

 

개발에 필요한 것을 선택해줍니다.

모두 설치해주면 좋겠지만, 용량이 크기때문에 필요한 작업을 선택합니다.

저는 유니티와 C++이 필요하기 때문에 C++를 사용한 데스크톱 개발과 Unity를 사용한 게임 개발만 체크한 후 설치를 하겠습니다. 기타 필요한게 있거나 하드 용량이 넉넉하시다면 모두 체크하셔도 좋을것 같습니다.

다운로드되면서 설치를 합니다. 설치가 완료될 때까지 기다립니다.

 

어느정도 설치 및 다운로드를 받은 후 재시작해야합니다.

 

재부팅 후 시작에서 Visual Studio 2019를 실행합니다.

 

마이크로 소프트 계정으로 로그인 하면, 프로젝트를 생성할 수 있습니다.

반응형
반응형

안녕하세요

Dev C++설치 한 후 Hello World프로젝트를 만들어보도록 하겠습니다.

Hello World 프로젝트 만들기

1. 메뉴 - 파일 - 새로 만들기 - 프로젝트로 프로젝트를 추가합니다.

2. Console Application을 선택한 후 프로젝트명을 입력하고 확인을 누릅니다.

3. 프로젝트가 저장될 경로를 지정한 후 저장버튼을 누릅니다.

4. 기본적으로 cpp파일 생성된 후 프로젝트가 추가되었습니다.

 

실행이 제대로 되는지 확인 하기 위해서

cout >> "Hello World"; 

이 코드를 추가하여 "Hello World"가 출력되도록 해보겠습니다.

전체 코드는 다음과 같습니다.

1
2
3
4
5
6
7
#include <iostream>
 
 
int main(int argc, char** argv) {
    std::cout << "Hello World";    // 추가 
    return 0;
}
cs

 

5. 그 후 "F10" 키를 누르거나, 메뉴 - 실행- 실행으로 프로그램을 실행시킵니다.

컴파일을 하지 않고 바로 실행을 하여 메세지 박스가 뜹니다.

"Yes"버튼을 누릅니다.

cpp파일을 저장합니다.

 

7. 컴파일에 문제가 없다면 실행이 됩니다.

반응형
반응형

안녕하세요

C나 C++을 실제 컴파일해서 실행해보려면 컴파일러가 필요한데요.

아무래도, Visual Studio는 설치하려면 용량이 조금 무겁기 때문에, 그런 이유로 사용이 꺼려진다면, Dev C++을 추천합니다.

Dev C++란

GNU 라이선스로 보급되는 C/C++ 통합 개발 환경입니다.

통합 개발 환경은 델파이로 작성되어있습니다.

윈도우에서 사용가능합니다.

 

Dev C++ 설치

Dev C++를 하려면 다음 사이트에 접속합니다.

https://sourceforge.net/projects/orwelldevcpp/

 

Dev-C++

Download Dev-C++ for free. A free, portable, fast and simple C/C++ IDE. A new and improved fork of Bloodshed Dev-C++

sourceforge.net

 

접속 후 다운로드 버튼을 눌러서 설치 파일을 받습니다.

설치파일을 실행합니다.

언어를 선택합니다. 기본적으로 "Korean"으로 되어있습니다.

"OK"버튼을 눌러 다음으로 넘어갑니다.

"동의함" 버튼을 누릅니다.

구성 요소 선택입니다.

따로 설정할것이 없다면, 다음 버튼을 누릅니다.

경로를 설정한 후 설치 버튼을 누릅니다..

설치가 됩니다.

 

잠시 기다리면 설치가 완료됩니다.

마침을 눌러서 실행시킵니다.

이제 Dev C++을 실행합니다.

언어를 설정한 후 Next버튼을 누릅니다.

 

테마설정을 한 후 Next버튼을 누릅니다.

구성설정이 완료되었습니다.

 

 

반응형
반응형

안녕하세요

오늘은 데이터를 원하는 그룹으로 만들 수 있는 GROUP BY에 대해 알아보도록 하겠습니다.

GROUP BY 절
- 데이터를 원하는 그룹으로 만들 때 사용합니다.
- 보통 집계함수와 사용됩니다.

문법
SELECT 컬럼1(혹은 집계합수), 컬럼2, 컬럼3.. FROM 테이블명
GROUP BY 컬럼1, 컬럼2, 컬럼3

예제

아래와 같은 테이블이 있는 경우

다음 쿼리를 실행시키면
SELECT m_nHP, COUNT(*) FROM CHARACTER_TBL
GROUP BY m_nHP

다음과 같은 결과를 얻을 수 있습니다.




HAVING 절
- WHERE 절에서 집계함수를 사용할 수 없기 때문에 집계함수를 조건 비교하기 위해 사용합니다.
- GROUP BY절과 함께 사용됩니다.

문법
SELECT 컬럼1(혹은 집계합수), 컬럼2, 컬럼3.. FROM 테이블명
GROUP BY 컬럼1, 컬럼2, 컬럼3 HAVING 집계함수 조건비교

예제

다음 쿼리를 실행시키면,
SELECT m_nHP, COUNT(*) FROM CHARACTER_TBL
GROUP BY m_nHP HAVING COUNT(*) > 1

다음과 같은 결과를 얻을 수 있습니다.

반응형

'개발공부 > MSSQL' 카테고리의 다른 글

[MSSQL] JOIN 사용  (0) 2020.02.11
[MSSQL] ALIAS(별칭) 사용  (0) 2020.02.10
[MSSQL] 테이블 데이터 삭제(DELETE)  (0) 2020.02.08
[MSSQL] 테이블 데이터 수정(UPDATE)  (0) 2020.02.07
[MSSQL] 테이블에 데이터 삽입(INSERT)  (0) 2020.02.05
반응형

안녕하세요 

오늘은 여러 테이블을 한번에 조회할 수 있게 하는 JOIN에 대해 알아보도록 하겠습니다. 

JOIN(조인) 이란? 
여러 테이블을 하나로 합쳐서 데이터를 보이도록 가능하게 해주는 구문입니다. 
만약 캐릭터 테이블과 길드원 테이블이 있을 때, 길드원 테이블에 길드원 아이디만 있고, 길드원 이름이 없다면, 
이럴때 JOIN을 사용하면, 캐릭터 테이블에서 캐릭터 아이디로 길드원 이름을 얻을 수 있습니다. 

조인의 종류 
□ INNER JOIN 

문법 
SELECT 출력할 컬럼1, 출력할 컬럼2 ... FROM 기준테이블명  
INNER JOIN 조인테이블명 ON 기준테이블.키값 = 조인테이블.키값

예제
SELECT A.m_nGuildNo, A.m_nPlayer, B.m_szName FROM GUILD_TBL A
INNER JOIN CHRACTER B ON A.m_nPlayer = B.m_nPlayer;

□ LEFT OUTER JOIN 


문법 
SELECT 출력할 컬럼1, 출력할 컬럼2 ... FROM 기준테이블명 
LEFT OUTER JOIN 조인테이블명 ON 기준테이블.키값 = 조인테이블.키값 

예제
SELECT A.m_nGuildNo, A.m_nPlayer, B.m_szName FROM GUILD_TBL A
LEFT OUTER JOIN CHRACTER B ON A.m_nPlayer = B.m_nPlayer;

□ RIGHT OUTER JOIN 


문법 
SELECT 출력할 컬럼1, 출력할 컬럼2 ... FROM 기준테이블명 
RIGHT OUTER JOIN 조인테이블명 ON 기준테이블.키값 = 조인테이블.키값 

예제
SELECT A.m_nGuildNo, A.m_nPlayer, B.m_szName FROM GUILD_TBL A
RIGHT OUTER JOIN CHRACTER B ON A.m_nPlayer = B.m_nPlayer;

□ FULL OUTER JOIN 


문법 
SELECT 출력할 컬럼1, 출력할 컬럼2 ... FROM 기준테이블명 
FULL OUTER JOIN 조인테이블명 ON 기준테이블.키값 = 조인테이블.키값 

예제
SELECT A.m_nGuildNo, A.m_nPlayer, B.m_szName FROM GUILD_TBL A
FULL OUTER JOIN CHRACTER B ON A.m_nPlayer = B.m_nPlayer;

□ CROSS JOIN 


문법 
SELECT 출력할 컬럼1, 출력할 컬럼2 ... FROM 기준테이블명 
CROSS JOIN 조인테이블 

예제
SELECT A.m_nGuildNo, B.m_szName FROM GUILD_TBL A
CROSS JOIN CHRACTER B 

□ SELF JOIN 
문법 
SELECT 출력할 컬럼1, 출력할 컬럼2 ... FROM 기준테이블명, 기준테이블명2

예제
SELECT A.m_nGuildNo, B.m_szName FROM GUILD_TBL A, GUILD_TBL B

반응형
반응형

안녕하세요

ALIAS(별칭)을 쿼리문에 사용하는 법에 대해 알아보겠습니다.

■ ALIAS이란??
컬럼, 테이블, 서브쿼리등에 사용하여, 새로운 별칭을 부여합니다.
보통 알아보기 어려운 이름을 가진 컬럼이나 테이블을 보기 쉽게 만들어줍니다. 
"AS"로 사용합니다.

■ 문법
컬럼명 as 컬럼별칭
테이블명 as 테이블별칭


■ 예제
만약 CHRACTER_TBL 테이블이 있다면,

m_nPlayer m_szName m_nHP m_nMP
1 gogogogo 900 120
2 Admin 800 130
3 junno 200 180
4 momo 1000 2000



□ 컬럼명에 별칭
SELECT m_nPlayer AS PlayerNO, m_szName AS NAME FROM CHARACTER_TBL

PlayerNO NAME
1 gogogogo
2 Admin
3 junno
4 momo



□ 테이블명에 별칭
SELECT * FROM CHRACTER_TBL AS C

이렇게 별칭을 지정할 수 있습니다.

반응형
반응형

안녕하세요.

테이블에 데이터를 삭제하기 위해서 다음과 같은 쿼리를 사용합니다.

문법
DELETE FROM 테이블명 WHERE 조건식

"WHERE 조건식"을 제외하면 모든 데이터를 삭제합니다.

예제

만약 CHARACTER_TBL이 다음과 같다면,

m_nPlayer m_szName m_nHP m_nMP
1 gogogogo 600 120
2 Admin 900 130
3 jjuuii 900 180
4 hoho 1000 2000

DELETE FROM CHARACTER_TBL WHERE m_nHP = 900
->  m_nHP가 900인 데이터가 삭제됩니다.

 

결과값

m_nPlayer m_szName m_nHP m_nMP
1 gogogogo 600 120
4 hoho 1000 2000
반응형

+ Recent posts