[2025.03.07] C언어 찍먹하기

2025. 3. 7. 19:19·C/본수업

오늘은 C 언어를 배워봄. 근데 책이 아직 없어서 맛보기로다가 찍먹함 ㅎ

 

[C언어]

  • 저급(low-level) 언어 (= 기계가 이해하기 쉬운 언어, 컴퓨터와 가까운 언어)
  • 절차 지향 언어 ===> class가 없음.
  • (프로젝트가 커지면 객체 지향이 좋다고 함. 왜인진 아직 모름ㅎ. class가 있으면 class 단위로 관리가 편하다구?? 그게 C++ 이라구??)
  • 프로그램 없이 작동 ==> 컴파일 언어 ==> c코드를 컴파일을 하고 실행파일이 생성되면 그것을 실행함.
  • 어려운 언어
  • 컴파일 언어 ==> 빠름
  • (컴파일러를 설치해서 컴파일 했을때 나온 실행파일을 실행함. A 컴퓨터에서 컴파일해서 나온 컴파일 파일을 컴파일러가 없는 B 컴퓨터에서도 작동함. 하지만 OS가 다르면 작동X. ===> 코드를 통으로 보내주는게 좋음.)
  • (인터프리터는 A 컴퓨터에서 하고, 인터프리터가 없는 B 컴퓨터에서는 작동하지X)

 

[C 프로그램의 특징]

  • C 프로그램의 기본 단위는 함수
  • 함수 내의 한줄 한줄이 세미콜론(;)으로 구분되어야 함.
  • 대소문자 구분 (Python과 동일)
  • 주석 : //
  • 여러 줄을 주석 처리하는 경우는 처음에 /* 를 쓰고 마지막에 */를 써주면 됨.
  • C언어는 무조건 main 함수를 int로 선언해줘야 함!!!!!
  • main 함수가 없으면 그 파일을 실행시킬 수 없음. main 함수는 1개만 존재해야 함.
  • 전역 변수 선언만 main 함수 밖에서 선언
  • main 함수는 실행될 때 자동으로 호출되기 때문에, 따로 호출하지 않아도 됨.
  • 중괄호{}가 들어가야함. 그냥 들여쓰기는 의미가 없음. 중괄호 필수!! 
  • 덩어리를 구분하는 것은 중괄호, 줄이 끝난 것은 세미콜론
  • 무조건 return 0;을 마지막에 적어줘야함. (종료코드임!)

 

[printf() 함수]

  • 출력해주는 함수
  • printf() 함수는 포매팅을 사용함. (python에서는 그냥 print 였는데, C언어는 printf인 것을 기억! f는 포매팅할 때 f임!)
#include <stdio.h> //pirntf를 가져와서 쓰기 위해 적어줘야 함. (standard input output) 헤더파일임.
// C는 무조건 main 함수를 int로 선언해줘야함.
// main 함수가 없으면 그 파일을 실행시킬 수 없음. main 함수는 1개만 있어야함.
// 전역 변수 선언만 main 함수 밖에서 지정
// main 함수는 실행될 때 자동 호출이 됨. ===> 호출하지 않아도 됨.
// 중괄호{}가 들어가야함. 들여쓰기가 의미가 없어짐.
// 덩어리를 구분하는 것은 중괄호, 줄이 끝난 것은 세미콜론;
// 무조건 return 0;을 해줘야함. (종료코드임.)

// printf() 함수
// %포매팅을 사용함.


int main() {
    printf("Hello, C!\n");
    printf("printf() 함수는 서식 지정자를 통해 출력할 데이터의 서식을 지정할 수 있어요!\n");
    printf("변수에 저장된 숫자는 %d입니다.\n", 10);
    printf("제 이름은 %s 입니다.\n", "Polibo");
    printf("지금은 %d시 %d분 입니다.\n", 14, 36);

    return 0;
}

 

 

 

  • C언어도 python처럼 서식 지정자를 통해 출력 데이터 별로 출력 가능
서식 지정자 출력 데이터 형태
%c 하나의 문자
%s 문자열
%d 부호 있는 10진 정수
%i 부호 있는 10진 정수 (%d와 동일)
%f 고정 소수점으로 표현한 실수 (소수점 이하 6자리까지 표현)
%o 부호 없는 8진 정수
%u 부호 없는 10진 정수
%x 부호 없는 16진 정수 (소문자 사용)
%X 부호 없는 16진 정수 (대문자 사용)
%e 부동 소수점으로 표현한 실수 (e-표기법)
%E 부동 소수점으로 표현한 실수 (E-표기법)
%g 값에 따라 %f나 %e를 사용함.
%G 값에 따라 %f나 %E를 사용함.
%% 퍼센트(%) 기호 출력

