Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그래밍

  1. 상향식(Bottom-Up) 모델 vs 하향식(Top-Down) 모델, 핵심 차이점 완벽 정리

    소프트웨어 및 시스템 설계에는 서로 반대 방향에서 접근하는 두 가지 대표적인 방법론이 있습니다. 바로 상향식(Bottom-Up) 모델과 하향식(Top-Down) 모델입니다. 두 방식은 설계의 출발점, 사용되는 프로그래밍 언어, 데이터 중복성, 모듈 간 상호작용 등 여러 면에서 뚜렷한 차이를 보입니다. 이 글에서는 각 모델의 개념을 살펴보고, 6가지 핵심 기준으로 두 모델을 비교해 보겠습니다. 상향식(Bottom-Up) 모델이란? 상향식 모델은 시스템을 구성하는 개별 부분(컴포넌트)을 가장 세부적인 수준에서 먼저 정의하고 설계하는 방

  2. C/C++에서 비트 AND(&)와 논리 AND(&&) 연산자의 차이점 완벽 정리

    C/C++에서 비트 AND(bitwise AND)는 &로 표현되고, 논리 AND(logical AND)는 &&로 표현됩니다. 두 연산자는 이름이 비슷하지만 동작 방식과 용도가 완전히 다르기 때문에, 이 차이를 정확히 이해하는 것은 버그를 예방하고 올바른 코드를 작성하는 데 매우 중요합니다.1. 연산 대상과 반환 값의 차이논리 AND(&&)는 불리언(Boolean) 표현식에만 사용되며, 결과 역시 참(true) 또는 거짓(false)인 불리언 값으로 반환됩니다.비트 AND(&)는 int, s

  3. C와 C++에서 같은 코드가 다른 결과를 내는 이유와 대표적인 차이점

    동일한 소스 코드라도 C 컴파일러로 빌드했을 때와 C++ 컴파일러로 빌드했을 때 서로 다른 결과가 나오는 경우가 있습니다. 두 언어는 문법이 매우 비슷해 보이지만, 내부적으로 처리하는 방식에 중요한 차이가 존재하기 때문입니다. 이 글에서는 그런 대표적인 사례들을 살펴보겠습니다. 1. 문자 리터럴(Character Literal)의 크기 차이 C에서는 문자 리터럴(예: a)이 int 타입으로 취급되지만, C++에서는 char 타입으로 취급됩니다. 따라서 sizeof() 연산자로 크기를 확인하면 C에서는 4바이트, C++에서는 1바이

  4. C 언어로 렌즈의 초점 거리를 구하는 프로그램

    렌즈로부터의 상거리(image distance)와 물거리(object distance), 이 두 개의 실수 값이 주어졌을 때 렌즈의 초점 거리를 계산하여 출력하는 것이 이번 글의 목표입니다.초점 거리란 무엇인가?광학 시스템에서 초점 거리(focal length)란 렌즈 또는 곡면 거울의 중심과 그 초점 사이의 거리를 의미합니다.아래 그림을 통해 좀 더 쉽게 이해해 보겠습니다.위 그림에서 i는 물체(object)를 나타내고, F는 형성된 물체의 상(image)이며, f는 렌즈의 초점 거리입니다.초점 거리 계산 공식렌즈로부터 상의 초점

  5. FCFS CPU 스케줄링 알고리즘 구현하기: C 프로그램 완벽 가이드

    개요n개의 프로세스(P1, P2, P3, ..., Pn)와 각 프로세스의 실행 시간인 버스트 타임(Burst Time)이 주어졌을 때, FCFS(First Come, First Served) CPU 스케줄링 알고리즘을 이용해 평균 대기 시간과 평균 반환 시간(Turnaround Time)을 구하는 것이 이 글의 목표입니다.대기 시간과 반환 시간이란?반환 시간(Turnaround Time): 프로세스가 시스템에 제출된 시점부터 실행이 완료될 때까지의 전체 시간 간격을 의미합니다.반환 시간 = 프로세스 완료 시간 − 프로세스 제출 시간

  6. C언어 연결 리스트로 구현하는 우선순위 큐(Priority Queue)

    정수 형태의 데이터와 우선순위(priority) 값을 입력받아, 주어진 우선순위에 따라 연결 리스트를 구성하고 그 결과를 출력하는 것이 이번 글의 목표입니다.우선순위 큐란 무엇인가?큐(Queue)는 FIFO(First In, First Out, 선입선출) 방식의 자료구조로, 가장 먼저 삽입된 요소가 가장 먼저 제거됩니다. 반면 우선순위 큐(Priority Queue)는 각 요소가 지닌 우선순위에 따라 삽입과 삭제가 이루어지는 큐의 한 종류입니다. 우선순위 큐는 큐, 스택 또는 연결 리스트 자료구조를 활용하여 구현할 수 있으며, 다음

  7. C/C++ 우선순위 큐(Priority Queue) 완벽 정리: 개념, 구현 방법, 삽입·삭제 알고리즘

    우선순위 큐란 무엇인가?우선순위 큐(Priority Queue)는 각 요소에 부여된 우선순위(priority)에 따라 삽입과 삭제가 이루어지는 특수한 형태의 큐입니다. 여기서 우선순위는 일반적으로 0부터 10 사이의 정수 값으로 표현되며, 0이 가장 높은 우선순위, 10이 가장 낮은 우선순위를 의미합니다.우선순위 큐의 두 가지 기본 규칙우선순위가 높은 데이터나 요소가 낮은 우선순위의 요소보다 먼저 처리됩니다.두 요소의 우선순위가 같다면, 리스트에 추가된 순서대로 처리됩니다(선입선출, FIFO).우선순위 큐의 구현 방법우선순위 큐는

  8. C 프로그램이 자기 자신의 소스 코드를 출력하는 방법

    이번 글에서는 작성된 C 프로그램 자신의 소스 코드를 그대로 출력하는 방법을 알아보겠습니다. 즉, 자기 자신의 소스를 화면에 출력하는 C 프로그램을 작성하는 것입니다.핵심 아이디어: 파일 시스템 활용가장 간단한 방법은 C의 파일 시스템을 활용하는 것입니다. 예를 들어 코드를 code1.c라는 파일에 작성했다면, 해당 파일을 읽기 모드로 열어 파일의 모든 내용을 읽은 뒤 출력 화면에 결과를 표시하면 됩니다.하지만 파일을 읽기 모드로 열기 전에, 현재 작성 중인 파일의 이름을 알아야 한다는 문제가 있습니다. 이때 유용하게 사용할 수 있

  9. C/C++ 프로세스 동기화 완벽 정리: 임계 영역부터 세마포어까지

    프로세스 동기화(Process Synchronization)는 여러 프로세스가 공유 데이터에 동시에 접근할 때 발생할 수 있는 데이터 불일치(data inconsistency) 문제를 해결하기 위한 기술입니다. 협력 프로세스(cooperating process)란 다른 프로세스에 영향을 주거나 영향을 받는 프로세스를 의미하며, 이러한 관계는 프로세스 간 데이터 불일치를 초래할 수 있습니다. 따라서 데이터의 일관성을 보장하기 위해 프로세스 동기화가 반드시 필요합니다.임계 영역(Critical Section) 문제모든 프로세스에는 임계

  10. C 언어에서 scanf() 뒤에 fgets()/gets()/scanf()를 사용할 때 발생하는 입력 문제와 해결법

    C 언어에서 scanf() 함수 다음에 fgets(), gets() 또는 또 다른 scanf()를 호출하면 의도하지 않은 동작이 발생할 수 있습니다. 원인은 표준 입력 버퍼에 개행 문자(newline)가 남아 있기 때문인데, 이 글에서는 두 가지 대표적인 상황을 예제와 함께 살펴보고 해결 방법까지 알아보겠습니다. 1. scanf() 다음에 fgets()/gets()를 사용하는 경우 scanf()로 정수를 입력받은 직후 fgets()나 gets()로 문자열을 입력받으면, 문자열 입력이 아무것도 받지 못하고 건너뛰어지는 현상이 나타

  11. C 언어로 구현하는 최소 비용 경로(Minimum Cost Path) 프로그램

    문제 개요 이번 글에서는 C 언어로 최소 비용 경로(Minimum Cost Path) 문제를 해결하는 방법을 살펴보겠습니다. 2차원 행렬의 각 칸에는 이동 비용이 부여되어 있으며, 왼쪽 상단 모서리에서 출발해 오른쪽 하단 모서리에 도달하는 경로 중 이동 비용이 최소인 경로를 찾아야 합니다. 단, 임의의 칸에서는 아래쪽 또는 오른쪽 칸으로만 이동할 수 있습니다. 이 문제는 단순 재귀 호출보다 동적 계획법(Dynamic Programming)으로 접근하는 것이 훨씬 효율적입니다. 비용 행렬 cost[ ][ ]와 위치 (m, n)이 주어

  12. C 프로그래밍으로 배열 끝까지 도달하는 최소 점프 횟수 구하기

    문제 설명음이 아닌 정수로 이루어진 배열이 주어지며, 각 원소는 해당 위치에서 앞으로 이동할 수 있는 최대 걸음 수를 나타냅니다. 포인터는 처음에 배열의 첫 번째 인덱스(0번 인덱스)에 위치하고, 목표는 최소한의 점프 횟수로 배열의 마지막 인덱스에 도달하는 것입니다. 만약 배열의 끝에 도달하는 것이 불가능하다면 최대 정수값(INT_MAX)을 출력해야 합니다.단순 접근법(Naive Approach)가장 기본적인 방법은 첫 번째 원소에서 시작하여, 그 원소에서 도달 가능한 모든 원소에 대해 재귀적으로 호출하는 것입니다. 즉, 시작점에서

  13. C 언어로 구현하는 Naive 패턴 검색 알고리즘 완벽 가이드

    C에서의 패턴 매칭은 하나의 문자열 안에 다른 문자열이 존재하는지 찾는 작업입니다. 예를 들어, algorithm이라는 문자열이 naive algorithm 문자열 내에 포함되어 있는지 확인하고, 발견되면 해당 위치(인덱스)를 출력합니다. 이를 위해 두 개의 문자 배열을 받아 일치하면 위치를 반환하고, 그렇지 않으면 -1을 반환하는 함수를 작성할 수 있습니다.입력 및 출력 예시Input: txt = HERE IS A NICE CAP pattern = NICE Output: Pattern found at index 10 In

  14. C 언어로 구현하는 라빈-카프(Rabin-Karp) 알고리즘: 효율적인 패턴 검색 완벽 가이드

    C 언어에서의 패턴 매칭(Pattern Matching)이란 하나의 문자열 안에 다른 문자열이 존재하는지 찾는 작업을 의미합니다. 예를 들어, naive algorithm이라는 문자열 안에 algorithm이라는 문자열이 포함되어 있는지 확인하고, 발견되면 해당 위치(인덱스)를 출력하는 것입니다. 이를 위해 두 개의 문자 배열을 입력받아 매칭에 성공하면 위치를 반환하고, 실패하면 -1을 반환하는 함수를 작성할 수 있습니다.입력: txt = HERE IS A NICE CAP pattern = NICE 출력: 인덱스 10에서 패

  15. C 언어로 구현하는 기수 정렬(Radix Sort) 완벽 가이드

    기수 정렬(Radix Sort)이란?정렬 알고리즘(sorting algorithm)은 리스트의 요소들을 특정한 순서대로 배열하는 알고리즘입니다. 가장 널리 사용되는 순서는 수치적 순서(numerical order)와 사전식 순서(lexicographic order)입니다.기수 정렬(Radix Sort)은 요소 간 비교를 수행하지 않는 비비교(non-comparative) 정렬 알고리즘으로, 정렬되지 않은 리스트를 처리할 때 가장 선호되는 알고리즘 중 하나입니다.기수 정렬은 동일한 자릿수(place value)를 가진 숫자끼리 그룹화

  16. C 언어로 배우는 행렬 곱셈과 행렬 정규화: 개념부터 구현까지

    행렬 곱셈의 조건두 행렬의 곱셈은 모든 경우에 가능한 것이 아니라, 반드시 특정 조건을 만족해야만 수행할 수 있습니다. 두 행렬 P와 Q가 있고, 각각의 차원이 P(a × b), Q(z × y)라고 가정해 보겠습니다. 이때 두 행렬의 곱셈이 성립하려면 P의 열 개수(b)와 Q의 행 개수(z)가 반드시 같아야 합니다. 조건이 만족되면 결과 행렬 R의 크기는 (a × y)가 됩니다.행렬 곱셈 알고리즘위 조건을 바탕으로 한 행렬 곱셈의 의사 코드(pseudocode)는 다음과 같습니다.matrixMultiply(P, Q): P의 차원은

  17. C/C++ 역추적(Backtracking)으로 푸는 부분집합 합 문제

    역추적(Backtracking)이란?역추적은 복잡한 최적화 및 탐색 문제를 해결하는 대표적인 알고리즘 기법입니다. 문제를 단계별로 진행하면서, 현재 경로가 해답으로 이어질 수 없다고 판단되면 즉시 해당 경로를 포기하고 이전 상태로 되돌아가(백트래킹) 다른 가능성을 탐색합니다. 이러한 가지치기 과정 덕분에 불필요한 탐색을 줄여 전체 완전 탐색보다 효율적으로 동작할 수 있습니다.부분집합 합(SubSet Sum) 문제부분집합 합 문제는 주어진 집합에서 원소들을 선택하여, 선택된 원소들의 합이 목표 숫자 K와 정확히 일치하는 부분집합을 찾

  18. C 언어로 배우는 활동 선택 문제: 그리디 알고리즘 완벽 정리

    활동 선택 문제(Activity Selection Problem)는 시작 시간과 종료 시간이 주어진 여러 활동 중에서, 동시에 단 하나의 활동만 수행할 수 있는 사람이 선택할 수 있는 활동들을 찾는 고전적인 알고리즘 문제입니다.이 문제에서는 다음에 수행할 활동을 선택하기 위해 그리디 알고리즘이 활용됩니다. 먼저 그리디 알고리즘이 무엇인지 살펴보겠습니다.그리디 알고리즘이란?그리디 알고리즘(Greedy Algorithm)은 문제를 단계별로 나누어 각 단계마다 해답을 찾아가는 방식의 알고리즘입니다. 다음 단계를 선택할 때, 알고리즘은 나

  19. C 언어로 구현하는 이진 탐색(Binary Search): 반복문과 재귀 방식 총정리

    이진 탐색(Binary Search)은 정렬된 배열에서 특정 요소(목표값)의 위치를 빠르게 찾아내는 대표적인 탐색 알고리즘입니다. 이진 탐색을 적용하기 전에는 배열이 반드시 사전에 정렬되어 있어야 한다는 점을 기억하세요. 이진 탐색은 로그 검색(logarithmic search), 바이너리 초프(binary chop), 절반 구간 탐색(half interval search)이라는 이름으로도 알려져 있습니다. 이진 탐색의 작동 원리 이진 탐색 알고리즘은 찾으려는 요소를 배열의 중간(middle) 요소와 먼저 비교하고, 그 비교 결과

  20. C 언어에서 다양한 글꼴과 크기로 컬러 텍스트 출력하기

    개요C/C++ 프로그래밍 언어는 사용자가 원하는 형태로 출력 화면을 자유롭게 꾸밀 수 있는 강력한 기능을 제공합니다. 이러한 그래픽 관련 함수들은 graphics.h 헤더 파일에 포함되어 있으며, 이 라이브러리를 활용하면 다양한 도형을 그리고, 텍스트의 색상을 지정하고, 글꼴과 크기를 변경하며, 출력 배경을 설정하는 등의 작업을 손쉽게 수행할 수 있습니다.그럼 지금부터 C/C++ 프로그래밍에서 출력 텍스트를 꾸미는 데 사용되는 주요 함수들의 동작 방식을 하나씩 살펴보겠습니다.1. setcolor() – 텍스트 색상 변경setcolo

Total 1443 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:42/73  20-컴퓨터/Page Goto:1 36 37 38 39 40 41 42 43 44 45 46 47 48