변수

학습목표

 - 변수를 선언할 수 있다.

 - 콘솔을 이용하여 변수의 값을 입력받거나 출력할 수 있다


변수란?

 - 데이터를 저장하기 위한 물리적인 공간

 - 데이터가 변할 수 있는 공간


변수 선언 방법

자료형 변수명;

자료형 변수명 = 초기값;


자료형(데이터 타입)

 - 메모리에 저장된 0과 1을 해석하는 방식


자료형 

 크기

비고 

문자

char 

 

정수

int 

 

 실수

float 

4

소수점 6자리

double 

소수점 15자리


printf : 콘솔에 정형화된 문자열을 출력

 - 문자열 필요 : ""

 - 변수 값을 출력하기 위해 서식문자 필요

 - 서식문자 갯수만큼 ,변수 또는 ,값이 필요


scanf : 콘솔에서 값을 입력받아 변수에 저장

 - 문자열 필요 : ""

 - 변수값을 입력받기 위해 서식문자 필요

 - 서식문자 갯수만큼 ,&변수(주소)가 필요

서식문자(필수 암기)

 %d

 정수(10진수) 

 %f

 실수(float)

 %lf

 실수(double) 

 %c

 문자 

 %s

 문자열 


예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
int main(void) {
    int num;
    char ch;
    float fnum;
    double dnum;
 
    printf("정수를 입력하세요 : ");
    scanf("%d"&num);
    printf("문자를 입력하세요 : ");
    scanf(" %c"&ch);
    printf("실수1를 입력하세요 : ");
    scanf("%f"&fnum);
    printf("실수1를 입력하세요 : ");
    scanf("%lf"&dnum);
    printf("정수 : %d, 문자 : %c, 실수1 : %.2f, 실수2 : %.2lf\n"
            , num, ch, fnum, dnum);
    return 0;
}



문제

 정수 A와 B의 최대 공약수를 구하는 코드를 작성하세요.


위 문제를 해결하기 위해 우선 최대 공약수 정의에 대해 살펴보겠습니다.

최대 공약수란?

 - 두 정수 A,B의 공약수 중 가장 큰 수


공약수란?

 - 두 정수 A와 B가 공통으로 가지고 있는 약수


약수란? 

 - 두 정수 , 에 대하여 를 만족하는 정수 가 존재한다면,   약수라고 한다. 

 - 즉, 를 로 나누었을 때 나머지가 0이면, 를 의 약수라고 한다.


최대 공약수 예제를 반복문으로 해결하기 위해 다음 3가지를 정리해야 합니다.


1. 반복횟수 : 초기화, 조건식, 증감연산식을 결정

2. 규칙성 : 실행문을 결정

3. 반복문 종료 후 작업


1. 반복횟수

 - 두 정수의 최대 공약수를 찾기 위해서, 두 정수의 공약수를 찾아야 합니다.

 - 아래 내용을 보면 8과 12의 공약수를 구하는 과정이 나와 있습니다.

 - 아래와 같이 8보다 큰 9부터는 비교할 필요가 없습니다. 왜냐하면 9부터는 8을 나누었을 때 나머지가 8로 고정이기 때문입니다.

 - 따라서 반복횟수는 1부터 작은수까지 1씩 증가하면 됩니다.

 - 초기화 : i = 1

 - 조건식 : i <= 작은수

 - 증감연산식 : i++ 또는 ++i 또는 i+=1

8의 약수 : 1, 2, 4, 8

1

 2

 3

 4

6

7

10 

11 

12 

 나머지

0

 0

 2

 0

3

2

1

8

- 나머지 : 8를 i로 나누었을 때 나머지

12의 약수 : 1, 2, 3, 4, 6, 12

1

 2

 3

 4

6

7

8 

10 

11 

12 

 나머지

0

 0

 0

 0

0

5

4

3

2

- 나머지 : 12를 i로 나누었을 때 나머지


8과 12의 공약수 : 1, 2, 4

i 

1 

2 

3 

4 

5 

6 

7 

8 

9 

10 

11 

12 

mod A

0

0 

2 

0 

3 

2 

1 

0 

8 

8 

8 

mod B

0

0 

0 

0 

2 

0 

5 

4 

3 

2 

1 

0 


- mod A : 8를 i로 나누었을 때 나머지

- mod B : 12를 i로 나누었을 때 나머지



2. 규칙성 

 - i가 A와 B의 공약수이면 최대 공약수를 저장하는 변수에 i를 저장합니다.

 - 공약수를 작은 수부터 구하기 때문에 공약수들을 변수에 덮어쓰기를 하면 마지막에 남은 공약수는 가장 큰 공약수가 됩니다.

 - 조건식 : A를 i로 나누었을 때 나머지가 0과 (i가 A의 약수이다) B를 i로 나누었을 때 나머지가 0과 다(i가 B의 약수이다)

  => A % i == 0 && B % i == 0

 - 조건식 실행문 : 최대 공약수 변수에 i를 저장 => gcd = i


3. 반복문 종료 후 작업

 - 최대 공약수 gcd를 출력


정리한 내용을 바탕으로 소수 판별 예제 코드는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int main() {
    int A = 8, B = 12;
    //A와 B중 작은 수를 num에 저장
    int num = A>B?B:A;
    //최대 공약수
    int gcd = 1;
    //반복문에서 사용할 변수
    int i;
    for (i = 1; i <= num; i++) {
        if (A % i == 0 && B % i == 0) {
            gcd = i;
        }
    }
    printf("%d와 %d의 최대 공약수 : %d\n", A, B, gcd);
    
    return 0;
}



