U E D R , A S I H C RSS

새싹�실/2012/개차반


1. 참여�


강사 윤종하
학� 최경진

2. 개요

  • 카톡 회ì�˜ ê²°ê³¼ 초안으로 ì›” 15~16/í™” 16~17시 ì§„í–‰ 예정
  • High-levelì�˜ programming skill보단 low-levelì�˜ HWì �ì�¸ 구조를 설명하여 low-levelì—�서 접근하는 ë�…특한(...) 코딩 스타ì�¼ 전수
  • 참고 ìž�료: ì†�봉수 êµ�수님 수업ìž�료: http://cau.ac.kr/~bongbong/c10/

2.1. 1회차(2012 - 03 - 27)

  • ì „ì›� ì°¸ì„�
  • C언어를 low-levelì�˜ ê´€ì �ì—�서부터 접근하기 위해 í�°ë…¸ì�´ë§Œ 아키í…�ì³�부터 수업
    • C언어는 UNIX 개발ì�„ 목ì �으로 만들어진 언어ì�´ê¸° 때문ì—� OSì�˜ 기초가 ë�˜ëŠ” 기초ì �ì�¸ 컴퓨터시스템ì�€ ì�´í•´í•  필요가 있다고 íŒ�단
    • í�¬ì�¸í„° ê°œë…�ì�´ë‚˜ scanfì—�서 &ê°€ ì“°ì�´ëŠ” ì�´ìœ  등 여러가지 keywordì—� 대해 설명하기 위함
    • binary digit를 비롯한 컴퓨터 시스템ì�˜ 기초ì �ì�¸ ê°œë…� ë˜�한 설명
  • 즉ì„�ì—�서 코드를 작성해가며, Compile error, logical error, debug errorì�˜ ê°œë…�ì—� 대해 설명
    • 추후 프로그래ë°�시 ì—�러 ì�´ìœ ì™€ 대처방법 부연 설명
  • C언어ì�˜ 특징 설명
  • variable ë°� main functionì�˜ ì—­í•  설명
  • #includeê°€ 무엇ì�¸ì§€ header fileì�´ 무엇ì�¸ì§€ 설명
  • 컴파ì�¼ëŸ¬ì�˜ ì—­í• ê³¼ compile -> link -> build 과정 설명

2.1.1. 과제: � 항목� 오늘 배운 내용� 정리하시오.

  • c 언어ì�˜ 특징
    • High-Level 언어ì�˜ 특징과 Low-Level 언어ì�˜ 특징ì�„ 모ë‘� 지니고 있다
      • High-Level 언어ì—� 가까울수ë¡� 사람ì�´ ì�´í•´í•˜ê¸° 쉬워진다 (Human Friendly)
      • Low-Level 언어ì—� 가까울수ë¡� 기계가 ì�´í•´í•˜ê¸° 쉬워진다 (Machine Friendly)

  • 컴파ì�¼ëŸ¬ (complier)
    • High-Level 언어를 Low-Level 언어로 변환해주는 ì—­í• ì�„ 한다

  • í�° ë…¸ì�´ë§Œ 아키í…�ì³�
    • 현재 사용ë�˜ëŠ” 모든 컴퓨터ì—� ì �ìš©ë�˜ëŠ” 범용 컴퓨터 구조
      • 제어장치와 연산장치, 메모리, ìž…ìœë ¥ìž¥ì¹˜ë¡œ 구성

    • bit
    • ì�´ì§„법으로 나타낼 수 있는 ìž�릿수를 나타낸다
      • 1bit=0,1 / 2bit=00,01,10,11 / 3bit=000,001,010,011,100 ...

  • í—¤ë�” 파ì�¼
    • 함수 (Function) 들ì�˜ ì§‘í•©
      • ì�´ë¯¸ 존재하는 함수를 가져다 ì“°ë ¤ í•  때 í—¤ë�”파ì�¼ì�„ 불러와서 사용한다

    • 변수 (variable)
    • int, float, char 등
      • int는 정수를 나타내고ìž� í•  때 사용하며 ìœë ¥ì‹œ %d를 사용
      • float는 소수ì � 아래ì�˜ 숫ìž�까지 표현하고ìž� í•  때 사용하며 ìœë ¥ì‹œ %f를 사용
      • char는 문ìž�를 나타내고ìž� í•  때 사용하며 ìœë ¥ì‹œ %c를 사용


  • 과제 ì œìœë‚´ìš©ì—�서 빼먹는 수업 ë‚´ìš© 추가!
    • int: integer type, 4 bytes
    • char: It used to express a character, but also used to express a integer. 1 byte
    • float: 4 byte, floating type number. Specification in IEEE 754-2008

    • function: input -> output

    • Main function
      • real part of program
      • It has start and end point of a program.
      • return 0; : 0 is a flag noticing OS that program is ended.

