×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 2,877,124명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
반응형

1. 연산자

연산자를 이용하여 우리는 다양한 연산을 할 수 있다.


+, -, *, /, %를 앞서 다뤘는데 이번에는 C / CPP에서 이용할 수 있는 연산자를 알아보자.


아래 링크를 통해 다양한 연산자가 있다는 정도만 파악해보자.

http://ko.cppreference.com/w/cpp/language/operator_precedence



대표적으로 몇가지 연산자만 설명해 보려한다.


++ 연산자


++는 + 1과 같은 의미이다.

int a = 1;

a++;

라고하면 a = 2가 된다.

이때 ++a도 가능하다.


하지만 a++와 ++a의 차이는 먼저 a를 +1해주냐 안해주냐의 차이다.


바로 예를 들어보자.


int a = 0, b = 1;

printf("%d", ++a + b);

라 하면 정답은 2가 되지만

printf("%d", a++ + b);

라하면 정답은 1이 된다.


물론 printf이후 a = 1, b = 1이 되어있을 것이다.


즉, ++a는 a를 먼저 + 1해주고 계산을 하는 방식이고,  a++는 계산을하고 +1을 해주는 방식이다.


a += 1 과 a++와 a = a + 1은 모두 같은 의미이다.



+=, -=, *=, /=, %= 연산자


a += 1 (== a = a + 1 또는 a++와 동치)

a -= 1 (== a = a - 1 또는 a--와 동치)

a *= 1 (== a = a * 1과 동치 )

a /= 1 (== a = a / 1과 동치)
a %= 1 (== a = a % 1과 동치)



&&,  || 연산자

&&는 그리고 라는 의미이고
||는 또는 이라는 의미이다.

따라서 a == 1 && b == 2라면 a는 1이면서 b는 2라는 뜻이고
a == 1 || a == 2라는 의미는 a가 1이거나 2라는 의미이다.


( ) 연산자

수학 수식과 같다. ( )가 있으면 우선 처리해준다.

a = a + b * 2와 a = (a + b) * 2는 차이가 있을 것이다.




** 주의 **

연산자들 사이에는 우선순위가 존재한다.(방금 ( )가 *보다 우선순위가 높아 먼저 처리되었듯이)

따라서 연산자 우선순위가 헷갈리는 부분이 있다면 무조건 그냥 ( )로 계산해주자.

  
우선순위는 위의 링크에서 확인 가능하다.



2. 조건문


if, else if, else로 나타낼 수 있다.


if(조건)

조건이 참일때 내용

else if(조건)

if문에서 조건이 참이 아니고 else if에서 조건이 참일때 내용

else if(조건)

...

else

위의 모든 조건들이 참이 아니었을 때



문제 1.


한자리의 입력(예 :: a, 1, ... )을 받았을 때 문자를 입력받았다면 hello world를 출력

숫자를 입력받았다면 goodbye world를 출력





문제 2.


0~100사이 수를 입력받는데 입력받은 값이

0~30이면 C를 출력

31~60이면 B를 출력

61~90이면 A를 출력

91~100이면 S를 출력

그 외의 값이 들어오면 F를 출력



** 주의 **

if문을 쓸때 다음을 조심하자.

http://www.crocus.co.kr/307?category=116610



switch문을 이용하여 코딩해보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
 
int main()
{
    int n;
    scanf("%d"&n);
 
    switch (n) 
    {
        case 1:
        {
            printf("입력 받은 수 :: 1\n");
            break;
        }
        case 2:
        {
            printf("입력 받은 수 :: 2\n");
            break;
        }
        case 3:
        {
            printf("입력 받은 수 :: 3\n");
            break;
        }
        default:
        {
            printf("1~3사이 수가 아닙니다.\n");
        }
    }
    return 0;
}
        //                                                       This source code Copyright belongs to Crocus
        //                                                        If you want to see more? click here >>
Crocus


switch(값)

{

case k: ( -> if(n == k)와 동치)

값이 k일때 해당하는 코드

break; (Q. 왜 break가 없으면 안될까?)

...


default: (case 외의 값이 올때)

코드

(Q. 이 부분에는 왜 break가 없어도 될까?)

}



