C언어 문법 총 정리
식별자 : 변수명, 함수명, 상수명등...
① 영문자,숫자, 밑줄문자(_)의 조합
② 첫글자는 반드시 밑줄문자 또는 영문자로 시작
③ 공백문자, 예약어는 사용할수 없다
ex) int printf = 10 (X)
int h k d = 20 (X)
int 123a = 10; (X)
int a123 = 20; (O)
int _k = 100; (O)
④ 대.소구별
ex) int A=10;
int a=20;
자료형
①정수형- short int (2byte) -32768 ~ +32767 %d
int (4byte) -2147483648 ~ +2147483647 %d
unsigned int(4byte) %u ==> 음수가없다
long (4byte) %ld
②실수형- float (4byte) %f
double (8byte) %lf
③문자형- char (1byte) %c('문자'),%s("문자열")
④주소형변수(*) - 4byte
int a=10;
long b=20L;
float a=10.5F;
double b=20.3;
%-10.2f ==>전체자릿수.소수이하
※변수(Constant)와 상수(Variable)
(1)변수 : 자료를 기억시킬 기억장소
정수,실수,문자,문자열,나열형,
레퍼런스(reference) - 별명
컨스트(const) - 값변경X
(2)상수 : 변수에 기억시킬자료
※형변환(우선순위) : 문자 < 정수 < 실수
char < short < unsigned int < int
작->큰 (값의 보강 가능)
큰->작 (값의 보장안됨)
ex)double k=56.38;
int s=(int)k; <--- 56
강제(명시적)형변환 : float avg = (float)tot/3;
자동(묵시적)형변환 : float avg = tot/3.0;
※ 제어문자
\n - 줄바꾸기
\t - 8칸(tab)띄우기
\a - 경고음("삑")
\r - New Line(줄 맨앞으로)
\0 - NULL(아무것도 없다)
\b - 한칸 왼쪽으로 이동
--------------------------------------------------------------
(1) 문자
<형식> 변수 = getchar();
putchar(변수 or '문자');
getch() : 입력과 동시에 읽어들임(화면표시 X)
getche(): 입력과 동시에 읽어들임(화면표시 O)
getchar():Enter입력후 데이터를 읽어들임
fflush(stdin) : 키보드 버퍼를 clear
scanf("%*c%c",변수): 1칸 건너띄기
(2) 문자열
<형식> gets(변수); <--- space도 문자로 인식
puts(변수 or "문자열");
(3) 모든데이타(문자,숫자,문자열....)
<형식> scanf("변환기호",&변수, &변수....);
printf("변환기호 or 메세지",변수, 변수,...);
%s로 입력받는경우 : space인정 안함
--------------------------------------------------------
※typedef(Type Definition):자료형 재정의
<형식> typedef 자료형 별명(바꿀이름)
--------------------------------------------------------
5. 연산자
(1)산술연산자 : +, -, *, /, %(나머지-int형만)
ex) 5/3 ==> 1, 5%3 ==> 2
(2)관계연산자 : >, <, >=, <=, ==(같다), !=(같지않다)
true(1, 0이아닌수), false(0)
(3)논리연산자 : &&(논리곱) - 둘다 만족해야 참(and)
||(논리합) - 둘중 하나만 만족해도 참(or)
! (논리부정) - ~반대
ex) A B A and B A or B !A
--------------------------------------
T T T T F
T F F T F
F T F T T
F F F F T
ex) 주소가 서울이거나 부산인사람 찾기(or조건 ||)
서울 1 0 ==> O
부산 0 1 ==> O
광주 0 0 ==> X
addr == "서울" || addr == "부산"
-------------------------------------------------------
ex) 점수가 80이상이면서 90미만인사람찾기(and조건 &&)
30 0 1 ==> X
100 1 0 ==> X
85 1 1 ==> O
score >= 80 && score < 90
80 <= score < 90 ====> 오류!!!
(4)증가/감소연산자
++변수 : 1증가후 값사용(전치)
--변수 : 1감소후 값사용
변수++ : 값사용후 1증가(후치)
변수-- : 값사용후 1감소
(5)할당(대입)연산자
+= : a=a+b a+=b
-= : a=a-b a-=b
*= : a=a*b a*=b
/= : a=a/b a/=b
%= : a=a%b a%=b
(7)삼항(조건)연산자 ==>간단한 if
<형식> 조건식? true일때 : false일때;
ex) int a=10;
(a>0)? puts("plus") : puts("minus");
(8)sizeof연산자 : 자료형의 길이(byte)구함
※진법변환
2진수 :0,1
8진수 :0,1,2,3,4,5,6,7
16진수:0,1,2,3,4,5,6,7,8,9,A(10),B(11),C(12),D(13),E(14),F(15)
8진수표현(Octal): int a=04; %o
16진수표현(Hexa): int b=0x45a %x
------------------------------------------------------------
int a,b,c,d,e,f;
a=0x42af;
b=0xaf03;
c=a&b;
d=a|b;
e=a^b;
f=~a;
printf("%x %x %x %x", c,d,e,f);
printf("%d\n", 8<<2);
printf("%d", 18>>3);
-------------------------------------------------------------
6. 제어문(if문)
① if(조건식)
{
참일때;
}
② if~else문
if(조건식)
{
참일때;
}
else
{
거짓일때;
}
③ if~else if문
if(조건식)
{
참일때;
}
else if(조건식)
{
참일때;
}
.
.
else
{
거짓일때;
}
-----------------------------------------------
※무조건 분기문
분기명:
goto 분기명;
-----------------------------------------------
-----------------------------------------------------------
7. 제어문(switch문)
형식> switch(값) //값--> int, char형만 가능
{
case 값1 : 실행문; break;
case 값2 : 실행문; break;
case 값3 : 실행문; break;
.
.
[default:] 실행문;
}
8. 제어문(조건반복문)
(1)while : 조건이 참이면 실행(조건에 따라서 한번도 실행안할수도 있다)
while(조건식)
{
참일때;
}
(2)do~while : 실행후 조건비교(적어도 1번은 실행을 한후 조건비교)
do
{
실행문;
}while(조건식);
9. for문(무조건반복문)
(1)단일for문
for(초기값;조건식;증감식)
{
}
※break : 블럭탈출
continue : Loop문에서 밑에문장을 수행하지 않고 다음Loop진행
(2)다중for문
for(초기값;조건식;증감식)
{
for(초기값;조건식;증감식)
{
}
}
10.문자열함수 (#include )
①strcpy(s1,s2):s1에 s2를 복사 //중요!!!
②strcmp(s1,s2):s1과 s2를 비교 (s1> s2:1/ s1<s2:-1/ s1==s2:0) //중요!!!
③strlen(s):s문자열의 길이 //중요!!
④strrev(s):s문자열을 꺼꾸로출력
⑤strcat(s1,s2):문자열 s2를 s1에 연결
⑥strupr(s):소문자를 대문자로(문자열)
⑦strlwr(s):대문자를 소문자로
⑧tolower(c):대문자를 소문자로(문자)
⑨toupper(c):소문자를 대문자로
⑪strchr(s,c):s에서 최초의 c이후 문자를 구함
⑫strset(s,c):s를 c로 지정한 문자로 바꾼다
11. 배열(Array)
:같은형의 자료형으로 구성된 데이타들의 모임
1)1차배열
자료형 배열명[첨자]={숫자1, 숫자2,....};
자료형 배열명[첨자]={'문자1','문자2'...};
자료형 배열명[첨자]="문자열";
첨자:생략가능 int a[]={10,20,30};
int a[5];
int a[]; <--- X
참고)메모리동적할당(Heap메모리)
#include
① 메모리할당 : 변수 = (자료형 *)malloc(byte수);
변수 = new 자료형[byte수];
② 메모리반환 : free(변수);
delete []변수명;
--------------------------------------------------------------
-------------------------------------------------------------
--------------------------------------------------------------
--------------------------------------------------------------
2)2차배열
자료형 배열명[첨자][첨자]={{....},{....}...};
행 열
ex) int num[3][4]={{10,40,70,100},{20,50,80,110},{30,60,90,120}};
int num[3][4]={10,40,70,100,20,50,80,110,30,60,90,120};
12. 포인터(pointer)
:메모리상 임의의 위치값
포인터변수란 임의의 위치값(address)을 기억시킬 변수(4byte)
형식> 자료형 *포인터변수명; <--단일pointer
자료형 **포인터변수명; <--이중pointer
(포인터변수의 주소값기억)
(& : 시작주소값)
※배열과 포인터
값 | 배 열 | a[0] a[1] a[2]
|----------------------------------------
| 포인터 | *a *(a+1) *(a+2)
| | *&a[0] *&a[1] *&a[2]
----------------------------------------------
주소 | 배 열 | &a[0] &a[1] &a[2]
|----------------------------------------
| 포인터 | a a+1 a+2
ex)
a[5] ==> a[0] a[1] a[2] a[3] a[4]
------------------------------------------------
k o r e a
------------------------------------------------
100번지 101번지 102번지 103번지 104번지
배열 포인터 의미
-------------------------------------
&a[2] a+2 102번지
a[3] *(a+3) e
a[2][3] *(*(a+2)+3)
&a[2][3] *(a+2)+3
13. 함수(Function)
: program을 단일화 시킬목적으로 사용
① 동일한 작업을 반복수행
② 변경, 삭제가 쉽다
③ 알아보기 쉽고, 코딩이 쉽다
※종류
1. 내장함수 : 이미 내장된 함수 - #include를 시킴
ex) printf() - #include
getch() - #include
2. 사용자정의함수 : user가 만든함수 - 선언해야함
※호출방식
1. Call by name : 인자값없고 이름만
2. Call by value : 값전달
3. Call by pointer(address) : 주소전달
4. Call by reference : 별명(Alias) ===> C++에 확장된 개념
<형식> 결과형 함수명(인자,인자....);
------
void, int,float,char,char*....
함수명();
함수명(인자,인자...);
변수 = 함수명();
변수 = 함수명(인자,인자...);
return; //제어값만 돌려줌(생략가능)
return 변수;
return 수식;
(주의!) return값은 오로지 1개
ex) return 10; -- O
return 10,20; ---X
-------------------------------------------------------------
----------------------------------------------------------------
<>
------------
O.S영역(시스템영역)
------------
응용P/G영역(코드영역)
------------
초기화데이터 <---- extern, static (전역변수)
영역(static)
------------
근거리힙
(Near Heap)
------------
스택 <---- auto
(stack) (가장 안정적) (지역변수,매개변수/블럭종료시메모리반환)
------------
원거리힙 <---- new/delete
(Far Heap) malloc()/free()
프로그래머에의해 메모리회수
'코딩 > C' 카테고리의 다른 글
c언어 도서관리 프로그램 (0) | 2019.11.14 |
---|---|
c언어 연결리스트 (0) | 2019.11.13 |
비쥬얼 스튜디오 2019 설치 visual studio (0) | 2019.10.04 |
c구조체와 연결리스트 등등 (0) | 2019.07.15 |
c++ 은행 관리 프로그램 (0) | 2019.06.18 |