본문 바로가기
Development/C

(C언어 기초) 5. 연산자(1)

by eoieiie 2023. 8. 27.

연산 명령에는 연산의 대상이 되는 데이터가 필요한데, 이를 피연산자라고 합니다. 1+a 또는 a+b라는 문장이 있다면 +는 연산자이고, 1, a, b는 피연산자인 거죠. 그런데 피연산자가 이렇게 상수와 변수만 있는 건 아닙니다. 때로는 수식을 피연산자로 직접 사용합니다. 

 

++a 10 % 3 (a > 10) && (a < 20)
a = 변수 피연산자  10,3 = 상수 피연산자  a > 10, a < 20 = 수식 피연산자 

 

피연산자가 하나면 단항 연산자, 2개면 이항 연산자, 3개면 삼항 연산자가 됩니다. 

 

산술 연산자와 대입 연산자 


 

산술 연산자에는 더하기, 빼기, 곱하기, 나누기, 나머지가 있습니다. 예제로 대입, 더하기, 빼기, 곱하기 연산자를 먼저 살펴보겠습니다. 

#include <stdio.h>

int main(void)

{
    int a, b;
    int sum, sub, mul, inv;

    a = 10;
    b = 20;
    sum = a + b;
    sub = a - b;
    mul = a * b;
    inv = -a;

    printf("a의 값 : %d, b의 값 : %d\n", a, b);
    printf("덧셈 : %d\n", sum);
    printf("뺄셈 : %d\n", sub);
    printf("곱셈 : %d\n", mul);
    printf("a의 음수 연산 : %d\n", inv);

    return 0;
}


//실행 결과

a의 값 : 10, b의 값 : 20
덧셈 : 30
뺄셈 : -10
곱셈 : 200
a의 음수 연산 : -10

 

다음 예제는 5를 2로 나누는 간단한 계산입니다. 

 

#include <stdio.h>

int main(void)

{
    double apple;   //실수
    int banana;     //정수
    int orange;     //정수

    apple = 5.0/2.0;
    banana = 5 / 2;
    orange = 5 % 2;

    printf("apple : %.1lf\n", apple);
    printf("apple : %d\n", banana);
    printf("apple : %d\n", orange);

    return 0;
}


//실행 결과

apple : 2.5
apple : 2
apple : 1

 

다음은 1000초를 입력받은 후, 분과 초로 나누는 프로그램입니다.

 

#include <stdio.h>

int main(void)
{
    int input = 1000;

    int minute = input / 60; //몫
    int second = input % 60; //나머지

    printf("%d초 : %d분 %d초 입니다.", input, minute,second);
   
    return 0;
}


//실행 결과

1000초 : 16분 40초 입니다.

 

증감 연산자 


a =  a + 1을 ++a; 로 간단히 표현할 수 있습니다. 빼기 연산에서도 마찬가지입니다. 

 

#include <stdio.h>

int main(void)

{
    int a = 10, b = 10;

    ++a;
    --b;

    printf("a : %d\n",a);
    printf("b : %d",b);

    return 0;
}


//실행 결과

a : 11
b : 9

 

그런데 증감 연산자의 위치를 a++ 혹은 b--처럼 피연산자 뒤로 옮길 수도 있습니다. 연사자가 피연산자 앞에 놓이면 전위 표기, 뒤에 놓이면 후기 표기라고 합니다. 전위 표기는 값이 증감하고 나서 연산에 사용하고, 후위 표기는 연산에 사용하고 나서 값이 증감합니다. 예제를 확인해 보겠습니다. 

 

#include <stdio.h>

int main(void)

{
    int a = 5, b = 5;
    int pre, post;

    pre = (++a) * 3;  //a의 값을 즉시 +1함
    post = (b++) * 3; //b의 값을 모든 연산이 끝난 뒤에 +1 함

    printf("초깃값 a = %d, b = %d\n",a,b);
    printf("전위형 : (++a) * 3 = %d\n후위형 : (b--) * 3 = %d", pre, post);

    return 0;
}


//실행 결과

초깃값 a = 6, b = 6 //모든 연산이 끝났기에, a 와 b의 값 모두 +1
전위형 : (++a) * 3 = 18 // a + 1후 곱하기 3
후위형 : (b--) * 3 = 15 // b의 처음 값에 곱하기 3

 

#include <stdio.h>

int main (void)
{
    int x = 0;
    printf("현재의 x는 %d입니다.\n", x);
    x++;
    printf("현재의 x는 %d입니다.\n", x);
    printf("현재의 x는 %d입니다.\n", x--);
    printf("현재의 x는 %d입니다.\n", x);
    
    return 0;
}


