printf() 함수와 서식문자, 변수와 메모리의 이해


C언어에서 가장 많이 사용하는 출력 함수가 printf다. 이번 시간에는 printf 함수의 다양한 서식문자(%d, %g, %c 등)와 변수와 메모리의 관계, 그리고 실제로 데이터를 어떻게 저장하고 출력하는지 실습 예제와 함께 자세히 알아본다.

1. printf() 함수와 서식문자

  • printf 함수는 화면에 문자열, 정수, 실수, 문자 등 다양한 형태의 데이터를 출력한다.
  • 서식문자는 %로 시작하며, 출력할 데이터의 타입에 따라 다르게 사용한다.
  • 문자열은 큰따옴표(" ")로, 문자 하나는 홑따옴표(' ')로 감싼다.
  • \n은 줄바꿈(new line), \t는 탭(tab) 등 특수문자도 함께 쓸 수 있다.

2. 주요 서식문자와 사용 예시

서식문자 의미 예시 출력 결과
%d 10진수 정수 printf("%d", 100); 100
%g, %f 실수(부동소수점) printf("%g", 5.5); 5.5
%c 문자 1개 printf("%c", 65); A (아스키코드 65)
%s 문자열 printf("%s", "Hello"); Hello
%% % 기호 출력 printf("100%%"); 100%
  • 정수는 %d, 실수는 %g 또는 %f, 문자는 %c, 문자열은 %s를 사용한다.
  • 실수형 데이터를 %d로 출력하면 0이 나오거나 이상한 값이 나올 수 있으니, 반드시 데이터형에 맞는 서식문자를 사용해야 한다.

3. 변수와 메모리의 관계

  • 변수는 데이터를 저장하는 메모리 공간이다. 선언할 때 데이터형을 함께 지정한다.
  • int a; // 정수형 변수 a 선언 (메모리 공간만 확보)
  • a = 10; // 변수 a에 10을 저장 (2진수로 변환되어 메모리에 저장)
  • int a = 10; // 선언과 동시에 초기화
  • 변수에 값을 넣을 때는 = (대입 연산자)를 사용한다. 오른쪽 값을 왼쪽 변수에 저장한다.
  • 하나의 변수는 한 번만 선언해야 하며, 같은 이름의 변수를 중복 선언하면 오류가 발생한다.

4. 데이터의 연산과 출력

  • printf 함수의 인자(괄호 안)는 연산이 가능하다. 예를 들어, printf("%d", a+1);처럼 변수의 값을 연산해서 출력할 수 있다.
  • 문자열 내의 +, =, * 등은 연산이 아니라 문자 그대로 출력된다.
  • 실제 연산은 괄호 밖에서 이루어지고, 결과만 출력된다.

5. 아스키코드와 문자 출력

  • 아스키코드는 문자와 숫자를 컴퓨터가 인식할 수 있는 2진수 코드로 변환한 표준이다.
  • 예를 들어, 65를 %c로 출력하면 문자 A가 나온다.
  • 아스키코드는 문자, 숫자, 특수문자, 제어문자 등 다양한 기호를 7비트(8비트 포함)로 표현한다.
  • 패리티 비트는 데이터 전송 시 오류 검출을 위해 1의 개수를 짝수(또는 홀수)로 맞추는 방식이다.

6. 변수 선언, 대입, 메모리 저장 예시

코드 설명
int a; 정수형 변수 a 선언(메모리 공간만 확보)
a = 10; 변수 a에 10을 저장(2진수 변환 후 저장)
int b = 50; 선언과 동시에 50 저장
printf("%d", a); 변수 a의 값을 정수로 출력
printf("%d", b+1); 변수 b의 값에 1을 더해 출력(연산 가능)

