CS50 : Cμ–Έμ–΄

2024. 10. 27. 20:23Β·lecture recap

Cμ–Έμ–΄

λŒ€ν•™κ΅ 1ν•™λ…„λ•Œ ν•„κ΅λ‘œ λ“€μ—ˆλ˜ ν”„λ‘œκ·Έλž˜λ° μˆ˜μ—…μ—μ„œ 슀크래치λ₯Ό μ‚¬μš©ν–ˆμ—ˆλŠ”λ°, 그것과 같은 λ‚΄μš©μ΄μ—ˆλ‹€.

 



Cμ—μ„œλŠ” printfλΌλŠ” ν•¨μˆ˜λ‘œ 화면에 ν‘œμ‹œν•  수 μžˆλ‹€. κΈ€μžλ‚˜ 단어, λ¬Έμž₯을 적을 λ•ŒλŠ” ν•­μƒ " " (μŒλ”°μ˜΄ν‘œ)둜 감싸야 ν•˜κ³ , () 뒀에 ;(μ„Έλ―Έμ½œλ‘ )을 λΆ™μ—¬μ•Ό ν•œλ‹€. 이런 ν•¨μˆ˜μ μΈ λ‚΄μš©μ€ κ²‰ν–κΈ°λ‚˜λ§ˆ μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ κ³΅λΆ€ν•˜λ©΄μ„œ ν›‘μ–΄λ΄€κΈ° λ•Œλ¬Έμ— μ–΄λ ΅μ§€ μ•Šμ•˜λ‹€. 

 

#include <stdio.h>λŠ” “stdio.h”λΌλŠ” μ΄λ¦„μ˜ νŒŒμΌμ„ μ°Ύμ•„μ„œ “printf” ν•¨μˆ˜μ— μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•œλ‹€.


μš°λ¦¬κ°€ μ›Œλ“œλ‚˜ ν•œκΈ€λ‘œ λ¬Έμ„œλ₯Ό μ €μž₯ν–ˆμ„λ•Œ "λ¬Έμ„œ.docx", "λ¬Έμ„œ.hwp"와 같이 ν™•μž₯자λͺ…이 λΆ™λŠ” κ²ƒμ²˜λŸΌ C둜 μž‘μ„±ν•œ μ½”λ“œλŠ” “νŒŒμΌμ΄λ¦„.c”둜 μ €μž₯ν•΄μ•Ό ν•œλ‹€.

(λ§ˆμ΄ν¬λ‘œμ†Œν”„νŠΈμ˜ Word 처럼 μžλ™μ μœΌλ‘œ λΆ™μ—¬μ£Όμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— C의 κ²½μš°μ—λŠ” 직접 .cλ₯Ό λΆ™μ—¬μ€˜μ•Ό ν•œλ‹€)

 

컴파일러


μš°λ¦¬κ°€ 직접 μž‘μ„±ν•œ μ½”λ“œλŠ” “μ†ŒμŠ€ μ½”λ“œ” 인데 이걸 2μ§„μˆ˜λ‘œ μž‘μ„±λœ “λ¨Έμ‹  μ½”λ“œ”둜 λ³€ν™˜ν•΄μ•Ό 컴퓨터가 이해할 수 μžˆλ‹€.

이런 μž‘μ—…μ„ "컴파일러"λΌλŠ” ν”„λ‘œκ·Έλž¨μ΄ μˆ˜ν–‰ν•œλ‹€.

 

λ‹€μŒμ΄ 컴퓨터가 우리의 μ–Έμ–΄λ₯Ό 이해할 수 μžˆλ„λ‘ κ±°μΉ˜λŠ” 과정이닀.

 

e.g., clang hello.c λΌλŠ” λͺ…λ Ήμ–΄λŠ” “clang” μ΄λΌλŠ” 컴파일러둜 “hello.c”λΌλŠ” μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•˜λΌλŠ” μ˜λ―Έλ‹€.

κ·Έ κ²°κ³Ό a.out 파일이 μƒμ„±λ˜κ³ , ./a. out λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄ 컴퓨터가 ν˜„μž¬ 디렉토리에 μžˆλŠ” a.out νŒŒμΌμ„ μ‹€ν–‰ν•œλ‹€

 

String

 

CλŠ” λ³€μˆ˜κ°€ μ €μž₯ν•˜λŠ” λ°μ΄ν„°μ˜ μ’…λ₯˜λ₯Ό μ•„μ£Ό μ •ν™•ν•˜κ²Œ λͺ…μ‹œν•΄μ€˜μ•Ό ν•œλ‹€.

