C/Fundamentals

C Basics 3/ (์—ดํ˜ˆ Cํ”„๋กœ๊ทธ๋ž˜๋ฐ)

metamong 2023. 6. 27.

๐Ÿ˜ต ์ด๋ฒˆ ์„ธ ๋ฒˆ์งธ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ณธ๊ฒฉ์ ์ธ ์ฝ”๋”ฉ์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ถ„๊ธฐ๋ฌธ / ๋ฐ˜๋ณต๋ฌธ์„ ๋ฐฐ์šฐ์ž! ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜๊นŒ์ง€ ๋ฐฐ์šฐ๋ฉฐ Part 01์„ ๋งˆ๋ฌด๋ฆฌํ•˜๋ ค ํ•œ๋‹ค! 6์žฅ๋ถ€ํ„ฐ 10์žฅ๊นŒ์ง€ ๋‹ค๋ฃฐ ์˜ˆ์ •!


6. printfํ•จ์ˆ˜์™€ scanfํ•จ์ˆ˜ ์ •๋ฆฌํ•˜๊ธฐ

โ‘  ์—ฌ๋Ÿฌ ํŠน์ˆ˜๋ฌธ์ž์˜ ์ถœ๋ ฅ

→ ํฐ ๋”ฐ์˜ดํ‘œ ์ž์ฒด์˜ ์ถœ๋ ฅ์„ ์›ํ•˜๋ฉด ์•ž์— \๋ฅผ ๋ถ™์—ฌ์ค€๋‹ค. 

→ \n์€ ๊ฐœํ–‰

→ \\ ์—ญ์Šฌ๋ž˜์‰ฌ ์ž์ฒด๋ฅผ ์ถœ๋ ฅ

→ \'์€ ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋ฅผ ์ถœ๋ ฅ

→ \t๋Š” ์ˆ˜ํ‰ ํƒญ ํšจ๊ณผ

 

โ‘ก printf์˜ f๋Š” formatted(์„œ์‹์ด ์ง€์ •๋œ) ํ˜•ํƒœ์˜ ์ถœ๋ ฅ์„ ๋œปํ•œ๋‹ค. %d๋Š” 10์ง„์ˆ˜ ์ •์ˆ˜๋กœ ์ถœ๋ ฅ, %X๋Š” 16์ง„์ˆ˜๋กœ ์ถœ๋ ฅ(์•ŒํŒŒ๋ฒณ์€ ๋Œ€๋ฌธ์ž) %x๋Š” 16์ง„์ˆ˜๋กœ ์ถœ๋ ฅ(์•ŒํŒŒ๋ฒณ์€ ์†Œ๋ฌธ์ž)

์„œ์‹๋ฌธ์ž ์ถœ๋ ฅ ๋Œ€์ƒ(์ž๋ฃŒํ˜•) ์ถœ๋ ฅ ํ˜•ํƒœ
%d char, short, int ๋ถ€ํ˜ธ ์žˆ๋Š” 10์ง„์ˆ˜ ์ •์ˆ˜
%ld long ๋ถ€ํ˜ธ ์žˆ๋Š” 10์ง„์ˆ˜ ์ •์ˆ˜
%lld long long ๋ถ€ํ˜ธ ์žˆ๋Š” 10์ง„์ˆ˜ ์ •์ˆ˜
%u unsigned int ๋ถ€ํ˜ธ ์—†๋Š” 10์ง„์ˆ˜ ์ •์ˆ˜
%o(%#o) unsigned int ๋ถ€ํ˜ธ ์—†๋Š” 8์ง„์ˆ˜ ์ •์ˆ˜
(#๋ถ™์ด๋ฉด 8์ง„์ˆ˜ ๋‹ต๊ฒŒ ์ถœ๋ ฅ)
%x %X(%#x, %#X) unsigned int ๋ถ€ํ˜ธ ์—†๋Š” 16์ง„์ˆ˜ ์ •์ˆ˜
(#๋ถ™์ด๋ฉด 16์ง„์ˆ˜ ๋‹ต๊ฒŒ ์ถœ๋ ฅ)
%f float, double 10์ง„์ˆ˜ ๋ฐฉ์‹์˜ ๋ถ€๋™์†Œ์ˆ˜์  ์‹ค์ˆ˜
%Lf long double 10์ง„์ˆ˜ ๋ฐฉ์‹์˜ ๋ถ€๋™์†Œ์ˆ˜์  ์‹ค์ˆ˜
%e, %E float, double e ๋˜๋Š” E ๋ฐฉ์‹์˜ ๋ถ€๋™์†Œ์ˆ˜์  ์‹ค์ˆ˜
%g, %G float, double ๊ฐ’์— ๋”ฐ๋ผ %f์™€ %e ์‚ฌ์ด์—์„œ ์„ ํƒ
(์†Œ์ˆ˜์  ์ดํ•˜์˜ ์ž๋ฆฌ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด e ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ถœ๋ ฅ)
%c char, short, int ๊ฐ’์— ๋Œ€์‘ํ•˜๋Š” ๋ฌธ์ž
%s char * ๋ฌธ์ž์—ด
%p void * ํฌ์ธํ„ฐ์˜ ์ฃผ์†Œ ๊ฐ’

 

โ‘ข ํ•„๋“œ ํญ ์ง€์ •

→ %8d๋ผ๋ฉด ํ•„๋“œ ํญ์„ 8์นธ ํ™•๋ณดํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ / %-8d๋ผ๋ฉด ํ•„๋“œ ํญ์„ 8์นธ ํ™•๋ณดํ•˜๊ณ  ์™ผ์ชฝ ์ •๋ ฌ (์ถœ๋ ฅํ˜•ํƒœ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ)

 

โ‘ฃ scanf ํ•จ์ˆ˜

์„œ์‹๋ฌธ์ž ์ž…๋ ฅ ํ˜•ํƒœ
%d 10์ง„์ˆ˜ ์ •์ˆ˜
%o 8์ง„์ˆ˜ ์–‘์˜ ์ •์ˆ˜
%x 16์ง„์ˆ˜ ์–‘์˜ ์ •์ˆ˜
%f float ์‹ค์ˆ˜์˜ ํ˜•ํƒœ
%lf double ์‹ค์ˆ˜์˜ ํ˜•ํƒœ
%Lf long double ์‹ค์ˆ˜์˜ ํ˜•ํƒœ
%s ๋ฌธ์ž์—ด์˜ ํ˜•ํƒœ

(์ด ๋•Œ ์‹ค์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ e ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค)

7. ๋ฐ˜๋ณต์‹คํ–‰์„ ๋ช…๋ นํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ

โ‘ค while๋ฌธ

while๋ฌธ ์•ˆ์˜ ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜๋Š” ๋™์•ˆ ๊ณ„์† ์‹คํ–‰

while๋ฌธ ์ค‘์ฒฉ๋„ ๊ฐ€๋Šฅ 

 

ex) Hello World! 3๋ฒˆ ์ถœ๋ ฅํ•˜๊ธฐ

#include <stdio.h>

int main(void) {
  int num = 0;
  while (num < 3){
    printf("Hello World! %d\n", num);
    num++;
  }
  
  return 0;
}

 

ex) ๊ตฌ๊ตฌ๋‹จ ์ถœ๋ ฅํ•˜๊ธฐ

#include <stdio.h>

int main(void) {
  int dan = 1;
  int num = 1;
  int res;
  while (dan < 10){
    num = 1;
    while (num < 10){
      printf("%d x %d = %d\n", dan, num, dan*num);
      num++;
    }
    printf("\n");
    dan++;
  }
  
  return 0;
}

/*
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9

2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18

3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27

4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36

5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45

6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30
6 x 6 = 36
6 x 7 = 42
6 x 8 = 48
6 x 9 = 54

7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63

8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72

9 x 1 = 9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81
*/

 

ex) ์–‘์˜ ์ •์ˆ˜ ์ž…๋ ฅ ๋ฐ›๊ณ  ๊ทธ ์ˆ˜๋งŒํผ 3์˜ ๋ฐฐ์ˆ˜ ์ถœ๋ ฅ

#include <stdio.h>

int main(void) {
  int num;
  int cnt = 1;
  printf("enter your num: ");
  scanf("%d", &num);

  while(cnt <= num){
    printf("%d ", cnt*3);
    cnt++;
  }
  printf("\n");
  return 0;
}

/*
enter your num: 5
3 6 9 12 15 
*/

 

ex) ๊ณ„์†ํ•ด์„œ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉฐ ๊ทธ ๊ฐ’์„ ๊ณ„์†ํ•ด์„œ ๋”ํ•ด ๋‚˜๊ฐ„๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ 0์„ ์ž…๋ ฅํ•  ๋•Œ ๊นŒ์ง€ ๊ณ„์† ๋˜๋ฉฐ 0์ด ์ž…๋ ฅ๋˜๋ฉด ๋ชจ๋“  ์ •์ˆ˜์˜ ํ•ฉ์„ ์ถœ๋ ฅ์‹œํ‚ค๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค.