7. 주요 용어 정리

  • 서식문자(conversion specifier): 출력 데이터의 형식을 지정하는 기호(%d, %f, %c 등)
  • 변수(variable): 데이터를 저장하는 메모리 공간
  • 데이터형(data type): 변수에 저장되는 값의 종류(int, double, char 등)
  • 아스키코드(ASCII): 문자와 숫자를 2진수로 변환하는 표준 코드
  • 패리티 비트(parity bit): 데이터 전송 오류 검출용 비트

정리

printf 함수에서 서식문자를 올바르게 사용하는 것이 C언어 출력의 핵심이다. 변수는 메모리 공간과 데이터형을 반드시 선언해야 하며, 데이터의 타입에 따라 서식문자를 맞춰야 원하는 결과를 얻을 수 있다. 아스키코드와 메모리 저장 방식, 연산과 출력의 차이까지 이해하면 C언어의 기초 로직과 데이터 흐름을 명확히 파악할 수 있다.
728x90

'C++' 카테고리의 다른 글

[C++] scanf() 함수  (0) 2025.05.07
C++의 프로그램 구조  (0) 2025.05.01

 프로그램 구조


컴퓨터 프로그래밍의 시작은 프로그램의 구조와 실행 원리를 이해하는 데서 출발한다. 이 글에서는 C언어의 기본 프로그램 구조와  변수, 출력 함수의 핵심 개념을 실제 코드 예시와 함께 정리한다.

1. C언어 기본 프로그램 구조 이해

  • C언어 프로그램의 첫 줄은 #include <stdio.h>로 시작한다.
    • #은 전처리 지시자(preprocessor)로, 컴파일 전에 필요한 파일을 미리 포함시키는 역할을 한다.
    • stdio.h는 표준 입출력 함수들이 들어있는 헤더파일이다. printf, scanf 등 사용 시 반드시 포함해야 한다.
  • main 함수는 모든 C 프로그램의 시작점이자 중심이다.
    • 프로그램에는 main 함수가 하나만 존재해야 하며, 프로그램의 실행 흐름을 담당한다.
    • main 함수의 시작과 끝은 중괄호({ })로 감싼다. 중괄호는 반드시 쌍으로 사용해야 한다.
  • printf 함수는 화면에 원하는 문자열이나 값을 출력한다.
    • 출력할 문자열은 쌍따옴표(" ")로 감싼다.
    • 문자 하나를 출력할 때는 홑따옴표(' ')를 사용한다.
    • 문장 끝에는 반드시 세미콜론(;)을 붙여야 한다.

2. Dev C++ 프로그램 구조

  • Dev C++은 가볍고 강력한 무료 C언어 개발 환경이다.
  • 프로그램 설치 후, 새 소스파일을 만들고 아래와 같은 기본 코드를 입력한다.
#include <stdio.h>

int main() {
    printf("Hello\nWorld!\n");
    return 0;
}
  • 실행 결과는 HelloWorld!가 줄을 바꿔서 출력된다.
  • \n은 줄바꿈(new line), \t는 탭(tab)으로 출력 위치를 조정한다.

3. 변수와 데이터형, 서식문자

  • 변수는 데이터를 저장하는 메모리 공간이며, 데이터형을 지정해야 한다.
데이터형 설명 서식문자(printf) 예시
int 정수형 (4바이트) %d int grade = 3;
char 문자형 (1바이트) %c char letter = 'Y';
double 실수형 (8바이트) %f, %5.2f double cost = 34.567;
  • printf에서 %d, %c, %f, %5.2f 등 서식문자를 사용해 변수의 값을 원하는 형태로 출력할 수 있다.

4. 주석과 들여쓰기

  • 주석은 코드에 대한 설명을 달 때 사용하며, 프로그램 실행에는 영향이 없다.
  • // : 한 줄 주석, /* ... */ : 여러 줄 주석
  • 코드의 가독성을 높이기 위해 들여쓰기를 지키는 것을 지향한다.