[Table. 1] 서식 지정자

 

 

  • [주의] python에서는 문자, 문자열을 나타낼 때 작은 따옴표('')와 큰 따옴표("") 모두 사용 가능했는데, C언어는 구분함!! 
  • 작은 따옴표는 문자를 나타낼 때 사용하고, 큰 따옴표는 문자열을 나타낼 때 사용!!
#include <stdio.h> 
int main() {
    // 작은 따옴표('')는 문자를 나타낼 때 사용
    // 큰 따옴표("")는 문자열을 나타낼 때 사용
    printf("%%c를 사용한 결과: %c\n", 'a');    // %c: 문자
    printf("%%s를 사용한 결과: %s\n", "Polibo");   // %s: 문자열

    printf("%%f를 사용한 결과: %f\n", 1.23456789);  // 소수점 6자리까지만 표현
    printf("%%f를 사용한 결과: %f\n", 5.1);

    printf("%%o를 사용한 결과: %o\n", 123);   // 8진 정수
    printf("%%x를 사용한 결과: %x\n", 123);   // 16진 정수

    printf("%%g를 사용한 결과: %g\n", 0.001234);   // 값에 따라 %f나 %e
    printf("%%g를 사용한 결과: %g\n", 0.00000000000001234);
    printf("%%G를 사용한 결과 : %G\n\n", 0.000001234);    // 값에 따라 %f나 %E


    printf(" %%d를 사용한 결과 : |%d|\n", 123);
    printf(" %%7d를 사용한 결과 : |%7d|\n", 123);
    printf(" %%+7d를 사용한 결과 : |%+7d|\n", 123);
    printf(" %%-7d를 사용한 결과 : |%-7d|\n\n", 123);
    printf(" %%f를 사용한 결과 : |%f|\n", 1.23);
    printf(" %%.1f를 사용한 결과 : |%.1f|\n", 1.23);
    printf(" %%7.2f를 사용한 결과 : |%7.2f|\n", 1.23);
    printf("%%+7.2f를 사용한 결과 : |%+7.2f|\n", 1.23);
    printf("%%-7.2f를 사용한 결과 : |%-7.2f|\n\n", 1.23);


    return 0;
}

 

 

 

 

[scanf() 함수]

  • scanf() 함수는 python에서 input 함수와 비슷하게 입력을 받는 함수임.
  • & : int, float와 같은 숫자형을 받을 때, 변수 앞에 붙임.
  • &를 붙이지 않고 실행하면 error 발생
#include <stdio.h> 
int main() {
    // scanf() 입력을 받는 함수
    // %d로 받으면 int로 받음.
    // & : int, float 같은 숫자형을 받을 때, 변수 앞에 붙임.
    // & 붙이지 않고 실행하면 erorr 발생

    int num_1, num_2;

    printf("첫 번째 정수를 입력하세용 : ");
    scanf("%d", &num_1);

    printf("두 번째 정수를 입력하세용 : ");
    scanf("%d", &num_2);

    printf("입력하신 두 정수의 합 : %d\n\n", num_1 + num_2);

    // ================================================

    int num_3, num_4;

    printf("두 개의 정수를 입력하세용 : ");
    scanf("%d %d", &num_3, &num_4);
    printf("입력하신 두 정수를 8진수로 나타내면 %o와 %o가 되고,\n", num_3, num_4);
    printf("입력하신 두 정수를 16진수로 나타내면 %x와 %x가 됩니다.\n\n", num_3, num_4);

    // ================================================

    float num_5;
    double num_6;
    // scanf() 함수로 double형 실수를 입력받을 때는 반드시 '%lf'를 써야함.

    printf("두 개의 실수를 입력하세요 : ");
    scanf("%f %f", &num_5, &num_6);
    printf("입력하신 두 실수는 %f와 %f 입니다.\n", num_5, num_6);
    printf("입력받은 두 실수 중 두번째 double형 변수에는 전혀 다른 값이 저장되었습니다.\n\n");

    printf("다시 한 번 두 개의 실수를 입력하세요 : ");
    scanf("%f %lf", &num_5, &num_6);
    printf("입력하신 두 실수는 %f와 %f입니다.\n", num_5, num_6);
    printf("이번에는 두 실수 모두 제대로 저장되었습니다.\n\n");

    return 0;
}

 

  • 출력 결과 중 실수 입력하는 부분을 보면, double형인 num_6를 float형 %f에 받아 값이 이상해지는 것을 볼 수 있음.
  • double형은 %lf를 사용하여 값을 받아야함!! 

 

 

 

 

