스택(Stack)은 선형 자료구조의 한 종류로, 데이터를 한쪽 끝에서만 삽입하고 삭제할 수 있는 구조입니다. 이러한 LIFO(Last In First Out) 특성 덕분에 수식 계산, 괄호 검사, 함수 호출 관리 등 다양한 분야에서 활용됩니다.스택 기본 연산 알고리즘Push( ) — 데이터 삽입먼저 스택 오버플로우(overflow) 여부를 확인합니다.if (top == n-1) printf(stack over flow);오버플로우가 아니라면, top 위치를 하나 증가시킨 후 요소를 삽입합니다.top++; a[top] = ite
연결 리스트를 제대로 이해하려면 먼저 C 언어에서 배열의 단점과 포인터의 장점을 알아두는 것이 좋습니다. 이 두 가지 개념이 연결 리스트가 탄생한 배경이기 때문입니다.배열의 단점배열은 정적 메모리 할당(static memory allocation) 방식을 사용합니다.선언 시 크기를 미리 정해야 하므로 실제 사용량보다 많이 선언하면 메모리 낭비가 발생합니다.반대로 필요한 크기보다 작게 선언하면 메모리 부족 문제가 생기며, 실행 중에 크기를 늘릴 수 없습니다.포인터의 장점포인터를 활용하면 동적 메모리 할당(dynamic memory a
연결 리스트(Linked List)란?연결 리스트는 동적 메모리 할당(dynamic memory allocation) 방식을 사용하는 자료구조로, 데이터의 양에 따라 크기가 유연하게 늘어나거나 줄어듭니다. 연결 리스트는 여러 개의 노드(node)가 모여 이루어진 집합체로 정의되며, 각 노드는 데이터(data)와 링크(link)라는 두 부분으로 구성됩니다.데이터, 링크, 그리고 연결 리스트의 전체 구조는 아래 그림과 같이 표현됩니다.연결 리스트의 주요 연산C 언어에서 연결 리스트에 수행할 수 있는 대표적인 연산은 다음 세 가지입니다.
C 프로그래밍 언어에서 제어문(control statement)은 특정 문장 집합을 반복해서 실행해야 할 때 사용됩니다. C 언어에서 제공하는 대표적인 반복문은 다음과 같습니다. for문 while문 do-while문 for문과 while문에서는 조건식이 루프가 실행될 횟수를 결정합니다. for문 예제 for (k = 1; k<=5; k++) 위 코드에서 루프는 k가 5 이하일 때까지 실행되며, k가 5보다 커지는 순간 제어가 루프 밖으로 빠져나갑니다. 즉, for문의 조건식이 곧 루프의 실행 횟수를 지정하는 역할을 합니
개요C 프로그래밍 언어는 프로그램 실행 도중 한 문장에서 다른 문장으로 제어를 건너뛰는 점프문(jump statement)을 지원합니다. 대표적인 점프문으로는 break, continue, return, goto 네 가지가 있으며, 각각의 용도와 동작 방식이 서로 다릅니다. 이 글에서는 네 가지 점프문의 개념, 문법, 예제 코드와 실행 결과를 하나씩 살펴보겠습니다.1. break 문break는 반복문을 강제로 종료하거나 블록을 빠져나올 때 사용하는 키워드입니다.반복문(for, while, do-while)이나 switch 블록을 즉
문제 정의사용자가 콘솔에 입력한 특정 문자가 문장 안에서 몇 번 반복되는지 세는 프로그램을 작성해 보겠습니다. 이때 strlen() 함수를 활용하여 해당 문자의 반복 횟수를 화면에 출력하는 것이 목표입니다.해결 방법문장 속에서 특정 문자의 개수를 세기 위해 사용한 핵심 로직은 다음과 같습니다.실행 시점에 사용자에게 문장을 입력받습니다.printf(Enter a sentence\n); gets(str);이어서 세고 싶은 문자 하나를 입력받습니다.printf(Enter a character to check how many times i
C 언어를 배우는 초보 개발자에게 숫자 맞추기 게임은 조건문(if~else)과 반복문(do~while)의 동작 원리를 익히기에 가장 좋은 실습 예제입니다. 이 글에서는 프로그램에 미리 저장된 숫자를 사용자가 맞히는 게임을 C 언어로 구현하고, 각 시도마다 힌트를 제공하는 방법까지 단계별로 살펴봅니다. 문제 정의 프로그램 안에는 이미 어떤 숫자가 상수로 초기화되어 있습니다(예제에서는 64). 사용자는 이 숫자가 무엇인지 직접 입력하여 맞혀야 하며, 사용자가 값을 입력할 때마다 프로그램은 다음과 같은 힌트를 제공합니다. 입력한 값이
문제 정의switch-case 문을 활용하여 삼각형, 정사각형, 원, 직사각형, 평행사변형의 넓이를 계산하는 C 프로그램을 작성해 보겠습니다.해결 방법사용자가 선택한 메뉴 번호(case 번호)에 따라 각 도형의 넓이가 계산됩니다. 각 도형별 넓이 계산 공식은 다음과 같습니다.삼각형의 넓이 — 헤론의 공식(Herons Formula)을 사용합니다. 세 변 a, b, c를 입력받아 다음과 같이 계산합니다.s=(float)(a+b+c)/2;area=(float)(sqrt(s*(s-a)*(s-b)*(s-c)));먼저 세 변의 합을 2로 나
비트 연산자(Bitwise Operator)는 피연산자의 개별 비트, 즉 이진수 값 단위로 동작하는 연산자입니다. 시프트 연산을 활용하면 곱셈이나 나눗셈 같은 산술 연산을 매우 빠르게 처리할 수 있어 임베디드 프로그래밍이나 성능 최적화에서 자주 사용됩니다.C 언어의 주요 비트 연산자연산자설명&비트 AND|비트 OR^비트 XOR<<왼쪽 시프트(Left Shift)>>오른쪽 시프트(Right Shift)~1의 보수(Ones Complement)비트 AND(&) 진리표두 비트가 모두 1일 때만 결과가
C 언어에서 저장 클래스(Storage Class)는 변수의 범위(scope), 생존 기간(lifetime), 그리고 연결(binding)을 결정하는 중요한 요소입니다. 변수를 완전하게 정의하려면 자료형(type)뿐만 아니라 저장 클래스까지 함께 명시해야 합니다. 변수 이름은 컴퓨터 메모리 내의 특정 물리적 위치를 식별하며, 그 위치에는 변수의 값을 저장하기 위한 비트들이 할당됩니다. 저장 클래스가 알려주는 정보 저장 클래스를 통해 다음과 같은 사항들을 파악할 수 있습니다. 변수가 어디에 저장되는가? (메모리 또는 CPU 레지스터
저장 클래스(Storage Class)는 변수의 범위(scope), 수명(lifetime), 그리고 연결(linkage)을 결정하는 중요한 요소입니다. 변수를 완전하게 정의하려면 자료형(type)뿐만 아니라 저장 클래스까지 함께 명시해야 합니다. 변수 이름은 컴퓨터 메모리 내의 특정 물리적 위치를 가리키며, 그곳에는 변수의 값을 저장하기 위한 비트들이 할당되어 있습니다. 저장 클래스가 알려주는 정보 저장 클래스를 지정하면 다음과 같은 사항들을 알 수 있습니다. 변수가 어디에 저장되는가? (메모리 또는 CPU 레지스터) 아무것도
저장 클래스(Storage Class)의 개념 C 언어에서 저장 클래스(storage class)는 변수의 범위(scope), 수명(lifetime), 그리고 바인딩(binding)을 결정합니다. 변수를 완전하게 정의하려면 데이터 타입뿐만 아니라 저장 클래스까지 함께 명시해야 합니다. 변수 이름은 컴퓨터 메모리 내의 특정 물리적 위치를 가리키며, 그 위치에는 변수 값을 저장하기 위한 비트들이 할당되어 있습니다. 저장 클래스가 알려주는 핵심 정보는 다음과 같습니다. 변수가 어디에 저장되는가? (메모리 또는 CPU 레지스터) 아무것
C 언어에서 함수는 값에 의한 호출(Call by Value)과 참조에 의한 호출(Call by Reference), 두 가지 방식으로 호출할 수 있습니다. 어떤 방식을 선택하느냐에 따라 함수 간 데이터 통신 방식이 달라지므로, 상황에 맞는 올바른 선택이 중요합니다. 호출된 함수 안에서 실제 매개변수(실인수)의 값이 변경되지 않아야 한다면 → 값에 의한 전달(Pass by Value)을 사용합니다. 호출된 함수 안에서 실제 매개변수의 값이 변경되어야 한다면 → 참조에 의한 전달(Pass by Reference)을 사용합니다. 함수
연결 리스트(Linked List)는 동적 메모리 할당(dynamic memory allocation)을 사용하는 자료구조로, 필요에 따라 크기가 늘어나거나 줄어듭니다. 즉, 여러 개의 노드(Node)가 모여 이루어진 집합이라고 할 수 있습니다.노드는 두 가지 부분으로 구성됩니다.데이터(Data): 실제 저장되는 값링크(Link): 다음 노드를 가리키는 포인터(주소)연결 리스트의 주요 연산연결 리스트에서 수행할 수 있는 대표적인 연산은 다음 세 가지입니다.삽입(Insertion)삭제(Deletion)순회(Traversing)삭제(D
문제 정의 런타임에 입력받은 문자열에서 while 루프를 사용해 각 인덱스의 문자가 공백인지 하나씩 검사하면서, 문장에 포함된 모든 공백을 제거하는 프로그램을 작성해 보겠습니다. 해결 방법 먼저 아래 예시를 살펴보겠습니다. 이 프로그램은 입력된 문자열에서 모든 공백을 제거합니다. 예를 들어 입력 문자열이 Tutorials Point C Programming이라면, 공백이 모두 제거된 결과는 TutorialsPointCProgramming이 됩니다. C 언어에서 문자(character)들이 연속적으로 배열된 것을 문자열(strin
문제 정의 프로그램 실행 중에 사용자로부터 입력받은 문장에서, 각 인덱스의 문자를 하나씩 검사하는 방식으로 문자열 사이의 여분 공백(연속된 중복 공백, 문자열 맨 앞의 공백)을 모두 제거하는 것이 이번 예제의 목표입니다. 해결 방법 예를 들어 Tutorials Point C Programming처럼 공백이 여러 개 섞여 있는 문자열이 있다고 가정해 보겠습니다. 프로그램을 실행하면 중복된 공백이 제거되어 Tutorials Point C Programming처럼 단
문제 정의ASCII(American Standard Code for Information Interchange, 미국 정보 교환 표준 부호)는 컴퓨터가 문자를 숫자로 표현하기 위해 사용하는 표준 인코딩 방식입니다. 이번 글에서는 문자형 변수를 별도로 정수형으로 초기화하지 않고, 서식 지정자(format specifier)만을 활용해 0부터 255까지의 ASCII 값을 출력하는 방법을 알아보겠습니다.해결 방법여기서는 이해를 돕기 위해 65부터 122까지만 출력하는 프로그램을 작성해 보겠습니다. 이 범위에는 영문 대소문자 A~Z, a~
문자열(String)이란? C 언어에서 여러 개의 문자들이 하나의 배열로 묶인 것을 문자열(string)이라고 부릅니다. 문자열은 마지막에 널 문자(\0)를 포함한다는 점이 일반적인 문자 배열과 다릅니다. 문자열 선언 문자열은 아래와 같은 형식으로 선언합니다. char stringname [size]; 예를 들어 char string[50];은 최대 50글자를 저장할 수 있는 문자열을 선언한 것입니다. 문자열 초기화 문자열을 초기화하는 방법에는 크게 두 가지가 있습니다. 1. 단일 문자 상수 사용 각 문자를 요소로 나열하고 마
정렬(Sorting)이란?정렬은 데이터 요소들을 오름차순 또는 내림차순 순서로 배열하는 과정을 의미합니다. 정렬된 데이터는 탐색 속도를 크게 향상시키기 때문에 프로그래밍에서 매우 중요한 기초 개념입니다.C 언어의 주요 정렬 기법C 언어에서 널리 사용되는 대표적인 정렬 알고리즘은 다음과 같습니다.버블 정렬(Bubble Sort) – 인접한 두 요소를 반복적으로 비교·교환하며 정렬선택 정렬(Selection Sort) – 최솟값을 찾아 앞쪽에 차례로 배치삽입 정렬(Insertion Sort) – 각 요소를 이미 정렬된 부분의 올바른 위
정렬(Sorting)은 데이터 요소들을 오름차순 또는 내림차순으로 배열하는 과정을 말합니다. 효율적인 정렬 알고리즘을 선택하는 것은 프로그램 성능에 큰 영향을 미치며, 그중에서도 퀵 정렬(Quick Sort)은 가장 널리 사용되는 정렬 기법 중 하나입니다. 정렬의 종류 C 언어에서 활용되는 대표적인 정렬 기법은 다음 다섯 가지가 있습니다. 버블 정렬(Bubble Sort, 교환 정렬) 선택 정렬(Selection Sort) 삽입 정렬(Insertion Sort, 선형 정렬) 퀵 정렬(Quick Sort, 분할 교환 정렬) 병합 정