#include <stdio.h>

int main(void) {
  int num;
  int ans = 0;
  while (num != 0) {
    printf("enter your num: ");
    scanf("%d", &num);

    ans += num;
  }

  printf("sum is %d\n", ans);
  
  return 0;
}

 

ex) ์ž…๋ ฅ ๋ฐ›์€ ์ˆซ์ž์— ํ•ด๋‹นํ•˜๋Š” ๊ตฌ๊ตฌ๋‹จ์„ ์ถœ๋ ฅํ•˜๋˜, ์—ญ์ˆœ์œผ๋กœ ์ถœ๋ ฅ

#include <stdio.h>

int main(void) {
  int dan;
  int cnt = 9;
  printf("enter your dan: ");
  scanf("%d", &dan);

  while(cnt > 0){
    printf("%d x %d = %d\n", dan, cnt, dan*cnt);
    cnt--;
  }
  
  return 0;
}

 

ex) ๋ช‡ ๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅํ•  ๊ฒƒ์ธ์ง€ ๋ฌป๊ณ , ๊ทธ ์ˆ˜ ๋งŒํผ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ๋‹ค์Œ, ์ž…๋ ฅ ๋ฐ›์€ ๋ชจ๋“  ์ •์ˆ˜์˜ ํ‰๊ท ์„ ์ถœ๋ ฅ (์†Œ์ˆ˜์  ์ดํ•˜๊นŒ์ง€ ๊ณ„์‚ฐ)

#include <stdio.h>

int main(void) {
  int cnt, num, counts;
  int sum = 0;
  printf("how many?: ");
  scanf("%d", &cnt);
  counts = cnt;
  while (cnt > 0){
    printf("enter your number: ");
    scanf("%d", &num);

    sum += num;
    cnt--;
  }
  printf("total mean is: %lf\n", (double)sum/counts);
  return 0;
}

 

ex) ์ด 5๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„์„œ ๊ทธ ์ˆ˜์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•˜๊ธฐ. ๋‹จ, ์ •์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ 1์ด์ƒ์ด์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ์— 1๋ฏธ๋งŒ์˜ ์ˆ˜๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค๋ฉด ์ด๋ฅผ ์ž…๋ ฅ์œผ๋กœ ์ธ์ •ํ•˜์ง€ ์•Š๊ณ  ์žฌ ์ž…๋ ฅ์„ ์š”๊ตฌํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ 1์ด์ƒ์˜ ์ •์ˆ˜ 5๊ฐœ๋งŒ ๋ชจ๋‘ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ”„๋กœ๊ทธ๋žจ ์™„์„ฑ

#include <stdio.h>

int main(void) {
  int num;
  int sum = 0, cnt = 5;
  while (cnt > 0){
    printf("enter your number: ");
    scanf("%d", &num);
    while (num >= 1){
      sum += num;
      cnt--;
      num = 0;
    }
  }
  printf("sum is %d\n",sum);
  return 0;
}

 

ex) ์ค„ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚  ๋•Œ ๋งˆ๋‹ค O์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ๋” ์ถœ๋ ฅ

#include <stdio.h>

int main(void) {
  int number_of_lines;
  int cnt1 = 0, cnt2 = 0;
  printf("enter the number of lines: ");
  scanf("%d", &number_of_lines);
  while (cnt1 < number_of_lines){
    cnt2 = 0;
    while (cnt2 < cnt1){
      printf("O ");
      cnt2++;
    }
    printf("*\n");
    cnt1++;
  }
  return 0;
}

 

โ‘ฅ do~while๋ฌธ

→ while๋ฌธ๊ณผ ๋‹ฌ๋ฆฌ ๋ฐ˜๋ณต์กฐ๊ฑด์„ ๋’ท๋ถ€๋ถ„์—์„œ ๊ฒ€์‚ฌํ•œ๋‹ค. ์ฆ‰, ๋ฐ˜๋ณต์กฐ๊ฑด์ด ๋งž์ง€ ์•Š๋”๋ผ๋„, ๋ฐ˜๋ณต์˜์—ญ์„ ์ตœ์†Œํ•œ ํ•œ ๋ฒˆ์€ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ. ๋”ฐ๋ผ์„œ ๋ฐ˜๋ณต์˜์—ญ์ด ๋ฌด์กฐ๊ฑด ํ•œ ๋ฒˆ ์ด์ƒ์€ ์‹คํ–‰๋˜์–ด์•ผ ํ•  ๋•Œ do~while๋ฌธ ์‚ฌ์šฉ

 

