<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ce_velog.log</title>
        <link>https://velog.io/</link>
        <description>:)</description>
        <lastBuildDate>Sun, 23 Feb 2025 13:32:37 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. ce_velog.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/chae_velog" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[혼공학습단] 혼자 공부하는 C언어 13기 회고록]]></title>
            <link>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B8-13%EA%B8%B0-%ED%9A%8C%EA%B3%A0%EB%A1%9D</link>
            <guid>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B8-13%EA%B8%B0-%ED%9A%8C%EA%B3%A0%EB%A1%9D</guid>
            <pubDate>Sun, 23 Feb 2025 13:32:37 GMT</pubDate>
            <description><![CDATA[<p><strong>회고록</strong>
처음에 혼공 학습단을 참여하게 된 계기는 C언어를 공부하기 전 파이썬을 공부했습니다. 
파이썬 공부 이후 혼자 코딩을 하면서 공부하는 것이 가장 저한테 맞는 적합한 방법인 것 같았습니다. 
그래서 이번 방학 때는 C언어를 혼공학습단 활동과 함께 하기로 결심했습니다. 
다른 학습단분들의 활동, 블로그로 정리하고 올리는 과정, 매 챕터에 직접 코딩할 수 있는 예제 등을 통해 많이 배울 수 있었습니다.
특히 4주차, 5주차 학습은 늦게 해서 활동 참여를 못했지만 마지막 6주차는 학습단 활동을 할 수 있어서 다행인 것 같습니다. 
학습단이 없었다면 4주차 이후 학습 활동을 그만두고 C언어 공부를 나중으로 미루었을 수도 있었을 것 같습니다.
그래도 학습단 활동이 있어서 6주차까지 C언어 공부를 끌어올 수 있었습니다. 학습단 활동은 끝나지만 지금까지 한 기본편 복습 후 남은 고급편도 열심히 하겠습니다. 
학습단분들과 지금까지 이끌어주신 족장님 다들 수고 많으셨습니다. 
특히 족장님께는 많은 감사를 드립니다.
<img src="https://velog.velcdn.com/images/chae_velog/post/c811f10b-72ce-4f6a-b05a-4eae4bfa1dc4/image.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공학습단] 혼자 공부하는 C언어 6주차]]></title>
            <link>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B4-6%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B4-6%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 23 Feb 2025 13:02:57 GMT</pubDate>
            <description><![CDATA[<p><em><strong>[chapter 09 포인터]</strong></em></p>
<p><strong>09-1 포인터의 기본 개념</strong></p>
<ul>
<li><p>메모리의 주소</p>
</li>
<li><p>프로그램이 사용하는 메모리의 위치를 주소 값으로 식별</p>
</li>
<li><p>메모리의 위치를 식별하는 주소 값은 바이트 단위로 구별</p>
<pre><code> int a;
 4바이트 전체를 a라는 이름으로 사용</code></pre></li>
<li><p>주소 연산자 (&amp;변수명)</p>
</li>
<li><p>주소는 변수가 할당된 메모리 공간의 시작 주소 (시작 주소를 알면 그 위치부터 변수의 크기만큼 메모리를 사용)</p>
</li>
<li><p>시작 주소를 확인하고 변수의 크기를 알아내면 변수가 메모리의 어디서부터 어디가지 할당되었는지 확인 가능</p>
<pre><code> int형 변수a의 주소 : 2750392
 =&gt; 변수 a는 2750392~2750395번까지 4바이트에 할당</code></pre></li>
<li><p>포인터와 간접 참조 연산자 (=포인터 연산자)</p>
<pre><code>포인터는 변수의 메모리 주소를 저장하는 변수, 변수처럼 선언하고 사용
int *pa;
자료형 *변수명;    // 주소 위치에 있는 변수의 자료형 사용</code></pre><pre><code>포인터(pa)가 어떤 변수(a)의 주소를 저장한 경우 &#39;가리킨다&#39;로 표현
pa -&gt; a : 포인터pa로 변수a로 사용가능
포인터가 가리키는 변수를 사용 시 포인터 연산자(*) 사용</code></pre></li>
<li><p>여러 가지 포인터 사용하기
<img src="https://velog.velcdn.com/images/chae_velog/post/e2d85c8e-04d8-4c4e-b799-c9366643d7b9/image.PNG" alt=""></p>
</li>
<li><p>const를 사용한 포인터
const 예약어를 포인터에 사용하면 이는 가리키는 변수의 값을 바꿀 수 없다는 의미, 대표적인 예로 문자열 상수를 인수로 받는 함수</p>
</li>
</ul>
<p><strong>09-2 포인터 완전 정복을 위한 포인터 이해하기</strong></p>
<ul>
<li><p>주소와 포인터의 차이</p>
</li>
<li><p>주소는 시작 주소 값 자체, 포인터는 값을 저장하는 또다른 메모리 공간 (포인터는 다른 주소를 대입해 그 값을 바꿀 수 있고, 주소는 상수이므로 대입연산자 왼쪽에 올 수 없음)</p>
</li>
<li><p>주소와 포인터의 크기
모든 주소와 포인터는 가리키는 자료형과 상관없이 그 크기가 같다는 것
(sizeof 연산자로 확인)</p>
</li>
<li><p>포인터의 대입 규칙
포인터는 가리키는 변수의 형태가 같을 때만 대입</p>
<pre><code>// 오류 발생 코드 (변수 p와 pd는 자료형이 다르다)
#include &lt;stdio.h&gt;

int main(void)
{
    int a = 10;        // 고치기: double a = 10.0으로 고치면 실행 결과가 10.00000으로 나옴
    int* p = &amp;a;
    double* pd;

    pd = p;
    printf(&quot;%lf\n&quot;, *pd);

    return 0;
}</code></pre></li>
<li><p>포인터를 사용하는 이유
메모리에 직접 접근하는 경우나 동적할당한 메모리를 사용하는 경우에는 포인터가 반드시 필요함</p>
</li>
<li><p>기본 숙제: 포인터의 핵심 내용을 정리하고 공유
=&gt; 블로그 내용</p>
</li>
<li><p>추가 숙제: 도전 실전 예제
<img src="https://velog.velcdn.com/images/chae_velog/post/3231b20c-2718-403b-9a8b-6a9bd2433b8e/image.PNG" alt="">
<img src="https://velog.velcdn.com/images/chae_velog/post/0eee0937-34f2-4207-8ddd-c9be4fd34973/image.PNG" alt=""></p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공학습단] 혼자 공부하는 C언어 5주차]]></title>
            <link>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B4-5%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B4-5%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 23 Feb 2025 13:02:40 GMT</pubDate>
            <description><![CDATA[<p><strong><em>[chapter 08 배열]</em></strong></p>
<p><strong>08-1 배열의 선언과 사용</strong></p>
<ul>
<li><p>배열의 선언 </p>
</li>
<li><p>배열은 선언을 통해 저장공간 확보, 하나씩 선언하지 않고 하나의 이름으로 변수를 여러 개 선언</p>
</li>
<li><p>선언 방법: 요소의 자료형에 이름을 붙이고 필요한 선언의 개수를 표시</p>
<pre><code> int ary[5];
 자료형 배열명 요소개수</code></pre></li>
<li><p>배열의 사용</p>
</li>
<li><p>배열 요소는 배열의 나누어진 조각을 의미, 배열명에 첨자를 붙여 표현</p>
</li>
<li><p>선언의 대괄호: 배열 요소의 전체 개수, 사용의 대괄호: 배열에서 각 요소의 위치</p>
</li>
<li><p>배열 초기화</p>
</li>
<li><p>배열은 원하는 값을 가지기 위해 선언과 동시에 {}로 묶어서 초기화</p>
</li>
<li><p>배열의 초기화는 선언 시 최초 한 번만 가능</p>
</li>
<li><p>초기화 방법</p>
<pre><code> 1. 기본 초기화
 int ary[5] = {1,2,3,4,5};
 =&gt; 첫 번째 요소부터 차례로 초기화

 2. 초기값이 배열 요소의 개수보다 적은 경우
 int ary[5] = {1,2,3};
 =&gt; 왼쪽부터 차례로 초기화하고 남은 배열 요소는 모두 0

 3. 자동 초기화 기능
 int ary[1000] = {0};
 =&gt; 배열 요소 개수 상관없이 쉽게 0으로 초기화

 4. 배열 요소 개수 생략
 int ary[] = {1,2,3};
 =&gt; 초기값 개수만큼 배열 요소 개수를 정하고 저장 공간 할당

 5. double형과 cha형 배열을 선언하고 초기화
 double ary[5] = {1.0, 2.1, 3.2, 4.3, 5.4};
 char ary[5] = {&#39;a&#39;, &#39;p&#39;, &#39;p&#39;, &#39;l&#39;, &#39;e&#39;};</code></pre></li>
<li><p>배열과 반복문</p>
</li>
<li><p>연속된 배열 요소를 일일이 변수처럼 하나씩 떼어서 사용 =&gt; 배열 활용 X</p>
</li>
<li><p>배열과 반복문의 활용으로 많은 데이터를 쉽게 대응</p>
</li>
<li><p>sizeof 연산자를 활용한 배열 처리</p>
</li>
<li><p>배열 요소의 개수를 계산해 반복문에 사용</p>
<pre><code> 배열 요소의 개수 = sizeof(배열명) / sizeof(배열 요소)
 예) count = sizeof(score) / sizeof(score[0]);</code></pre></li>
<li><p><em>08-2 문자를 저장하는 배열*</em></p>
</li>
<li><p>char형 배열의 선언과 초기화</p>
</li>
<li><p>저장할 문자열의 길이보다 최소한 하나 이상 크게 배열 =&gt; 널문자를 저장하기 위해서</p>
</li>
<li><p>중괄호 없이 문자열 상수로 초기화</p>
<pre><code> char str[80] = &quot;applejam&quot;;</code></pre><ul>
<li><p>널문자 (\0)</p>
</li>
<li><p>char형 배열에 저장된 0</p>
</li>
<li><p>아스키 코드 값이 0인 문자</p>
</li>
<li><p>문자의 끝을 표시하여 함수가 문자열을 정확히 출력</p>
</li>
<li><p>주의</p>
<pre><code>  1. 초기화 하지 않은 상태에서 배열 요소에 문자를 대입한다면 반드시   마지막 문자 다음에 널문자를 대입
   2. 배열의 크기는 최대한 넉넉하게
   3. 배열 요소의 개수는 최소한 문자열 길이 + 1
</code></pre></li>
</ul>
</li>
<li><p>문자열 대입
strcpy 함수: char형 배열에 새로운 문자열을 저장하는 함수</p>
<pre><code>strcpy(저장될 배열명, 저장할 문자열)
 첫 번째 인수는 충분히 커야 하고, 문자열 상수를 사용 불가
 두 번째 인수는 문자열 상수 뿐만 아니라 배열명도 사용 가능
 올바른 예) strcpy(str1, &quot;tiger&quot;); 
           strcpy(str2, str1);
 잘못된 예) strcpy(&quot;lion&quot;, &quot;tiger&quot;);
</code></pre></li>
<li><p>문자열 전용 입출력 함수: gets, puts
gets 함수는 빈칸을 포함해 한 줄 전체를 문자열로 입력, 짝을 이루는 문  자열 출력 함수 puts</p>
<pre><code>gets(char형 배열명)
:엔터 누르기 전까지를 하나의 문자열로 배열에 저장 (빈칸이나 탭 문자 가능)/ 널문자를 붙여 문자열의 끝을 표시/ 배열의 크기 고려
puts 함수
:문자열 출력 함수 (문자열 출력 후 자동으로 줄을 바꾸는 기능 O)</code></pre></li>
<li><p>널문자에 대해 추가 코딩</p>
<pre><code>널문자가 없는 문자열로 OK 이후로 쓰레기 값이 출력됨
=&gt; 08행 이후 printf 전에 str[2] = &#39;\0&#39;;을 넣어서 문자열의 끝을 알리는 널문자 추가
#include &lt;stdio.h&gt;

int main(void)
{
    char str[5];

    str[0] = &#39;O&#39;;
    str[1] = &#39;K&#39;;
    printf(&quot;%s\n&quot;, str);

    return 0;
}</code></pre></li>
<li><p>기본숙제 및 추가숙제: 블로그 내용</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공학습단] 혼자 공부하는 C언어 4주차]]></title>
            <link>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B4-4%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B4-4%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 23 Feb 2025 13:02:08 GMT</pubDate>
            <description><![CDATA[<p><em><strong>[chapter 07 함수]</strong></em></p>
<p><strong>07-1 함수의 작성과 사용</strong></p>
<ul>
<li><p>함수 정의</p>
</li>
<li><p>함수를 만드는 것 (함수 이름, 필요한 데이터, 수행 후 결과 고려)</p>
<pre><code> 반환형 함수명(매개변수1, 매개변수2) : 함수원형
 {
     // 함수가 수행하는 명령. 결과값(매개변수1+매개변수2)를 돌려보냄
 }</code></pre></li>
<li><p>함수 호출과 반환</p>
</li>
<li><p>먼저 함수 호출 후 함수 사용</p>
</li>
<li><p>함수 호출에 입력된 인수는 호출된 함수의 매개변수에 사용된다</p>
</li>
<li><p>함수의 실행을 끝내고 호출한 곳으로 돌아가기 위해/ 값을 호출한 곳으로 반환하기 위해 return문을 사용)</p>
</li>
<li><p>함수 선언</p>
</li>
<li><p>함수 원형에 세미 콜론 붙이기</p>
</li>
<li><p>함수 정의가 있는데 함수 선언이 필요한 이유</p>
</li>
</ul>
<p><strong>07-2 여러 가지 함수 유형</strong></p>
<ul>
<li><p>매개변수가 없는 함수</p>
</li>
<li><p>호출한 함수로부터 값을 받을 필요가 없으므로 매개변수 불필요한 경우</p>
</li>
<li><p>매개변수 자리에 void를 적어 매개변수 없음 정의</p>
</li>
<li><p>반환값이 없는 함수</p>
</li>
<li><p>호출한 곳으로 특별히 값을 반환할 필요가 없는 경우</p>
</li>
<li><p>선언과 정의의 반환형에 void를 적어 반환값 없음 정의</p>
</li>
<li><p>반환값이 없는 함수는 return문을 생략 가능 (return문이 없어도 함수의 코드를 모두 수행하면 호출한 곳으로 자동으로 돌아감)</p>
</li>
<li><p>return문은 함수 어디서든 사용 가능</p>
</li>
<li><p>매개변수와 반환값이 모두 없는 함수</p>
</li>
<li><p>같은 내용을 단지 화면에 출력하는 함수의 경우</p>
</li>
<li><p>매개변수와 반환형 모두 void 사용: void 함수명(void)</p>
</li>
<li><p>재귀호출 함수</p>
</li>
<li><p>함수 안에서 자기 자신을 호출</p>
</li>
<li><p>함수 안에 재귀호출을 멈추는 조건이 없을 시 계속 호출되어 계속 출력되는 경우가 발생 =&gt; 중간에 종료되는 비정상적 종료 발생</p>
</li>
<li><p>재귀호출과 반복문의 차이점</p>
</li>
<li><p>재귀호출 함수의 경우 최초 호출한 곳이 아니라 이전에 호출했던 곳으로 돌아감</p>
</li>
<li><p>재귀호출은 하나의 함수에서 코드를 반복 실행하는 듯하지만, 실제로는 새로운 함수를 실행</p>
</li>
<li><p>기본 숙제: 블로그 작성 내용</p>
</li>
<li><p>추가 숙제
함수는 할당된 스택 메모리를 모두 사용하게 되어 스택 오버플로우 현상     발생으로 무한으로 출력되지 않고 종료
<img src="https://velog.velcdn.com/images/chae_velog/post/5b5509eb-af65-4826-ab87-10b746be9912/image.PNG" alt=""></p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공학습단] 혼자 공부하는 C언어 3주차]]></title>
            <link>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B4-3%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B4-3%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 26 Jan 2025 14:37:14 GMT</pubDate>
            <description><![CDATA[<p><em>글을 작성할 때는 괜찮은데 올리고 나면 중첩반복문 코드 그림이 제일 처음으로 올라오는 오류가 발생
_
_<strong>[chapter 05 선택문]~[chapter 06 반복문]</strong></em></p>
<p><strong>05-1 if문</strong></p>
<ul>
<li><p>if문의 기본형식
  -기본 if문은 조건식을 만족하면 실행문 실행, 그렇지 않으면 실행하지 않고 지나감</p>
<pre><code>/* a의 값이 10보다 클 때만 b에 a를 대입하는 if문 */ 
if (a &gt; 10)
{
    b = a;
}</code></pre></li>
<li><p>if ~ else문</p>
</li>
<li><p>조건이 만족하지 못할 때에도 실행문이 있는 경우</p>
<pre><code> /* 변수 a가 0보다 크거나 같으면 a에 1을 대입하고 0보다 작으면 -1을 대입하는 경우 */
 if (a &gt;= 0)
 {
     a = 1;
 }
 else
 {    
     a = -1;
 }    </code></pre></li>
<li><p>if ~ else if ~ else문</p>
</li>
<li><p>3개 이상의 실행문에서 반드시 하나를 선택하는 경우</p>
<pre><code>   /* 변수 a의 값에 따라 b의 값을 1,2,3 중 선택하는 경우 */
   if (a &gt; 0)
   {
       b = 1;
   }
   else if (a == 0)
   {
       b = 2;
   }
   else
   {
       b = 3;
   }    </code></pre></li>
</ul>
<p><strong>05-2 if문 활용과 switch ~ case문</strong></p>
<ul>
<li><p>if문 중첩</p>
</li>
<li><p>선행 조건이 있을 시 if문 안에 if문 넣어 사용</p>
</li>
<li><p>if ~ else if ~ else문도 if ~ else문이 중첩된 구조</p>
<pre><code>   /* if 중첩 + if ~ else문 사용 */
   if (a &gt; 10)
   {
       if (b &gt;= 0)
       {
           b = 1;
       }
       else
       {
           b = -1;
       }

      }</code></pre><ul>
<li>else 결합 문제</li>
</ul>
</li>
<li><p>if ~ else문 안에 단독으로 if문을 쓸 때에는 반드시 중괄호가 필요, 컴파일러는 if문이 중첩된 경우 else를 가장 가까운 if와 연결하기 때문에 오류가 날 수도 있음</p>
</li>
<li><p>switch ~ case문</p>
</li>
<li><p>여러 개의 상수 중 조건에 해당하는 하나를 골라 실행하는 것</p>
</li>
<li><p>규칙: 조건식으로 정수식만 사용, case는 break (해당 블록 탈출) 를 포함</p>
</li>
<li><p>break는 필요에 따라 생략할 수는 있지만 switch ~ case문은 대부분 다중 선택구문으로 쓰여서 잘못 생략 시 코드 잘못 작성할 수도 있음</p>
<pre><code>   switch ( 조건식 )
   {
   case 상수식1:
        실행문1;
        break;
   case 상수식2:
        실행문2;
        break;
   default:
        실행문3;
        break;
    }        </code></pre></li>
<li><p><em>06-1 while문, for문, do ~ while문*</em></p>
</li>
<li><p>while문</p>
</li>
<li><p>while문은 조건식을 먼저 검사하고 조건식이 참이 동안 실행문을 반복</p>
</li>
<li><p>while문의 조건식을 만족하지 못하면 while문을 끝내고 while문 이후의 문장을 실행</p>
<pre><code>   /* a가 10보다 작은 동안 두 배씩 반복적으로 늘리는 구문 */
   while (a &lt; 10)
   {
       a = a * 2;
   }</code></pre></li>
<li><p>for문</p>
</li>
<li><p>실행문을 원하는 횟수만큼 반복할 때 사용</p>
</li>
<li><p>for문은 초기식 (최초 한 번 실행), 조건식, 증감식</p>
<pre><code>   for (i = 0; i &lt; 3; i++)
   {
       a = a * 2;
   }</code></pre></li>
<li><p>do ~ while문</p>
</li>
<li><p>반복할 문자을 수행한 후에 조건을 검사</p>
</li>
<li><p>실행문이 조건식 앞에 있어서 조건과 관계없이 실행문을 최소한 한 번은 실행 (조건식이 참인 동안 실행문 반복)</p>
<pre><code>   /* a값이 10보다 작은 동안 두 배씩 늘리는 문장 */
   do
   {
       a = a * 2;
   } while (a &lt; 10);</code></pre></li>
</ul>
<p><strong>06-2 반복문 활용</strong></p>
<ul>
<li><p>중첩 반복문</p>
</li>
<li><p>반복문 안에 실행할 문장으로 반복문이 포함된 것</p>
<pre><code>   /* 별을 5개씩 줄지어 3줄 그리는 중첩 반복문 */
     #include &lt;stdio.h&gt;

     int main(void)
     {
         int i, j;                    // 반복 횟수 세기 위한 제어 변수

         for (i = 0; i &lt; 3; i++)        // i가 0부터 2까지 증가하여 세 번 반복 (별을 세 줄)
         {
             for (j = 0; j &lt; 5; j++) // j가 0부터 4까지 증가하여 다섯 번 반복 (별을 한 줄에 5개)
             {
                 printf(&quot;*&quot;);        // 별 출력
             }
             printf(&quot;\n&quot;);            // 별 다섯 번 출력 후 줄 바꿈
         }

         return 0;
     }</code></pre></li>
</ul>
<ul>
<li><p>break</p>
</li>
<li><p>break는 반복문 안에서 반복을 끝내고 싶을 때</p>
</li>
<li><p>주의: break는 자신이 속한 반복문 하나만 벗어나기 때문에 중첩 반복문에서 모든 반복문을 벗어날 수 없음</p>
</li>
<li><p>반복문의 조건식이 항상 참이면 무한 반복문 ( while (1)과 for (;;) )으로 탈출 시 break 사용</p>
</li>
<li><p>switch ~ case문에서 사용 시 switch ~ case블록만 벗어남</p>
<pre><code>   /* 10까지 더해서 총합이 30을 넘으면 중단하는 반복문 */</code></pre><p><img src="https://velog.velcdn.com/images/chae_velog/post/5c9270e5-0744-44c1-8e8a-e874d9a958b9/image.PNG" alt=""> </p>
</li>
<li><p>continue</p>
</li>
<li><p>반복문의 일부를 건너뛰는 것으로 블록을 탈출하는 것은 아님</p>
<pre><code>   /* 3의 배수를 뺴고 1부터 100까지의 합 */
   for (i = 1; i &lt;= 100; i++)
   {
       if ((i % 3) == 0)
       {
           continue;
       }
       sum += i
   }</code></pre></li>
<li><p>기본숙제</p>
</li>
<li><p>5장 추가내용
else 결합:
if ~ else문 안에 단독으로 if문을 쓸 때에는 반드시 중괄호가 필요, 컴파일러는 if문이 중첩된 경우 else를 가장 가까운 if와 연결하기 때문에 오류가 날 수도 있음</p>
</li>
<li><p>6장 추가내용
break:</p>
<ol>
<li>break는 자신이 속한 반복문 하나만 벗어나기 때문에 중첩 반복문에서 모든 반복문을 벗어날 수 없음</li>
<li>switch ~ case문에서 사용 시 switch ~ case블록만 벗어남</li>
</ol>
</li>
</ul>
<ul>
<li>추가숙제
<img src="https://velog.velcdn.com/images/chae_velog/post/5da2ecac-571d-4a33-b561-8b6cee93168a/image.PNG" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공학습단] 혼자 공부하는 C언어 2주차]]></title>
            <link>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B4-2%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B4-2%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 19 Jan 2025 14:10:22 GMT</pubDate>
            <description><![CDATA[<p><em><strong>[chapter 03] 변수와 데이터 입력~[chapter04] 연산자</strong></em></p>
<p><strong>03-1 변수</strong></p>
<ul>
<li><p>변수 선언 방법</p>
</li>
<li><p>변수 선언 방법은 데이터에 맞는 자료형과 변수명을 나란히 씀<br>예) int a; (정수를 넣을 공간으로 int)</p>
</li>
<li><p>대입 연산자 =
대입 연산자는 오른쪽 값을 왼쪽에 할당한다는 의미
예) a=10; (10을 a에 할당한다는 의미)</p>
</li>
<li><p>변수 선언과 대입 규칙</p>
<ol>
<li>중괄호{}의 블록 안에 변수를 선언하며 선언한 위치부터 블록 끝까지 사용가능</li>
<li>변수의 자료형이 같으면 동시에 둘 이상의 변수를 선언가능 (콤마 이용)</li>
<li>대입 연산자는 연산자 왼쪽의 변수에 오른쪽의 값을 저장</li>
<li>변수는 대입 연산자 왼쪽에는 저장 공간이 되고, 오른쪽에서는 값이 됨
예) 
int a, b; 
a=10; (이때의 a는 저장공간)
b=a;    (이때의 a는 값
=&gt; 같은 이름의 a라도 위치에 따라 변수의 용도가 다름</li>
</ol>
</li>
<li><p>정수 자료형</p>
</li>
<li><p>char형은 작은 범위의 정수를 저장할 수 있지만 주로 문자를 저장하는 용도</p>
</li>
<li><p>char형 변수를 출력할 때 %c를 사용하면 그 값에 해당하는 문자 출력, % d를 사용하면 정수로 출력</p>
</li>
<li><p>unsigned 정수 자료형</p>
</li>
<li><p>정수형을 양수 전용으로 쓸 때 사용</p>
</li>
<li><p>실수 자료형</p>
</li>
<li><p>float(출력 변환 문자: %f)</p>
</li>
<li><p>double(출력 변환 문자: %lf)</p>
</li>
<li><p>long double(출력 변환 문자: %Lf)</p>
</li>
<li><p>실수형은 저장하는 값에 따라 숫자가 정확하게 표현될 수도 안 될 수도 있음 ( 컴퓨터에서 실수를 표현하는 방식이 오차를 갖고 있기 때문에 일정 범위 내의 값을 사용하기)</p>
</li>
<li><p>문자열 저장</p>
</li>
<li><p>char 배열명[문자열길이+1] = 문자열;</p>
</li>
<li><p>컴파일러가 문자열의 끝에 널문자를 자동으로 추가하기 때문에 배열의 크기를 하나 더 잡는 것</p>
</li>
<li><p>const를 사용한 변수</p>
</li>
<li><p>const 자료형 변수형 = 값;</p>
</li>
<li><p>const를 사용 시 초기화 된 값을 바꿀 수 없음</p>
</li>
<li><p>선언과 동시에 초기화를 해야 함</p>
</li>
</ul>
<p><strong>03-2 데이터 입력</strong></p>
<ul>
<li><p>scanf 함수</p>
</li>
<li><p>입력 문자들을 스캔해 원하는 형태의 데이터로 바꿔주는 함수로 어떤 데이터로 변환할 지는 변환 문자를 통해 결정, 키보드에서 입력한 값을 변수에 저장할 때 사용</p>
</li>
<li><p>사용법) 변수의 형태에 맞는 변환 문자를 사용하고 입력할 변수 앞에 &amp;를 붙이기  예) scanf(&quot;%d&quot;,&amp;a);</p>
</li>
<li><p>유의점) </p>
<ol>
<li>변수명을 지정할 때 % 붙이기</li>
<li>함수에서 사용한 변환 문자와 맞는 형태의 데이터를 입력</li>
</ol>
</li>
<li><p>응용)
여러 개의 변환문자를 나열해 한 번에 2개 이상의 변수에 값 입력
예) scanf(&quot;%d%lf&quot;, &amp;a, &amp;b); 
=&gt; int형 변수 a와 double형 변수에 입력 시 위처럼 사용</p>
</li>
<li><p>문자와 문자열 </p>
</li>
<li><p>char형 변수에 문자 입력 시 키보드로 입력하는 모든 문자가 대상 (스페이스바나 엔터조차도 하나의 문자로 전달)</p>
</li>
<li><p>스페이스,엔터,탭 등을 만나면 바로 전까지 전달되므로 공백 없이 연속으로 입력하기</p>
</li>
<li><p>문자열은 char 배열에 &amp;s 변환 문자를 사용, 배열명에는 &amp;를 붙이지 않음</p>
</li>
</ul>
<p><strong>04-1 산술 연산자, 관계 연산자, 논리 연산자</strong></p>
<ul>
<li><p>산술 연산자와 대입 연산자</p>
</li>
<li><p>산술 연산자는 수학에서의 연산자를 의미, 더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%)가 있다</p>
</li>
<li><p>대입 연산자(=)는 오른쪽의 수식의 결과를 왼쪽 변수에 저장
   예)
   a=10;
   sum=a+b;
