'프로그래밍/C 언어'에 해당되는 글 5건

  1. 2024.02.17 [C] 제어(1) - 조건문 -
  2. 2024.02.16 [C] 연산자
  3. 2024.02.15 [C] 상수와 변수
  4. 2024.02.14 [C] 기본적으로 지원해주는 출력
  5. 2024.02.13 [C] 기본 구조 1

 C에서는 동작하는 과정을 나눠지는 기능으로 제공하는 '조건문'이 있다.

 참과 거짓으로 처리하는 if문과 특정 값에서 이동하는 switch문이 있다.

 

 if문

 if문은 if( 조건 ) 으로 구성되며, 조건이 참(0이외의 값)과 거짓(0)으로 적용된다.

1
2
3
if( a ){
 // a가 1이상일경우.
}
cs

 

이렇게 되면, // a가 1이상일 경우에 관련된 동작을 작업할 수 있다.

조건에 맞지 않을 경우엔 else을 사용한다.

1
2
3
4
5
if( a ){
 // a가 1이상일경우.
}else{
 // a가 0일 경우.
}
cs

 

여기서 조건이 맞지 않았지만, 다른 조건일때 처리하는 방법으론 else뒤에 if(조건)을 넣는다.

1
2
3
4
5
6
7
if( a ){
 // a가 1이상일경우.
}else if( b ){
 // a가 0이지만, b는 1이상일 경우.
}else{
 // a와 b가 모두 다 0일 경우.
}
cs

 

여기서 이런 경우가 있을 수 있다.

 a가 1, 2, ,3 ,4가 될 경우가 있다고 해보자.

그러면, if문을 사용할 경우엔 다음과 같아진다.

1
2
3
4
5
6
7
8
9
if( a == 1 ){
 // a가 1일때
}else if( a == 2 ){
 // a가 2일때
}else if( a == 3 ){
 // a가 3일때
}else if( a == 4 ){
 // a가 4일때
}
cs

 

이럴때, if else로 조건문을 매번 확인해서 이동하는 것이 아니라.

특정 값에만 이동하도록 만드는 방법이 있는데.

그것이 바로 switch문이다.

 

switch문은 다음과 같이 적용된다.

1
2
3
4
5
6
7
8
9
switch( 값 ){
case 특정값:{
    break;
}
default:{
    // 값이 프로그래머가 정의 내리지 않는 값일 경우.
    break;
}
}
cs

 

이걸 전체적으로 다 적용한다면, 다음과 같이 된다.

 
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>
 
#include <stdlib.h>
 
int main(int argc, char** argv){
    unsigned int a = 0;
    unsigned char steps = atoi(argv[1]);
 
    if(steps > 3){
        a = 100;
    }else{
        switch(steps){
        case 0:{
            a++;
            break;
        }
        case 1:
        case 2:{
            a = 5;
            break;
        }
        case 3:{
            a = 15;
            break;
        }
        }
    }
    printf("a: %d", a);
    return 0;
}
 
cs

 

 

 이렇게 하면,

 실행파일 뒤에 추가적으로 넣은 argv의 값을 보고(숫자가 들어가야된다.), 그 값에 맞춰서 a의 값을 정하여 값이 출력하게 된다.

 

'프로그래밍 > C 언어' 카테고리의 다른 글

[C] 연산자  (0) 2024.02.16
[C] 상수와 변수  (0) 2024.02.15
[C] 기본적으로 지원해주는 출력  (0) 2024.02.14
[C] 기본 구조  (1) 2024.02.13
Posted by JunkMam
,

 컴퓨터는 계산을 해주는 존재이고, 그걸 명령하기 위한 코드를 작성하는 것 중에 하나가 C언어이다.

 그래서, C에서는 간단한 연산자를 제공해준다.

 간단하게 사칙연산(+, -, *, /)와 나머지를 계산(%)이 있다.

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
#include <stdio.h>
 
int main() {
    int a = 4;
    int b = 3;
 
    int sum = 0;
    int sub = 0;
    int mul = 0;
    int div = 0;
    int mod = 0;
 
    // 덧셈
    sum = a+b;
    // 뺄셈
    sub = a-b;
    // 곱셈
    mul = a*b;
    // 나눗셈
    div = a/b;
    // 나머지
    mod = a%b;
 
    printf("덧셈 %d\n", sum);
    printf("뺄셈 %d\n", sub);
    printf("곱셈 %d\n", mul);
    printf("나눗셈 %d\n", div);
    printf("나머지 %d\n", mod);
 
    return 0;
}
 
