프로그래밍 언어/C언어

2024.6.23 [혼자 공부하는 C언어] - c프로그램의 구조와 데이터 출력방법

U_Pong 2024. 6. 23. 19:30

2024.6.23

학부 시절, 교양 과목으로 C언어 프로그래밍 이라는 수업을 들은 적이 있다.

하지만, 프로그래밍 언어를 배운 것을 교양 수업이 전부이기에, 거의 드문드문 기억나는 수준이 되어버렸다.

때문에 Harman 세미콘 아카데미 수업에서 받은 <혼자 공부하는 C언어>라는 교재를 가지고 ATmega 128a와 관련된 C언어에 대해 공부하려 한다.

혼자 공부하는 C언어는 비주얼 스튜디오 2022 커뮤니티 컴파일러를 사용한다.


< 프로그램과 main 함수 구조 > - 교재53p ~

main 함수는 head, body로 구성된다.

머리는 함수 원형이라고 하며, 함수의 이름과 필요한 데이터 등을 표시한다.

함수에서 실행할 일은 몸통의 중괄호{} 안에 작성하며

몸통의 마지막에는 return 0;을 넣어 프로그램을 종료한다.

 

몸통 부분에는 함수에서 실행할 일을 적으며, 아래와 같은 규칙을 따라야 한다.

1. ; 를 사용하여 문장의 끝을 표시한다.

2. 한 줄에 한 문장씩 작성한다.

3. 일정한 간격으로 들여 쓴다.

 

주석은 다음과 같이 2가지의 형태로 표현한다.

/* ~*/ : /*과 */사이의 모든 내용을 주석처리

// : //부터 해당 줄의 끝까지 주석처리

해당 줄의 주석처리를 하려면 단축키는 ctrl+shift+/ 이다.

 

 

< 문자열 출력: 출력함수(printf)의 사용법 >

#include <stdio.h> 라는 형식은

stdio.h 파일의 내용을 프로그램 안에 복사한다는 의미이다.

stdio.h에는 C언어에서 기본으로 사용하는 입출력 함수가 들어있다.

 

문자열을 화면에 출력하는 printf는 줄을 바꿔 출력하려면 추가로 적어주어야 하는 것이 있다.

 

 

<제어 문자 출력 >

제어 문자를 문자열 안에 포함시키면 그 기능에 따라 형태를 바꾼다.

\n : 다음 줄로이동

\t : 다음 탭 위치로 이동(커서가 1~8번 사이에 있다면 다음 탭 위치인 9번으로 이동)

\b : 한 칸 왼쪽으로 이동

\r : 맨 앞으로 이동

\a : 벨소리

 

 

< 정수와 실수 출력 >

숫자를 출력할 때는 변환 문자를 사용해서 문자열로 변환하는 과정이 필요하다.

정수는 %d, 실수는 %lf 를 사용한다

 

숫자를 출력할 때는 printf("변환 문자", 숫자)의 형식으로 쓰인다.

 

%lf 로 실수를 출력하면 소수점 이하 여섯째 자리까지 출력된다.

소수점의 자릿수를 바꾸려면 %와 lf 사이에 소수점을 찍고 자릿수를 지정해야 한다.

예를 들어, %.1lf 라고 쓰면 소수점 이하 첫쨰 자리까지 출력(둘째 자리에서 반올림)한다는 의미이다.

 

변환 문자를 여러 개 사용하려면 변환 문자의 개수와 출력할 값의 개수가 일치해야 하며, 앞에서부터 차례대로 출력된다.

 

 

< 정수 상수 표현법 >

정수 상수는 10진수, 8진수, 16진수로 표현할 수 있다.

10진법: 0~9까지 10개의 숫자를 사용

8진법: 0~7까지 8개의 숫자를 사용하므로 8을 표현하려면 자릿수가 올라가서 10(일영)이 된다.

16진수: 0~9까지 10개의 숫자 + A~F까지 6개의 영문자를 사용

 

C언어에서는 8진수일 경우 숫자 앞에 0, 16진수의 경우 0x를 붙여 구분하여 작성한다.

10진수로 12를 나타낸다고 예를 들어보면,

8진수는 014, 16진수는 0xc 로 표현하면 된다.

 

 

< 실수 상수 표현법 >

실수는 소수점 형태와 지수 형태로 표현할 수 있다.

예를 들어, 0.0000314 를 지수 형태로 바꾼다면 3.14 x 10^-5가 될 것이다.

이를 C언어 표기법으로 바꾸면 3.14e-5 가 된다. x 10을 e로 표현하고, 지수는 그 옆에 숫자로 표기하는 형식이다.

 

%le 는 소수점 형태의 실수를 변환하여 지수 형태로 출력하는 것이다.

소수점 이하 지릿수를 지정하려면 % 와 le 사이에 점을 찍고 원하는 숫자를 함께 사용한다.

 

 

< 문자와 문자열 상수 표현법 >

문자는 ' ' 로 묶고, 문자열은  " " 로 묶는다.

문자와 문자열을 출력할 대도 변환문자를 사용하는데, 문자는 %c, 문자열은 %s를 사용한다.

 

 

< 정수가 컴파일된 후의 비트 형태 >

1비트는 0, 1 과 같이 2개의 값을 갖는다.

비트가 8개이면 이를 1byte라고 한다. 2^8 = 256이니 1바이트의 값은 256가지 이다.

 

정수는 0을 포함한 양수와 음수로 나뉜다.

 

먼저 양수의 변환에 대해 알아보자

정수를 컴파일 하면 4비트 크기의 2진수로 변환된다. 예를 들어 13을 컴파일하려면 2진수로 1101인데

4비트로 표현해야하므로 0000_0000_0000_0000_0000_0000_0000_1101 이다.

1을 갖는 비트가 왼쪽에 위치할 수록 값의 크기가 커진다.

모든 비트가 1인 2진수를 10진수로 바꾸면 255이므로 8비트로  표현할 수 있는 값의 범위는 0~255이다.

 

다음으로 음수의 변환에 대해 알아보자

음수는 절댓값을 2의 보수로 바꾸어 처리한다. 2의 보수란 2진수의 0과 1을 바꾼 상태에서 1을 더한 값이다.

예를 들어 -10은 절댓값인 10을 2진수로 바꾸고 0과 1을 바꾼 후, 다시 1을 더해 2의 보수로 만든다.

10 : 0000_0000_0000_0000_0000_0000_0000_1010

0과 1을 바꾸기 -> 1111_1111_1111_1111_1111_1111_1111_0101

-> 1 더하기 ->1111_1111_1111_1111_1111_1111_1111_0110

음수를 2의 보수로 처리하는 이유는, 바로 양수와 음수로 더할 수 있기 때문이다.

예로 들은 10과 -10의 모든 비트를 더하면 가장 왼쪽의 비트에서 자리 올림이 발생하고, 남은 비트는 모두 0이 되어 결과적으로 값 자체가 0이 된다.


c프로그램의 구조와 데이터 출력방법 끝!