** 주의 **


swich문에서 case에는 조건이 들어 갈 수 없고 상수만 들어갈 수 있다.


즉, case (0 <= n && n <= 30) 이런 조건은 넣을 수 없다.





3. 반복문


반복문은 while과 for문이 존재한다.

조건이 맞을 때 까지 계속해서 동작하는 방식이다.


각각의 상황에 맞게 이용하면 된다.


while문


while(조건)

{

조건이 참일 때 해당하는 코드

}

조건에 부합하지 않으면 while문을 탈출하게 된다.


문제 1.


1부터 10까지 출력하는 코드를 작성(printf를 코드 내에서 한번만 이용)





for문


for( init(초기화) ; cond(조건) ; loop(반복 후 이뤄질 식) )

{

}


위의 while문에서 나타낸 코드를

for(int i = 0; i <= 10; i++)

{

printf("%d\n",i)

}

위와 같이 나타낼 수 있다.




문제 1.

1~10까지 더한 값을 나타내시오





문제 2.

1~10의 홀수 값만 출력하시오





문제 3.

다음을 출력하시오

*

**

***

****





문제 4.

다음을 출력하시오

* * * * *

 * * * * 

* * * * *

 * * * *

* * * * *





4. 배열


배열은 변수의 연속이다.


지금은 따로 깊게 말하지 않지만, 배열을 이용하면 메모리 주소 공간에 연속적으로 할당해주게 된다.


따라서 필요에 따라 변수를 선언하거나 배열을 선언하거나는 프로그래머의 몫이고 사실상 하다보면 그냥 알게된다.


배열은 다음과 같이 선언한다.


int a[크기];

int a[10];이라고 작성했다면 배열은 0번부터 9번까지 이용할 수 있다.


즉, a[0], a[1], a[2], ..., a[8], a[9]까지 이용이 가능하다.


a[10]을 이용하려면 int a[11]로 선언해야한다.


왜 그런지는 c언어를 개발한 사람에게 물어보자. 



그리고 배열을 통해 우리는 문자만 입력받았는데 문자열도 다룰 수 있게 된다.


char a[11]를 선언하고 scanf("%s",a)라고 선언해보자.

%s는 char형 a배열에 문자열을 입력받는 방법이다.


항상 문자열은 마지막에 '\0'라는게 들어온다.


즉, helloworld'\0' 이렇게 문자열이 구성된다.(컴퓨터가 문자열의 끝을 알기 위해 '\0'이 필요)


따라서 scanf를 통해 입력을 받으면 문자열을 helloworld라고 받아도 결국 helloworld'\0'로 저장된다.




몇가지 문제를 풀어보며 배열이 뭔지 간단하게 익혀보자.



문제 1.


i번 배열에 숫자 i를 넣고(1 <= i <= 10)

그 배열을 1부터 10까지 출력해보자.


그리고 또다른 배열을 생성하여 helloworld를 출력해보자.




문제 2.


피보나치 수열은 다음과 같다. {1, 1, 2, 3, 5, ... }

http://terms.naver.com/entry.nhn?docId=2270442&cid=51173&categoryId=51173 (피보나치 수열)


배열을 이용하여 피보나치 수열을 만들어보자.


피보나치수열의 크기는 10으로 계산해준다. 즉, fibo[10]까지만 계산해주면 된다.





이제 이 내용들을 바탕으로 문제를 풀어보자.


https://www.acmicpc.net/step/3

https://www.acmicpc.net/step/4




문제 1.


helloworld가 아닌 hello world를 출력해보자.

제대로 출력되지 않는다면 왜 그런지 생각해보고 어떻게 해야할지 생각해보자.


문제 2.


char a[10]으로 설정하고 helloworld를 입력한 후 출력해보자.

제대로 출력되지 않는다면 왜 그런지 생각해보고 어떻게 해야할지 생각해보자.


힌트 :: '\0'




정리하는 시간

http://ychooni.tistory.com/62?category=278498


반응형