cs

 

결과는 다음과 같이 나온다.

 

관계 연산자로 두개의 변수를 비교해서 참과 거짓을 표시하는 연산자이다.

같음, 다름, 미만, 초과, 이하, 이상(==, !=, <, >, <=, >=)을 적용할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main() {
    int a = 4;
    int b = 3;
 
    printf("같음 %d\n", a==b);
    printf("다름 %d\n", a!=b);
    printf("미만 %d\n", a<b);
    printf("초과 %d\n", a>b);
    printf("이하 %d\n", a<=b);
    printf("이상 %d\n", a>=b);
 
    return 0;
}
 
cs

 

논리 연산자로 한개 이상의 변수 혹은 조건들을 평가할때, 사용된다.

AND, OR, NOT(&&, ||, !)으로 조건문이나 반복문 같이 '조건'에 사용된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main() {
    int a = 4;
    int b = 3;
 
    printf("AND %d\n", (a==b)&&(a<b));
    printf("OR %d\n", (a==b)||(a<b));
    printf("NOT %d\n"!(a<b));
 
    return 0;
}
 
cs

 

 

비트 연산자는 변수를 이진수로 보고, 그걸 연산하는 용도로 사용된다.

AND, OR, XOR, NOT, 왼쪽 Shift, 오른쪽 Shift(&, |, ^, ~, <<, >>)로 하드웨어 연산 및 암호등 다양한 곳에 사용된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main() {
    int a = 4;
    int b = 3;
 
    printf("AND %d\n", a&1); //(B00000100) & (B00000001) = B00000000(0)
    printf("OR %d\n", a|1); // (B00000100) | (B00000001) = B00000101(5)
    printf("XOR %d\n", a^1); // (B00000100) ^ (B00000001) = B00000101(5)
    printf("NOT %d\n", ~a); // ~(B00000100) = (B11111011)(-5)
    printf("<< %d\n", a<<1); // (B00000100) << (B00000001) = B00001000(8)
    printf(">> %d\n", a>>1); // (B00000100) >> (B00000001) = B00000010(2)
 
    return 0;
}
 
cs

 

대입연산자(=)는 간단하게 변수에 데이터를 저장하는 연산자이다.

거기서 C는 간단한 연산을 덧붙여서 간단하게 표현할 수 있는 기능을 제공하는데.

원래 있던 변수 a에서 5을 더한다거나, 할때 a = a+5을 더 줄여서 a+=5로 작성할 수 있다.

이건 모든 대부분의 연산자들에게 적용이 된다.

 

위와 동일하게 증감 연산자라고해서 1씩 증가시켜야 되는 경우(반복문등으로 시그마, 파이, 수열 등 급수 연산할때) 사용이 되는 ++, --도 지원해준다.

 

 

 

 

'프로그래밍 > C 언어' 카테고리의 다른 글

[C] 제어(1) - 조건문 -  (0) 2024.02.17
[C] 상수와 변수  (0) 2024.02.15
[C] 기본적으로 지원해주는 출력  (0) 2024.02.14
[C] 기본 구조  (1) 2024.02.13
Posted by JunkMam
,

 C에서는 수를 정의 하거나, 값을 저장할 수 있는 기능을 제공한다.

 C에서는 수를 정의하는 것으로는 매크로라는 것으로

 '#define'을 사용한다.

1
2
3
 
#define PI 3.14
#define POW(x) ((x)*(x))
cs

 

이렇게 사용이 가능하다.

PI는 3.14라는 상수를 정의해주고, POW라는 것은 제곱을 표현하게 된다.

 

매크로는 특정 문자을 복사해서 덮어 씌우는 것으로 다음과 적용하는 것과 동일하게 할 수 있다.

 

1
2
3
4
5
6
7
8
#define PI 3.14
 
int main(int argc, char** argv){
    3.14+1;
    PI+1;
 
    return 0;
}
cs

 

