본문 바로가기
관/솔직한 c 언어 공부

c언어 기초 공부 04.

by 4차원 박스 2019. 11. 4.

연산자는 operator
피연산자는 operand 
라고 표현함

프로그램의 정의= 어느 목적/명령을 이루기위해 잘 나열된 명령어들의 집합

프로세스의 정의 = 실행중인 프로그램(이순간 메모리와 cpu를 차지한다.)

프로세서 = 하드웨어


나머지연산자 % = mod, modulus 라고 한다.
(주로 홀짝을 구별할때 이용한다. )


다른 자료형이 혼합하여 사용될때
더 큰 자료형으로 바뀐다.(더 큰 그릇에 담긴다.)
이를 묵시적 형변환 이라한다 (implicit)

형변환은 앞에 자료형을 붙이면 된다.
이를 명시적 형변환이라 한다 (explicit)


다음은 간단한 예제들이다

int main()
{
int x,y;

printf("두수를 입력 : ");
scanf("%d %d", &x, &y);

printf("덧셈 : x+y=%d \n",x+y);
printf("뺄셈 : x-y=%d \n",x-y);
printf("곱셈 : x*y=%d \n",x*y);
printf("나눗셈 : x/y=%d \n",x/y);
printf("\n");
return 0;
}

결과
두수를 입력 : 10 2
덧셈 : x+y=12
뺄셈 : x-y=8
곱셈 : x*y=20
나눗셈 : x/y=5


다음은 몫과 나머지 예제이다

int main()
{
int x,y;

printf("두수를 입력 : ");
scanf("%d %d", &x, &y);

printf("두수를 나눌때 몫 :%d \n",x/y);
printf("두수를 나눌때 나머지 :%d \n",x%y );

printf("\n");
return 0;
}

결과
두수를 입력 : 40 6
두수를 나눌때 몫 :6
두수를 나눌때 나머지 :4
이다.


다음은 거스름돈 알려주는 프로그램이다

int main()
{
int x,y;

printf("받은돈 : ");
scanf("%d", &x);
printf("상품가격 :");
scanf("%d",&y);

printf("거슬러줄 돈 :%d \n",x-y);
printf("5000원 :%d \n",(x-y)/5000);
printf("1000원 :%d \n",((x-y)%5000)/1000);
printf("500원 :%d \n",(((x-y)%5000)%1000)/500);
printf("100원 :%d \n",((((x-y)%5000)%1000)%500)/100);

printf("\n");
return 0;
}

받은돈 : 10000
상품가격 :2000
거슬러줄 돈 :8000
5000원 :1
1000원 :3
500원 :0
100원 :0


다음은 온도계 단위를 바꾸는 프로그램이다.

int main()
{
double f,c;

printf("화씨온도 : ");
scanf("%lf", &f);
c=(5.0/9.0)*(f-32);

printf("화씨를 섭씨로 하면: %lf \n",c);

printf("섭씨온도 :");
scanf("%lf",&c);
f=(9.0/5.0)*(c+32);
printf("섭씨를 화씨로 하면: %lf \n",f);
printf("\n");
return 0;
}

결과로
화씨온도 : 100
화씨를 섭씨로 하면: 37.777778
섭씨온도 :100
섭씨를 화씨로 하면: 237.600000

이다.


y=++x 와 y= x++의 차이

전자의 경우는 우항의 값을 증가시킨후에
좌항에 할당을 시키는 순서이고

후자는 우항의 연산을 하기전에 좌항에 할당을 시키고
좌항을 증가시키는 차이가 있다 

 


다음 예제로 파악한다.

int main()
{
int x=10;
int y=10;

int a,b;
a=++x;
printf("a=++x 에서 a값은 : %d \n",a);
printf("a=++x 에서 x값은 : %d \n",x);
b=y++;
printf("b=y++ 에서 b값은 : %d \n",b);
printf("b=y++ 에서 y값은 : %d \n",y);

printf("\n");
return 0;
}

결과로
a=++x 에서 a값은 : 11
a=++x 에서 x값은 : 11
b=y++ 에서 b값은 : 10
b=y++ 에서 y값은 : 11

이렇게 등장한다 


결과로


복합연산자 += 을 기준으로 보면

x+=y는 
x=x+y라는 식을 줄여적은것임.

예제로보면

int main()
{
int x=10;

printf("x+=1 에서 x값은 : %d \n",x+=1);

x=10;

printf("x+=3 에서 x값은 : %d \n",x+=3);

x=10;

printf("x*=3 에서 x값은 : %d \n",x*=3);
printf("\n");
return 0;
}
x+=1 에서 x값은 : 11
x+=3 에서 x값은 : 13
x*=3 에서 x값은 : 30
이렇게 나온다.


자료형 앞에 const를 붙여서 
그 자료형의 그릇에 담겨있는 값을 변화시키지 않게 할 수 있다

int main()
{
const int x=10;

printf("x값은 : %d \n",x);
printf("x값은 : %d \n",x+1);

x=x+1;

printf("\n");
return 0;
}

이렇게하면
error C2166: l-value가 const 개체를 지정합니다. 라는 오류가 뜬다