string answer = get_string("what's your name?\n");

 

λ³€μˆ˜ answer에 λ“€μ–΄μžˆλŠ” 값을 좜λ ₯ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— %λ₯Ό μ‚¬μš©ν•˜κ³ , μ΄ λ•Œλ„ μ–΄λ–€ μ’…λ₯˜μ˜ 인자λ₯Ό λ°›λŠ”μ§€  μ „λ‹¬ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— string의 sλ₯Ό %뒀에 λΆ™μ—¬μ„œ 인자λ₯Ό λ°›λŠ”λ‹€. κ·Έλž˜μ„œ μ΅œμ’…μ μœΌλ‘œ printf("hello, %s\n", answer); 이 λœλ‹€.

 

$ clang -o string string.c -lcs50

 

μ—¬κΈ°μ„œ -o string 은 string.c λ₯Ό string.out μ΄λΌλŠ” λ¨Έμ‹ μ½”λ“œλ‘œ μ €μž₯ν•˜λ„λ‘ ν•˜λŠ” λͺ…령어이닀.

-lcs50은 “link”λΌλŠ” 의미λ₯Ό μ§€λ‹Œ -l μ΄λΌλŠ” 인자 + “cs50” νŒŒμΌμ„ ν•©μΉœ 것이닀. 이λ₯Ό 톡해 μ»΄νŒŒμΌμ‹œ cs50 νŒŒμΌμ„ μ—°κ²°ν•˜λ„λ‘ μ»΄ν“¨ν„°μ—κ²Œ μ•Œλ €μ€„ 수 μžˆλ‹€.

 

μ•„λž˜ make λͺ…λ Ήμ–΄λ₯Ό ν†΅ν•΄μ„œλ„ κ°„λ‹¨ν•˜κ²Œ μ»΄νŒŒμΌμ„ μˆ˜ν–‰ν•  수 μžˆλ‹€

$make string

 

이처럼 μž‘μ„±ν•œ μ½”λ“œλ₯Ό 컴파일 ν•˜κ³  μ‹€ν–‰ν•˜λ©΄, μ‚¬μš©μžμ—κ²Œ μž…λ ₯값을 λ°›κ³  λ¬Έμž₯ 내에 ν¬ν•¨ν•˜μ—¬ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄ λœλ‹€.

 

 

 

 

Number



μ΄λ²ˆμ—” counterλΌλŠ” λ³€μˆ˜μ— μˆ«μžλ₯Ό μ €μž₯ν•œλ‹€.

μ—¬κΈ°μ„œ intλŠ” λ³€μˆ˜κ°€ μ •μˆ˜(integer)λΌλŠ” 것을 μ•Œλ €μ£ΌλŠ” 것이고, counterλŠ” λ³€μˆ˜μ˜ 이름, 0은 κ·Έ 값에 0을 μ €μž₯(μ΄ˆκΈ°ν™”)ν•˜λŠ” 것이닀.


=> μ…‹ λͺ¨λ‘ counter에 1을 λ”ν•œ 값을 λ‹€μ‹œ counter에 μ €μž₯(ν• λ‹Ή)ν•œλ‹€λŠ” 의미.


 λ§ˆμ°¬κ°€μ§€λ‘œ 슀크래치의 μ‘°κ±΄λ¬Έ λΈ”둝을 C둜 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.



if ( )의 κ΄„ν˜Έ μ•ˆμ—λŠ” κ²€μ‚¬ν•˜κ³ μž ν•˜λŠ” 쑰건이 λ“€μ–΄κ°€κ³ , { } μ•ˆμ—λŠ” 쑰건이 True일 λ•Œ μˆ˜ν–‰ν•˜κ³ μž ν•˜λŠ” μž‘μ—…μ„ λ„£μœΌλ©΄ λœλ‹€.

 

else ifλ₯Ό ν†΅ν•΄μ„œ μ•„λž˜μ™€ 같이 ν•˜μœ„ 쑰건을 μΆ”κ°€ν•  μˆ˜λ„ μžˆλ‹€.

 

 

 

While

 

Cμ—μ„œ while μ΄λ‚˜ for 을 ν†΅ν•΄μ„œ 루프λ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€.

 