5. 조건문(if, else)과 중괄호 사용

  • 조건문 if는 특정 조건이 참일 때만 코드를 실행한다.
  • if (num == 10) { ... } 처럼 ==는 '같다'를 의미하는 비교 연산자이다.
  • else if, else를 활용해 다양한 분기 처리가 가능하다.
  • 실행할 문장이 2개 이상이면 반드시 중괄호({ })로 묶어야 한다.

6. 용어 정리

  • 헤더파일(header file): 표준 함수와 선언이 들어있는 파일, #include로 포함시킨다.
  • main 함수: 프로그램의 시작점이자 중심, 반드시 하나만 존재해야 한다.
  • printf: 화면에 문자열이나 값을 출력하는 함수
  • 변수(variable): 데이터를 저장하는 메모리 공간(이름과 데이터형 필요)
  • 주석(comment): 코드 설명, // 또는 /* ... */로 작성
  • 세미콜론(;): 명령문 끝, 문장 종료 표시
  • 중괄호({ }): 코드 블록의 시작과 끝

정리

C언어의 기본 프로그램 구조와 Dev C++ 실습을 통해, 컴퓨터가 코드를 해석하고 실행하는 기본 원리, 변수와 데이터형, 출력 함수, 조건문, 주석 등 핵심 개념을 익힐 수 있다. 코드를 직접 입력하고 실행해보는 반복 연습이 프로그래밍 실력 향상의 지름길이며, 기본 문법과 구조를 자연스럽게 익혀두는 것이 이후의 모든 프로그래밍 학습의 토대가 된다.
728x90

'C++' 카테고리의 다른 글

[C++] scanf() 함수  (0) 2025.05.07
[C++] printf() 함수  (0) 2025.05.02

2진수 체계와 디지털 코드


1. 2진수 체계의 기본

  • 2진수는 0과 1 두 개의 숫자로 모든 수와 정보를 표현하는 체계다.
  • 정수부의 각 자리는 오른쪽에서 왼쪽으로 2의 거듭제곱 가중치를 가진다.
  • 소수부의 각 자리는 2의 음의 거듭제곱 가중치를 가진다.
  • 비트(bit)는 2진수의 최소 단위이며, 바이트(byte)는 8비트로 구성된다.
진법 기호 사용 숫자 특징
2진수 (2) 0, 1 컴퓨터의 기본 수 체계
8진수 (8) 0~7 2진수 3자리씩 묶어 변환
16진수 (16) 0~9, A~F 2진수 4자리씩 묶어 변환

2. 진법 변환 방법

  • 10진수 → 2진수: 정수는 2로 나누기 반복, 소수는 2를 곱하기 반복
  • 2진수 → 10진수: 각 자리의 2의 거듭제곱 값을 합산
  • 2진수 ↔ 8진수: 2진수 3자리씩 묶어서 변환
  • 2진수 ↔ 16진수: 2진수 4자리씩 묶어서 변환

3. 2진수 연산과 보수

  • 덧셈/뺄셈: 자리올림, 자리내림 규칙 적용
  • 1의 보수: 0↔1로 변환
  • 2의 보수: 1의 보수에 1을 더함
  • 부호비트: 0(양수), 1(음수)
  • 2의 보수 표현은 컴퓨터에서 음수 연산에 가장 널리 사용된다.

4. 디지털 코드와 정보 표현

  • BCD(Binary Coded Decimal): 10진수 0~9를 4비트 2진수로 표현, 1010~1111은 무효
  • ASCII: 7비트로 영문자, 숫자, 기호를 표현
  • 패리티 비트: 오류 검출용 비트(짝수/홀수 패리티)
  • CRC: 순환 중복 검사, 오류 검출 코드
용어 설명
바이트(Byte) 8비트의 묶음
LSB/MSB 최하위/최상위 비트

정리

2진수 체계는 컴퓨터의 기본적인 수 표현 방식이며, 진법 변환, 2의 보수, BCD, ASCII 등 다양한 디지털 코드가 정보 표현과 오류 검출에 활용된다.
각 진법의 변환 원리와 디지털 코드의 특징을 이해하면 컴퓨터 내부 데이터 처리 구조를 쉽게 파악할 수 있다.
728x90

