본문 바로가기

프로그램/C언어

【C언어】 '누구나 따라하는 컴퓨터 프로그래밍', KOCW 수강 후기

반응형
안녕하세요. 이번에 C언어에 대해서 KOCW 강의 중에 하나를 수강하고 후기를 남깁니다. 예전에 대학교 수업에서 기초컴퓨터 수업을 계절학기로 수강신청은 했지만, 전혀 수업을 하지 않았기에... printf나 scanf도 거의 기억나지 않았던 상태였습니다.... (교수님이 방생하시면서 본인 교재만 팔고 가셨죠... 이런 분들은 좀 없어져야 하지 않을까...) 이 강의를 듣고 그래도 나름대로 코드를 작성할 수 있게 되어서 기분이 좋아진 것 같습니다. 저처럼 거의 모르거나, 아예 모르시는 분들이 시작하기에 좋은 강의인 듯 합니다. 열공하세요~! (후기가 도움이 되었다면, 공감♥도 눌러주세요!)


  • 제 목 : 누구나 따라하는 컴퓨터 프로그래밍 / 2015년 2학기
  • 강 사 : 금오공과대학교 컴퓨터공학과 김성영 교수님
  • 개인평점 : 별 5개 ★★★★★
  • 강의링크http://www.kocw.net/home/search/kemView.do?kemId=1127939
  • 후 기
    • 교수님께서 정말 친절하게 하나하나 알려줘서 제목 그대로 '누구나 따라하는' 강의인 것 같다.
    • 인강임에도 불구하고 예제들을 직접해보라고 권유하는게 좋다. 다 듣고나면 '해보세요'라는 말이 기억날 정도다.
    • 1.2배속으로 들으면 딱 맞다. 천천히 알아 들을 수 있게 계속 반복적으로 알려줘서 좋다.
    • 같은 강좌로 심화강좌가 없어서 아쉽다.
    • 26개의 콘텐츠가 있는데 다보는데에 시간이 아깝지 않았다. 혹여 저와 비슷한 수준이라면 듣는걸 추천한다!





아래는 제가 수업을 들으면서 컴퓨터로 메모한 것입니다. 개인적으로 정리한 것이라 많이 부족할 수 있습니다. 참고만 하시면 감사하겠습니다. (나중에 혼자 다시 보려고....ㅎ)