while 의 경우 μ•„λž˜ μ½”λ“œμ™€ 같이 while ( )의 κ΄„ν˜Έ μ•ˆμ— 쑰건을 λ„£κ³  { } μ•ˆμ— μˆ˜ν–‰ν•  μž‘μ—…μ„ ν¬ν•¨μ‹œν‚€λ©΄ λœλ‹€.

 

λ§Œμ•½ νŠΉμ • 횟수만큼 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  μ‹ΆμœΌλ©΄ λ‹€μŒκ³Ό 같이 ()κ°€ 참일 λ•ŒκΉŒμ§€ {}을 μˆ˜ν–‰ν•  쑰건을 ()에 μž‘μ„±ν•˜λ©΄ λœλ‹€.



For

λ‹€μ‹œ while문으둜 λŒμ•„κ°€μ„œ μ΄λ²ˆμ—λŠ” i<50μ΄λΌλŠ” 쑰건을 μΆ”κ°€ν•œλ‹€.

μš°λ¦¬λŠ” μ²˜μŒμ— iλ₯Ό 0이라고 μ •ν•΄μ£Όμ—ˆκ³  whileλŠ” κ³„μ†ν•΄μ„œ iκ°€ 50보닀 μž‘μ€μ§€λ₯Ό 체크할 것이닀.

λ”°λΌμ„œ 이 μ½”λ“œκ°€ μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜λ €λ©΄ iλ₯Ό μ¦κ°€μ‹œμΌœμ•Ό ν•œλ‹€ (i = i + 1, i += 1, i++ λͺ¨λ‘ 같은 κ²°κ³Όλ₯Ό λ‚Έλ‹€.)

μ§„ν–‰ μˆœμ„œλ₯Ό μ •λ¦¬ν•΄λ³΄μžλ©΄ μ•„λž˜μ™€ κ°™λ‹€.

iλŠ” 0으둜 μ„€μ • -> iλŠ” 50보닀 μž‘μ€κ°€? -> μž‘λ‹€ -> hello worldλ₯Ό 좜λ ₯ν•œλ‹€ -> iλ₯Ό 1μ¦κ°€μ‹œν‚¨λ‹€ -> iκ°€ 50보닀 μž‘μ€κ°€?
-> (반볡) -> iκ°€ 50보닀 μž‘μ€κ°€? -> μž‘μ§€ μ•Šλ‹€ -> μ’…λ£Œ

 

λ”°λ‘œ λ³€μˆ˜λ₯Ό 선언해도 λ˜μ§€λ§Œ μ•„λž˜μ™€ 같이 for λ₯Ό μ‚¬μš©ν•˜λ©΄ for ( ) μ•ˆμ— 각각 (λ³€μˆ˜ μ΄ˆκΈ°ν™”; λ³€μˆ˜ 쑰건; λ³€μˆ˜ 증가) 에 ν•΄λ‹Ήν•˜λŠ” μ½”λ“œλ₯Ό λ„£μ–΄μ„œ κ°„λ‹¨ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆλ‹€.

즉, κ°€μž₯ λ¨Όμ € μ •μˆ˜ 값을 κ°€μ§€λŠ” iλΌλŠ” λ³€μˆ˜λ₯Ό 0으둜 μ΄ˆκΈ°ν™”ν•˜κ³ , iκ°€ 50인지 맀번 검사λ₯Ό ν•˜κ³ , 이λ₯Ό λ§Œμ‘±ν•˜λ©΄ { } μ•ˆμ˜ λ‚΄μš©μ„ μˆ˜ν–‰ν•œ 후에,  iλ₯Ό 1μ”© μ¦κ°€μ‹œν‚¨λ‹€λŠ” μ˜λ―Έμ΄λ‹€. (int i=0; i<50; i++)

μ•žμ„  whileκ³Ό 같은 역할을 μˆ˜ν–‰ν•˜λŠ” 것을 μ•Œ 수 μžˆλ‹€.

 

 

μ•„λž˜ λͺ©λ‘μ€ λ³€μˆ˜μ˜ 데이터 νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” 것듀이닀

  • bool: λΆˆλ¦¬μ–Έ ν‘œν˜„, e.g., True, False, 1, 0, yes, no
  • char: 문자 ν•˜λ‚˜ e.g., 'a', 'Z', '?'
  • string: λ¬Έμžμ—΄
  • int: νŠΉμ • 크기 λ˜λŠ” νŠΉμ • λΉ„νŠΈκΉŒμ§€μ˜ μ •μˆ˜ e.g., 5, 28, -3, 0
  • long: 더 큰 크기의 μ •μˆ˜
  • float: λΆ€λ™μ†Œμˆ˜μ μ„ κ°–λŠ” μ‹€μˆ˜ e.g., 3.14, 0.0, -28.56
  • double: λΆ€λ™μ†Œμˆ˜μ μ„ ν¬ν•¨ν•œ 더 큰 μ‹€μˆ˜