ex) 0์ด์ƒ 100์ดํ•˜์˜ ์ •์ˆ˜ ์ค‘์—์„œ ์ง์ˆ˜์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ (์ •๋‹ต 2500) (์กฐ๊ฑด: do-while๋ฌธ)

#include <stdio.h>

int main(void) {
  int number = 0, sum = 0;
  do{
    sum += number;
    number+=2;
  }while(number <= 100);
  printf("sum is %d\n", sum);
  return 0;
}

 

โ‘ฆ for๋ฌธ

for๋ฌธ์€ ๋ฐ˜๋ณต์˜ ํšŸ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  for๋ฌธ ์ž์ฒด ๋‚ด๋ถ€์—์„œ ๋ณ€์ˆ˜ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฝ”๋“œ ์•ž๋ถ€๋ถ„์—์„œ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™” ํ•„์ˆ˜. for๋ฌธ์˜ ์ค‘๊ฐ„์— ์œ„์น˜ํ•œ ์กฐ๊ฑด์‹์ด ๋น„์›Œ์ง€๋ฉด ๋ฌด์กฐ๊ฑด '์ฐธ'์ด ๋˜์–ด ๋ฌดํ•œ๋ฃจํ”„ ํ˜•์„ฑ. for๋ฌธ์— ๋“ค์–ด๊ฐ€๋Š” ์„ธ ๊ฐœ์˜ ์š”์†Œ ์ดˆ๊ธฐ์‹, ์กฐ๊ฑด์‹, ์ฆ๊ฐ์‹์„ ๋ชจ๋‘ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Œ.

 

ex) ๋‘ ๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์„œ ๋‘ ์ •์ˆ˜ ํฌํ•จ ์‚ฌ์ด์˜ ๋ชจ๋“  ์ •์ˆ˜์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ(๋‘๋ฒˆ์งธ ์ •์ˆ˜๊ฐ€ ์ฒซ๋ฒˆ์งธ ์ •์ˆ˜๋ณด๋‹ค ๋” ์ปค์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด)

#include <stdio.h>

int main(void) {
  int num1, num2;
  int sum = 0;
  printf("enter two numbers: ");
  scanf("%d", &num1);
  scanf("%d", &num2);
  int diff = num2 - num1;
  for (int x = 0; x <= diff; x++) {
    sum += (num1 + x);
  }
  printf("answer is %d\n", sum);
  return 0;
}

 

ex) n์„ ์ž…๋ ฅ๋ฐ›๊ณ , n!๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

#include <stdio.h>

int main(void) {
  int n;
  int ans = 1;
  printf("enter the n: ");
  scanf("%d", &n);

  for(int x = 1; x <= n; x++){
    ans *= x;
  }
  printf("n! is %d\n",ans);
  return 0;
}

8. ์กฐ๊ฑด์— ๋”ฐ๋ฅธ ํ๋ฆ„์˜ ๋ถ„๊ธฐ

โ‘ง ์กฐ๊ฑด์  ์‹คํ–‰ ํ๋ฆ„ if ~ else if ~ else if ~ else

 

โ‘จ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž(์‚ผํ•ญ ์—ฐ์‚ฐ์ž)

int num3 = (num1>num2) ? (num1) : (num2);

→ ์กฐ๊ฑด์ด ๋งž๋‹ค๋ฉด num3๊ฐ€ num1์ด ๋˜๊ณ , ์กฐ๊ฑด์ด ํ‹€๋ฆฌ๋‹ค๋ฉด num3๊ฐ€ num2๊ฐ€ ๋œ๋‹ค.

 

ex) 1์ด์ƒ 100๋ฏธ๋งŒ์˜ ์ •์ˆ˜ ์ค‘ 7์˜ ๋ฐฐ์ˆ˜์™€ 9์˜ ๋ฐฐ์ˆ˜

#include <stdio.h>

int main(void) {
  for (int i = 1; i < 101; i++) {
    if ((i%7 == 0) || (i%9==0)){
      printf("%d\n",i);
    }
  }
  return 0;
}

 

ex) ๋‘ ๊ฐœ์˜ ์ •์ˆ˜ ์ž…๋ ฅ ๋ฐ›์•„์„œ ๋‘ ์ˆ˜์˜ ์ฐจ๋ฅผ ์ถœ๋ ฅ(if - else๋ฌธ / ์‚ผํ•ญ ์—ฐ์‚ฐ์ž)

#include <stdio.h>

int main(void) {
  int num1, num2;
  printf("enter two nums: ");
  scanf("%d", &num1);
  scanf("%d", &num2);

  if (num1 >= num2){
    printf("diff is %d\n", num1-num2);
  }
  else{
    printf("diff is %d\n", num2-num1);
  }
  return 0;
}

 

#include <stdio.h>

int main(void) {
  int num1, num2, diff;
  printf("enter two nums: ");
  scanf("%d", &num1);
  scanf("%d", &num2);

  diff = (num1>=num2) ? (num1-num2) : (num2-num1);
  printf("diff is %d\n", diff);

  return 0;
}

 

ex) ๊ตญ์–ด - ์˜์–ด - ์ˆ˜ํ•™ ์ ์ˆ˜๋ฅผ ์ž…๋ ฅ ๋ฐ›๊ณ  ์ „์ฒด ํ‰๊ท  ์ ์ˆ˜์— ๋Œ€ํ•œ ํ•™์  ์ถœ๋ ฅ

#include <stdio.h>

int main(void) {
  int kor, eng, math;
  printf("enter your scores: ");
  scanf("%d", &kor);
  scanf("%d", &eng);
  scanf("%d", &math);

  double avg = (double)(kor+eng+math)/3;

  if (avg>=90){
    printf("final grade is A\n");
  }
  else if (avg>=80){
    printf("final grade is B\n");
  }
  else if (avg>=70){
    printf("final grade is C\n");
  }
  else if(avg>=50){
    printf("final grade is D\n");
  }
  else{
    printf("final grade is F\n");
  }
  
  return 0;
}

 

โ‘ฉ continue & break

break๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ํƒˆ์ถœํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. break๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฐ˜๋ณต๋ฌธ์„ ํƒˆ์ถœํ•˜๋ฏ€๋กœ if๋ฌธ ํƒˆ์ถœ์ด ์•„๋‹ˆ๋‹ค. ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ

