본문 바로가기

Study_C, C++/홍정모의 따라하며 배우는 C언어

[홍정모의 따라하며 배우는 C언어] 5.9 표현식과 문장 ~ 5.12 함수의 인수와 매개변수

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

 

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com