*intλŠ” λŒ€λž΅ 40μ–΅κΉŒμ§€ μ…€ 수 있기 λ•Œλ¬Έμ— 40μ–΅κ²Œ μ΄μƒμ˜ 데이터λ₯Ό κ°€μ§„ 일뢀 κ±°λŒ€ κΈ°μ—…κ³Ό 같은 상황이 μ•„λ‹Œ 일반 μ‚¬μš©μžλ“€μ€ λŒ€λΆ€λΆ„ μ •μˆ˜μ— intλ₯Ό μ‚¬μš©ν•œλ‹€.

 

 

ν˜•μ‹ μ§€μ •μž

printf ν•¨μˆ˜μ—μ„œλŠ” 각 데이터 νƒ€μž…μ„ μœ„ν•œ ν˜•μ‹ μ§€μ •μžλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

  • %c : char
  • %f : float, double
  • %i : int
  • %li : long
  • %s : string

 

기타 μ—°μ‚°μž 및 주석

κ·Έ 외에도 μ•„λž˜ λͺ©λ‘κ³Ό 같이 λ‹€μ–‘ν•œ μˆ˜ν•™ μ—°μ‚°μž, 논리 μ—°μ‚°μž, 주석 등이 기호둜 μ •μ˜λ˜μ–΄ μžˆλ‹€.

  • +:  λ”ν•˜κΈ°
  • -: λΉΌκΈ°
  • *: κ³±ν•˜κΈ°
  • /: λ‚˜λˆ„κΈ°
  • %: λ‚˜λ¨Έμ§€
  • &&: 그리고 (μ–‘μ˜† λ‹€ μ°Έ)
  • ||: λ˜λŠ” (μ–‘μ˜† 쀑 ν•˜λ‚˜λΌλ„ μ°Έ)
  • //: 주석

'lecture recap' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

TS: ν•œμž…ν¬κΈ°λ‘œ μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ±Œλ¦°μ§€_day10  (0) 2024.08.09
TS: ν•œμž…ν¬κΈ°λ‘œ μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ±Œλ¦°μ§€_day9  (0) 2024.08.09
TS: ν•œμž…ν¬κΈ°λ‘œ μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ±Œλ¦°μ§€_day8  (0) 2024.08.09
TS: ν•œμž…ν¬κΈ°λ‘œ μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ±Œλ¦°μ§€_day7  (0) 2024.08.09
TS: ν•œμž…ν¬κΈ°λ‘œ μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ±Œλ¦°μ§€_day6  (0) 2024.08.09
'lecture recap' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • TS: ν•œμž…ν¬κΈ°λ‘œ μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ±Œλ¦°μ§€_day10
  • TS: ν•œμž…ν¬κΈ°λ‘œ μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ±Œλ¦°μ§€_day9
  • TS: ν•œμž…ν¬κΈ°λ‘œ μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ±Œλ¦°μ§€_day8
  • TS: ν•œμž…ν¬κΈ°λ‘œ μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ±Œλ¦°μ§€_day7
nuew
nuew
🀸 재주 λ„˜λŠ” 쀑
  • nuew
    bloggg. . .πŸ¦–πŸ’₯
    nuew
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (88)
      • issue (10)
      • baekjoon (41)
      • lecture recap (11)
      • What I Learn (26)
      • retrospective (0)
      • maeil-mail (0)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    Algorithm
    Node.js
    js
    μžλ°”μŠ€ν¬λ¦½νŠΈ
    TypeScript
    Baekjoon
    ν•œμž…ν¬κΈ°λ‘œ μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ
    μ½”λ”©ν…ŒμŠ€νŠΈ
    css
    Study
    λ°±μ€€
    JavaScript
    media-query
    μ•Œκ³ λ¦¬μ¦˜
    modal
    TailwindCSS
    issue
    ν•œμž…ν¬κΈ°λ‘œμž˜λΌλ¨ΉλŠ”νƒ€μž…μŠ€ν¬λ¦½νŠΈ
    what i learn
    zustand
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
nuew
CS50 : Cμ–Έμ–΄
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”