3.14+1과 PI+1은 동일한 결과물을 가진다.

그렇다면, 매크로를 사용하는 이유가 무엇일까?

예을 들어서 (x+1)(x+2)...(x+100)이런식의 글을 작성되어 있다고 한다면,

x = 1일때, (1+1)(1+2)...(1+100)이렇게 가능하듯이.

#define X라는 것을 정의 해놓는다고 한다면,

(X+1)(X+2)...(X+100)이렇게 되었을때,

#define X 1

 

이렇게 하면, X=1일때 이런식으로 선언해서 사용할 수 있게 되는 것이다.

즉, 반복적으로 사용될 '상수'를 정의내려서 적용할 수 있다.

반대로 특정 연산을 정의 내려서 처리할 수 있다.

위에 작성한

#define POW(x)가 그것이다.

여기서 POW(x)는 '매크로 함수'라고 칭하며, 함수처럼 x라는 매개 변수를 받아서 '연산'을 복사한다.

 

단순한 연산이지만 자주 사용될 '연산'은 '매크로 함수'를 사용해서 컴파일러가 자동으로 복사 할 수 있다.

 

C는 계산한 결과를 저장하는 기능도 제공해준다.

이걸 '변수'라고 칭하며, 종류를 정해져있다.

C에서 기본적으로 제공해주는 '변수'의 종류는 다음과 같다.

 

변수 유형 설명 범위 예시
char 단일 문자를 저장하거나, 정수형으로 데이터 최소 단위이다. -128 ~ 127 char ch = 'A';
char baseNum = 200;
int 정수를 저장하는 기본 데이터 유형 Bit에 따라서 범위가 달라짐.
16Bit: -32768 ~ 32767
32Bit: -2147483648 ~ 2147483647
int num = 100;
flaot 실수를 저장하는데 사용되며, 단정밀도 부동 소수점 수를 나타낸다. 1.175494351 E - 38 ~ 3.402823466 E + 38 float realNum = 3.14f;
double 실수를 저장하는데 사용되며, 배정밀도 부동 소수점 수를 나타낸다. 2.2250738585072014 E - 308 ~ 1.7976931348623158 E + 308 double realNums = 3.14;
short 정수를 저장하는 데이터 유형. int보다 적은 범위를 저장한다.
16bit일때랑 똑같다.
-32768 ~ 32767 short num = 100;
long 정수를 저장하는 데이터 유형.
int보다 큰 범위를 저장한다.
64bit이상일때 사용됨.
-2,147,483,648 ~ 2,147,483,647 long num = 100;

 

 

여기서 접두사가 무엇이 붙냐에 따라서 변수의 상태가 달라지는 경우가 있다.

예을 들어서 unsigned가 있다.

unsigned란, 부호가 존재하지 않는 것으로 변수 유형에서 범위를 무조건 상수로 적용된 상태를 뜻한다

unsigned char라면, 0~255까지 지원하는 것 처럼 적용이 된다.

 

C와 C++같은 언어들은 컴파일러마다 다르지만, 실수랑 정수를 그냥 연산할 경우 정수 기준으로 계산이 되어서 결과를 저장하는 경우가 있다.

 

예을 들어서 int a = 1; float b = 3.14f;라는게 있다면,

a+b를 하면, 4가 결과물로 저장하게 된다.

이 경우 (a*1.0)+b을 사용해줘야한다.

 

예을 들어서 다음과 같이 적용했는데. 소수점이 0이 된다면, 컴파일러와 CPU가 그것을 지원해주지 않는 경우라고 이해하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
#define PI 3.14
 
int main() {
    int a = 1;
    float b = PI;
 
    float c = a+b;
    float d = (a*1.0)+b;
 
    printf("%f\n", c);
    printf("%f\n", d);
 
    return 0;
}
 
cs

 

'프로그래밍 > C 언어' 카테고리의 다른 글

[C] 제어(1) - 조건문 -  (0) 2024.02.17
[C] 연산자  (0) 2024.02.16
[C] 기본적으로 지원해주는 출력  (0) 2024.02.14
[C] 기본 구조  (1) 2024.02.13
Posted by JunkMam
,

 C언어에서는 프로그래머가 출력하는 것을 간단하게 지원해주는 장치가 있다.

 그걸 사용하기 위해서 지원해주는 라이브러리로 'stdio.h'[Standard I/O]이다.

 

 stdio.h을 사용한 간단한 예제 코드를 작성해보자.