continue๋Š” ์‹คํ–‰์ค‘์ธ ์œ„์น˜์— ์ƒ๊ด€์—†์ด ๋ฐ˜๋ณต๋ฌธ์˜ ์กฐ๊ฑด๊ฒ€์‚ฌ ์œ„์น˜๋กœ ์ด๋™ํ•œ๋‹ค. ์ฆ‰, continue ์ดํ›„์˜ ์ฝ”๋“œ๋Š” ์ƒ๋žตํ•˜๊ณ  ๋‹ค์‹œ ์‹คํ–‰. 

 

ex) continue ๋˜๋Š” break๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌ๊ตฌ๋‹จ ์ค‘ ์ง์ˆ˜ ๋‹จ๋งŒ ์ถœ๋ ฅํ•˜๊ธฐ

#include <stdio.h>

int main(void) {
    int dan = 1;
    for (; dan <= 9; dan++) {
        if (dan % 2 != 0) {
            continue;
        }
        
        for (int cnt = 1; cnt <= 9; cnt++) {
            printf("%d x %d = %d\n", dan, cnt, dan * cnt);
        }
        printf("\n");

    }
    return 0;
}

 

ex) ๋‹ค์Œ ์‹์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  A์™€ Z๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑํ•˜๊ธฐ (AZ + ZA = 99)

#include <stdio.h>

int main(void) {
    for (int A = 0; A <= 9; A++) {
        for (int Z = 0; Z <= 9; Z++) {
            if ((10 * A + Z + 10 * Z + A) == 99) {
                if (A != 0 && Z != 0) {
                    printf("possible (A,Z) pair: %d, %d\n", A, Z);
                }
            }
        }
    }
    return 0;
}

 

โ‘ช switch๋ฌธ๊ณผ goto๋ฌธ

→ if๋ฌธ์— ๋น„ํ•ด ์ œํ•œ์ ์ธ switch๋ฌธ์ด์ง€๋งŒ, ๋ถ„๊ธฐ ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ๊ฐ case๋ณ„๋กœ ๋งˆ์ง€๋ง‰์— break; ๊ทธ๋ฆฌ๊ณ  ๋งจ ๋งˆ์ง€๋ง‰์— default๋ฌธ์ด ์žˆ๋‹ค. ๋‘ ๊ฐœ ์ด์ƒ์˜ case๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด case 'M': case 'm' ๊ณผ ๊ฐ™์ด ์—ฐ์†์ ์œผ๋กœ ๋ถ™์ธ ๋‹ค์Œ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

→ goto๋ฌธ์€ ์ž„์˜์ ์œผ๋กœ ์ง€์ •ํ•œ ์œ„์น˜๋กœ ์ด๋™. ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

9. C์–ธ์–ด์˜ ํ•ต์‹ฌ! ํ•จ์ˆ˜!

โ‘  ํ•จ์ˆ˜์˜ ํ•„์š”์„ฑ

: ํฌ๊ณ  ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ๋‚˜๋ˆ ์„œ ํ•˜๋‚˜์”ฉ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์›์น™์ด ๋œ๋‹ค. main์ด๋ผ๋Š” ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋กœ ์ •๋ณตํ•˜๋ ค ๋“ค์ง€ ๋ง๊ณ , ์ž‘์€ ํฌ๊ธฐ์˜ ํ•จ์ˆ˜๋“ค๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ •๋ณตํ•˜์ž๋Š” ๋œป. ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์€ ํฌ๊ธฐ์˜ ํ•จ์ˆ˜๋“ค๋กœ ๋‚˜๋ˆ ์„œ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฌธ์ œ์˜ ๋ฐœ์ƒ ๋ฐ ํ”„๋กœ๊ทธ๋žจ ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์†Œ์Šค์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ์˜ ๋ฒ”์œ„๋ฅผ ์ถ•์†Œ ๋ฐ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ex) printf() ํ•จ์ˆ˜๋Š” ์ „๋‹ฌ์ธ์ž์™€ ๋ฐ˜ํ™˜๊ฐ’์ด ๋ชจ๋‘ ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜ (๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ์— ์ถœ๋ ฅํ•œ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค)

#include <stdio.h>

int main(void) {
  int num1 = printf("hello world!\n");
  int num2 = printf("12345\n");
  printf("%d, %d\n", num1, num2);
  return 0;
}

 

โ‘ก ์œ ํ˜• (1) ์ „๋‹ฌ์ธ์ž ์žˆ๊ณ , ๋ฐ˜ํ™˜ ๊ฐ’์ด ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜

→ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ์˜ ํ•จ์ˆ˜ / ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ์˜์—ญ์œผ๋กœ ์‹คํ–‰์˜ ํ๋ฆ„์ด ์ด๋™ํ•œ๋‹ค

→ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ์ˆ˜๋Š” 1๊ฐœ

 

ex) 2๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ  2๊ฐœ์˜ ์ •์ˆ˜ ๋ง์…ˆ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

#include <stdio.h>

int Add(int num1, int num2){
  return num1+num2;
}

int main(void) {
  int result;
  result = Add(3,4);
  printf("result is %d\n",result); //result is 7
  return 0;
}

 

โ‘ข ์œ ํ˜• (2) ์ „๋‹ฌ์ธ์ž๋‚˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜

→ ์ „๋‹ฌ์ธ์ž๋Š” ์žˆ์œผ๋‚˜, ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ

 

ex) ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜

#include <stdio.h>

void ShowAddResult(int num){
  printf("result is %d\n",num);
}

int main(void) {
  int result;
  result = 3+4;
  ShowAddResult(result);
  return 0;
} //result is 7

 

 ์ „๋‹ฌ์ธ์ž๋Š” ์—†์œผ๋‚˜, ๋ฐ˜ํ™˜ ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ

 

ex) ์ˆซ์ž๋ฅผ ์ฝ๊ณ , ์ฝ์€ ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

#include <stdio.h>

int ReadNum(void) {
  int num;
  scanf("%d",&num);
  return num;
}

int main(void) {
  int result;
  int a = ReadNum();
  int b = ReadNum();
  printf("Result is %d\n",a+b);
  return 0;
}

 

 ์ „๋‹ฌ์ธ์ž๋„ ์—†๊ณ , ๋ฐ˜ํ™˜ ๊ฐ’๋„ ์—†๋Š” ๊ฒฝ์šฐ: ๋‹จ์ˆœํžˆ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ํ•จ์ˆ˜์ผ ๋•Œ ์“ฐ๊ธฐ๋„ ํ•œ๋‹ค.

 

โ‘ฃ return์˜ ์˜๋ฏธ

→ (1) ํ•จ์ˆ˜๋ฅผ ๋น ์ ธ ๋‚˜๊ฐ„๋‹ค