1~7강. C언어개요 - 기초, 실습, 연산자 등
  • 프로그램 다운로드 : 'visual studio express' 학생용 버전
  • 시작하기 : 파일 → 새로 만들기 → 프로젝트 → Visual C++ 선택 → Win 32 콘솔 운영 프로그램 → 이름 지정 → 
  • 마이크로소프트사 비주얼 스튜디오 도움말https://docs.microsoft.com/ko-KR/visualstudio/ide/get-started-with-visual-studio
  • 소스파일 추가 : 소스 파일 마우스 우클릭 → 추가 → 새 항목 → Visual C++ → C++파일 → 이름 지정 →  확장자를 'c'로 변경
  • 컴파일 : 상단바 빌드 → 컴파일 → 출력 부분에 성공여부 나타남. : 소스 파일을 목적 코드로 맞게 변환하는 것.
  • 3가지 대원칙
    • 각 코드 끝에는 세미콜론 (;)로 마쳐야한다.
    • 코드는 블록(중괄호{}) 안에 있어야한다. + 블록에 이름(func())이 있어야한다. 
    • 블록이 1개 뿐이면, 이름은 main() 으로 적어야한다.
  • 링크 작업 : 목적 코드를 실행 코드로 바꿔주는 작업. 상단바 '빌드' 메뉴 → '솔루션 빌드' or 'firstApp 빌드' 클릭 → 출력창에 성공여부 나옴.
  • C언어는 '영어'로만 작업한다. '한글'은 작업 불가.
  • 출력(실행) 확인 : 상단바 '디버그' → '디버깅 시작' or '디버깅하지 않고 시작'
  • 디버깅 : 논리적인 오류를 찾아내는 과정
  • 출력 : printf("~~"); or pintf("~%d~%d~",a,b); → a,b에 구문을 넣어도됨.
  • 시작 : 디버깅하지 않고 시작하기
  • 줄바꿈 : ₩n (=역슬레쉬 n) → "~" 안에 넣어주면 된다.
  • 곱하기 : '*문자'
  • 등호 하나 (=) : 할당/대입 연산자 → 오른쪽 입력값을 왼쪽에 저장해라. ex) number=1;
  • 변수 지정하는 방법 : 초반에 int정수형 변수 지정. ex) int a;
  • 변수 작명 규칙
    • 알파벳, 숫자, 언더바(다른 기호는 X)로 구성 (단, 숫자로는 시작 불가)
    • 대*소문자 구분, 최대 255자, 한글/공백/키워드 사용 불가
  • 빌드 = 컴파일 + 링크
  • 변수의 뜻 = 데이터를 저장할 수 있는 메모리 공간에 붙여진 이름. 메모리 주소 대신 이름을 사용하여 데이터의 저장 및 참조(불러오기) 기능.
  • 입력 : ex) scanf("%d %d", &num1, &num2); → 입력한 값을 정수로해서 num1에 저장한다는 뜻. 단, 변수 앞에는 항상 '&' 기호가 들어가야함.
    • ex) printf("정수 입력 : ");
            scanf("%d", &num1);
  • 주석문 (comment) : 컴파일이 무시되는 부분.  →  /*~~*/ → 설명/메모를 적기에 좋음.
  • 헤더 파일 ex) include <stdio.h>
  • 알고리즘 = 문제를 해결하는 절차
  • 표현식 (expression) = 계산의 결과를 얻기 위한 계산식. 연산자와 피연산자의 조합으로 구성. 항상 결과가 존재함.
  • 연산자
    • 산술 연산자 : +, -, *, /, %
      • % : 나머지 구하는 연산자
      • 나누기 결과 제대로 하려면 → '5.0/2.0' 식 처럼 입력해야한다.
    • 관계 연산자 : <, >, ==(같다), !=(같지 않다), <=, >=
      • 관계를 만족하면 '참(=1 =0이 아닌 모든 수)', 만족하지 않으면 '거짓(=0)'
    • 논리 연산자 : &&(and), ll(or), !(not)
      • %%(and) : 좌우 둘다 참이여야만 참, 하나라도 거짓이면 거짓. ex) (5>2)&&(5!=2) : 참
      • ll(or) : 좌우 하나라도 참이면 참, 둘다 거짓이면 거짓. ex) (5<2)ll(5==2) : 거짓
      • !(not) : 피연산자 1개만 사용. 참이면 거짓, 거짓이면 참. ex) !(5>2) : 거짓
    • 대입 연산자 : =, +=, -=, *=, /=, %=
      • 등호(=) : 대입 연산자 좌측은 무조건 변수, 우측은 수식이나 숫자 등. 우측의 값을 좌측에 저장한다는 뜻.
      • ex) val += 5 → val = val + 5
        ex) val /= 5 → val = val / 5

8~11강. 반복구조 및 12강. 반복문의 중첩
  • 반복문 (=loop, 조건을 만족하는 동안 일정한 문장들을 반복 실행하기 위한 구문) 삼총사 : while, do ~ while, for 구문
  • while 구문 : while (조건) {문장들}에서 '조건'을 만족하는 동안 계속 블록을 '반복', 조건이 맞지 않으면 그때 블록을 지나감. while 구문을 빠져나가게하는 조건을 부여하면 됨. (문장=명령어)
  • 반복문을 만드려면, 문장을 똑같게 만들어줘야한다. 그 안에 들어가는 문자들은 변수로 만들어주면 편하다. 문장을 '일반적'으로 만들어주고 '변수'와 함께 반복문을 만들어주면 된다.
  • n = n+1n += 1 로 적을 수 있다.
  • n++; 로 적으면 n이 1씩 커지게하는 것.
  • 들여쓰기 : 좌측 여백으로부터 일정 간격만큼 오른쪽으로 건너 띄어 쓰기. 코드의 가독성을 높이기 위해 필요하다. 블록 내부에서 탭 하나정도 들여쓰기가 된다.
  • 반복문으로 만드는 쉬운 방법
    • 1단계 : 순차구조를 갖는 프로그램 작성
    • 2단계 : 계산은 컴퓨터가 수행하게 변경
    • 3단계 : printf()의 큰 따옴표("")내부를 동일하게 변경
    • 4단계 : printf()의 모든 내용을 동일하게 변경
    • 5단계 : 단위 명령어들을 모두 동일하게 표현
    • 6단계 : 반복문(while구문)을 사용하여 표현
  • scanf("%d", &b); : scanf()는 변수 앞에 '&'가 붙어야함.
  • 반복문 중첩 : 반복문 안에 반복문이 들어가는 것.

