728x90
5.9 표현식과 문장
- 표현식(Expression) : 연산자, 피연산자들의 조합으로 만들어짐
- 문장(Statement) : 표현식들로 만들어짐
- 표현식은 값을 계산해냄 ex) 4 + 21 = 25, 2 > 1 (결과값 = 1)
- q = 5 * 2
- 위의 표현식은 값을 대입하는 표현식이나, 표현식의 주요 기능은 값을 계산하는 것임
- 대입하는 것은 side effect (부가적 기능) 임
#include <stdio.h>
int main()
{
/* example of statement */
int x, y, apples; // declaration statement
apples = 3; // assignment statement
; // null statement
7;
x = 1 + (y = 5); // y = 5 is subexpression(expression의 일부분)
while (x++ < 10) // while statement (structured statements. 구조가 잡혀있는 문장)
y = x + y;
printf("%d\n", y); // function statement
return 0; // return statement
}
#include <stdio.h>
int main()
{
/* Side Effects and Sequence Points(값을 언제 계산하는가) */
x = 4; // main intent is evaluating expressions (값을 계산하는 것이 주 의도)
y = 1 + x++; // 세미콜론(sequence points)이 있으면 컴파알러가 앞 expression의 값을 계산함
while (x++ < 10) // (x++ < 10) is a full expression -> ; 가 없어도 비교식을 계산. x++를 계산
printf("%d\n", x);
y = (4 + x++) + (6 + x++); // (6 + x++)에서 x++가 앞에서 증가연산이 한번 된 값인지 아닌지가 애매함
// 컴파일러에 따라 결과값이 다를 수 있기때문
return 0; // return statement
}
5.10 순서도 (Flow Chart)
skip
5.11 자료형 변환 (Type Conversions)
#include <stdio.h>
int main()
{
/* promotions in assignments */
short s = 64;
int i = s; // 작은 자료형을 큰 자료형에 대입할땐 문제 X (promotion)
float f = 3.14f;
double d = f;
/* demotion in assignments */
d = 1.25;
f = 1.25; // 1.25는 double이든 float이든 정밀하게 표현 가능. 0.25 = 1/4
f = 1.123; // 상대적으로 크기가 큰 자료형(double)을 작은 자료형(float)에 집어넣음
// 절삭오류 발생
/* ranking of types in operations */
long double > double > float
unsigned long long, long long
unsigned long, long
unsigned, int
short int, unsigned short int
signed char, char, unsinged char
_Bool
d = f + 1.234; // 내부적으로 float을 double로 바꿔 계산을 함. CPU는 서로 다른 자료형끼리는
// 계산을 할 수 없기 때문
f = f + 1.234; // 1.234는 double이므로 f + 1.234의 결과값은 double
return 0;
}
#include <stdio.h>
int main()
{
/* automatic promotion of function arguments */
// 1. Functions without prototypes
// 2. Variadic functions -> 인자가 변하는 함수
/* casting operators -> 의도적 형 변환 */
d = (double)3.14f;
i = 1.6 + 1.7; // 결과값은 float이나, i는 int이므로 i에는 3만 대입
i = (int)1.6 + (int)1.7; // 1 + 1 = 2
return 0;
}
#include <stdio.h>
int main()
{
/* more examples */
char c;
int i;
float f;
f = i = c = 'A'; // 65
printf("%c %d %f\n", c, i, f);
c = c + 2; // 'C', 67
i = f + 2 * c; // 65.0f + 2 * 67. 계산식의 결과는 float
printf("%c %d %f\n", c, i, f); // 199
c = 1106; // char에 int를 대입하려면 메모리가 부족. demolition
// 1106 = ob10001010010, ob01010010(char은 8 bit 이므로 앞의 진수들 100을 잘라냄 )
// = 1106 % 256(앞의 과정이 나머지 연산자를 적용한 것과 결과가 같음) = 82 = 'R'
printf("%c\n", c);
c = 83.99; // 83으로 절삭
printf("%c\n", c);
return 0;
Output :
A 65 65.000000
C 199 65.000000
R
S
5.12 함수의 인수(Arguments)와 매개변수(Parameters)
- Argument (인수) : actual argument, actual parameter -> values. 함수 호출시 집어넣는 값
- Parameter (매개변수) : formal argument, formal parameter -> variables. 함수 정의 부분에 있는 변수
#include <stdio.h>
void draw(int n); // ANSI function prototype declaration
int main()
{
int i = 5;
char c = '#'; // 35
float f = 7.1f;
draw(i); // i = 5. 함수 호출 시 값을 집어넣음 -> value. argument
draw(c);
draw(f); // 받는쪽은 int이므로 float이 int로 들어감
return 0;
}
void draw(int n) { // int n은 변수 -> n에 어떠한 값이 들어와도 함수 실행이 가능해야 함 -> n은 parameter
while (n-- > 0)
printf("*");
printf("\n");
}
Output :
*****
***********************************
*******
강의 출처 : https://www.inflearn.com/course/following-c/dashboard
'Study_C, C++ > 홍정모의 따라하며 배우는 C언어' 카테고리의 다른 글
[홍정모의 따라하며 배우는 C언어] 6.5 사실과 거짓 ~ 6.9 for는 유연해요 (0) | 2021.09.05 |
---|---|
[홍정모의 따라하며 배우는 C언어] 6.1 while 반복 루프에서 scanf()의 반환값 사용하기 ~ 6.4 관계 연산자 (Relational Operators) (0) | 2021.09.02 |
[홍정모의 따라하며 배우는 C언어] 5.6 연산자 우선순위와 표현식 트리 ~ 5.8 증가, 감소 연산자 (0) | 2021.08.25 |
[홍정모의 따라하며 배우는 C언어] 5.3 더하기, 빼기, 부호 연산자들 ~ 5.5 나누기 연산자 (0) | 2021.08.23 |
[홍정모의 따라하며 배우는 C언어] 4.10 scanf() 함수의 사용법 ~ 5.2 대입 연산자와 몇 가지 용어들 (0) | 2021.08.22 |