-나누기 연산자와 나머지 연산자
나누기는 나누기 연산자인 /을 사용하고, 피연산자의 형태에 따라 결과가 달라지니 주의 </p>
<ul>
<li>증감 연산자 </li>
<li>증감 연산자(++,--)는 하나의 연산자로 대입 연산까지 수행하므로 변수의 값을 1씩 증가시키거나 감소시킬 때 사용
예) a라는 int형 변수에 1을 더하려면 a=a+1; =&gt;증감 연산자 이용 시 ++a;</li>
<li>++a로 표현한다는 말은 증감 연산자가 대입 연산을 포함하므로 피연산자의 값이 바뀐다는 의미, 증감 연산자의 피연산자로 상수를 사용 불가능</li>
</ul>
<p>-전위 표기와 후위 표기</p>
<ol>
<li>증감 연산자가 피연산자 앞에 놓이면 전위 표기, 뒤에 놓이면 후위 표  기로 전위 표기는 값이 증감하고 나서 연산에 사용, 후위 표기는 연산에 사용하고 나서 값이 증감</li>
<li>증감 연산자를 단독으로 사용 시에는 전위와 후위의 결과가 같지만 다른 연산자와 함께 쓸 때는 결과에 영향을 줌</li>
</ol>
</li>
<li><p>관계 연산자</p>
</li>
<li><p>조건,관계에 따라 명령 실행 시 필요</p>
</li>
<li><p>대소 관계 연산자, 동등 관계 연산자가 존재</p>
</li>
<li><p>대소 관계는 &lt; 또는 &gt; 등의 기호 사용, 동등 관계 ==나 != 기호 사용하며 연산자는 모두 피연산자를 2개 사용, 연산의 결과값은 1 또는 0</p>
</li>
<li><p>논리 연산자</p>
</li>
<li><p>논리 관계를 판단하는 데 사용</p>
<ol>
<li>&amp;&amp;는 논리곱(AND) 연산자로 2개의 피연산자로 모두 참일 때만 연산 결과가 참</li>
<li>||는 논리합(OR) 연산자로 둘 중에 하나라도 참이면 참</li>
<li>!는 논리부정(NOT) 연산자로 그 참과 거짓을 바꿀 때 사용</li>
</ol>
</li>
<li><p>숏 서킷 룰은 좌항만으로 &amp;&amp;와 || 연산 결과를 판별하는 기능으로 좌항이 참이거나 거짓이면 우황에 관계없이 결과는 참이거나 거짓</p>
</li>
<li><p>연산의 결과값을 처리하는 방법</p>
</li>
<li><p>연산을 실행한 후 연산의 결과값을 변수에 저장하지 않으면 그 값은 버려짐</p>
</li>
</ul>
<p><strong>04-2 그 외 유용한 연산자</strong></p>
<ul>
<li><p>형 변환 연산자
  -형 변환 연산자는 피연산자를 하나 가지며 피연산자의 값을 원하는 형태로 바꿈
  -사용: (자료형)피연산자
  예) 정수를 실수로 바꾸는 경우 (double)10 -&gt; 10.0
  -처음부터 a와b를 double형으로 선언하면 좋지만 double형은 저장공간이 크고 연산 속도가 느리며 오차가 발생하므로 int형을 기본형으로 사용하고 형변환해서 사용
  -자동 형 변환 (=암시적인 형 변환, 묵시적인 형 변환)
  컴파일러는 컴파일 과정에서 피연산자의 형태가 다르면 형태를 일치하는 작업을 수행</p>