→ (2) ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค

 

 ๋”ฐ๋ผ์„œ ๋ฐ˜ํ™˜ํ˜•์ด void๋ผ๋„, ํ•จ์ˆ˜๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๊ธฐ ์œ„ํ•ด return๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โ‘ค ํ•จ์ˆ˜ ์›ํ˜• ์„ ์–ธ

→ C์–ธ์–ด๋Š” ์ ˆ์ฐจ์ง€ํ–ฅ์–ธ์–ด์—ฌ์„œ ๋‚ด๊ฐ€ ์“ฐ๋ ค๋Š” ํ•จ์ˆ˜๊ฐ€ ์ด๋ฏธ ์œ„์— ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ, ํ•จ์ˆ˜์˜ ๋‚ด์šฉ์„ ์ดํ›„์— ์“ฐ๊ณ  ์‹ถ๋‹ค๋ฉด ๋จผ์ € ์„ ์–ธ๋งŒ ํ•ด๋„ ๊ฐ€๋Šฅ!

 

ex) Increment ํ•จ์ˆ˜ ์„ ์–ธ

#include <stdio.h>

int Increment(int n);

int main(void) {
  int num = 2;
  num = Increment(num);
  printf("%d\n", num);
  return 0;
}

int Increment(int n) {
  n++;
  return n;
}
// 3

 

→ ํ•จ์ˆ˜์˜ ์›ํ˜•์„ ๋งจ ์œ„์— ๋ฏธ๋ฆฌ ์„ ์–ธํ•  ๋•Œ, ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•๊ณผ ๊ฐฏ์ˆ˜๋งŒ ์•Œ๋ฉด ๋˜๋ฏ€๋กœ, ๊ตณ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„๊นŒ์ง€ ์ž‘์„ฑํ•  ํ•„์š”๋Š” ์—†๋‹ค

ex) int Increment(int n); ๋Œ€์‹  int Increment(int);๋ผ ์ž‘์„ฑํ•ด๋„ ๋ฌด๋ฐฉ

 

โ‘ฅ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ํ•จ์ˆ˜ ์›ํ˜• ์„ ์–ธ๋งŒ ๋งจ ์œ„์— ํ•ด์ฃผ๊ณ  ์•„๋ž˜์— ์ž์œ ๋กญ๊ฒŒ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ˆœ์„œ์— ์ œ์•ฝ ์—†์ด ์ž‘์„ฑํ•˜๋Š”๊ฑธ ๊ถŒ์žฅ!

 

โ‘ฆ * ์˜ˆ์ œ *

ex) 3๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์„œ ๊ทธ ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์™€ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜. ๊ทธ๋ฆฌ๊ณ  ํ˜ธ์ถœํ•˜๋Š” ์ ์ ˆํ•œ main ํ•จ์ˆ˜ ์ž‘์„ฑ

#include <stdio.h>

int GetMaxValue(int, int, int);
int GetMinValue(int, int, int);

int main(void) {
  int num1, num2, num3;
  scanf("%d", &num1);
  scanf("%d", &num2);
  scanf("%d", &num3);

  printf("The Max value is %d\n",GetMaxValue(num1, num2, num3));
  printf("The Min value is %d\n",GetMinValue(num1, num2, num3));
  
  return 0;
}

int GetMaxValue(int a, int b, int c){
  int X = (a > b) ? a: c;
  int ans = (c > X) ? c: X;
  return ans;
}

int GetMinValue(int a, int b, int c){
  int X = (a < b) ? a: c;
  int ans = (c < X) ? c: X;
  return ans;
}

 

ex) ์„ญ์”จ์™€ ํ™”์”จ ๊ฐ๊ฐ ์„œ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

#include <stdio.h>

double CelToFah(double);
double FahToCel(double);

int main(void) {
  double Cel, Fah;
  scanf("%lf", &Cel);
  scanf("%lf", &Fah);

  printf("The Celsius is %lf\n",CelToFah(Cel));
  printf("The Fahrenheit is %lf\n",FahToCel(Fah));
  
  return 0;
}

double CelToFah(double Cel){
  return 1.8*Cel + 32;
}

double FahToCel(double Fah){
  return (Fah-32)/1.8;
}

 

ex) ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ์ˆ˜๋งŒํผ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜

(์˜ˆ๋ฅผ ๋“ค์–ด 5๋ฅผ ์ž…๋ ฅํ•˜๋ฉด 0์—์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ด 5๊ฐœ์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค)

 

โ˜… a b ๊ทธ๋‹ค์Œ ์ˆ˜๋ฅผ ๊ตฌํ• ๋ ค๋ฉด a+bํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์™€์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋•Œ b๊ฐ€ ๋”ํ•˜๋ ค๋Š” ์ฒซ ๋ฒˆ์งธ ์ˆ˜, a+b๊ฐ€ ๋”ํ•˜๋ ค๋Š” ๋‘ ๋ฒˆ์งธ ์ˆ˜๊ฐ€ ๋˜๋ฏ€๋กœ, ๋„์ค‘์— temp ๋ณ€์ˆ˜๋ฅผ ์จ์„œ ๋„์ค‘์˜ update๋ฅผ ์•ˆ ํ•œ ๋ณธ๋ž˜์˜ a+b๊ฐ€ ๋‘ ๋ฒˆ์งธ ์ˆ˜๊ฐ€ ๋˜๊ฒŒ๋” ํ•œ๋‹ค โ˜…

#include <stdio.h>

void fibo(int);

int main(void) {
  int num;
  int add = 0;
  printf("enter the num: ");
  scanf("%d", &num);

  fibo(num);

  return 0;
}

void fibo(int num) {
  int front1 = 0;
  int front2 = 1;
  int temp;
  if (num == 1) {
    printf("%d", front1);
    printf("\n");
  } else if (num == 2) {
    printf("%d %d", front1, front2);
    printf("\n");
  } else {
    printf("%d %d ", front1, front2);
    for (int i = 0; i < num - 2; i++) {
      printf("%d ", front1 + front2);
      temp = front1 + front2;
      front1 = front2;
      front2 = temp;
    }
    printf("\n");
  }
}

 

โ‘ง ์ง€์—ญ๋ณ€์ˆ˜(Local Variable)

→ ์ค‘๊ด„ํ˜ธ ๋‚ด์— ์„ ์–ธ๋˜๋Š” ๋ณ€์ˆ˜๋Š” ๋ชจ๋‘ ์ง€์—ญ๋ณ€์ˆ˜

 ์ฆ‰, ๋‹ค๋ฅธ ํ•จ์ˆ˜ ๋‚ด์— ๋งŒ๋“  ๋ณ€์ˆ˜๋Š” ์„œ๋กœ ์ด๋ฆ„์ด ๊ฐ™์•„๋„ ์ถฉ๋Œํ•˜์ง€ x