신호 변환과 변조


1. 정보, 데이터, 신호의 개념

정보(information)는 예를 들어 "비가 온다"와 같은 사실이나 의미를 가진다. 이 정보를 멀리 있는 누군가에게 전달하기 위해 0과 1 같은 데이터(data)로 바꾼다. 실제로 공간을 이동하는 것은 전자기파와 같은 신호(signal)다. 데이터와 신호는 각각 아날로그와 디지털 두 가지 형태로 구분한다.

2. 아날로그와 디지털의 구분

  • 아날로그(Analog): 연속적(continuous)이고, 값이 부드럽게 변화한다. 예: 목소리, 음악, 영상, 실수
  • 디지털(Digital): 불연속적(discrete)이고, 값이 단계적으로 변화한다. 예: 문자, 정수, 컴퓨터 데이터(0/1)
신호 역시 아날로그 신호(연속 파형)와 디지털 신호(펄스, 불연속 신호)로 나뉜다.

3. 데이터와 신호의 조합에 따른 변환 방식

데이터 신호 방식 설명
아날로그 아날로그 아날로그 변조 AM, FM, PM 등
아날로그 디지털 PCM Pulse Code Modulation (A/D 변환)
디지털 디지털 라인코딩 Unipolar, Polar, Bipolar 등
디지털 아날로그 디지털 변조 ASK, FSK, PSK, QAM 등

4. 디지털 전송: PCM과 라인코딩

  • PCM(Pulse Code Modulation): 아날로그 데이터를 디지털 신호로 변환하는 방식이다. 3단계(표본화 Sampling → 양자화 Quantizing → 부호화 Encoding)로 진행된다. 표본화 정리(Nyquist theorem)에 따라 원 신호의 최고 주파수의 2배 이상으로 샘플링해야 한다.
  • 라인코딩(Line Coding): 디지털 데이터를 디지털 신호로 바꾸는 방식이다. Unipolar, Polar(NRZ, RZ, Biphase/Manchester), Bipolar(AMI) 등 다양한 방식이 있다.

5. 아날로그 변조

  • AM(Amplitude Modulation): 반송파의 진폭을 정보신호에 따라 변화시킨다.
  • FM(Frequency Modulation): 반송파의 주파수를 정보신호에 따라 변화시킨다.
  • PM(Phase Modulation): 반송파의 위상을 정보신호에 따라 변화시킨다.
아날로그 변조는 라디오(AM, FM) 등에서 사용된다. 펄스 변조(PAM, PPM, PWM)도 있으나, 주로 디지털 전송과 연관된다.

6. 디지털 변조

  • ASK(Amplitude Shift Keying): 디지털 데이터에 따라 진폭을 바꾼다.
  • FSK(Frequency Shift Keying): 디지털 데이터에 따라 주파수를 바꾼다.
  • PSK(Phase Shift Keying): 디지털 데이터에 따라 위상을 바꾼다. BPSK, QPSK, 8-PSK 등으로 확장된다.
  • QAM(Quadrature Amplitude Modulation): 진폭과 위상을 동시에 바꾼다. 16-QAM, 64-QAM 등 고속 데이터 전송에 사용한다.
  • MSK(Minimum Shift Keying): PSK와 FSK를 결합한 방식으로, 대역폭 효율이 높다.
디지털 변조는 주로 모뎀에서 사용되며, 신호의 대역폭 효율과 잡음 내성에 따라 다양한 방식이 선택된다.

7. 동기 검파와 비동기 검파

  • 동기 검파(Coherent Detection): 송신기와 수신기의 위상을 일치시켜 복조한다. PSK, QAM 등에서 사용한다.
  • 비동기 검파(Noncoherent Detection): 위상 정보를 사용하지 않고 복조한다. AM, DPSK, MSK 등에서 사용한다.

