scanf() 함수, 진법 변환, 산술연산자와 변수 메모리 이해


\ \\C언어에서 입력 함수 scanf의 원리와 사용법, 2진수·8진수·10진수·16진수 등 다양한 진법 변환 방법, 산술 연산자(+ - * / %), 그리고 변수와 메모리의 관계를 집중적으로 다룬다. 각 개념을 실제 코드와 예시, 그리고 메모리와 데이터 흐름 관점에서 쉽게 설명한다.

1. 진법 변환의 원리와 방법

  • 컴퓨터는 2진수(0, 1)로 데이터를 처리하지만, 사람이 보기 쉽도록 8진수, 10진수, 16진수로도 표현한다.
  • 10진수를 2진수로 변환할 때는 정수는 2로 나누기, 소수는 2를 곱하기 방법을 쓴다.
  • 2진수와 8진수, 16진수는 각각 3자리, 4자리씩 묶어서 변환할 수 있다.
진법 범위 변환 특징 C언어 서식문자
2진수 0, 1 컴퓨터 내부 데이터 표현 -
8진수 0~7 2진수 3자리씩 묶음 %o (소문자 o)
10진수 0~9 사람이 주로 사용하는 진법 %d
16진수 0~9, A~F 2진수 4자리씩 묶음, 10~15는 A~F로 표기 %x, %X
  • 8진수는 %o, 16진수는 %x(소문자), %X(대문자)로 출력한다. 대문자 O는 사용하지 않는다.
  • 16진수 리터럴은 0xA4D처럼 0x를 앞에 붙인다.

2. scanf 함수와 입력 처리

  • scanf 함수는 키보드로부터 데이터를 입력받아 변수에 저장한다.
  • 입력받을 변수 앞에는 &(주소 연산자)를 반드시 붙여야 한다. 예: scanf("%d", &n);
  • 입력받은 값은 변수의 메모리 공간에 저장된다.
int n;
printf("숫자를 입력하세요.\n");
scanf("%d", &n);
printf("입력한 숫자는 '%d'입니다.\n", n);
  • 주소(&n)와 값(n)의 차이를 이해해야 한다. &n은 변수의 메모리 주소, n은 변수에 저장된 값이다.
  • 주소를 %x, %X로 출력하면 변수의 실제 메모리 주소가 16진수로 출력된다.

3. 산술 연산자와 변수 연산

  • 산술 연산자는 +, -, *, /, % 등이 있다.
  • 정수형 변수끼리 나눗셈(/)을 하면 몫만 출력되고, 실수 결과를 원하면 double형으로 변환해야 한다.
  • % 연산자는 나머지를 구하는 연산자다.
  • a += b, a -= b, a *= b, a /= b 등 복합 대입 연산자도 자주 사용된다.
  • 증감 연산자 ++a, a++는 위치에 따라 동작 시점이 다르다(전위/후위).
연산자 설명 예시 결과
+ 덧셈 a+b 13 (a=10, b=3)
- 뺄셈 a-b 7
* 곱셈 a*b 30
/ 나눗셈(몫) a/b 3 (정수 나눗셈)
% 나머지 a%b 1
  • 실수 결과가 필요하면 double형 변수를 사용하고, 나눗셈 연산도 double로 해야 한다.
  • printf에서 %5.2f처럼 소수점 이하 자리수와 전체 자리수를 지정할 수 있다.

4. 변수, 메모리, 주소의 관계

  • 변수 선언은 메모리 공간을 확보하는 과정이다.
  • 변수의 값은 메모리 주소에 저장되고, &변수명은 그 주소를 의미한다.
  • 입력, 출력, 연산 등 모든 과정에서 변수와 메모리, 주소의 관계를 명확히 이해하는 것이 중요하다.

5. 주요 용어 정리

  • scanf: 키보드 입력 함수, &변수명으로 주소를 전달
  • 진법 변환: 2, 8, 10, 16진수 상호 변환
  • 산술 연산자: +, -, *, /, % 등 기본 연산자
  • 복합 대입 연산자: +=, -=, *=, /= 등
  • 증감 연산자: ++, -- (전위/후위)
  • 메모리 주소: 변수의 실제 저장 위치, &로 참조

정리

scanf 함수와 진법 변환, 산술 연산자, 변수와 메모리의 원리를 익히면 C언어에서 입력/출력/연산/저장 등 프로그램의 기본 흐름을 정확히 이해할 수 있다. 각 연산자와 서식문자, 주소와 값의 차이, 진법 변환 원리를 반복 실습하며 자연스럽게 익혀두는 것이 중요하다.
728x90

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

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

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