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
# 바이트 오더
리들 엔디안 : 한 바이트 씩 역순으로 들어가는것
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 ...
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);
}
'c언어' 카테고리의 다른 글
[c언어] 자료구조, sort 등 (0) | 2019.07.01 |
---|---|
[c언어] 구조체, 파일입출력, 전처리기지시자 등 (0) | 2019.07.01 |
[c언어] 함수포인터, typedef, 전처리기 지시자, malloc 등 (0) | 2019.06.21 |
[c언어] 더블포인터, 연산자 우선순위 등 (1) | 2019.06.20 |
[c언어] 싱글포인터, 배열 등 (0) | 2019.06.19 |