13강. do~while 구문
  • 문법 : do {문장들} while (조건);
  • do뒤의 문장들이 먼저 시행되고 while의 조건이 만족하면 다시 do로 가고, 조건을 만족하지 못하면 다음 문장으로 넘어감.
  • 문장이 먼저 시행되고 조건은 마지막에 검사하는 논리
  • while의 조건 뒤에 세미콜론(;)이 들어가야함. do~while의 끝이기 때문에.
  • 최소 한번이상 문장들이 시행되어야하면 do~while로 

14강. for 구문
  • 문법 : for(초기문 ; 조건문 ; 증감문)  {문장들}
  • 괄호()내에 있는 조건들로인해 문장들이 시행되는 것
  • {문장들}은 조건 내에 있을 때에, 반복되는 것
  • 초기문으로 시작되고, 조건문을 확인한 뒤에, 증감문이 시행된다고 생각하면 됨. 한번 지나가면 초기문은 시행되지 않고 조건문과 증감문만 시행됨.
  • while 구문과 표현만 다르고 기능적인 모든 것이 똑같다.
  • for구문을 중첩시킬 수 있다. 이때, 초기문 때문에 초기화된다는 것을 알아야한다.
  • 초기문이 들어가지 않아도됨.

15~17강. 조건구조 - if, if~else
  • 기본형 문법 : if(조건) {문장들}
  • 반복문과의 차이는 '한번만' 실행되고 끝난다는 것이다. 조건을 만족하지 않으면 그냥 실행이 안된다.
  • if뒤의 문장이 한줄뿐일때는 중괄호{}를 생략할 수 있다.
  • if~else 문법 : if(조건) {문장들} else {문장들}
  • else 뒤 문장은 if의 조건이 만족하지 않을때 실행되는 문장이다.
  • 비교연산자는 우선순위가 같기때문에, 좌측부터 수행이 된다. 비교연산자가 한 문장에 들어갈 경우엔 조심해야된다. 참(1), 거짓(0)으로 계산되기 때문이다. 즉, 관계연산자가 한 문장에 2개 이상이면 관계연산자를 사이에 추가해준다.
    • 해결방법 : 사이에 관계를 나타낼 관계연산자(and, or, not)을 넣어준다.
  • if~else 확장문법 : if(조건1) {문장들} else if(조건2) {문장들} else if(조건3) {문장들}
  • else if 에서는 앞에 적힌 조건이 기본적으로 만족하지 않아서 넘어온다고 생각해줘야한다.

18강. break&continue
  • break는 반복문에 사용되고 루트(반복문)를 빠져나오기 위해 사용한다. 반복문 내에서 break문이 실행이되면 강제로 종료하고 반복문 밖으로 나간다.
  • 여러 개 중첩된 반복문에서 break가 적히면, 적힌 부분의 반복문만 빠져나가고 나머지 반복문은 break의 영향이 미치지 못한다.
  • continue는 현재의 루프의 반복 동작을 멈추고 다음 반복을 진행시킨다. 즉, 조건이 만족하는 경우에는 뒤 문장들을 '생략' 또는 '무시'하고 지나가고 다시 반복문으로 올라가서 순차적으로 반복하게 한다.
  • n%3 : n을 3으로 나눴을 때의 나머지를 구하는 방법

19강. switch 구문
  • 조건문 : if 구문, switch 구문
  • 문법 : switch(계산식) { case 값1: break; case 값2: break; ~~ default: }
  • 대략 : switch(계산식) + case : + break; + defualt:
  • 스위치 뒤 계산식에서 나온 값이 케이스 뒤에 적히는 것
  • break가 없으면 탈출을 못해서 순차구조로 해석해서 출력/계산이 된다.
  • switch구문과 if구문은 차이가 없지만, 경우의 수가 너무 많은 경우에는 switch 구문을 사용하는게 좋다. (경우에 따라 매우 다르다.)
  • if 구문에서는 if뒤에 조건이 들어가서 다양한 조건에 맞출 수 있지만, switch 구문에서는 case 뒤에 값 하나만을 입력해야하기 때문에 어렵다. case 뒤에는 조건(ex 범위)이 들어갈 수 없다. 여러 조건도 불가하다. 단 하나의 값(정수형)만 입력할 수 있다.
  • 범위 지정을 case에 할 수 없다.