→ ์ง€์—ญ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น์ง€์—ญ์„ ๋ฒ—์–ด๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์†Œ๋ฉธ๋œ๋‹ค.

→ ์ง€์—ญ๋ณ€์ˆ˜๋Š” stack์ด๋ผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ํ• ๋‹น๋˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์ง€์—ญ๋ณ€์ˆ˜๋Š” ์„ ์–ธ์ด ๋  ๋•Œ๋งˆ๋‹ค ์ ‘์‹œ์— ์Œ“๋“ฏ์ด ํ• ๋‹น๋˜์–ด, ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๊ฐ€ return๋ฌธ์„ ๋งŒ๋‚˜ ์ข…๋ฃŒ๋˜๋ฉด, ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์— ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์›๋ž˜ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

 

ex) ์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๊ณ  ๋‚ด๋ ค๊ฐ€๋Š” ๋ณ€์ˆ˜์˜ ๋ณ€ํ™” ํ˜„ํ™ฉ ํŒŒ์•…ํ•˜๊ธฐ

#include <stdio.h>

int SimpleFuncOne(void);
int SimpleFuncTwo(void);

int main(void) {
  int num = 17;
  SimpleFuncOne();
  SimpleFuncTwo();
  printf("main num: %d\n", num);
  return 0;
}

int SimpleFuncOne(void){
  int num = 10;
  num++;
  printf("SimpleFuncOne num: %d\n", num);
  return 0;
}

int SimpleFuncTwo(void){
  int num1 = 20, num2 = 30;
  num1++, num2--;
  printf("num1 , num2: %d %d\n",num1, num2);
  return 0;
}
/*
SimpleFuncOne num: 11
num1 , num2: 21 29
main num: 17
*/

 

→ ์ง€์—ญ๋ณ€์ˆ˜๋Š” ๋ฐ˜๋ณต๋ฌธ์ด๋‚˜ ์กฐ๊ฑด๋ฌธ์—๋„ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.  ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ˜๋ณต๋ฌธ์ด๋‚˜ ์กฐ๊ฑด๋ฌธ์ด ์ข…๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธ์ด ๋œ๋‹ค.

 ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ์„ ์–ธํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋„ ์ง€์—ญ๋ณ€์ˆ˜์˜ ์ผ์ข…์ด๋‹ค.

 

โ‘จ ์ „์—ญ๋ณ€์ˆ˜

→ ํ”„๋กœ๊ทธ๋žจ์ด ์ฒ˜์Œ ์‹คํ–‰๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ํ• ๋‹น๋˜์–ด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋‚จ์•„์žˆ๋Š” ๋ณ€์ˆ˜

→ ์–ด๋””์„œ๋“  ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜๋กœ, ์ง€์—ญ๋ณ€์ˆ˜์™€ ๋‹ฌ๋ฆฌ ์ค‘๊ด„ํ˜ธ ๋‚ด์— ์„ ์–ธ x

 

ex) ์•„๋ž˜ ์˜ˆ์‹œ์˜ num (๋งŒ์•ฝ ๋ณ„๋„์˜ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋จ)

#include <stdio.h>
void Add(int val);
int num = 0;

int main(void) {
  printf("%d\n",num); //0
  Add(3);
  printf("%d\n",num); //3
  num++;
  printf("%d\n",num); //4
  return 0;
}

void Add(int val){
  num += val;
}

 

→ ์ „์—ญ๋ณ€์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ๋‹ค๋ฉด, ํ•ด๋‹น ์ง€์—ญ ๋‚ด์—์„œ๋Š” ์ „์—ญ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌ์›Œ์ง€๊ณ , ์ „์—ญ๋ณ€์ˆ˜๋กœ์˜ ์ ‘๊ทผ์ด ์ด๋ฃจ์–ด์ง„๋‹ค. (์ง€์–‘)

→ ๊ทธ๋Ÿฌ๋‚˜ ์ „์—ญ๋ณ€์ˆ˜๋Š” ๊ฐ€๊ธ‰์ ์œผ๋กœ ๋งŽ์ด ๋งŒ๋“ค์ง€ ์•Š๋Š” ๊ฒƒ์„ ์„ ํ˜ธ. ๊ฐ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์–ด๋–ป๊ฒŒ ์“ฐ๋Š” ์ง€ ๋ณ€์ˆ˜์˜ ์šฉ๋„๋ฅผ ๋ด์•ผ ํ•˜๊ณ , ๋ฐ”๊พผ๋‹ค๋ฉด ์—ฌ๋Ÿฌ ํ•จ์ˆ˜์˜ ์˜์—ญ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ์— ์‹ ์ค‘ํžˆ ๋งŒ๋“ค ๊ฒƒ!

 

โ‘ฉ static ๋ณ€์ˆ˜ <์ง€์—ญ๋ณ€์ˆ˜์— static ์„ ์–ธ>

→ ์ง€์—ญ๋ณ€์ˆ˜ ์•ž์— static ์„ ์–ธ์„ ๋ถ™์ด๋ฉด, ์„ ์–ธ๋œ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ (์ง€์—ญ๋ณ€์ˆ˜ ํŠน์„ฑ) + ๋”ฑ 1ํšŒ ์ดˆ๊ธฐํ™”๋˜๊ณ  ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์กด์žฌ(์ „์—ญ๋ณ€์ˆ˜ ํŠน์„ฑ)

 

ex) staic local variable ์˜ˆ์‹œ

#include <stdio.h>

void SimpleFunc(void){
  static int num1 = 0;
  int num2 = 0;
  num1++, num2++;
  printf("static: %d, local: %d\n", num1, num2);
}

int main(void) {
  int i;
  for(i=0;i<3;i++){
    SimpleFunc();
  }
  return 0;
}

/*
static: 1, local: 1
static: 2, local: 1
static: 3, local: 1
*/

 

→ ์‰ฝ๊ฒŒ ์–˜๊ธฐํ•˜๋ฉด, ์ „์—ญ๋ณ€์ˆ˜์ธ๋ฐ ์ฃผ์–ด์ง„ ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ๋™์ž‘ํ•˜๋Š” ์ „์—ญ๋ณ€์ˆ˜!(static ํŠน์ง• ๊ผญ ๊ธฐ์–ต) ๋งŒ์•ฝ ์œ„ ์˜ˆ์‹œ์—์„œ ์ž‘์„ฑํ•œ SimpleFunc() ๋‚ด์˜ num1์„ SimpleFunc() ๋ฐ–์˜ ์˜์—ญ์—์„œ ์„ ์–ธํ•œ๋‹ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค!