</li>
<li><p>sizeof 연산자</p>
</li>
<li><p>피연산자의 크기를 바이트 단위로 계산해서 알려줌 (데이터 크기 확인, 메모리 동적으로 할당하는 작업)</p>
</li>
<li><p>sizeof가 연산자이므로 기본적으로 피연산자에 괄호를 사용할 필요가 없지만 예외가 있으므로 그냥 괄호를 사용하기</p>
</li>
<li><p>복합 대입 연산자</p>
</li>
<li><p>연산 결과를 다시 피연산자에 저장</p>
</li>
<li><p>산술 복합대입 연산자: +=, -=, *=, /=, &amp;= </p>
</li>
<li><p>복합대입 연산자는 저장 공간과 연산 공간이 다름</p>
</li>
<li><p>콤마 연산자</p>
</li>
<li><p>콤마 연산자는 한 번에 여러 개의 수식을 차례로 나열할 때 사용, 대입 연산자와 함께 사용 시 괄호 필요</p>
</li>
<li><p>조건 연산자</p>
</li>
<li><p>유일한 삼항 연산자로 ?와: 기호를 함께 사용해 표현</p>
</li>
<li><p>첫 번째 피연산자가 참이면 두 번째 피연산자가 결과값, 첫 번째 피연산자가 거짓이면 세 번째 피연산자가 결과값</p>
</li>
<li><p>사용: (a &gt; b) ? a : b</p>
</li>
<li><p>비트 연산자</p>
</li>
<li><p>비트 논리곱 연산자(&amp;): 두 비트가 모두 1인 경우에만 1로 계산</p>
</li>
<li><p>비트별 배타적 논리합 연산자(^): 두 비트가 서로 다른 경우에만 1로 계산</p>
</li>
<li><p>비트별 논리합 연산자(|): 두 비트 중 하나라도 참이면 1로 계산</p>
</li>
<li><p>비트별 부정 연산자(~): 피연산자가 하나로 ~연산은 1을 0으로 바꾸고 0을 1로 바꿈</p>
</li>
<li><p>비트 이동 연산자: &lt;&lt;는 비트를 왼쪽으로 이동, &gt;&gt;은 비트를 오른쪽으로 이동</p>
</li>
<li><p>연산자 우선 순위</p>
</li>
<li><p>단항 &gt; 이항 &gt; 삼항 연산자 순서로</p>
</li>
<li><p>산술 &gt; (비트 이동) &gt; 관계 &gt; 논리 연산자 순서로</p>
</li>
</ul>
<p><strong>기본 숙제</strong>
<img src="https://velog.velcdn.com/images/chae_velog/post/1d9bc1cf-aa5d-44c6-9531-83a998d38b52/image.jpg" alt="">
<img src="https://velog.velcdn.com/images/chae_velog/post/15621259-f3e8-4d4c-8cda-79a88cdb377c/image.jpg" alt="">
<img src="https://velog.velcdn.com/images/chae_velog/post/d46781de-c16f-454b-bff9-84367f2b3a3f/image.jpg" alt="">
<img src="https://velog.velcdn.com/images/chae_velog/post/9e33a898-757f-4477-85c3-aa74a5da4fde/image.jpg" alt=""></p>
<p><strong>추가 숙제</strong>
<img src="https://velog.velcdn.com/images/chae_velog/post/3dc28e26-35c3-4c57-9f13-27bfd105c045/image.PNG" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공학습단] 혼자 공부하는 C언어 1주차]]></title>
            <link>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B4-1%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@chae_velog/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-C%EC%96%B8%EC%96%B4-1%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 12 Jan 2025 06:34:32 GMT</pubDate>
            <description><![CDATA[<p><em><strong>[chapter 01] 프로그램 만들기~[chapter 02] 상수와 데이터 출력</strong></em></p>
<p><strong>01-1 프로그램과 C언어</strong>
-프로그래밍 언어란 컴퓨터가 이해할 수 있는, 정확한 표현의 규칙을 정의해 놓은 것
-C언어의 탄생
 하드웨어에 상관없이 사용하기 위해 C언어가 만들어짐
-C언어의 장점
 시스템 프로그래밍 가능<br> 이식성 갖춘 프로그램 생성
 함수 사용으로 개별 프로그래밍 가능_</p>
<p><strong>01-2 컴파일과 컴파일러 사용법</strong>
-컴파일(compile)이란 소스 파일을 기계어로 바꾸는 과정</p>
<p><strong>chapter 01 정리</strong>
-프로그램, C언어, 컴파일, 컴파일러, 비주얼 스튜디오, 컴파일하고 실행하기
-컴파일 과정 3단계</p>
<ol>
<li>전처리: 소스 파일 가공</li>
<li>컴파일: 전처리된 소스 파일 -&gt; 개체 파일</li>
<li>링크: 개체 파일 + startup code -&gt; 실행 파일 </li>
</ol>
<p><strong>02-1 C 프로그램의 구조와 데이터 출력 방법</strong>
-함수
main 함수는 프로그램 시작을 의미하고 필수
main 함수 구조는 머리(함수 원형)와 몸통(함수에서 실행할 일 작성)으로 구성
-함수 작성 규칙</p>
<ol>
<li>세미콜론(;)으로 문장의 끝 표시</li>
<li>한 줄에 한 문장 작성</li>
<li>일정한 간격으로 들여쓰기</li>
</ol>
<p><strong>chapter 02-1 정리</strong>
-main 함수, 주석문, printf 함수, 제어 문자, 변환 문자
-출력 함수인 printf 함수를 사용해 &#39;문자열, 제어 문자, 정수(%d), 실수(%lf), 수식&#39; 출력하기
-제어 문자 &#39;\n, \t, \r, \b, \a&#39; 기능에 따른 출력 확인하기</p>
<p><strong>02-2 상수와 데이터 표현 방법</strong>
-정수 상수 표현법
10진법은 0<del>9까지의 10개 숫자 (10진법으로 12 표현 시 12)
8진법은 0</del>7까지의 8개 숫자     (8진법으로 12 표현 시 014)
16진법은 0<del>9까지의 10개 숫자와 A</del>F까지의 6개의 영문자    (16진법으로 12 표현 시 0xc)
-실수 상수 표현법
printf 함수는 기본적으로 소수점 형태로 출력하기 때문에 지수 형태로 출력하려면 %le 변환문자 사용
-문자와 문자열 
문자는 작은 따옴표(&#39;&#39;)와 %c 변환 문자 사용
문자열은 큰 따옴표(&quot;&quot;)와 %s 변환 문자 사용
-진수와 비트
컴퓨터는 모든 데이터를 비트화
1비트는 2개의 값, 8비트를 1바이트
정수는 4바이트, 32비트, 2진수로 변환
실수는 8바이트, 64비트, IEEE 754 표준 double형태로 변환
문자는 4바이트, 32비트, 아스키 코드 값과 같은 2진수로 변환</p>
<p><strong>chapter 02-2 정리</strong>
-상수는 값을 바꿀 수 없는 것으로 정수, 실수, 문자, 문자열
-정수,실수,문자,문자열의 표현과 출력 확인</p>
<p><strong>1주차 기본 숙제</strong>
비주얼 스튜디오 설치하고 인증하기
<img src="https://velog.velcdn.com/images/chae_velog/post/eb01be6a-ccc2-4584-b497-fc0040e719ce/image.PNG" alt="">
<strong>1주차 추가 숙제</strong>
02-2 확인 문제 3번 풀기
<img src="https://velog.velcdn.com/images/chae_velog/post/18cbdca1-b4da-4002-a659-b61172cc1ecf/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>