20~21강. 기본자료형
  • 글자(문자) = ASCII code
  • char 형
    • 표현 : 'A' 'a' '9' → 작은따옴표로 표현
    • 그냥 9 → 숫자 9, 작은따옴표로 '9' → 문자 9
    • 하나의 문자(글자)를 저장할 수 있는 자료형. 모든 정수형 변수도 문자로 저장 가능.
    • ex) char ch = 'A'; 아스키 코드에서 65라는 숫자로 저장된다. → %c로 받아서 A로 출력해줘야한다. 만약, %d로 받아서 출력할 경우 아스키 코드값인 65가 출력된다.
  • %d : 십진 정수로 출력
  • %c : 한 문자를 출력
  • 만약, 정수형을 %c로 출력할 경우, 정수를 자동으로 아스키코드로 변환해서 문자로 출력해준다.
  • 문자열큰따옴표("")를 사용한다.
  • 자료형이란? 선언할 변수의 특징을 나타내기 위한 키워드
  • 자료형의 종류
    • 기본 자료형 : 정수형, 실수형
    • 사용자 정의 자료형 : 구조체, 공용체
  • 각 자료형이 수용할 수 있는 범위를 넘어서면 overflow(오버플로우 : 일부는 기억되고 일부는 사라지는...) 된다.
  • 다양한 자료형이 제공되는 이유 : 데이터의 표현 방식이 다르기 때문. 메모리 공간을 적절히 사용하기 위해서.
  • 일반적으로 정수형은 int (→%d), 실수형은 double (→%lf)을 사용한다.
  • "%22.20f" → 숫자표현을 22자리 확보하고 20자리를 소수점 이하로
  • 부호가 없는 정수 자료형 : unsigned 키워드를 사용

22~23강. 자료형변환 (+상수)
  • 상수 (vs변수) : 값을 변경할 수 없다.
  • 상수의 종류 : 정수 상수, 실수 상수, 문자 상수
    • 앞에 0을 붙인 017은 8진수 (=15)
    • 앞에 0x를 붙인 ox17은 16진수 (=32)
    • e=10 : e1 = 10^1, e-2 = 10^-2
    • alert (=\a) : '삐' 소리나는 명령
    • 위 Numeric (oct)에 적힌 숫자는 8진수, Numeric (hex)는 16진수로 적힌 것이다.
  • 실수 상수는 기본적으로 double 자료형으로 지정된다. 따라서 , float으로 실수를 지정하게되면 오류가 뜬다.
    • 아니면, 실수상수 뒤에 'f'의 접미사를 붙여줘서 float형으로 바꿔줘도 된다.
  • 심볼릭 상수란? 이름을 지닌 상수
  • 심볼릭 상수를 정의하는 방법
    • const 키워드    ex) const double pi=3.14;
    • 매크로(macro)      ex) #define pi 3.14
  • 자료형 변환 : 자동(묵시적) 형 변환, 강제 형 변환
  • sizeof 연산자 : 피연산자의 메모리 크기를 반환(출력) → ex) sizeof(val)
  • for 구문만을 위한 변수를 지정해주는 것이 편하고 좋다.

24~26강. 함수 / 라이브러리함수
  • 문법 : ex) int function( int a, int b ) {}
  • return ~~ ; 으로 값을 내보낸다.
  • 함수에 사용될 변수와 함수 이름앞에 자료형을 붙여줘야한다.
  • 함수는 main() 문장 밖인 '위'에 함수를 적어야한다. 함수를 아래에 적어주려면, 함수 원형이라는 것이 앞에서 정의되어야한다. 함수의 정의하는 부분의 첫줄만 적고 세미콜론을 붙여주면 된다.
  • 함수를 지정하면, main()에서 불러서 사용할 수 있다.
  • C 프로그램은 하나 이상의 함수들로 구성된다. 모든 C 프로그램은 반드시 한 개의 main() 함수를 포함한다.
  • 함수를 사용하면 코드의 단순성이 향상된다. 함수는 호출하여 사용한다.
  • 반환문 : 함수의 실행을 종료하고 호출한 곳으로 제어를 이전하는 문장
  • rand() 함수 : 난수 생성함수. 0~32767. <stdlib.h>헤더파일을 선언해야함.
    • 일정한 범위의 값을 생성하는 방법 : ex) 1월에서 12월 : month = rand() % 12 + 1;
    • 프로그램을 실행할 때마다는 같은 난수가 나온다.
  • srand() 함수 : rand() 함수보다 다른 값을 반환할 수 있다.
    • #include <time.h>를 적고 srand( time(NULL) ); 을 적어주고 나서 rand() 함수를 사용하면 된다.



※ 개인이 메모한 강의노트입니다. 다른 목적으로 사용하기 위해 옮기는 건 불가합니다.
※ 도움이 필요하다면 언제든 댓글 or 공지사항을 참고해주시면 감사하겠습니다.

여러분들의 소중한 공감♥ 클릭이 블로거에게는 큰 힘!이 됩니다^^
로그인하지 않아도 가능합니다 ㅎㅎ



반응형
LIST