[변수]

  • 변수(variable)란 데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미함.
  • 즉, 변수란 데이터(data)를 저장할 수 있는 메모리 공간을 의미하며, 이렇게 저장된 값은 변경될 수 있음.
  • 정수형 변수와 실수형 변수로 구분
  • 정수형 변수 : char형, int형, long형 변수
  • 실형 변수 : float형, double형
  • 변수 이름 생성 규칙
    • 숫자로 시작X, 한글X(권장)
    • 변수 이름 사이의 공백X
    • Keyword 사용X
  • (goto는 쓰지마세요. 쓰면 안좋아여,, 그렇다는데 이유는 모름 ㅎ)
auto break case char const continue default
do double else enum extern float for
goto if int long register return short
signed sizeof static struct switch typeof union
unsigned void volatile while      

[Table. 2] C언어의 keyword

 

 

  • 변수는 선언할 때 앞에 어떤 type인지 쓰고 변수이름을 적어줌.
  • 변수를 선언만 하고, 초기화를 하지 않으면, 쓰레깃값이 들어가있음.
  • 여러개의 변수 한 번에 선언도 가능함. (BUT, 선언하고자 하는 변수의 type이 다르면 동시 선언 불가능!!)
  • num = 1에서 num 이라는 것은 변수라고 하고, 1은 리터럴(literal) 이라고 함.
#include <stdio.h>
int main() {
    // 선언과 초기화
    // int num_1; // 뒤에 세미콜론을 붙이면 선언, 이거는 초기화한 것이 아니기 때문에 쓰레깃값이 들어가 있음.
    // num = 0; // num을 0으로 초기화, 이제 num은 int형만 됨. 한 변수 명에는 같은 자료형만 들어가야 함.
    // print("선언만 하고 초기화는 안한 경우 : %d", num_1);
    int num_1 = 0; // 이렇게 선언과 초기화를 한번에 할 수 있음.
    printf("선언 및 초기화를 한 경우 : %d\n", num_1);

    int num_2 = 10, num_3 = 100;
    printf("%d, %d\n", num_2, num_3);

    return 0;

}

 

 

 

 

 

[상수]

  • 상수(constant)도 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간을 의미함.
  • 하지만, 상수는 프로그램이 실행되는 동안 상수에 저장된 데이터는 변경할 수 X
  • 상수를 사용할 때에는 선언과 초기화를 동시에 해줘야 함.
  • 아래 코드처럼 상수의 값을 변하게 하면 error 발생함.
#include <stdio.h>
int main() {
    // int num = 0;
    const int num = 0; // const는 상수임. 상수는 변하지 않아야 함.
    // 상수를 쓸 때에는 선언과 초기화를 동시에 해줘야 함.
    num++;

    printf("%d", num);
    return 0;
}

 

 

 

 

[정수형, 실수형, 문자형 타입]

  • 1byte = 8bits ==> 2^8
  • 범위가 벗어나는 값을 입력하면 제일 처음 값을 출력함.
  • ex) (signed) short 에 32767+1을 넣으면 -32768이 출력됨.