→ static ์ง€์—ญ๋ณ€์ˆ˜๋Š” ๋‹น์—ฐํžˆ ์ „์—ญ๋ณ€์ˆ˜๋กœ ๋Œ€์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด static ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์ถ”์ฒœ! (์ ์šฉ ๋ฒ”์œ„๊ฐ€ ํ•œ์ •์ ์ผ ๊ฒฝ์šฐ)

 

โ‘ช register ๋ณ€์ˆ˜

→ ์ง€์—ญ๋ณ€์ˆ˜์— register ์„ ์–ธ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ. register๋ผ๊ณ  ์„ ์–ธ์ด ๋˜๋ฉด ๋ณ€์ˆ˜ num์€ CPU ๋‚ด์— ์กด์žฌํ•˜๋Š” '๋ ˆ์ง€์Šคํ„ฐ'๋ผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ๋  ํ™•๋ฅ ์ด ๋†’์•„์ง„๋‹ค.

→ ๋ ˆ์ง€์Šคํ„ฐ๋Š” CPU๋‚ด์— ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํฌ๊ธฐ๊ฐ€ ๋งค์šฐ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ์—ฌ๋„ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์—ฐ์‚ฐ์€ ๋งค์šฐ ๋น ๋ฅด๋‹ค. ์•„๋ฌด๋ฆฌ register ์„ ์–ธ์„ ์ถ”๊ฐ€ํ•ด๋„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•ฉ๋‹นํ•˜์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉด ๋ ˆ์ง€์Šคํ„ฐ์— ํ• ๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐ˜๋Œ€๋กœ ์•„๋ฌด๋Ÿฐ ์„ ์–ธ์„ ํ•˜์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ register์— ํ• ๋‹นํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉด ๊ทธ ๋ณ€์ˆ˜๋Š” register์— ํ• ๋‹น๋œ๋‹ค. (์ฆ‰, ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์žฌ๋Ÿ‰)

→ register๋Š” ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๊ฐ€ ์ฃฝ์น˜๊ณ  ์ž๋ฆฌํ•˜๊ธฐ์—” ๋„ˆ๋ฌด๋‚˜๋„ ์ค‘์š”ํ•˜๊ณ  ๋น„์‹ผ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ - ๋”ฐ๋ผ์„œ ์ „์—ญ๋ณ€์ˆ˜๋Š” x)

 

โ‘ซ ์žฌ๊ท€ํ•จ์ˆ˜

 ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ž๊ธฐ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜: ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜์˜ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด์„œ ์‹คํ–‰. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•จ์ˆ˜์˜ ์ด๋ฆ„์ด Recursive()๋ผ๋ฉด, Recursive ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ค‘๊ฐ„์— ๋‹ค์‹œ Recursive() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๊ฒฝ์šฐ Recursive() ํ•จ์ˆ˜์˜ ๋ณต์‚ฌ๋ณธ์„ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด์„œ ๋ณต์‚ฌ๋ณธ์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

→ ์žฌ๊ท€ํ•จ์ˆ˜ ๋‚ด์— ํƒˆ์ถœ์˜ ์กฐ๊ฑด์„ ์ถ”๊ฐ€(return๋ฌธ) ํ•ด์„œ ๊ณ„์† ์‹คํ–‰๋˜๋Š” ๊ฑธ ๋ฐฉ์ง€!

 

ex) ์˜ˆ์ œ

#include <stdio.h>

void Recursive(int num){
  if (num<=0)
    return;
  printf("Recursive call! %d\n",num);
  Recursive(num-1);
}

int main(void) {
  Recursive(3);
  return 0;
}

 

→ ์ž๋ฃŒ๊ตฌ์กฐ๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์–ด๋ ค์šด ๋ฌธ์ œ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š”๋ฐ ์žฌ๊ท€๊ฐ€ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

 

ex)  ํŒฉํ† ๋ฆฌ์–ผ ๊ตฌํ•˜๊ธฐ ์˜ˆ์ œ (1)

#include <stdio.h>

void Factorial(int num, int ans){
  if (num<=1){
    printf("Result of num! is %d\n",ans);
    return;
  }
  ans *= num;
  Factorial(num-1,ans);
}

int main(void) {
  int num;
  printf("Enter your num: ");
  scanf("%d",&num);
  Factorial(num,1);
  return 0;
}

 

 ์˜ˆ์ œ (2)

#include <stdio.h>

int Factorial(int num){
  if (num==1){
    return 1;
  }
  else{
    return num * Factorial(num-1);
  }
  
}

int main(void) {
  int num;
  printf("Enter your num: ");
  scanf("%d",&num);
  printf("Result of num! is %d\n",Factorial(num));
  return 0;
}

10. ๋„์ „! ํ”„๋กœ๊ทธ๋ž˜๋ฐ 1

โ‘  ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋‘ ๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„์„œ ๊ตฌ๊ตฌ๋‹จ์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑํ•˜๊ธฐ

(์˜ˆ๋ฅผ ๋“ค์–ด 3๊ณผ 5๋ฅผ ์ž…๋ ฅํ•˜๋ฉด 3๋‹จ, 4๋‹จ, 5๋‹จ์ด ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•จ / ์ด ๋•Œ 3๊ณผ 5๋ฅผ ์ž…๋ ฅํ•˜๊ฑด 5์™€ 3์„ ์ž…๋ ฅํ•˜๊ฑด ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐ™์€ ๊ฒฐ๊ณผ ์ถœ๋ ฅ ํ•„์ˆ˜)

#include <stdio.h>

int main(void) {
  int num1, num2, start, end;
  scanf("%d", &num1);
  scanf("%d", &num2);

  if (num1 < num2){
    start = num1, end = num2;
  }
  else{
    start = num2, end = num1;
  }

  for(int i = start; i < end + 1; i++){
    for(int j = 1;j < 10; j++){
      printf("%d x %d = %d\n",i,j,i*j);
    }
    printf("\n");
  }
  
  return 0;
}

 

โ‘ก ๋‘ ๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์„œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(GCD)๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑํ•˜๊ธฐ

→ ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•

#include <stdio.h>

int GCD(int a, int b){
  int A, B, temp;
  if (a>b){
    A = a, B = b;
  }
  else{
    A = b, B = a;
  }
  while(B != 0){
    temp = A%B;
    A = B;
    B = temp;
  }
  return A;
  
}

int main(void) {
  int a, b;
  printf("Enter a and b: ");
  scanf("%d",&a);
  scanf("%d",&b);
  printf("GCD of (a,b) is %d\n",GCD(a,b));
  return 0;
}

 

→ ๋˜๋Š” ๊ณต์•ฝ์ˆ˜ ์ •์˜ ์‚ฌ์šฉ

#include <stdio.h>

