본문 바로가기

C Study

01] C언어 기본 구조, 변수, 자료형, 입출력

[기본 구조]

#include<stdio.h>

int main(){

	return 0;
}

- C언어를 사용하여 프로그래밍을 할 때 가장 기본적으로 작성되는 구조

01] #include <stdio.h>

- # : 전처리기로, 컴파일 하기 전에 < > 안에 있는 것을 include한다는 의미

- stdio.h

: standard input output 의 줄임말로, 표준 입출력 헤더파일이다

: stdio.h를 include 하면 입출력, 반복문, 조건문 등 C컴파일러가 제공하는 표준 함수들을 사용할 수 있다

02] int main()

- C프로그램은 main함수에서부터 실행된다

- main함수는 { }로 감싸져 있으며, 이는  함수의 시작과 끝을 의미한다

: { } 안에 실행하고자 하는 명령을 작성한다

- int main 중 int는 return 값의 자료형을 나타낸다

: 따라서 main의 return 값은 정수라는 것을 알 수 있다

03] return 0;

- return은 함수의 return값을 전달함과 동시에 현재 실행 중인 함수를 끝내는 기능을 한다

: return 0; 이후의 코드는 실행되지 않는다

- 일반적으로 0을 return하면 해당 함수가 에러 없이 정상적으로 종료되었다는 것을 의미한다 

04] ;

- 문장을 작성할 때 마침표를 붙이듯이, C언어에서는 ;을 사용해 하나의 구문이 끝났음을 컴퓨터에게 알린다

05] 주석

// 한 줄 주석 처리
/*
   범위 주석 처리
*/

- 주석 : 코드에 대한 자세한 설명을 작성하거나, 임시로 특정 코드를 컴파일 되지 않도록 만들 때 사용한다

    1. 코드 맨 앞에 //을 사용하면 해당 줄은 모두 주석으로 처리된다

    2. 여러 줄 또는 한 줄의 특정 부분만 주석처리 하고자 한다면 원하는 부분을 /* */로 감싸주면 된다

 

[변수]

01] 변수란?

- 변수 : 데이터를 저장할 수 있는 메모리 공간을 의미하며, 저장된 값은 변경될 수 있다

02] 변수명

- 변수명 설정

: 일반적으로 해당 변수에 저장될 데이터의 의미를 나타낼 수 있는 이름으로 설정한다

- 변수명 규칙

: 변수명은 영문자, 숫자, 언더바로만 구성된다 - Ex) check_2num, user_name

: 변수명은 숫자로 시작될 수 없다 - Ex) 3times, 8chance

: 변수명 사이에는 공백이 포함될 수 없다 - Ex) user val, change num

: 변수명은 대소문자를 구분한다 - Ex) user와 User는 다른 변수로 취급한다

: 변수명으로 예약어는 사용할 수 없다 

- 예약어 : C언어에서 미리 정의된 키워드로, C언어에는 총 32개의 예약어가 있다 

03] 변수의 선언

// 변수를 선언만 하고 나중에 초기화 하는 방법
int A; 
...
A = 0;
// 변수를 선언과 동시에 초기화 하는 방법
int A = 0;

1. 변수를 선언만 하고 이후에 초기화 하는 방법

    자료형 변수명;

    ...

    변수 초기화;

2. 변수를 선언과 동시에 초기화 하는 방법

    자료형 변수명 = 초기값;

- C언어에서는 변수를 사용하기 전에 먼저 해당 변수를 선언해야한다

: 선언되지 않은 변수를 사용하려고 하면 에러가 발생한다

- 변수는 '자료형 변수명 = 초기값'의 형태로 선언된다

: 위 코드와 같이 변수를 선언할 때부터 초기값을 설정하는 방법도 있고, 변수의 선언만 해놓은 뒤 초기화는 나중에 하는 방법도 있다

- 변수를 선언할 때 값을 초기화하지 않으면 기존값인 쓰레기값이 자동으로 들어가게된다