//실행결과

현재의 x는 0입니다.
현재의 x는 1입니다.
현재의 x는 1입니다.
현재의 x는 0입니다.

 

논리 연산자 


논리 연산자는 참과 거짓을 판단하는 데 사용하며 &&(AND, 좌항과 우항이 모두 참이면 참), ||(OR, 좌항과 우항 중 하나라도 참이면 참), !(NOT, 거짓이면 참, 참이면 거짓) 셋 뿐입니다. 예제로 살펴보겠습니다. 

 

#include <stdio.h>

int main(void)

{
    int a = 30;
    int res;

    res = (a > 10) && (a < 20);
    printf("(a > 10) && (a < 20) : %d",res);

    return 0;
}


//실행 결과

(a > 10) && (a < 20) : 0

 

0은 False, 1은 True를 뜻하며, && 대신  || 를 사용하면 결과는 1이 나옵니다. 또 다른 예제를 살펴보겠습니다. 

 

#include <stdio.h>

int main(void)
{
    int x = 50, y = 30;
    printf("x가 y보다 크고 y는 40 미만입니까? %d\n", (x > y) && (y < 40));
    printf("x가 y보다 작거나 혹은 y가 30 입니까? %d\n", (x < y) || (y == 30));
    printf("x가 50이 아닙니까? %d\n", x != 50);
   
    return 0;
}


//실행 결과

x가 y보다 크고 y는 40 미만입니까? 1
x가 y보다 작거나 혹은 y가 30 입니까? 1
x가 50이 아닙니까? 0

 

확인 문제 


4.0과 1.2의  덧셈, 뺄셈, 곱셈, 나눗셈을 한 값을 소수점 이하 첫째 자리까지 출력하세요. 

더보기
#include <stdio.h>

int main(void)

{
    float a = 4.0, b = 1.2;
    float sum = a + b;

    printf("%.1f + %.1f = %.1f",a,b,sum);

    return 0;
}

또는 

{
    float a = 4.0, b = 1.2;

    printf("%.1f + %.1f = %.1f",a,b,a+b);

    return 0;
}



//실행 결과

4.0 + 1.2 = 5.2
뺄셈 곱셈 나눗셈은 알잘딱 알아서.

 

두 과목의 점수를 입력하여 평균을 출력하는 프로그램을 작성하세요. 평균은 소수점 이하 첫째 자리까지 출력하세요. 

더보기
#include <stdio.h>

int main (void)
{

    int a, b, tot;
    float avg;

    printf("두 과목의 점수 : ");
    scanf("%d%d",&a, &b);

    tot = a + b;
    avg = tot / 2.0;

    printf("평균 : %.1f",avg);

    return 0;
}


//실행결과

두 과목의 점수 : 100 90
평균 : 95.0

 

태희가 신청한 전체 학점과 평점을 계산하여 신청 학점이 10학점 이상이고 평점 평균이 4.0을 넘는 경우 1을 출력하고, 그렇지 않으면 0을 출력하는 프로그램을 작성하세요. 태희가 이전 학기에 신청한 과목당 학점과 얻은 점수는 아래와 같습니다.

  • 국어 - 3학점 - 3.8
  • 영어 - 5학점 - 4.4
  • 수학 - 4학점 - 3.9
더보기
#include <stdio.h>

int main (void)

{
    int kor = 3, eng = 5, mat = 4;
    int credits = kor + eng + mat;
    float kscore = 3.8, escore = 4.4, mscore = 3.9;
    float grade = (kscore + escore + mscore)/3;
    int res = (credits >= 10) && ( grade > 4.0);

    printf("전체 학점 : %d\n", credits);
    printf("평점 평균 : %.1f\n", grade / 3);
    printf("(%d >= 10) && (%.1f > 4.0) : %d", credits, grade/3, res);

    return 0;
    
}


//실행결과

전체 학점 : 12
평점 평균 : 1.3
1


//또는

    
#include <stdio.h>

int main (void)

{
    int kor = 3, eng = 5, mat = 4;
    int credits;
    int res;
    float kscore = 3.8, escore = 4.4, mscore = 3.9;
    float grade;
    
    credits = kor + eng + mat;
    grade = (kscore + escore + mscore) / 3.0;
    res = (credits >= 10) && (grade > 4.0);

    printf("%d\n",res);

    return 0;
}


//실행결과

1

 

 

 

 

 

 

 

 

댓글