2.2. 2회차(2012 - 04 -05)

  • 수업내용: Variables, Data Types, Standard I/O
    • Variables
      • identifier -> ì�´ë¦„ 짓기ì—�ë�„ 규칙ì�´ 있다.
      • keyword
      • overflow
      • escape sequence
    • Data Type
      • Integer type: int(4 bytes), char(1 byte, be often used to express a character)
      • float type: float, double (double is more correct than float)
      • unsigned - MSB를 통해서 2ë°°ì�˜ 수를 ë�” ë§Žì�´ 나타낼 수 있다는 ê°œë…� 설명
      • Maximum, minimum value of int(경우ì�˜ 수 ì�´ìš©)
    • Standard I/O
      • format specifications
      • printf, scanf
      • scanfì—�서 왜 & ì�´ 놈ì�´ 등장할까?
    • preprocessor(전처리기)
      • #define
    • automatic type conversion
    • Example Problem: Write a program that converts meter-type height into feet(integer),inch(float)-type height. Your program should get one float typed height value as an input and prints integer typed feet value and the rest of the height is represented as inch type. (1m=3.2808ft=39.37inch) (ìœì²˜: ì†�봉수 êµ�수님 ppt)


2.2.1. 과제

  • ë°°ìš´ 수업 ë‚´ìš© 정리
  • 2진법, 명제, 삼단논법 공부해오기
  • 오늘 못 ì§ ê±° 마저 다 짜오기
  • ê³ 1 수학 과정 제대로 공부해보기




  • 변수ì�˜ ì�´ë¦„ (identifier)
    • 변수ì�˜ ì�´ë¦„ì�€ 반드시 문ìž�나 underscore (_) 로 시작해야 한다
    • 변수ì�˜ ì�´ë¦„ì�€ 대소문ìž�를 구분한다

  • 키워드 (Keyword)
    • 컴파ì�¼ëŸ¬ì—� ì�˜í•´ ì�´ë¯¸ ì •í•´ì ¸ 있는 ì�´ë¦„ (identifier)
    • 변수ì�˜ ì�´ë¦„으로 사용할 수 없다
    • C 언어ì—�는 29 ê°œì�˜ 키워드가 존재

  • 오버플로우 (overflow)
    • 변수ì—� 저장할 수 있는 값보다 ë�” í�° ê°’ì�´ 저장ë�˜ì—ˆì�„ 때 ë°œìƒ�한다
    • 2진법으로 수가 처리ë�˜ëŠ” 과정ì—�서 ë°œìƒ� (?)
    • 입력한 것과 전혀 다른 ê°’ì�´ ìƒ�겨나게 ë�œë‹¤

  • 역슬래시 (\, Escape sequence)
    • 특정한 기능ì�„ 수행하기 위한 알림으로ì�¨ \ (back slash) 로 표시
    • 줄바꿈 (\n), 탭 (\t), í�°ë”°ì˜´í‘œ (\"), ìž‘ì�€ 따옴표 (\'), 역슬래시 (\\) 등.


  • ë�°ì�´í„° 타입
    • int : 4 byte. 정수를 표현. 소수ì � 아래로는 버린다
    • char: 1 byte. 글ìž�를 표현 (character).
    • float, double: 4 byte, 8 byte. 실수를 표현하므로 소수ì � 아래 숫ìž�까지 나타낼 수 있다
      • doubleì�´ float보다 ë�” 정확하게 수를 표현할 수 있다
      • float => -1.0E+38 ~ 1.0E+38 / double => -1.0E+308 ~ 1.0E+308
      • 1.0E?
    • unsigned ~ : 양수 부분만 표현함으로ì�¨ ë�” í�° 범위ì�˜ 수를 나타낼 수 있지만 ì�Œìˆ˜ë¥¼ 표현할 수 없다
      • 수를 ì�´ì§„법으로 표현 시 양수/ì�Œìˆ˜ë¥¼ 구분하기 위해 사용ë�˜ëŠ” 맨 앞ìž�리 0ì�„ 수를 표현하는 ë�°ì—� 사용하여 ë‘� ë°° ë§Žì�€ 수를 표현
  • intì�˜ 표현 범위=4byte=32bit=2^32 ì—�서 맨 앞ìž�리 0ì�„ 제외한 나머지가 사용ë�˜ë¯€ë¡œ -2^31 ~ 2^31-1 ê°œì�˜ 숫ìž�를 표현할 수 있다
    • 2^31-1=???

  • Standard I/O
    • 기본ì �ì�¸ ìž…ë ¥ (Input) / ìœë ¥ (Output)
    • í—¤ë�” 파ì�¼ <stdio.h>
    • printf ("ë‚´ìš©", argument);
    • scanf("format specifier(s)", &argument);
    • format specifications
      • ë°°ìš´ 것 - %d (int), %f (float), %c (char)
    • scanfì�˜ & : 입력받는 ê°’ì�„ &ë’¤ì—� 위치한 변수ì—� 저장하기 위해 메모리ì—� 존재하는 변수ì�˜ 위치를 알리는 ì—­í• ì�„ 한다

  • 전처리기
    • #define 으로 사용
    • ìž�ì‹ ì�´ 지정하는 문ìž�ì—´ì—� 특정한 ê°’ 등ì�„ 지정해ë‘�ê³  사용할 수 있다


  • #include <stdafx.h>
    #include <stdio.h>
    int main ()
    {
    
    float meter=0;
    
    
    scanf("%f",&meter);
    
    int feet=meter*3.2808;
    float inch=(((meter*3.2808)-feet)/3.2808)*39.37;
    
    printf("%d feet %f inch\n",feet,inch);
    
    return 0;
    
    
    
    
    }
    
    


    2.3. 3회차 (2012 - 04 -09)

    • Operators
      • arithmetic operators: binary, unary
      • priority
      • precedence
    • assignment operator
    • decrements / increments : postfix / prefix
    • ì•약 ì—°ì‚°ìž�
    • bitwise operator
      • Binary numeral system
    • 2's complement: ì�Œìˆ˜ 표시방법

    #include<stdio.h>
    
    int main()
    {
    	int input, output;
    	scanf("%d", &input);
    
    	output = ~input;
    	output ++;
    
    	printf("%d\n", output);
    	return 0;
    }
    

    2.3.1. 과제

    • 당연히, 오늘 ë°°ìš´ ë‚´ìš© 정리(별로 없지?)
    • 특정한 수를 입력받고 and operator를 ì�´ìš©í•˜ì—¬ ê·¸ 수 보다 ìž‘ì�€ ì§�수 중 가장 í�° ì§�수를 ìœë ¥í•˜ë�¼(scanf, printf ì�´ìš©)
    • shift operator를 ì�´ìš©í•˜ì—¬ 128(=2^5)ì�„ ìœë ¥í•˜ê³ , 128ì�„ 특정 변수(variable)ì—� 저장하여 ê·¸ 변수와 left shift operator를 ì�´ìš©í•˜ì—¬ 32를 ìœë ¥í•˜ë�¼
    • 다ì�Œ 계산ì�˜ ê°’ì�„ 예ìƒ�하ë�¼
      • 1110 0111 ^ 1101 0001 = ?
      • 1110 0111 | 1101 0001 = ?


    • Assignment operator
      • Equal sign (=) ì�€ Assignment operator 를 나타낸다
      • 변수ì—�게 ê°’ì�„ 주기 위해 사용ë�œë‹¤
      • 계산 순서 : 오른쪽 -> 왼쪽

    • Decrement / Increment : postfix / prefix
      • Decrement는 --로, Increment는 ++로 나타낸다
      • ì¦�ê°�ê°’ì�€ 1
      • Postfix ì�¼ 경우 변수 ë’¤ì—� Decrement/Increment operator를 사용하며 다른 계산ì�´ ë��난 후 ì �ìš©ë�œë‹¤
      • Prefix ì�¼ 경우 변수 앞ì—� Decrement/Increment operator를 사용하며 다른 계산ì�„ 실행하기 ì „ì—� ì �ìš©ë�œë‹¤

    • ì•약 ì—°ì‚°ìž� (Shorthand Operators)
      • 계산 과정ì—� ê°™ì�€ 변수가 í�¬í•¨ë�˜ì–´ 있ì�„ 경우 ì•약 ì—°ì‚°ìž�를 사용할 수 있다
      • +=, -=, *=, /=, %=
        • Ex. (A = A + B)는 (A += B ) 로 표현 가능

    • 비트 ì—°ì‚°ìž� (Bitwise Operators)
      • 2진법으로 표현ë�˜ëŠ” Bit를 계산하여 표현
        • 2진법 (Binary numeral system)
        • 1ê³¼ 0ë§Œì�„ ì�´ìš©í•´ 숫ìž�를 나타내는 방법.
        • 컴퓨터ì—�서 2진법ì�˜ 1ì�€ true, 0ì�€ false로 나타나는 경우가 있다
        • 2진수를 10진수로 바꾸려면 2진수ì�˜ ìž�릿수ì—� ë”°ë�¼ 2^(n-1)ì�„ 곱해주면 ë�œë‹¤
        • 10진수를 2진수로 바꾸려면 10진수를 2로 나누어 나머지가 있다면 1, 없다면 0ì�„ ì �어넣으면 ë�œë‹¤
      • Left shift : a<
        • aì�˜ 모든 비트를 왼쪽으로 n 칸 옮기며, 새로 ìƒ�겨난 비트는 0ì�´ ë�œë‹¤
      • Right shift : a>>n
        • aì�˜ 모든 비트를 오른쪽으로 n 칸 옮기며, 새로 ìƒ�겨난 비트는 0ì�´ ë�œë‹¤
      • And ì—°ì‚° : a & b
        • a와 bì�˜ 비트를 비êµ�하여 서로 다르면 0, 서로 같다면 1로 표현한다
      • Or ì—°ì‚° : a | b
        • a와 bì�˜ 비트를 비êµ�하여 하나ë�¼ë�„ 1ì�´ë�¼ë©´ 1로 표현한다
      • XOR ì—°ì‚° : a ^ b
        • a와 bì�˜ 비트를 비êµ�하여 서로 다르다면 1, 서로 같다면 0으로 표현한다
      • 1's complement : ~a
        • aì�˜ 비트를 모ë‘� 반전시킨다 : 1->0, 0->1

    • 2's complement
      • Bit 계산으로 ì�Œìˆ˜ë¥¼ 표현
        • A를 -A로 나타내려면, Aì�˜ 비트를 1's complement로 반전시킨 후 1ì�„ ë�”해주면 ë�œë‹¤



    #include <stdio.h>
    int main ()
    {
    	int num ;
    	int temp1 ;
    	
    		
    	printf ("enter a number : ");
    	scanf ("%d", &num);
    
    	temp1 = num & 1 ;
    
    	if (temp1 == 1) {
    
    		printf ("%d\n", num - 1);
    	}
    
    	else if (temp1 == 0) {
    
    		printf ("%d\n", num - 2);
    
    	}
    
    
    
    	return 0;
    
    
    
    }
    


    #include <stdio.h>
    int main ()
    {
    
    	int num = 1 ;
    	num = num<<7;
    	
    
    	printf ("%d\n", num);
    
    	int num2 ;
    	num2 = num ;
    
    	num2 = num2>>2;
    
    	printf ("%d\n", num2);
    
    	return 0;
    
    
    
    
    }
    

    • 1110 0111 ^ 1101 0001 = 0011 0110
    • 1110 0111 | 1101 0001 = 1111 0111
    Valid XHTML 1.0! Valid CSS! powered by MoniWiki
    last modified 2021-02-07 05:29:45
    Processing time 0.0097 sec