여기서 l-value는 x=x+1; 에서 좌항을 가리키며
이 좌항이 const인데 왜 바꾸는지 알려주는 오류임을 알 수 있다.
(참고로 우항은 r=value 이다.)



탄환의 궤도를 구하는 프로그램 예제
int main()
{
double x,y,t;

const double fx=0.0;
const double fy=0.0;
const double vx=20.0;
const double vy=20.0;
const double g=9.8;
t=1.0;
x=fx+vx*t;
y=fy+vy*t-0.5*g*t*t;
printf("%f초 후의 위치 =(%f, %f) \n", t,x,y);

t=2.0;
x=fx+vx*t;
y=fy+vy*t-0.5*g*t*t;
printf("%f초 후의 위치 =(%f, %f) \n", t,x,y);

t=3.0;
x=fx+vx*t;
y=fy+vy*t-0.5*g*t*t;
printf("%f초 후의 위치 =(%f, %f) \n", t,x,y);
printf("\n");
return 0;
}

결과로
1.000000초 후의 위치 =(20.000000, 15.100000)
2.000000초 후의 위치 =(40.000000, 20.400000)
3.000000초 후의 위치 =(60.000000, 15.900000)
이렇게 나옴




조건문

if(관계연산자를 이용한 조건){}
else{} 이런 형태로 사용한다.

값이 참 이면 1 
거짓이면 0 를 사용한다.

&& 는 and의 의미이고
|| 는 or의 의미이다.

이거는 조건2개 이상 붙여서 사용하고 싶을때 사용한다.


이를이용하여 문제를 풀어본다

짝홀 판단하기
int main()
{
int x;
printf("수를 적어라:");
scanf("%d",&x);

if (x%2==0)
{
printf("이건 짝수이다");
}
else 
{
printf("이건 홀수이다.");
}

printf("\n");
return 0;
}

결과로
수를 적어라:5
이건 홀수이다
이래 나옴

큰수 파악하기 문제





int main()
{
int x,y;
printf("수를 적어라:");
scanf("%d",&x);

printf("두번째 수를 적어라");
scanf("%d",&y);

if (x>y)
{
printf("%d 가 더큰수이다 \n",x);
}
else
{
printf("%d 가 더큰수이다 \n",y);
}
}

이 결과로

수를 적어라:5
두번째 수를 적어라4
5 가 더큰수이다
가 나온다.

3개중 큰수 파악하기 문제

int main()
{

int x,y,z;

printf("수를 적어라:");
scanf("%d",&x);
printf("두번째 수를 적어라");
scanf("%d",&y);
printf("세번째 수를 적어라");
scanf("%d",&z);

if ((x>y)&&(x>z))
{
printf("%d 가 제일 큰수이다 \n",x);
}
else if ((y>x)&&(y>z))
{
printf("%d 가 제일 큰수이다 \n",y);
}
else if ((z>x)&&(z>y))
{
printf("%d 가 제일 큰수이다 \n",z);
}


if ((x<y)&&(x<z))
{
printf("%d 가 제일 작은수이다 \n",x);
}
else if ((y<x)&&(y<z))
{
printf("%d 가 제일 작은수이다 \n",y);
}
else if ((z<x)&&(z<y))
{
printf("%d 가 제일 작은수이다 \n",z);
}
}

결과로
수를 적어라:1
두번째 수를 적어라2
세번째 수를 적어라3
3 가 제일 큰수이다
1 가 제일 작은수이다

이래 나온다.


간단한 계산기 만들기

int main()
{
char c;
int x,y,r;

printf("식을 적어라");
scanf("%d%c%d",&x,&c,&y);


if (c=='+')
{
r=x+y;
}
else if (c=='-')
{
r=x-y;
}
else if (c=='*')
{
r=x*y;
}
else if (c=='/')
{
if (x>y)
{
r=x/y;
}
else if(y>x)
{
r=y/x;

}
else if(x==y)
{
printf("1나올걸 왜하냐 서로다른수 써라");
}
}

else if (c=='%')
{
if (x>y)
{
r=x%y;
}
else if(y>x)
{
r=y%x;

}
else if(x==y)
{
printf("1나올걸 왜하냐 서로다른수 써라");
}
}

if (x>y)
{
printf("%d%c%d=%d \n",x,c,y,r);
}
else
{
printf("%d%c%d=%d \n",y,c,x,r);
}

return 0;
}
결과로
식을 적어라9/3
9/3=3

이래 나온다. 

 

꿀팁 하나 적자면

scanf오류가 날때

다음 코드를 가장 윗줄 #include 가 있는곳 위든

아래줄이든 아래와 같이 적어본다.

 

#define _CRT_SECURE_NO_WARNINGS

이걸 맨위에 선언해 주어야 비주얼 스튜디오 내에서
별무리 없이 돌아간다.

' > 솔직한 c 언어 공부' 카테고리의 다른 글

c언어 기초 공부 06.  (0) 2019.11.06
c언어 기초 공부 05.  (0) 2019.11.05
c언어 기초 공부 03.  (0) 2019.11.04
c언어 기초 공부 02.  (0) 2019.11.03
c언어 기초 공부 01.  (0) 2019.11.02

댓글