int GCD(int a, int b){
  int A, B, result;
  if (a>b){
    A = a, B = b;
  }
  else{
    A = b, B = a;
  }
  for(int i = B; B >=1; i--){
    if ((A%i == 0) && (B%i == 0)){
      result = i;
      break;
    }
  }
  return result;
  
}

int main(void) {
  int a, b;
  printf("Enter a and b: ");
  scanf("%d",&a);
  scanf("%d",&b);
  printf("GCD of (a,b) is %d\n",GCD(a,b));
  return 0;
}

 

โ‘ข ํ˜„์žฌ ์ฃผ๋จธ๋‹ˆ์— 5000์›์ด ์žˆ๋‹ค. DVD ํ•œ ํŽธ์„ ๋นŒ๋ฆฌ๋ฉด 3500์›์ด ๋‚จ๋Š”๋‹ค.

์Šˆํผ์— ๋“ค๋ ค์„œ ํฌ๋ฆผ๋นต(500์›), ์ƒˆ์šฐ๊นก(700์›), ์ฝœ๋ผ(400์›)๋ฅผ ์‚ฌ๋ ค ํ•œ๋‹ค. ์ž”๋ˆ์„ ํ•˜๋‚˜๋„ ๋‚จ๊ธฐ์ง€ ์•Š๊ณ  ์ด ์„ธ ๊ฐ€์ง€ ๋ฌผ๊ฑด์„ ํ•˜๋‚˜ ์ด์ƒ ๋ฐ˜๋“œ์‹œ ๊ตฌ๋งคํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ๊ตฌ๋งค๋ฅผ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑํ•˜๊ธฐ

#include <stdio.h>

int main(void) {
  int a = 500, b = 700, c = 400;
  int change = 3500;

  for(int A = 1; A <= (3500/500); A++){
    for(int B = 1; B <= (3500/700); B++){
      for(int C = 1; C <= (3500/400); C++){
        if ((A*500 + B*700 + C*400) == 3500){
          printf("Bread: %d, Snack: %d, Cola: %d\n",A,B,C);
        }
      }
    }
  }
  
  return 0;
}

/*
Bread: 1, Snack: 2, Cola: 4
Bread: 2, Snack: 3, Cola: 1
Bread: 4, Snack: 1, Cola: 2
*/

 

โ‘ฃ x๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด ์ž์—ฐ์ˆ˜ 1๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ x๋ฒˆ์งธ์˜ ์†Œ์ˆ˜(Prime Number)๊นŒ์ง€ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์ž.

 

 2๋ถ€ํ„ฐ n-1๊นŒ์ง€ n์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—†์Œ์„ ํ™•์ธ

โ€ป O(N) ์‹œ๊ฐ„ ๋ณต์žก๋„ โ€ป

#include <stdio.h>
#include <time.h>
#include <math.h>

int isPrime(int n){
  for(int k = 2; k < n; k++){
    if(n%k == 0){
      return 0;
    }
  }
  return 1;
}


int main(void) {
  int cnt;
  int num = 2;
  double start, end;
  printf("enter cnt: ");
  scanf("%d",&cnt);
  start = (double)clock() / CLOCKS_PER_SEC;
  while(cnt >= 1){
    if(num == 2 || isPrime(num)==1){
      printf("%d ",num);
      cnt--;
    }
    num++;
  }
  printf("\n");
  end = (((double)clock()) / CLOCKS_PER_SEC);
  printf("elapse time: %lf\n",end-start);
  return 0;
}

 

 2๋ถ€ํ„ฐ $\sqrt{n}$๊นŒ์ง€๋งŒ ๋ฒ”์œ„๋ฅผ ํ™•์ธ

โ€ป O($\sqrt{N}$) ์‹œ๊ฐ„ ๋ณต์žก๋„ โ€ป

#include <stdio.h>
#include <time.h>
#include <math.h>

int isPrime(int n){
  double root = pow((double)n,0.5);
  for(int k = 2; k <= (int)root; k++){
    if(n%k == 0){
      return 0;
    }
  }
  return 1;
}


int main(void) {
  int cnt;
  int num = 2;
  double start, end;
  printf("enter cnt: ");
  scanf("%d",&cnt);
  start = (double)clock() / CLOCKS_PER_SEC;
  while(cnt >= 1){
    if(num == 2 || isPrime(num)==1){
      printf("%d ",num);
      cnt--;
    }
    num++;
  }
  printf("\n");
  end = (((double)clock()) / CLOCKS_PER_SEC);
  printf("elapse time: %lf\n",end-start);
  return 0;
}

 

โ˜… ์‹ค์ œ๋กœ 100๊ฐœ์˜ ์†Œ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์‹คํ—˜์„ ํ–ˆ์„ ๊ฒฝ์šฐ, elapse time์ด 2๋ฐฐ๋‚˜ ์ค„์–ด๋“œ๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค! โ˜… (์•„๋ž˜ ์ถœ๋ ฅ๊ฒฐ๊ณผ ํ™•์ธ)

 

โ‘ค ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ดˆ(second)๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ํ›„์—, ์ด๋ฅผ [์‹œ, ๋ถ„, ์ดˆ]์˜ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ

#include <stdio.h>

int main(void) {
  int seconds, h, m, s;
  printf("your seconds: ");
  scanf("%d", &seconds);

  h = seconds/3600;
  m = ((seconds - 3600*h)/60);
  s = (seconds - 3600*h - 60*m);

  printf("[h:%d, m:%d, s:%d]\n", h, m, s);
  return 0;
}

 

โ‘ฅ ์ˆซ์ž n์„ ์ž…๋ ฅ ๋ฐ›๊ณ , ์•„๋ž˜ ๊ณต์‹์ด ์„ฑ๋ฆฝํ•˜๋Š” k์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ

$2^{k} \leq n$

#include <stdio.h>
#include <math.h>

int main(void) {
  int n;
  int k = 0;
  printf("enter n: ");
  scanf("%d",&n);

  while(1){
    if(pow((double)2,(double)k) > n){
      printf("the biggest k is %d\n", k-1);
      break;
    }
    k++;
  }
  
  return 0;
}

 

โ‘ฆ 2์˜ n์Šน์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ

#include <stdio.h>

int PowerofTwo(int n){
  if(n>0){
    return 2 * PowerofTwo(n-1);
  }
}


int main(void) {
  int n;
  int k = 0;
  printf("enter n: ");
  scanf("%d",&n);

  printf("2 power n is: %d\n",PowerofTwo(n));
  
  return 0;
}

* ์ „์ฒด ๋‚ด์šฉ ์ถœ์ฒ˜ <์œค์„ฑ์šฐ์˜ ์—ดํ˜ˆ C ํ”„๋กœ๊ทธ๋ž˜๋ฐ>

 

๋Œ“๊ธ€