8. 주요 용어 및 정리

  • CODEC: 아날로그-디지털 변환 및 복원 장치
  • DSU: 디지털 데이터를 디지털 신호로 바꾸는 장치(라인코딩)
  • 모뎀(Modem): 디지털 데이터를 아날로그 신호로 변환/복원하는 장치
  • Eye Pattern: 디지털 신호의 ISI(Inter Symbol Interference) 측정 그래프
  • Nyquist Theorem: 최고 주파수의 2배로 샘플링해야 원 신호 재생 가능

정리

아날로그와 디지털 데이터 및 신호의 개념, PCM과 라인코딩, 아날로그 변조와 디지털 변조의 원리를 살펴보았다. 데이터와 신호는 각각 아날로그와 디지털로 나뉘며, 실제 통신에서는 데이터의 특성과 전송 거리에 따라 다양한 변환 및 변조 방식이 사용된다. PCM은 아날로그 데이터를 디지털로 바꾸는 대표적인 방식이고, 라인코딩은 디지털 데이터를 디지털 신호로 바꾼다. 아날로그 변조(AM, FM, PM)는 주로 라디오 등에서, 디지털 변조(ASK, FSK, PSK, QAM 등)는 데이터 통신과 모뎀에서 널리 활용된다. 각 방식의 원리와 특징을 정확히 이해하는 것이 데이터통신의 핵심임을 다시 한 번 확인한다.
728x90

'데이터통신' 카테고리의 다른 글

회선구성과 교환방식  (0) 2025.05.05
다중화 기술  (0) 2025.05.03
전송방식과 전송매체  (0) 2025.04.26
OSI 참조모델  (0) 2025.04.23
정보통신과 데이터통신의 개요  (0) 2025.04.19

운영체제와 시스템 소프트웨어의 개요


1. 시스템 소프트웨어란?

  • 시스템 소프트웨어는 컴퓨터 시스템 전체를 작동시키는 프로그램이다.
  • 대표적으로 운영체제(OS)가 있으며, 하드웨어 관리, 자원 할당, 프로그램 실행, 인터럽트 관리, 장치 관리를 담당한다.

2. 시스템 소프트웨어의 구성

구성요소 주요 역할
제어 프로그램 시스템 작동 상태 감시, 작업 우선순위 지정, 데이터 관리
감시 프로그램 프로그램 실행과 시스템 상태 감시
작업 제어 프로그램 작업 순서 관리, 자원 할당, 스케줄링
자료 관리 프로그램 데이터 전송, 자료 유지보수
처리 프로그램 운영자 요청 작업 처리, 언어 번역/서비스/문제 프로그램

3. 언어 번역 프로그램과 서비스 프로그램

  • 언어 번역 프로그램: 소스코드를 기계어로 변환(컴파일러, 어셈블러, 인터프리터)
  • 서비스 프로그램: 연결 편집기, 정렬/합병, 라이브러리 관리, 유틸리티(에디터, 디버거 등)

정리

운영체제와 시스템 소프트웨어는 컴퓨터 하드웨어의 효율적 관리와 사용자의 편리한 환경 제공을 담당한다.
제어 프로그램, 감시 프로그램, 언어 번역기, 서비스 프로그램 등 다양한 요소가 유기적으로 동작하여 시스템 전체를 안정적으로 운영한다.
시스템 소프트웨어의 구조와 역할을 이해하면 컴퓨터의 기본 동작 원리를 쉽게 파악할 수 있다.
728x90

'컴퓨터시스템' 카테고리의 다른 글

ALU (Arithmetic Logic Unit)  (0) 2025.05.04
2진수 체계와 디지털 코드  (0) 2025.04.30
컴퓨터 시스템의 개요 2  (0) 2025.04.25
CPU (Central Processing Unit)  (0) 2025.04.24
컴퓨터 시스템의 개요  (0) 2025.04.19