1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main(int argc, char** argv)
{
    printf("Hello, World!\n");
 
    return 0;
}
 
cs

 

이것은 printf라는 함수를 이용해서 간단한 문장을 작성한 것이며, \n은 '개행 문자'라고하여, 다음 줄로 넘어간 후 콘솔의 첫번째 위치로 이동하는 걸 뜻한다.

 특수 문자 및 특수 기능을 하는 것은 '\'을 붙여서 작성한다.

 

 예을 들어서 Hello, World!을 쌍따옴표(")에 둘려 싸게 하고 싶다면,

1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main(int argc, char** argv)
{
    printf("\"Hello, World!\"\n");
 
    return 0;
}
 
cs

 

printf말고 다양한 출력 기능이 있는데.

puts(put string)과, putchar(put character)가 있다.

puts는 문자열을 출력한 후 끝에 "\n"을 붙여주고,

putchar는 한 글자씩 출력한다.

 

puts의 예제

1
2
3
4
5
6
7
#include <stdio.h> 
 
int main() {
    puts("Hello, World!");
    return 0;
}
 
cs

 

 

putchar의 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main() {
    putchar('H');
    putchar('e');
    putchar('l');
    putchar('l');
    putchar('o');
    putchar(',');
    putchar(' ');
    putchar('W');
    putchar('o');
    putchar('r');
    putchar('l');
    putchar('d');
    putchar('!');
    putchar('\n');
 
    return 0;
}
 
cs

 

 

이렇게 된다.

이런 함수들은 컴퓨터에는 문제가 되지 않지만, 그 외 기기들에게는 구현되지 않는 경우가 있다.

출력하기 위한 방식은 특정 메모리, 혹은 파일에 저장시킨 후 그 정보를 해당 기기에 전송하는 방식이다.

 

통신을 통한다. 라는 것인데.

컴퓨터의 C언어에서 유사한걸 코드를 작성할 수 있다.

 

파일 방식으로 화면에 출력하는 방법.

1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main() {
    const char msg[] = "Hello, World!\n";
    fwrite(msg, sizeof(char), sizeof(msg) - 1, stdout);
 
    return 0;
}
 
cs

 

stdout은 stdio.h에서 지원해주는 출력용 파일이고, stdout은 모니터 및 OS에서 인식하는 출력 장치에 해당 데이터를 출력하도록 만든다. 그래서 printf나 puts와 동일하게 콘솔에 해당 문자열이 출력하게 된다.

 

 

'프로그래밍 > C 언어' 카테고리의 다른 글

[C] 제어(1) - 조건문 -  (0) 2024.02.17
[C] 연산자  (0) 2024.02.16
[C] 상수와 변수  (0) 2024.02.15
[C] 기본 구조  (1) 2024.02.13
Posted by JunkMam
,

 C언어는 절차적 언어에서 대표적인 언어이다.

 여기서 절차적 언어란, 실행한 동작을 실행하는 것으로 순서에 맞춰서 동작하는 것을 뜻한다.

 

 C언어는 기본적으로 함수로 이루어져 있으며, 함수란 '기능'들을 정의한 것을 뜻한다.

 

 대표적으로 프로그램이 동작하면, 먼저 실행되는 함수로 main이라는 함수가 존재한다.

 그래서 C언어를 먼저 작성할때, 다음과 같은 방식으로 소스가 구성된다.

1
2
3
4
int main(int argc, char** argv){
    return 0;
}
 
cs

 

 여기서 int 는 반환할 데이터의 크기를 뜻하고, main은 함수명, argc는 프로그램이 동작하기 전에 들어오는 명령들의 갯수를 뜻한다. argv는 프로그램이 실행하면서 프로그램에게 준 명령들을 뜻한다.

 return은 프로그램이 종료된 후에 운영체제 혹은 프로그램을 실행한 존재에게 값을 전송하는 것으로 '반환'하는 정보를 뜻한다.

 

 그래서 장치를 실행 시키면, 다음과 같은 창을 만들 수 있다.

 

 

 간단하게 특정 프로그램을 실행 시켜서 값을 나오게 하는 예시를 작성한다면,

1
2
3
4
int main(int argc, char** argv){
    return 1+1;
}
 
cs

 

이렇게 하면, 해당 프로그램을 실행시킨 후 반환되는 값은 1+1로 2라는 값을 반환하게 되며, CMD나 Powershell 같은 프로그램 실행한 개체가 그 값을 받아서 다른 작업을 하는데 사용 할 수 있다.

 

 C언어는 콘솔 환경(명령 프로토콜로 동작하는 Shell 환경에서 동작하는 장치)에 맞춰진 프로그램 언어였다.

 그래서, 요즘과는 익숙하지 않지만, CMD나 PowerShell등 Shell 환경에서 동작하면, 다음과 같이 작업이 가능하다.

 예시로

 PowerShell에서 적용한 예시.

 

 이렇게 해서 반환해서 출력한 후에 결과물을 보고 다음 작업을 할 수 있게 한다.

 

 내부에서 함수를 다양하게 만들어서 동작시키면 되기 때문에 이렇게 단순하게 적용하진 않지만, return에 0을 맞춰서 반환하도록 한다.

 이유는 컴퓨터에서 해당 프로그램을 실행한 대상자가 프로그램이 이상없이 종료가 되었는지 확인하여 대처하기 위함이다.

 

 argc는 'argument count'라는 것으로 프로그램이 실행할때 shell에 적용한 명령어들의 갯수를 세는 것으로 프로그램을 실행한 C_Base.exe라는 전달인자 1개가 무조건 들어가기 때문에 값이 1 이상이된다.

1
2
3
4
5
int main(int argc, char** argv)
{
    return argc;
}
 
cs

 

 

 이렇게 된다.

 

 argument를 더 넣는다면, 다음과 같다.

 

 ※ 여기서 argument의 갯수를 찾기 위해서 'Start-Process'라는 명령어를 사용하고 있지만, 원래는 '.\C_Base.exe a b c' 이런식의 명령을 줬을때 반환값이 저런식으로 들어간다는 것이다.

 

 argv는 'argument values' 전달 인자들의 값을 저장한다.

 이걸 간단하게 테스트하기 위해선 문자열을 반환하는 것보단 #include <stdio.h>[Standard IO Header File]을 이용해서 간단하게 출력을 해서 확인 할 수 있다.

 

 ※ Standard IO는 C언어를 제작한 개발 측에서 제공해주는 출력 및 입력에 관련된 함수들을 저장한 헤더 파일이다.

 

 다음과 같이 작성해서 확인이 가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(int argc, char** argv)
{
    int argcLoop = 0;
    printf("argc: %d\n", argc);
 
    for(argcLoop = 0; argcLoop < argc; ++argcLoop){
        printf("argv - %d: %s", argcLoop+1, argv[argcLoop]);
    }
 
    return 0;
}
 
cs

 

이 코드는 argument[전달인자]의 값을 받아서 몇 번째에 어떤 전달 인자가 들어가 있는지 출력하는 코드이다.

이 코드로 만든 프로그램을 인자 없이 실행 시켜보면,

 

 이렇게 실행 프로그램에 관련된 경로가 전달 인자에 들어가 있는걸 알 수 있다.

 이후에 더 많은 인자를 넣으면 다음과 같이 출력이 되는걸 확인 할 수 있다.

 

 띄워쓰기나 줄 바꿈을 넣지 않은 상태여서 확인을 하기 어려움이 있지만,

 argv - 을 기준으로 나눠서 보면, Shell에서 프로그램을 실행하기 전에 전달한 인자들이 출력되는걸 확인 할 수 있다.

 

 여기서 shell 명령까지 연결해서 작업을 하면,

 

 이렇게 Shell에게 특정 인자를 받아서 프로그램을 동작시키는 기능 등을 제작 할 수 있다.

'프로그래밍 > C 언어' 카테고리의 다른 글

[C] 제어(1) - 조건문 -  (0) 2024.02.17
[C] 연산자  (0) 2024.02.16
[C] 상수와 변수  (0) 2024.02.15
[C] 기본적으로 지원해주는 출력  (0) 2024.02.14
Posted by JunkMam
,