티스토리 뷰

190610 - C언어 (1일차)
교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다.
 
 
vs 설치

 
1972년 데니스리치에 의해 만들어짐.
 

 
char : 8bit == 1byte
 
signed int 에서 최상위 bit가 1이면 2의 보수 취해서 -(마이너스)부호를 붙여 표현함.
 
32 = 
0010 0000
 
-32 =
1110 0000
 

#바이어스 표기법
 
1010 -> 1.010 * 2^3을 
float(32bit : 4byte) 로 바꾸면
2^(3+127)
 
0 1000 0010 010 0000 0000 0000 0000 0000
_____4
           ___1
                  ____2
2진수로 6
0110 -> 1.10 * 2^2
float(32bit) 로바꾸면
2^(3+129)
_부호
  __________129
                     ___ 10(가수)
0 100 0000 1100 0000...0000
____4 
         ____0
                   ____C
 

# 바이트 오더
little endian
리들 엔디안 : 한 바이트 씩 역순으로 들어가는것
 
 
0110 1101
16진수-6D
10진수-109
08진수-155
 
12.5를 2진수로
(정수부는 하던데로, 소수부는 2를 곱해서 변환)
1100.1
 

 
'' : 문자
"" : 문자열
 

 
C에서 NULL
NULL == 0 == \0
 

 
상수 집합은 literal pool
 

 
열거형 enum : 상수를 기호화 시켜 사용.
 

 
main.c -> Preprocessor -> main.i -> Translation -> main.asm(.s) -> Assembler -> main.obj(.o) -> Linker -> main.exe
 

 
int main(void) {
       printf("Test\n");
       // 옆사람 이름 출력하기
       printf("홍길동\n"); // \n : 개행문자
       // 형식 지정자 %d, %s, %c, %x ...
       // http://soen.kr/ : 소프트웨어 엔지니어 사이트
       printf("%d\n", 1);
       printf("%s\n", "1");
       printf("%c\n", '1');
       printf("1\n");
       return 0;
}
 

 
# 비트 이동연산자
>>,<<
피연산자를 2진수로 보고 shift 연산함.
 

 
# 논리 연산자
C에서는 0이 아닌 모든 값은 참.
 
논리곱(&&) 앞이 거짓이면 바로 수행중단.
논리합(||) 앞이 참이면 바로 true.

 
# 비트연산자
&,|,^,~
 

# 비트연산자로 스왑하기 ( 메모리 덜 사용, but 좀 느림)
int main() {
    int a = 10;
    int b = 6;
 
    a = a ^ b;
    b = a ^ b;
    a = a ^ b; // a와 b가 바뀌게(swap) 된다.
 
    printf("a:%d , b:%d\n", a, b); //a:6 , b:10
 
}
 
#temp써서 스왑하기 (더 빠르다. but 메모리 더 사용) trade off...
int main() {
    int a = 10;
    int b = 6;
    int temp;
 
    temp = a;
    a = b;
    b = temp;
 
    printf("a:%d, b:%d, temp:%d", a, b, temp);
    
    return 0;
}
 
 

 
# 3항 연산자
조건식 ? 식1(참일 때) : 식2(거짓일 때)
 

# 나열 (comma oprator)
int main() {
    int a = 1/*, 2, 3, 4, 5*/; //오류
    int b = (1, 2, 3, 4, 5);
    printf("a: %d, b:%d", a, b);
    return 0;
}
a: 1, b:5
 

#함수
//리턴값 함수명(함수인자)
int get_num() {
    return 30;
}
 
int main() {
    int a = 10; // 초기화
    a = 20; // 대입
 
    a = get_num(); // 함수 리턴 값에 의한 대입
}
 
 
//리턴값 함수명(함수인자)
int get_num() {
    return 30;
}
 
// 리턴값 없고 매개변수 없는 함수
display() {
    printf("감기조심\n");
}
 
void put_num(int data) {
    printf("%d\n", data);
}
 
int main() {
    int a = 10; // 초기화
    a = 20; // 대입
 
    a = get_num(); // 함수 리턴 값에 의한 대입
    display();
 
    put_num(a);
    return 0;
}
 
//리턴값 함수명(함수인자) (리턴값은 한 개만 가능.)
int get_num() {
    return 30;
}
 
// 리턴값 없고 매개변수 없는 함수
display() {
    printf("감기조심\n");
}
 
void put_num(int data) {
    printf("%d\n", data);
}
 
int add(int a,int b){
    return a+b;
}
 
int main() {
    int a = 10; // 초기화
    a = 20; // 대입
 
    a = get_num(); // 함수 리턴 값에 의한 대입
    display();
 
    put_num(a);
    printf("add함수 이용add(11,22) : %d\n",add(11,22));
    return 0;
}
 
int max_num(int a, int b); // 함수의 프로토타입
 
 

 
float : %f
double : %lf
 
 
getc(),putc() : 한 문자
gets(),puts() : 문자열
 

 
조건문 선택문.
 

 
// 입력한 문자가 a나 A 이면 "오전" 출력
//              p나 P이면 "오후" 출력
// switch문을 사용
 
 
// if문을 사용하여 입력한 숫자가 홀수 짝수
// 인지를 구분하시오.
// 예 5
// 입력한 문자 5는 홀수 입니다.
 
// 입력한 숫자가 1~10사이의 숫인지 판별하는 프로그램
 
// 입력문자가 대문자면 소문자로 출력
//           소문자면 대문자로 출력
int is1to10(int n) {
    if (1 <= n && n <= 10)
        return 1;
    else
        return 0;
}
void printAa(char ch) {
    if ('a' <= ch && ch <= 'z') {
        printf("%c\n", ch - ('a' - 'A'));
    }
    else if('A'<=ch&&ch<='Z'){
        printf("%c\n", ch + ('a' - 'A'));
    }
}
void pmOrAm(char ch) {
    switch (ch) {
    case 'a':
    case 'A':
        printf("오전\n");
        break;
    case 'p':
    case 'P':
        printf("오후\n");
    }
}
void evenOdd(int n) {
    if (n % 2 == 0) {
        printf("입력한 문자 %d는 짝수 입니다.\n", n);
    }
    else
        printf("입력한 문자 %d는 홀수 입니다.\n", n);
}
main() {
    char ch;
    int n;
    printf("오전오후\n");
    printf("입력:");
    scanf("%c", &ch);
    pmOrAm(ch);
 
    printf("짝수홀수\n");
    printf("입력:");
    scanf("%d", &n);
    evenOdd(n);
 
    printf("1~10\n");
    printf("입력:");
    scanf("%d", &n);
    if (is1to10(n)) {
        printf("참\n");
    }
    else {
        printf("거짓\n");
    }
    
    getchar();
 
    printf("대소문자\n");
    printf("입력:");
    scanf("%c", &ch);
    printAa(ch);
}
댓글
최근에 올라온 글
최근에 달린 댓글
네이버 이웃추가
«   2024/04   »
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
글 보관함