: 쓰레기값이 남아있으면 의도치않은 결과가 출력될 수 있으니 주의해야한다

int A = 0, B = 0; // 가능
float A1 = 0.0, B = 0.0; // 가능
int A = 0, float B = 0.0; // 불가능

- 선언하고자 하는 변수들의 타입이 같다면 여러 변수를 동시에 선언할 수 있다

: 선언하고자 하는 변수들의 타입이 서로 다르다면 변수를 동시에 선언할 수 없다

 

[자료형]

01] Data Type(자료형)이란?

- 타입은 자료의 형태를 의미하며, 해당 데이터가 메모리에 어떻게 저장되고 프로그램에서 어떻게 처리되어야 하는지를 명시하는 역할이다

: 저장되는 데이터 크기에 따라 필요한 메모리 공간의 크기도 달라진다

- C언어의 기본 자료형은 아래 표와 같다

- signed와 unsigned는 부호의 유무를 나타낸다

: unsigned는 음수를 표현할 수 없으므로, 양수 데이터만 저장하는 변수를 선언할 때 주로 사용한다

- 자료형을 지정할 때에는 변수의 범위보다 overflow 혹은 underflow가 발생하지 않도록 각 자료형의 최솟값과 최댓값의 범위를 고려한다

- char형 변수를 선언할 때에는 ' '를 사용해 문자를 감싸주어야한다

: Ex) char word = 'a';

- 지금 당장 모든 자료형을 외우기보다는 주로 사용하는 int, float, char정도만 알아두고 필요할 때 더 공부하는 걸 추천합니다. 한 번에 많은 걸 외우려고 하면 머리에 들어오지도 않고 복잡해집니다

 

[상수]

01] 상수란?

- 상수(constant)

: 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간을 의미한다

: 변수와 달리 상수는 프로그램이 실행되는 동안 상수에 저장된 데이터를 변경할 수 없다

- 상수는 리터럴 상수와 심볼릭 상수로 나눠진다

02] 리터럴 상수

- 5, 9, a, f와 같이 변하지 않는 데이터를 리러털 상수라고 한다

: 바로 사용하는 데이터라고 생각하면 된다

03] 심볼릭 상수

- 일반적으로 상수라고 하면 심볼릭 상수를 뜻한다

- 심볼릭 상수는 변하지 않는 '변수'이다

: 리터럴 상수는 데이터, 심볼릭 상수는 변수이다

-- 심볼릭 상수의 이름은 대문자를 사용한다 (암묵적 규칙)

: 심볼릭 상수는 선언과 초기화를 동시에 해야한다

- 심볼릭 상수의 선언

// const를 사용하여 선언
const float PI = 3.14;

// #define을 사용하여 선언
#define NUM 100

1. const : 일반적인 변수의 선언과 유사하다

    const 자료형 변수명 = 초기값(상수값);

2. #define : 전처리기로 사용되어서 main함수 밖에 선언하며 ;을 쓰지 않는다

    #define 변수명 상수값

 

[입출력]

01] 형식지정자

- 주로 사용하는 형식지정자 리스트

: 기초 스터디이므로 광범위하게는 안다루겠습니다! 지금은 기초를 다진다는 생각으로 가장 기본적인 부분만 잡아봅시다

: string은 문자열로, 나중에 배열을 다룰 때 같이 공부할 예정이니 이런게 있구나~ 하고 넘어가시면 됩니다

- 형식지정자 : 입/출력할 데이터가 어떤 타입인지 알려주는 역할을 한다

- scanf에서는 double과 float의 형식 지정자를 구분해야하지만 printf에서 실수형(double, float)은 모두 %f로 사용합니다

02] Escape Sequence

- \와 다른 문자를 결합하여 일반적인 방법으로는 표현하기 어려운 기능이나 문자를 표현할 수 있게 해주는 문자

- \는 기본 키보드의 원화 키로 사용한다

