본문 바로가기

Programming languages/C

1. C언어(기본,함수,자료형)

728x90
반응형

c언어는 빈 줄을 넣어서 의미 별로 구분한다. 같은 내용의 처리에 대해서는 들여 쓰기로 구분한다. 

문장의 끝에는 반드시 세미콜론(';')을 삽입한다. 

c언어에는 전처리기 라는 것이 존재하는데 이는 #으로 시작한다. 대표적으로 #include <stdio.h>가 있다.

이는 표준 입출력 라이브러리 함수를 포함한 stdio.h 라는 헤더 파일을 포함하라는 의미를 가진다. 

 

함수)

함수란 특정 기능을 수행하는 처리 단계들을 괄호로 묶어서 이름을 붙인 것이다. 함수의 출력 타입, 함수의 이름, 입력 타입을 지정해줘야 한다. 함수의 출력 타입이란 return을 통해서 반환되는 값을 의미한다. 다른 함수들은 main 함수에 의해서 호출되고 main 함수는 운영체제에 의해서 호출된다.

변수)

변수란 프로그램에 필요한 데이터를 일시적으로 저장하는 공간이다. 다양한 자료형이 존재하고 이에 따라서 사용법이나 특징이 조금씩 다르다. 상수는 한번 정해지면 프로그램 실행 동안 값이 바뀌지 않는 수이다. 아래의 자료형과 형식 지정자를 잘 알아두는 것이 중요하다.

#include <stdio.h>

int main() {
    //정수형
    short a1 = 1000; // 2바이트,16비트, -(2^16) ~ 0, 0 ~ (2^16) - 1 까지 표현 가능
    int a2 = 100000000; // 4바이트, 32비트, -(2^32) ~ 0, 0 ~ (2^32) - 1 까지 표현 가능
    long long a3 = 100000000000000; // 8바이트, 64비트, -(2^64) ~ 0, 0 ~ (2^64) - 1 까지 표현 가능
    printf("%d %d %lld\n",a1,a2,a3); //short와 int는 %d, long은 %ld, lonlong은 %lld 로 받는다.

    //실수형
    float b1 = 100000; // 4바이트, 32비트
    double b2 = 1000000000; //8바이트, 64비트
    long double b3 = 100000000000000000; // 8바이트 이상, 64비트 이상
    printf("%f,%lf,%lf\n",b1,b2,b3); //이는 고정 소수점 형식의 실수 출력 이다.
    printf("%e %e %e\n",b1,b2,b3); //이는 부동 소수점 형식의 실수 출력 이다.

    //signed vs unsigned
    int s_a1 = 2147483648;
    unsigned int us_a1 = 2147483648;
    printf("%d %u %u\n",s_a1,s_a1,us_a1);
    /*s_a1을 %d로 출력하면 표현가능 범위인 2147483648 보다 크기 때문에 오버플로우가 발생한다.
     * 따라서 -2147483648이 출력된다. 반면에  %u로 표현하면 선언 자료형에 상관없이 정상적으로 출력된다.*/

    //문자형
    char c1 = 'a';
    char c2 = '9';
    int a = 50;
    printf("%c %c %d %c",c1,c2,c2,a); //컴퓨터에서 표현가능한 각 문자에 대응하는 정수가 존재함을 알수 있음. 
}

위 코드의 실행결과

특이한 점은 선언 당시의 자료형의 타입 보다는 출력할 때 지정해주는 타입이 우선시된다는 것이고, 컴퓨터에서 각 표현 가능한 문자열에 대응하는 정수가 존재한다는 것이다. 또한 여러 개의 변수를 한 줄에 출력하고 \n을 통해서 출력 시 줄 바꿈도 가능하다.

#include <stdio.h>

int main(){
    double x = 17;
    int y = 17;

    printf("%d %lf\n",x,x);
    printf("%d %f",y,y);

    return 0;
}

정수로 선언된 변수를 실수형으로 표현하거나 실수형으로 선언된 변수를 정수형으로 표현하는 것은 불가능하다.

수식)

수식은 피연산자와 연산자로 구성된 식이고 이는 결과 값을 가진다.

#include <stdio.h>

double math(int x, int y){
    double s = x+y;
    return s;
}

int main() {
    int a;
    int b;
    scanf("%d %d",&a,&b); //scanf 함수를 통해서 입력
    double def_ans = math(a,b); //math 함수를 호출을 통한 연산, 대입 연산
    printf("%lf\n",def_ans); //return 값이 dobule형 이므로 %lf 사용

    double sum_ans = a+b; //연산자를 통한 연산, 대입 연산
    printf("%lf", sum_ans);

    return 0;
}

위 코드의 결과 값

위 처럼 함수는 main 함수 위에 선언을 해주어야 한다. 정확히는 폰 노이만 구조의 컴퓨터는 위에서부터 코드를 한 줄씩 읽어서 내려오기 때문에 함수 호출 전에 사용하고자 하는 함수를 선언해주어야 한다. 함수 호출의 결과와 연산자를 통한 연산 결과가 동일함을 볼 수 있다.

728x90
반응형

'Programming languages > C' 카테고리의 다른 글

6. C언어(함수 & 변수)  (0) 2022.08.14
5. C언어(반복문)  (0) 2022.08.11
4. C언어(조건문)  (0) 2022.08.09
3. C언어(수식과 연산자)  (0) 2022.08.09
2. C언어(변수와 자료형)  (0) 2022.08.09