질문은 댓글로 남겨세요. 도움이 되셨다면 광고 클릭!

문제

 자연수 A가 소수인지 아닌지 판별하는 코드를 작성하세요.


위 문제를 해결하기 위해 우선 소수의 정의에 대해 살펴보겠습니다.

소수란?

 - 자신보다 작은 두 개의 자연수를 곱하여 만들 수 없는 1보다 큰 자연수이다. [출처1]

 - 즉, 약수가 2개인 1보다 큰 자연수


다음으로 약수의 정의에 대해 살표보겠습니다.

약수란? 

 - 두 정수 , 에 대하여 를 만족하는 정수 가 존재한다면,   약수라고 한다. [출처2]

 - 즉, 를 로 나누었을 때 나머지가 0이면, 를 약수라고 한다.


소수 판별 예제를 반복문으로 해결하기 위해 다음 3가지를 정리해야 합니다.


1. 반복횟수 : 초기화, 조건식, 증감연산식을 결정

2. 규칙성 : 실행문을 결정

3. 반복문 종료 후 작업


1. 반복횟수

 - 자연수 A가 소수인지 판별하기 위해서는 A의 약수를 찾아야 합니다. 

 - 즉, 1과 A사이에 있는 모든 자연수를 A로 나누어서 나머지가 0인지 확인해야합니다.

 - 따라서 반복횟수는 1부터 A까지 1씩 증가해야합니다.

 - 초기화 : i = 1

 - 조건식 : i <= A

 - 증감연산식 : i++ 또는 ++i 또는 i+=1


2. 규칙성 

 - 1과 A사이에 있는 자연수가 i라 할 때, i가 A의 약수이면 약수의 갯수를 증가시켜야 합니다.

 - 즉, A를 i로 나누었을 때 나머지가 0과 같다면 약수의 갯수를 증가시킵니다.

 - 조건식 : A를 i로 나누었을 때 나머지가 0과 같다 => A % i == 0

 - 조건식 실행문 : 약수의 갯수를 증가 => count++


3. 반복문 종료 후 작업

 - 반복문 종료 후 약수의 갯수가 2개이면 소수라고 출력합니다.

 - 반복문 종료 후 약수의 갯수가 2개가 아니면 소수가 아니라고 출력합니다.

 - 조건식 : 약수의 갯수가 2개이다 => count == 2

 - 조건식 실행문 : 소수라고 출력

 - else문 실행문 : 소수가 아니라고 출력


정리한 내용을 바탕으로 소수 판별 예제 코드는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int main() {
    //자연수 A
    int A = 6;
    //약수의 갯수
    int count = 0;
    //반복문에서 사용할 변수
    int i;
    for (i = 1; i <= A; i++) {
        if (A % i == 0) {
            count++;
        }
    }
    if (count == 2) {
        printf("%d는 소수입니다.\n", A);
    }
    else {
        printf("%d는 소수가 아닙니다.\n", A);
    }
    return 0;
}


질문은 댓글로 남겨주세요.


출처

출처1. 위키백과, “소수(수론)”, 위키백과 , https://ko.wikipedia.org/wiki/%EC%86%8C%EC%88%98_(%EC%88%98%EB%A1%A0)

출처2. 위키백과, “약수”, 위키백과 , https://ko.wikipedia.org/wiki/%EC%95%BD%EC%88%98#%EC%A0%95%EC%9D%98

이 글은 처음 C언어를 학습하시는 분들을 위해 조금이나마 도움이 되고자 작성되었습니다. 

우선적으로 살펴볼 프로그래밍 언어의 특징은 다음과 같습니다.


프로그래밍 언어의 특성


1. 프로그래밍 언어는 하나의 언어이다.

 - 우리가 영어와 같은 외국어를 배울 때에도 단어의 뜻과 문법을 외우듯 프로그래밍 언어도 필요한 문법과 관련 단어들(키워드 또는 예약어)을 외워야 합니다.


2. 프로그래밍 언어는 매우 엄격하다.

 - 우리가 대화할 때 문법에 정확히 맞지 않아도 대화가 가능합니다. 하지만 프로그래밍 언어는 매우 엄격해서 정해진 문법에 맞지 않으면 원하는 동작을 하지 않거나 에러가 납니다. 


3. 프로그래밍 언어는 논리적이다.

 - 프로그래밍 언어로 일을 시킬 때에는 처음부터 끝까지 모든 내용을 순서를 지켜 알려줘야합니다.  예를 들어 일상 생활에서 '친구가 나에게 펜 좀 빌려줘'라고 하면 필통에서 펜을 꺼내 친구에게 줍니다. 하지만 이 작업을 프로그래밍 언어로 작성한다면 '친구가 네 팔을 움직여서 필통을 열고 그 안에 있는 펜 좀 꺼내서 나에게 줘'라고 말해야 합니다.


결론

 - 프로그래밍 언어를 잘하려면 기본 문법과 필요한 내용은 암기하고, 논리적인 사고력을 길러야 합니다.


다음으로는 복습 방법에 대해 살펴보도록 하겠습니다.


복습 방법

1. 챕터 이름을 기억하자

 - 학습한 챕터 이름만 기억해도 챕터에서 배운 내용을 일부나마 기억할 수 있습니다.


2. 챕터 별 학습 목표를 기억하자

 - 학습 목표는 해당 챕터에서 학습해야할 내용을 알려주기 때문에 학습 목표를 기억하면 챕터의 세부 내용을 기억할 수 있습니다.


3. 챕터 별 문법 및 관련 내용을 암기하자

 - 학습 목표와 연관된 내용을 암기해야합니다.

+ Recent posts