- 이외에도 여러가지의 escape sequence가 있지만, 지금은 이정도만 알고 넘어가도 됩니다

03] 출력

printf("Hello World!");
printf("int : %d, float : %f, char : %c", 5, 1.23, 'C');
// 변수를 사용한 출력데이터 작성
int A = 5;
printf("A = %d\n", A);
// 출력데이터의 자릿수 지정
float B = 1.57;
printf("%f\n", B); // 출력 결과 : 1.570000
printf("%.2f\n", B); // 출력 결과 : 1.57

- printf(" ");

: C언어의 표준 출력 함수로, <stdio.h> 헤더파일에 정의되어있다

: " " 안에 출력할 내용을 입력한다

- 예시 코드의 2번째 행과 같이 " " 안에 형식 지정자를 입력하고, 이후에 출력하고자 하는 데이터를 입력하면 형식 지정자 자리에 데이터가 입력된다

: 지정한 형식 지정자에 맞는 타입의 데이터를 입력하지 않으면 값이 제대로 작성되지 않는다

- 예시 코드의 3번째 행과 같이 출력 데이터를 변수로 지정하여 출력할 수도 있다

: 사용할 변수의 타입에 맞는 형식 지정자를 사용해야한다

- 예시 코드의 6번째 행과 같이 %[자릿수]형식지정자 형태로 작성하면 해당 출력 데이터의 자릿수를 지정할 수 있다 

04] 입력

int num = 0;
scanf("%d", &num);
// 한 번에 여러 개의 데이터 입력받기
int num1 = 0, num2 = 0;
float num3 = 0.0;
// 01 (공백으로 구분하여 입력)
scanf("%d %d %f", &num1, &num2, &num3);
// 02 (enter로 구분하여 입력)
scanf("%d\n%d\n%f", &num1, &num2, &num3);
// 03 (문자로 구분하여 입력)
scanf("%d,%d,%f", &num1, &num2, &num3);

- scanf("[자릿수]형식지정자", &변수명);

: C언어의 표준 입력 함수로, <stdio.h> 헤더파일에 정의되어있다

: &는 지정한 변수의 주소를 나타내며, scanf를 사용하면 입력받은 값을 해당 주소로 저장한다

- 예시 코드의 3번째 행처럼 한 번에 여러 개의 데이터를 입력받을 수도 있다

: 입력받는 데이터를 구분하는 기본적인 방법으로는 공백 구분, 줄바꿈 구분, 문자 구분이 있다 (보통 공백 또는 줄바꿈 입력을 사용합니다)

// 하나의 입력값 나누어 저장하기
int num1 = 0, num2 = 0;
scanf("%3d%3d", &num1, &num2);

- 이 코드는 넣을까말까 하다가 이런 것도 있다~를 말씀드리려고 넣어봤습니다. 자릿수 지정만 확인하고 넘기셔도 됩니다!

- 자릿수를 지정하면 원하는 자릿수만큼 값을 나누어 저장할 수 있다

: 이 코드를 예시로, 123456을 입력하면 3자리씩 나누어서 num1에 123, num2에 456을 저장할 수 있다

 

[총 정리]

#include<stdio.h>

int main(){
	int num1 = 0, num2 = 0;
	printf("TYPE(num1 num2) : ");
	scanf("%d %d", &num1, &num2);
	printf("NUM1 = %d\nNUM2 = %d", num1, num2);
	return 0;
}

- 지금까지 공부한 것들을 조합하면 위 코드와 같이 변수에 값을 입력 받고, 그 값을 출력하는 코드를 작성할 수 있다

실행 결과

'C Study' 카테고리의 다른 글

06] C언어 포인터  (0) 2023.05.28
04] C언어 배열과 함수  (0) 2023.04.04
03] C언어 반복문  (0) 2023.04.03
02] C언어 연산자와 조건문  (0) 2023.04.03
01-1] 간단한 예제와 코드 작성  (0) 2023.03.16