정수형 타입 할당되는 메모리 크기 데이터의 표현 범위
(signed) short 2byte - 32,768 ~ 32,767
unsigned short 2byte - 0 ~ 65,535
(signed) int 4byte - 2,147,483,648 ~ 2,147,483,647
unsigned int 4byte - 0 ~ 4,294,967,296
(signed) long 8byte 엄청 큼..
unsigned long 8byte 엄청 큼..
#include <stdio.h>
int main() {
    // 정수형 타입
    // short // 2bytes ==> 2^16 (65536개)
    // (unsigned 부호없음) short ==> 0 ~ 65535 (65536개)
    // (signed) short ==> -32768 ~ 32767 (65536개)
    // int // 4bytes  ==> 2^32 음수21억 ~ 양수21억
    // 만약 40억짜리를 써야한다 ==> unsigned int를 쓰면 됨
    // long // 8bytes ==> 2^64 1844경
    // 범위가 넘어가면 초기화됨
    // ex) int의 2,147,483,647 에서 1이 넘어가게 되면 - 2,147,483,648이 됨.
    // 부호가 있는 애들은 제일 앞의 bit가 부호 비트임.(0이면 (+), 1이면 (-))

    unsigned short num_1 = 65535;
    printf("unsigned short : %d\n", num_1);
    num_1++;
    printf("unsigned short : %d\n", num_1);

    short num_2 = -32768;
    printf("short : %d\n", num_2);
    num_2--;
    printf("short : %d\n", num_2);

    unsigned int num_3 = 2147483647;
    printf("unsigned int : %d\n", num_3);
    num_3++;
    printf("unsigned int : %d\n", num_3);

    int num_4 = -2147483648;
    printf("int : %d\n", num_4);
    num_4--;
    printf("int : %d\n", num_4);

    unsigned long num_5 = 4294967296;
    printf("unsigned long : %lu\n", num_5);
    num_5++;
    printf("unsigned long : %lu\n", num_5);

    long num_6 = -9999999999999999999;
    printf("long : %li\n", num_6);
    num_6--;
    printf("long : %li\n", num_6);

    

    // 실수형 타입
    float num01 = 3.1415926535897932;  // float 타입의 유효 자릿수는 소수점 6자리
    printf("변수 pi에 저장된 값은 %.20f입니다.\n", num01);    

    double num02 = 3.1415926535897932; // double 타입의 유효 자릿수는 소수점 16자리
    printf("변수 pi에 저장된 값은 %.20f입니다.\n", num02);



    // 문자형 타입
    char ch = 'a';
    printf("변수 ch에 저장된 값은 %c입니다.\n", ch);
    printf("변수 ch에 저장된 값은 %d입니다.\n", ch);



    return 0;
}

 


오늘 배운 찍먹 C언어를 열심히 정리해봤다! 이번 주말에는 C언어 반복문까지 예습하기!!! 

내일 나와서 열심히 해봐야지~~~ 나의 주말을 반납하겠도다!!!

'C > 본수업' 카테고리의 다른 글

[2025.03.10] Ch.03_데이터와 C  (0) 2025.03.10
[2025.03.10] Ch.02_C 첫걸음  (0) 2025.03.10
[2025.03.10] Ch.02_C 첫걸음_연습문제  (0) 2025.03.10
[2025.03.10] C언어 찍먹하기_2  (0) 2025.03.10
[2025.03.07] 컴퓨터 구조  (0) 2025.03.07
'C/본수업' 카테고리의 다른 글
  • [2025.03.10] Ch.02_C 첫걸음
  • [2025.03.10] Ch.02_C 첫걸음_연습문제
  • [2025.03.10] C언어 찍먹하기_2
  • [2025.03.07] 컴퓨터 구조
polibo
polibo
Polibo의 개발 성장기 지켜봐주십슈 (콩 싫어해요.)
  • polibo
    Polibo와 개발 콩나무 키우기
    polibo
  • 전체
    오늘
    어제
    • 분류 전체보기 (65)
      • Python (23)
      • C (32)
        • 본수업 (19)
        • 예습 (7)
        • 개인프로젝트01 - 로또 (3)
        • 개인프로젝트02 - 복켓몬 키우기 (2)
        • 개인프로젝트03 - 김복천국 POS기 (1)
        • 팀프로젝트01 - 용사 복이의 대모험 RPG (0)
        • 팀프로젝트02 - 메일 프로그램 (0)
      • TCP_IP (0)
      • DB (1)
      • C++ (7)
        • 개인프로젝트01 - 숫자야구 (0)
      • QT (1)
        • 개인프로젝트01 - 숫자야구 (0)
        • 팀프로젝트01 - 키오스크 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    반복문
    파이썬예제
    C
    파이썬조건문
    파이썬게임
    while문
    c언어 scanf
    else if
    if문
    파이썬 숫자야구
    for문
    파이썬반복문
    코딩
    문자열
    조건문
    순서도
    c우선순위
    Python
    c언어
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
polibo
[2025.03.07] C언어 찍먹하기
상단으로

티스토리툴바