*함수 원형

 

- 함수 원형(function prototyping) : 컴파일러에게 함수에 대하여 미리 정보를 알리는 것

 

- 함수 원형의 형식 ↓

 

  반환형 함수이름 (매개 변수1 , 매개 변수2 ,~~~~);

 

Ex) int get_integer(void);                

int combination(int n ,int r);

 

 

 

#라이브러리 함수

 

- 라이브러리 함수(library function) : 컴파일러에게 제공하는 함수

 

- 표준 입출력

- 수학 연산

- 문자열 처리

- 시간 처리

- 오류 처리

- 데이터 검색과 정렬

 

 

 

#난수 함수 라이브러리

 

- 난수(random number)는 규칙성이 없이 임의로 생성되는 수이다.

 

- 난수는 암호학이나 시뮬레이션 , 게임 등에서 필수적이다.

 

 

 

 

#rand() : 난수를 생성하는 함수

            0부터 RAND_MAX 까지의 난수를 생성

 

헤더파일 : <stdlib.h> 기본 사용 : rand();

 

- 범위를 지정하여 임의의 값을 생성하는 경우 : rand() % 갯수 + 시작 수;

 

 

 

 

 

 

 

 

#srand()함수

 

- rand()함수의 초기값을 설정하는 함수

 

- srand(초기값);

 

- 매번 난수를 다르게 생성하려면 시드(seed)를 다르게 하여야 한다.

   srand((unsigned)time(NULL));

 

 

 

 

 

 

 

#time()함수


- 1970년 1월1일 0시0분0초부터 현재까지의 시간을 초단위로 제공한다.

 

- time(NULL)


- 헤더파일: time.h

 

- rand()함수의 값이 일정하지 않도록 time()을 이용하여 초기화

 

- srand(time(NULL))

 

 

 

#Sleep()함수

 

- 밀리언 초(1/1000)단위로 프로그램의 실행지연

 

- Sleep(밀리언초);  /* S는 무조건 대문자 */

 

 

system()함수
  - 콘솔창에서 사용할 수 있는 명령어를 실행시키는 함수

 

  사용형식


  system("명령어 입력");

 

  **화면을 깨끗이 지우는 명령
  system("cls");

 

  **화면을 잠깐 멈추는 명령
  system("pause");

 

  **지금위치의 폴더들을 확인명령
  system("dir");

 

 

 

 

 

 

 

 

#rand()함수를 이용하여 로또 6개 숫자 뽑아보기

 

 

 

 

 

 

 

 

 

#로또 프로그램 중복 x

 

 

 

 

 

 

 

#변수의 속성

 

- 이름 , 타입 , 크기 , 값 , + 범위 , 생존시간 , 연결

 

- 범위(scope) : 변수가 사용 가능한 범위 , 가시성

 

- 생존시간(lifetime) : 메모리에 존재하는 시간

 

- 연결(linkage) : 다른 영역에 있는 변수와의 연결 상태

 

 

 

 

#변수의 종류

 

- 지역 변수 : 함수 내에서 선언된 변수

 

  선언된 영역이 다르면 동일한 변수명을 사용할 수 있다.

 

  해당 지역을 빠져나가면 지역변수는 소멸된다.


  호출할때마다 새롭게 할당된다.

 

 

 

 

 

 

 

 

 

 

#지역변수 예제

 

 

 

 

 

 

 

 

 

- 전역 변수 : 함수 밖에서 선언된 변수

 

  프로그램이 시작하고 끝날때까지 메모리공간이 남아있는다.

 

                 자동적으로 0으로 초기화 된다.

 

                 main함수든 내가 만든 함수 안에서 자유롭게 접근이 가능하다.

 

 

 

 

 

 

 

 

 

 

#전역 변수 예제

 

 

 

 

 

 

 

 

 

#문자열 처리 라이브러리

 

 

 

 

 

 

#문자열 길이 (strlen)

 

- strlen("Hello") 는 5를 반환한다.

 

 

 

 

 

 

 

 

 

#문자열 복사 (strcpy)

 

- char dst[6];

 

- char src[6] ="Hello";

 

- strcpy(dst,src)

 

 

 

 

 

 

 

 

 

 

 

#문자열 연결 (strcat)

 

- char dst[12] = "Hello";

 

- char src[6] = "World";

 

- strcat(dst,src);

 

 

 

 

 

 

 

 

 

 

 

 

#배열 초기화 방법

 

- 1. 배열선언과 동시에 초기화


- 2. scanf()입력


- 3. strcpy() 초기화

 

 

 

 

#문자열 비교

 

 

 

 

 

 

 

 

 

#if문으로 문자열 비교

 

 

 

 

 

 

 

 

 

 

 

#strcmp로 문자열 비교

 

 

 

 

 

 

 

 

 

 

 

#수학 라이브러리 함수

 

 

 

 

 

 

- 헤더파일은 #include <math.h> 사용

 

 

 

 

#간단한 자동차 게임 만들어보기

 

 

알고리즘 : 난수 발생기를 초기화 한다.

    

for( i = 0 ; i < 주행시간 ; i++)

 

난수를 발생하여 자동차1의 주행거리에 누적한다.

 

    난수를 발생하여 자동차2의 주행거리에 누적한다.

 

    disp_car()를 호출하여 자동차1을 화면에 *표로 그린다.

 

      disp_car()를 호출하여 자동차2를 화면에 *표로 그린다.

 

 

 

 

 

 

 

 

 

#로그인 프로그램 만들어보기

 

 

 

 

 

 

 

 

 

 

#가위바위보 프로그램 만들어보기

 

 

 

 

 

 

 

 

 

 

 

#숫자 맞추는 프로그램

 

 

 

 

 

 

*배열이란?

 

- 배열(array) : 동일한 타입의 데이터가 여러 개 저장되어 있는 데이터 저장 장소이다.

 

- 배열 안에 들어있는 각각의 데이터들은 정수로 되어 있는 번호(첨자)에 의하여 접근한다.

 

- 배열을 이용하면 여러 개의 값을 하나의 이름으로 처리할 수 있다.

 

 

 

#배열 선언

 

자료형  배열이름  배열크기

int          Arr          [5]

 

 

 

 

- 자료형 : 배열 원소들이 int형이라는 것을 의미

 

- 배열 이름 : 배열을 사용할 때 사용하는 이름이 Arr이라는 것을 의미

 

- 배열 크기 : 배열 원소의 개수가 5개라는 것을 의미

 

- 인덱스(배열번호) : 항상 0부터 시작한다.

  5개의 크기를 가지지만 1 , 2 , 3 , 4 , 5의 숫자크기가 아니라 0 , 1 , 2 , 3 , 4로 크기를 가지고 있는것이다.

 

 

 

#배열 각방에 대입 해보기

 

 

 

 

 

 

 

 

#배열과 반복문

 

- 배열의 가장 큰 장점은 반복문을 사용하여 배열의 원소를 간편하게 처리할 수 있다는 점이다.

 

 

 

 

 

 

 

 

#잘못된 인덱스 문제

 

- 인덱스가 배열의 크기를 벗어나게 되면 프로그램에 치명적인 오류를 발생 시킨다.

 

- C에서는 프로그래머가 인덱스가 범위를 벗어나지 않았는지 반드시 확인해야 한다.

 

 

 

 

 

 

 

 

#배열의 초기화

 

- 배열의 크기가 주어지지 않으면 자동적으로 초기값의 개수만큼이 배열의 크기로 정해진다.

 

 

 

 

 

 

#배열의 복사와 비교

 

 

 

 

 

 

 

 

 

 

#2차원 배열

 

- 2차원 배열은 1차원적으로 구현된다.

 

 

 

 

 

 

 

 

#2차원 배열 활용

 

 

 

 

 

 

 

 

#2차원 배열의 초기화

 

 

 

 

 

 

 

 

#3차원 배열

 

 

 

 

 

 

 

 

#모듈의 개념

 

- 모듈(module) : 독립되어 있는 프로그램의 일부분

 

- 모듈러 프로그래밍 : 모듈 개념을 사용하는 프로그래밍 기법

 

- 모듈러 프로그래밍의 장점 : 각 모듈들을 독자적으로 개발 가능

                                      다른 모듈과 독립적으로 변경 가능

                                      유지 보수가 쉬워진다.

                                      모듈의 재사용이 가능하다.

 

- C에서는 모듈 == 함수이다.

 

 

 

 

#함수

 

- 표준함수,내장함수,시스템함수
- 사용자정의함수(사용자가 직접 만들어사용하는 함수)

 

 

#함수원형(prototype)
  - 함수의 생김새를 나타낸다.

 

 

 

#함수의 개념

 

- 함수(function) : 특정한 작업을 수행하는 독립적인 부분


- 함수 호출(function call) : 함수를 호출하여 사용하는 것

 

- 함수는 입력을 받으며 출력을 생성한다.

 

 

 

#함수의 장점

 

- 함수를 사용하면 코드가 중복되는 것을 막을 수 있다.

 

- 한번 작성된 함수는 여러번 재사용할 수 있다.

 

- 함수를 사용하면 전체 프로그램을 모듈로 나눌 수 있어서 개발 과정이

  쉬워지고 보다 체계적이 되면서 유지보수도 쉬워진다.

 

 

 

#함수들의 연결

 

- 프로그램은 여러 개의 함수들로 이루어진다.

 

- 함수 호출을 통하여 서로서로 연결된다.

 

- 제일 먼저 호출되는 함수는 main()함수이다.

 

 

 

#함수의 정의

 

- 반환형(return type)

 

- 함수 헤더(function header)

 

- 함수 몸체(function body)

 

 

 

#함수의 구조

 

 

 

 

 

 

 

 

#반환형

 

 

 

 

 

 

 

 

 

 

 

#매개 변수

 

 

 

 

 

 

 

 

#인수와 매개 변수

 

- 인수(argument) : 실인수 , 실매개 변수라고도 한다.

 

- 매개 변수(parameter) : 형식 인수 , 형식 매개 변수라고도 한다.

 

 

 

#함수 호출과 반환

 

- 함수호출(function call)

 

- 함수를 사용하기 위하여 함수의 이름을 적어주는 것

 

- 함수안의 문장들이 순차적으로 실행된다.

 

- 문장의 실행이 끝나면 호출한 위치로 되돌아간다.

 

- 결과값을 전달할 수 있다.

 

 

 

 

#함수 호출과정 살펴보기

 

 

 

 

 

 

 

 

#sum 함수 호출하기

 

 

 

 

 

 

 

 

#반환값

 

- 반환값(return value) : 호출된 함수가 호출한 곳으로 작업의 결과값을 전달하는 것

 

- 인수는 여러 개가 가능하나 반환값은 하나만 가능

 

 

반환값 함수이름 (매개변수)
  {
  //기능
       return ;
  }

 

 return
   - 리턴되는 값을 의미
   - 함수가 일을 하고 돌아올때 가지고 오는값

   - return문은 값을 반환하는 기능 외에도 함수를 종료하는 기등도 가지고 있다.

 

  return type(반환값)
   - 정수,실수,문자 데이터의 형태

 

  sum(전달인자)
   - 함수가 호출될때 넘겨지는 값의 형태

   - 아규먼트(argument)

 

  함수가 호출되서 넘겨질때 저장되는 공간
   파라미터 - 매개변수

 

 

 

 

 

 

 

 

 

#함수의 구분

 

 

 

 

 

 

 

 

 

#비교 함수

 

 

 

 

 

 

 

 

 

 

 

 

 

#절댓값을 구하는 함수 출력 프로그램

 

 

 

 

 

*반복문

 

- 반복문(Repetitive Statement)이란 지정한 작업을 반복해서 수행하는 문법이다.

 

- 반복문 작성 조건은 3가지가 있다.

 

1. 시작값 = 초기값; 1,2,100~

2. 조건

3. 증감식

 

- 반복문의 종류에는 while , do~while , for 등이 있다.

 

 

 

#while문

 

- 주어진 조건이 만족되는 동안 문장들을 반복 실행한다.

 

- 무한반복 while(1) 조건이 무조건 참이여야 한다.  ' 1 = 참 '

 

while(조건식)

문장;

 

 

 

#while문을 이용하여 1~10까지의 숫자 출력

 

 

 

 

 

 

 

#역순으로 출력

 

 

 

 

 

 

 

#while문을 이용하여 1~100까지의 합 , 홀수와 짝수의 합 출력해보기

 

 

 

 

 

 

 

 

 

#입력한 횟수만큼 이름 출력해보기

 

 

 

 

 

 

 

 

 

#while문 무한반복을 이용하여 가위 바위 보 게임 기본 메뉴 만들어보기

 

 

 

 

 

 

 

 

 

 

 

#do ~ while문

 

- 반복 조건을 루프의 끝에서 검사한다.

 

- 적어도 한번은 반복 문장을 실행한다.

 

 

do

문장

while(조건)

 

- while 조건이 참일 경우

 

while - 조건 -> 실행

do~while 실행 -> 조건

(부정문)

 

 

 

#do ~ while문을 이용하여 정수를 입력받고 입력받은 정수들을 더하다 0입력시 종료되는 프로그램 만들어보기

 

 

 

 

 

 

 

 

 

 

#while문 안에 if문 사용 예

 

- 정수를 입력받다가 8의 배수가 되는 수를 5번 출력하면 프로그램 종료

 

 

 

 

 

 

 

 

 

 

#for문

 

- for문의 기본 구조

 

for(초기식; 조건식; 증감식)

문장;

 

 

- 초기식: 반복을 시작하기 전에 딱한번 실행한다.


- 조건식: 매 반복의 시작앞서 실행, 결과를 기반으로 반복의 유뮤를 결정한다. (참일 때)


- 증감식: 매 반복실행 후 마지막 연산이 이뤄진다.

 

 

 

#for문을 이용해 이름 5번 출력해보기

 

 

 

 

 

 

 

 

 

 

#for문을 이용해 0~100까지 숫자의 합을 출력하는 프로그램 만들어보기

 

 

 

 

 

 

 

 

 

 

 

 

#for문을 이용하여 입력한 횟수까지의 곱을 출력해보기

 

 

 

 

 

 

 

 

 

 

#for문을 이용하여 'A' ~ 'Z'까지 출력해보기

 

 

 

 

 

 

 

#for문 무한루프

 

- for ( ; ; )

 

 

 

 

 

 

 

 

 

 

 

 

 

#중첩 for문

 

- for문안에 또 다른 for문이 있는 것

 

- 중첩for문을 이용하여 구구단 프로그램 만들어보기

 

 

 

 

 

 

 

 

 

 

 

#for문을 이용하여 별 삼각형 찍기

 

 

 

 

 

 

 

 

#역순으로 찍어보기

 

 

 

 

* 형변환

 

- 연산시에 데이터의 유형이 변환되는 것

 

 

#대입 연산시의 자동적인 형변환

 

 

 

 

#정수 연산시의 자동적인 형변환

 

- 정수 연산시 char형이나 short형의 경우 , 자동적으로 int형으로 변환하여 계산한다.

 

 

 

 

#명시적인 형변환

 

 

- 형변환(type cast) : 사용자가 데이터의 타입을 변경하는 것

  (자료형) 상수또는 변수

 

- (int) 1.23456

 

- (double) x // double형으로 변환

 

- (long) (x+y) // long형으로 변환 

 

 

 

 

 

#제어문

 

* 제어문이란 ?

 

- 프로그램의 실행흐름을 제어하는 문법이다.

 

- C언어에서는 문장을 좀 더 효과적으로 표현하기 위해서 두 가지 형태의 제어문을 제공한다

 

- 1. 조건문 2. 반복문

 

 

 

#조건문

 

- 예외 사항에 대처하기 위한 문법

 

- 특정 조건을 부여하고 해당 조건을 만족하면 지정한 문장을 수행하는 문법

 

- 조건은 수식으로 표현하며 수식의 진릿값이 참(1)이면 지정한 문장을 수행한다.

 

- if,switch문이 조건문에 해당한다.

 

 

#반복문

 

- 반복 행위를 효과적으로 표현하기 위한 문법

 

- 일정한 형태의 작업을 반복해서 수행해야 할 때 반복 조건을 부여하고 해당 조건이

  거짓이 될 때까지 지정한 문장을 계속 수행하는 문법

 

- for , while , do~while문이 반복문에 해당한다.

 

 

 

#if 조건문

 

- 조건이 참일 경우에만 실행한다.

 

 

    if(조건식)

       참인문장;

 

 

 

#일상 생활에서의 조건문의 예

 

- 만약 비가 오지 않으면 테니스를 친다.

 

 

- 만약 결석이 1/3 이상이면 F학점을 받는다.

 

- 만약 시간이 없는 경우에는 택시를 탄다.

 

- 만약 날씨가 좋고 공휴일이면 공원에 산책을 간다.

 

- 점수가 60점 이상이면 합격이고 그렇지 않으면 불합격이다.

 

 

 

 

#단일 문장을 수행하는 if문

 

 

 

 

 

 

#복합 문장을 수행하는 if문

 

- 중괄호를 사용하여 문장들을 그룹으로 묶는 것

 

- 블록(block)이라고도 한다.

 

- 단일문 대신 들어갈 수 있다.

 

 

 

 

 

 

 

#if문을 여러개 사용한 중첩 if문

 

 

 

 

 

 

 

 

 

#if ~ else ~ 조건문

 

if(조건식)

{

   참문장;

}

else

{

   거짓문장;

}

 

 

 

 

 

#if , else문을 이용한 짝수 홀수 출력 프로그램 만들어보기

 

 

 

 

 

 

 

 

#if ~ else문을 이용하여 자격증시험 합격 , 불합격 프로그램 만들어보기

 

 

 

 

 

 

 

 

#if ~ else if ~ else 문

 

if(조건식)

{

   참문장;

}

 

else if

{

   if문이 거짓이면 실행

}

else

{

   거짓문장;

}

 

 

 

 

 

 

 

 

 

#if문을 이용한 간단한 계산기 프로그램

 

 

 

 

 

 

 

 

 

 

#switch문

 

- 프로그래밍을 하다보면 정해진 상수와 조건 비교를 하는 경우가 많이 때문에 이런 경우 if ~ else if ~ else 조건문 보다

  switch 조건문이 더 효율적이다.

 

- 조건 수식을 포함한 모든 수식을 사용할 수 있으며 그 수식을 처리하여 얻은 결과 값을 각 case문에 잇는 상수 값과

  비교하여 명령문을 수행한다.

 

 

#switch문 만드는 형식

 

 switch (입력값) --> 정수,한 문자,연산의 결과값이 정수

   {

    case 나비:

       예쁘다. 날개 4개

   나비 탄생과정

case 블랙홀:

 

case 쓰레기:

   }

 

 

 

 

#switch문을 빠져나가는 break문

 

 

 

 

 

 

#switch문에서 주의할 점

 

- 변수는 사용할 수 없다.

 

- 변수가 들어간 수식은 사용할 수 없다.

 

- 실수는 사용할 수 없다.

 

- 문자열은 사용할 수 없다.

 

 

 

#switch문을 사용하여 두수의 차,합 출력 프로그램 만들어보기

 

 

 

 

 

 

#switch문을 이용하여 아침,점심,저녁 확인 프로그램 만들어보기

 

 

 

 

 

 

 

 

#switch문으로 1~5까지의 숫자에 속한지 아닌지 알아보기

 

 

 

 

 

 

 

#논리 연산자를 이용한 방법

 

 

 

 

 

'C언어 > C언어' 카테고리의 다른 글

C언어 [배열,함수]  (0) 2017.10.28
C언어 [반복문 while , do~while , for]  (0) 2017.10.24
C언어 [자료형,scanf]  (0) 2017.10.19
C언어 [변수와 상수,연산자]  (0) 2017.10.18
C언어 [특수,서식문자,아스키 코드]  (0) 2017.10.15

*데이터(정보)를 저장하는 공간,메모리 

 

- 컴퓨터는 주기억 장치로 램(Ram, Random Access Memory)을 사용하기 때문에 보통 메모리라고 하면 램을 의미한다.

 

- 메모리는 1바이트(byte)단위로 주소가 매겨져 있다.

 

- 주소가 1바이트 단위로 부여돼 있다고 해서 데이터가 꼭 1바이트 단위로 저장되어야 하는것은 아니다.

 

- 메모리의 최소 저장 단위는 비트(bit)이다.

 

- bit -> 컴퓨터가 표현하는 데이터의 최소단위

           0과1로 된 2진수

 

- 1bit -> 0,1

  2bit -> 00 01 10 11 4가지

 

- 1비트가 증가할 때마다 저장 단위가 2의 배수만큼 늘어난다.

 

- 비트가 8개 모이면 새로운 단위를 사용하는데 이것을 바이트(byte)라고 한다.

 

- 데이터를 저장할 때 메모리를 절약하기 위해서 데이터의 유효범위를 예상하고 적합한 크기를 결정하는것은

  메모리에 데이터를 저장하는데 필요한 가장 기본적인 작업이다. 

 

 

#자료형

 

* 자료형은 왜 필요할까 ?

 

- 자신이 사용할 데이터에 크기에 맞게 메모리(저장공간)를 할당해서 사용해야 한다. 그래서 메모리를 사용할 때

  몇 바이트의 메모를 사용할 것인지를 명시해야 하는데 이것을 데이터 타입(Data Type) 또는 자료형이라고 한다.

  (메모리를 사용하는 단위를 자료형이라고 한다.)

 

- C언어는 사용빈도가 높은 자료형을 예약어로 제공(Built-in Data Type)하고 , 나머지는 사용자가 만들어서 사용할 수 있는

  문법 (User-defind Data Type)을 제공한다.

 

 

#자료형의 종류

 

 

 

- 메모리공간 크기 확인 연산자(sizeof)

  메모리의 크기를 바이트(byte)단위로 계산해서 반환하는 연산자

 

sizeof(기본 자료형,내가 선언한 변수이름)

 

 

 

 

 

#int 변수 선언 및 초기화 (정수 4byte)

 

- 가장 기본이 되는 자료형

 

- C에서 가장빠르고 효율적으로 연산이 가능한 자료형이다.

 

- CPU에 따라서 크기는 달라진다. 

  16bit 2byte shrot

  32bit 4byte 

  64bit 8byte

 

- 완벽한 8byte크기를 보려면 컴파일 성능,os,하드웨어

 

 

 

#float & double 변수 선언 및 초기화 (실수 4byte,8byte)

 

- 실수 0.000000 까지 표현한다.

 

- 정수보다 실수로 표현할 수 있는 방법이 더 많다.

  int -> long int -> float -> double -> long double    

 

 

 

#char 변수 선언 및 초기화 [문자 1개]

 

- char는 ASCII CODE에 존재하는 문자

 

- 표현할 수 있는 데이터

  알파벳 , 정수 ,기호 등

 

 

 

#char[] 변수 선언 및 초기화 [공간갯수]

 

- 문자열을 입력하고 싶을 때는 char 1byte의 공간을 붙여서 사용

 

- 한글 = 2byte 영어 = 1byte를 차지한다.

 

- 문자열의 끝에는 문자가 끝났다는 null = \0이 자동적으로 붙는다.

 

Ex) "HELLO~" 문자열 메모리 공간 갯수

- 문자가 6개이므로 6바이트의 크기를 차지한다고 생각하겠지만 문자끝에 0이붙기 때문에 실제 메모리 구성은 다음과 같다. 

 

↓ 실제 메모리 구성

  

 

- 공간의 갯수를 구하고 +1하여 출력하거나 그보다 높은값으로 출력한다.

 

 

 

#scanf()

 

- 키보드로부터 입력을 받기 위한 라이브러리 함수

 

- 키보드로부터 값을 받아서 변수에 저장한다.

- 변수의 주소를 필요로 한다.

   scanf("%d",&x);  변수의 주소는 &x로 구할 수 있다. 

 

- 형식 지정자와 변수의 자료형은 일치해야 한다.

   scanf("%d %f",number, &grade); ← 형식 제어 문자열

 

 

 

#scanf 덧셈 프로그램

 

 

 

*변수,상수

 

- 변수(Variable)는 변하는 값이며, 프로그래밍에서는 두가지 의미를 가진다.

 

- 1. 프로그램이 실행되는 동안 지속적으로 값이 바뀌는 정보이다.

 

- 2. 사용자로부터 데이터를 받거라 처리하기 위한 저장공간이다.

 

- 변수 이름은 데이터가 저장되는 공간(메모리)을 가리키는 별명이다.

 

 

#상수

 

- 상수(Constant)는 프로그램을 실행할 때 한번 값이 결정되면 프로그램이 끝날 때 까지

  다른값으로 바뀌지 않는 정보를 말한다. 다시 말해 상수는 변하지 않는 숫자를 의미한다.

 

Ex) 3.14 , 100 , 'A' , "Hello World!"

 

 

 

#변수 이름을 정할때 기억해야 할 것

 

- 변수 이름은 영문자 a~z , A~Z , 숫자 0~9 그리고  _ (밑줄)을 조합하여 구성할 수 있다.

 

- 모두 숫자로 구성하거나 숫자로 시작하는 문자열은 변수 이름으로 사용할 수 없다.

 

- 공백을 포함할 수 없다.

 

- 대,소문자를 구별하기 때문에 (name , Name , NAME , naME) 이와 같이 사용한 4개의 변수는

  서로 다른 변수 이름으로 처리된다.

 

- 예약어를 변수 이름으로 사용할 수 없다.

   EX) 'int' , 'char' ...

 

 

#변수 선언

 

- 컴파일러에게 어떤 변수를 사용하겠다고 미리 알리는것

 

   자료형    변수이름;

 

 

 

#변수에 값을 저장하는 방법

 

 

 

 

 

- 변수를 선언하면서 초깃값을 대입하는 것을 초기화라고 한다.

 

 

 

 

#변수의 사용

 

 

 

# 기능에 따른 연산자의 분류

 

                 연산자의 분류

                           연산자

                                의미

                       대입

                               =

                    오른쪽을 왼쪽에 대입

                       산술

                       +  -  *  /  %

                   사칙연산과 나머지 연산

                       부호

                           +  -

 

                       증감

                          ++  --

                         증가,감소 연산

                       관계

                    > < == != >= <=      

                    오른쪽과 왼쪽을 비교

                       논리

                           && || ! 

                       논리적인 AND,OR

                       조건

                               ?

                       조건에 따라 선택

                       콤마

                               , 

               피연산자들을 순차적으로 실행 

               비트 단위 연산자

                      & | ^ ~ << >>  

              비트별 AND,OR,XOR,이동,반전

                  sizeof 연산자

                            sizeof

    자료형이나 변수의 크기를 바이트 단위로 반환

                      형변환

                            (type)

              변수나 상수의 자료형을 변환

                  포인터 연산자

                            * & []

      주소계산,포인터가 가리키는 곳의 내용 추출

                  구조체 연산자

                             .  ->

                       구조체의 맴버 참조

 

 

 

#산술 연산자

 

                     연산자

                        기호

                      의미

                     예(Ex)

                      덧셈

                          +

                x와y를 더한다.

                       x+y

                      뺄셈

                          -

                 x와y를 뺀다

                       x-y

                      곱셈

                          *

                x와y를 곱한다.

                       x*y

                    나눗셈

                          /

                x와y를 나눈다.

                       x/y

                    나머지

                          %

         x와y를 나눌때 나머지값 

                       x%y

 

 

#산술연산자를 사용한 예제

 

 

 

 

#증감 연산자

 

                      증감 연산자   

                                              의미

                          ++x

                    x값을 먼저 증가한 후에 다른연산에 사용한다.

                    이 수식의 값은 증가된 x값이다 

                          x++

                    x값을 먼저 사용한 후에 증가한다.

                    이 수식의 값은 증가되지 않은 원래의 x값이다.

                          --x

                    x값을 먼저 감소한 후에 다른 연산에 사용한다.

                    이 수식의 값은 감소된 x값이다.

                          x-- 

                    x값은 먼저 사용한 후에 감소한다.

                    이 수식의 값은 감소되지 않은 원래의 x값이다.

 

 

 

 

 

 

 

 

 

 

 

#복합 대입 연산자

 

 

                    복합 대입 연산자

                               의미

                            x += y

                            x = x + y

                            x -= y

                            x = x - y

                            x *=y

                            x = x * y

                            x /= y

                            x = x / y

                           x %= y

                            x = x % y

                           x &= y

                            x = x & y

                           x |= y

                            x = x | y

                           x ^= y

                            x = x ^ y

                           x >>= y

                            x = x >> y

                           x <<= y

                            x = x << y

 

 

 

 #관계 연산자

 

- 두개의 피연산자를 비교하는 연산자

 

- 결과값은 참(1) 아니면 거짓(0)

 

 

                        연산자 기호

                                 의미

                    사용 예

                              ==

                         x와 y가 같은가?

                    x == y

                              !=

                         x와 y가 다른가?

                    x != y

                              >

                         x가 y보다 큰가?

                      x > y

                              <

                         x가 y보다 작은가?

                      x < y

                             >=

                   x가 y보다 크거나 같은가?

                    x >= y

                             <=

                   x가 y보다 작거나 같은가?

                    x <= y

 

 

 

 

 

 

#논리 연산자

 

 

                 연산자 기호

                   사용 예

                                   의미 

                      &&

                   x && y

 AND연산 , x와y가 모두 참이면 참 , 그렇지 않으면 거짓

                       ||

                     x || y

 OR연산 , x나y중에서 하나만 참이면 참, 모두 거짓이면 거짓

                       !

                      !x

 NOT연산 , x가 참이면 거짓 , x가 거짓이면 참

 

 

 

 

 

#조건 연산자 ( ? )

 

- max_value = (x>y) ? x : y;

 

- x>y가 참이면 x가 수식의 값이 된다. x>y가 거짓이면 y가 수식의 값이 된다.

 

*Escape Sequence (특수 문자)

 

- 데이터에 대한 입출력 형식과 관련된 특수 기호 문자

 

                               특수 문자

                                    특수 문자 의미

                                 ' \n ' 

                          New Line :  새로운 줄로 이동

                                 ' \r ' 

                                 줄의 처음으로 이동

                                 ' \b ' 

                              한 문자 왼쪽으로 이동 

                                 ' \t  ' 

                                    탭 만큼 이동

                                 ' \\ ' 

                             \문자 자체를 화면에 출력

                                 ' \' ,\" ' 

                                 뒤에 " , " 표시 출력

                                 ' \? ' 

                                 물음표 표시 출력

 

 

문자를 " "으로 지정해서 출력하고 싶다면 백슬래시로 지정을 해주면 된다.

 

 

#서식 문자

 

- 서식문자 : 출력 형태를 지정하는 용도

  printf("출력 서식", "출력 대상");

 

                            제어 문자

                                출력 결과

                               %d

                            10진(Decimal)정수

                               %f

                        10진형 부동(Floating)정수 

                               %c

                           단일 문자(Character)

                               %s

                               문자열(String) 

                               %o

                               8진(Octal)정수

                               %x

                          16진(Hexa_demical)정수

                               %u

                      부호없는(unsigned)10진 정수  

 

 

 

 

 

아스키(ASCII)코드

 

- 컴퓨터에서는 대부분 문자를 숫자로 변환해서 전송하는 방법을 사용한다.

 

- 약속한 정보가 서로 달라 문자를 제대로 전송할 수 없다는 문제점이 있다.

 

- 이런 문제점 때문에 문자를 숫자로 표현하기 위한 표준이 필요했는데 그 표준이 아스키(ASCII)코드이다.

  ASCII [American Standard Code for Information Interchange]

 

- 출력 불가능한 제어문자 33개(0~32번) 출력 가능한 문자 95개로 이루어져있다.

  총 128개(8비트 중 7비트만 사용)의 코드로 구성된다.

 

#아스키 코드 표

 

 

'C언어 > C언어' 카테고리의 다른 글

C언어 [반복문 while , do~while , for]  (0) 2017.10.24
C언어 [형변환,조건문 if문,switch문]  (0) 2017.10.22
C언어 [자료형,scanf]  (0) 2017.10.19
C언어 [변수와 상수,연산자]  (0) 2017.10.18
C언어 [C언어 소개]  (0) 2017.10.14

*프로그램이란 ?

 

- 어떤 목적을 이룰수 있도록 프로그래밍 언어로 진행 순서를 기술한 것을 프로그램이라고 한다.

 

- 프로그램이란 보통 어떤 작업이 나열된 계획표 또는 순서표를 뜻한다.

 

- 프로그램은 컴퓨터에게 작업할 일을 순서대로 알려주기 위해 만든 파일이라 할수있다.

 

- 확장자가 .exe인 파일을 의미한다. (실행파일)

 

- 컴퓨터가 작업할 내용을 컴퓨터가 이해할 수 있는 언어(기계어)로 만들어져있다. 

 

 

#프로그래밍 언어란 ?

 

- 컴퓨터는 2진숫자(0과1)로 이루어진 기계어를 사용한다.

 

- 사람들이 사용하기 편한 언어로 작성한 작업내용을 기게어로 번역할수 있도록 번역한다. (컴파일)

 

- 프로그래밍 언어는 컴파일러와 약속한 표현을 사용해야한다.

 

- 각 상황에 맞게 특화된 프로그래밍 언어가 만들어지기 시작했으며, 그중하나가 C언어이다.

 

- 결국 프로그래밍 언어란 사람에게 친숙한 표현법을 사용하여 프로그래밍할 수 있도록 만든 언어이다.

 

 

#C언어의 탄생

 

- 1960년대 개발되었던 운영체제들은 하드워에 종속적인 언어를 사용하여 개발되었다.

  따라서 하드웨어가 바뀌면 운영체제의 많은 부분을 다시 개발해야했다.

 

- 벨 연구소의 데니스 리치 와 켄 톰슨은 이런 불편함을 없애고자 하드웨어가 변경되어도 프로그램을

  다시 작성하지 않아도 되는 운영체레를 만들기 위해 노력했다.

 

- 1970년에 켄 톰슨이 B언어를 만들었지만 이 언어도 독립된 운영체레를 만드는 데 적합하지 않았다.

 

- 1972년 켄 톰슨은 데니스 리치와 함께 새로운 언어를 개발 이것이 C언어이다.

 

 

#C언어의 특징

 

- C언어는 유닉스 운영체제를 만드는 데 사용한 프로그래밍 언어이다.

 

#C언어의 4가지 특징

 

1. C언어는 구조화된 언어이다

 

 - 일정한 단위로 명령들을 그룹으로 묶는 방법을 제공 , 작업 단위가 명확하게 구분되어 유지 보수가 편리

   자신이 원하는 작업을 분리하기도 쉽기 때문에 새로운 프로그램을 개발할 때 재사용하기에도 좋다.

 

2. C언어는 이식성이 높다

 

 - C언어로 만든 프로그램을 거의 수정하지 않고 다른 하드웨어 또는 운영체제로 가져갔을 때도 잘 동작한다는 뜻이다.

   하드웨어에 종속적일 수 있는 부분을 C언어에서 분리해 런타임 라이브러리(Runtime Library)라는 개념을 제공한다.

 

3. C언어는 확장성이 좋고,표현법이 다양해서 자기만의 표현법을 개발할 수 있다.

 

 - 다른 언어에 비해 표현법이 더 많고, 개발자가 개발 상황에 따라 선택할 수 있는 문법 구조나 표현법이 다양하여 자율성이 높다.

 

4. C언어는 생산성이 높다.

 

 - C언어를 사용하는 프로그래머들은 스스로 개발 인프라(명령,그룹,함수)를 구축하기 때문에 경력이 쌓일수록 인프라가 다양해져서

   프로그램 개발 속도가 빨라진다. 그뿐 아니라 사용자의 여려가지 요구에대해 스스로 대처할수 있기때문에 완성도와 만족도가

   더 높을수 밖에없다.

 

 

#C프로그램 실행파일

 

 

#소스파일(*.c)

 

- 소스파일(Source File)은 프로그래머가 만들고 싶은 프로그램을 C언어 문법을 사용해서 작성한 파일이다. (텍스트 파일 형식)

 

- 대부분의 개발자들이 C언어 소스파일을 구별할때 .c 확장자를 사용하기 때문에 파일 확장자는 .c를 사용한다.

 

 

 

#목적파일(*.obj)

 

- 목적파일은(Object File)은 컴파일러(번역기)가 소스파일을 컴파일하면 만들어지는 파일이다.

 

- 컴파일러가 실행 파일을 만드는 시간을 줄이기 위해 만드는 파일이기도 하다.

 

- 내용이 많은 소스파일에서 비슷한 작업들을 모아서 여러 개의 파일로 나누고 각각의 파일을 컴파일 하는 방식을 사용한다.

 

 

 

# 실행파일(*.exe)

 

- 실행파일(Executable File)은 컴퓨터에서 실행할 수 있는 파일을 말한다.

 

- 하나이상의 목적파일을 연결자(Linker)가 연결(Link)해서 실행파일을 만든다.

 

- 이렇게 만들어진 실행파일은 기게어로 나열된 프로그램 파일로서 더 이상의 컴파일 작업 없이 컴퓨터에서 바로 실행가능하다.

 

- 실행 파일의 확장자나 형식은 운영체제마다 다르다.

 

 

#Visual Studio 다운

 

https://www.visualstudio.com/

 

 

 

 

 

 

#Visual Studio로 만드는 간략한 소스 설명

 

 

 

 

 

 

# #include <stdio.h>

 

- C언어에서는 #으로 시작하는 문장을 전처리기라고 부른다.

 

- 전처리기(Preprocessor)는 미리,사전에 처리한다는 뜻이다.

 

- 소스 코드를 번역하기 위해 stdio.h 파일을 먼저 참조해야하는데 그 이유는

   stdio.h 파일에 main함수에서 사용한 printf 함수를 사용하기 위한 정보가 기록되어있기 때문이다.

 

- 전처리기는 끝에 ( ; ) 세미콜론을 사용하지 않는다.

 

 

 

#main , 함수

 

- 프로그램의 시작을 나타내려면 main함수를 반드시 정의해야 한다.

 

- 함수(function) : 특정 기능을 수행하는 처리 단계들을 괄호로 묶어서 이름을 붙인것

 

- 함수는 프로그램을 구성하기 위한 기본적인 단위이다.

 

- 함수는 여러개의 문장으로 이루어져있다.

 

- 문장들은 순차적으로 실행된다.

 

- 문장의 끝에는 반드시 ( ; ) 세미콜론이 있어야 한다.

 

- { }를 사용하여 자신의 영역을 표현해야 한다.

 

 

 

#void

 

- '정해지지 않았다'는 의미의 예악어(Reserved word)이다. 

 

- '없다'라는 의미로도 많이 사용된다.

 

- main앞에 있는 void는 '함수의 수행 결과 값이 정해지지 않았다' 라는 뜻이고

  main뒤 ()괄호 안에 있는 void는 'main 함수로 전달되는 정보가 정해지지 않았다' 라는 뜻이다.

 

 

 

#printf("Hello World");

 

- printf는 C언어의 표준 출력함수이다.

 

- 모니터 등의 콘솔(Console)화면에 'Hello World'라고 출력한다.

 

- 문장 끝에 반드시 ( ; ) 세미콜론을 반드시 입력해야 오류가 발생하지 않는다.

 

 

 

 

#주석

 

- 상황을 설명하거나 작업내욜을 기억하기 위해 소스 파일에 메모를 남기는 것

 

- 주석은 컴파일러가 번역을 하지 않으므로 어떤 내용을 적어도 상관없다.

 

 

 

 

#들여쓰기

 

- 들여쓰기(indentation) :  같은 수준에 있는 문장들을 왼쪽 끝에서 몇자 안으로 들여쓰는 것

 

- 주석을 사용하지 않으면 무슨 처리를 하고있는 프로그램인지 알기 어렵고 들여쓰기를 사용하지 않으면 

  문장을 구분하기 어렵기 때문에 코드의 가독성을 높이기위해 주석과 들여쓰기는 사용해주면 좋다.                                                               

*스레드 (Thread)

 

- 프로그램을 구성하는 명령문은 순서대로 하나씩 처리 되는것이 기본이다.

  조건문,반복문,메소드 호출문으로 복잡하게 얽혀있는 프로그램도 명령문이 실행되는 순서를

  따라가다보면 길게 연결된 한 가닥 실과 같은 흐름이 있다.

  이런 실행 흐름을 스레드(Thread)라고 부른다.

 

- 스레드 객체는 한번만 사용이 가능하다.

 

 

 

#싱글 스레드 (Single Thread)

 

- Single Thread 프로그램 스레드는 main 메소드의 첫번째 명령문부터 시작되고

  main 메소드의 마지막에 도달하거나 return문을 만나면 끝이난다.

 

 

 

 

 

#스레드 구현 Runnable 인터페이스 활용

 

- 클래스에 상속받아 구현하는것이 아닌 Ruunable 인터페이스를 사용해 구현

 

- 특정 기능이 있는 클래스를 상속받아 사용해야 하는데 그 기능을 스레드로 돌리고 싶을때 사용

 

 

 

 

#스레드간의 커뮤니케이션

 

- 공용데이터를 만들어 그 플래그 값을 기준으로 프로세스 진행을 제어하는 방법

 

 

 

 

- 자바의 컴파일러는 프로그램 성능 향상을 위해서 값을 바꾸지 않고 반복해서

  체크할 경우 그 값을 한번 가져다 놓고 여러번 사용하기 때문에 위의 예제에서는

  문제가 된다.

  그럴경우에 최적화 없이 항상 가져다 체크하도록 명령을 내리는 volatile명령어를 쓰면 된다.

 

 

 

 

 

#2개의 쓰레드를 활용하여 캐릭터끼리 공격과 방어를 하는 게임만들기

 

- 영단어는 랜덤으로 나옴 영어 스펠링을 맞추면 공격 스펠링이 틀리면 상대방 체력증가

 

- 방어 턴일 때는 에너지 증가

 

- 상대방 에너지가 0이 되면 승리

 

 

 

 

 

#황금알 낳는 거위 프로그램 만들어보기

 

- 황금알을 낳는 클래스가 있다. 이 거위는 1초마다 알을 1개씩 낳는다.

 

- 엔터키를 입력하면 거위를 우리 밖에 꺼내놓고  그동안 낳은 알을 모두 가져온다. 모두 가져오는 시간은 3초걸린다.

 

- 알을 가져오는 동안은 거위는 밖에 있으므로 알을 낳지 않는다.

 

 

 

 

 

 

#스레드 구현 커뮤니케이션2

 

- 스레드끼리 신호를 직접적으로 주고 받는 방법으로 공유 객체를 통해서 notify와 wait로 연락을

  주고 받을 수 있다.

 

- 스레드는 공유 객체에서 wait메소드를 notify가 올 때까지 대기 상태가 된다.

 

- 다른 스레드는 먼저 끝내야 할 작업을 끝낸 후 공유 객체를 통해서 notify메소드를 호출해주면 

  wait 하고 있던 상대방 스레드는 다시 작동을 하게 된다.

 

 

 

#이전에 플래그 값을 세워서 동기화를 구현했던 예제에서 notify와 wait를 구현해보자

 

- isDone값을 한번 체크하고 루프를 돌면서 또 체크 하지말고 wait로 다른 스레드에서 결과가

  끝나고 호출을 보내주기를 기다린다. (동기화 처리 필요)

 

- 작업이 끝난 후에 notify로 작업이 끝났다고 notify를 날려서 wait 대기 중인 스레드를 다시 실행하도록 한다.

  (동기화 처리 필요)

 

 

  

 

#스레드를 총합적으로 복습해보자

 

- 단어장 배열에 10개의 단어가 있으며 0~9번까지 배열을 돌면서 각 문제를 가져와

  문제를 보여준다. 단, 한번은 영어를 보여주고 한글뜻을 입력하고 한번은 한글을 보여주고

  영어 철자를 입력하는 프로그램이다.

 

- 문제를 푸는동안 2개의 스레드가 돌아간다.

 

-> 한글을 풀때 시간을 체크하는 스레드

-> 영어를 풀때 시간을 체크하는 스레드

 

- 모든 문제를 풀고 나서 각각 소요된 시간 결과를 보여준다.

 

'Java > Java2' 카테고리의 다른 글

Java [Canvas,Swing]  (0) 2017.09.30
Java [자료구조]  (0) 2017.09.24
Java [예외처리,직렬화]  (0) 2017.09.18
Java [Object,Inner 클래스]  (0) 2017.09.16
Java [Gregorian Calendar,Math,Wrapper]  (0) 2017.09.14

* Canvas

 

- 그래픽적인 화면을 그리는 요소 객체

 

- panel과 비슷하게 frame에 올리면 되지만 panel과는 다르게 버튼이랑 라벨 등

  다른 객체를 포함하지는 않는다.

 

 

#Canvas 사용방법

 

- 캔버스를 상속받을 클래스를 만든다.

 

- paint 메소드를 오버라이드 한다.

 

- 파라미터로 들어몬 Graphics 객체를 이용해서 그림을 그린다.

 

 

#Canvas 주요 메소드

 

- setColor : 색상을 지정하는 함수 Color 클래스안에 있는 색깔을 지정해서 사용한다.

                텍스트나 도형을 그릴 때 여기서 지정한 색깔로 그려진다.

 

 

 

 

- drawString : 문자를 적는 메소드  문자내용, x좌표 , y좌표 3개의 파라미터를 사용하며 Font 객체를 이용해서

                   문자스타일을 수정할 수 있다.

 

 

 

 

- drawLine : 라인을 긋는 메소드 파라미터로 시작점 x좌표,시작점 y좌표,도착점 x좌표,도착점 y좌표를 지정해주면

                해당하는 점 사이에 라인을 그린다.

 

 

 

 

- drawOval : 원을 그리는 메소드 파라미터로 x좌표,y좌표,가로,세로를 지정하면 해당하는

                 크기만큼 원을 그린다.

 

 

 

 

 

- fillOval : 채우기가 되어있는 원을 그리는 메소드 drawOval과 사용법 동일

 

 

 

 

 

 

- drawRect : 사각형 그리는 메소드

 

 

 

 

 

 

- fillRect : 채우기가 되어 있는 사각형 그리는 메소드 drawRect와 사용법이 동일

 

 

 

 

 

 

- drawImage : 이미지를 그리는 메소드 Toolkit을 이용해서 이미지를 불러오며 이때 이미지의 위치는 프로젝트

                   내의 최상위를 기본으로 한다.

                   파라미터로 image 객체, x좌표,y좌표,가로,세로,frame 객체를 넘겨준다.

 

 

 

 

 

 

#Swing

 

- 자바 영역에서 사용하는 look&feel 을 적용 받아 모든 운영체제에서 동일한 느낌을 제공

 

- AWT와 가장 큰 차이점은 플랫폼으로부터 어떠한 native code도 가져다가 사용하지 않는 다는 것이다.

  사용 방법이나 코드 모양은 AWT와 거의 흡사하지만 내부적으로 실행되는 것은 완전히 다르다.

 

- 주의점은 AWT와는 달리 Frame에 직접 올리면 안되고 무조건 panel을 통해서 올려야 한다.

 

 

#Swing 주요 클래스 및 메소드

 

- 윈도우의 닫기 버튼을 동작하기 위해서는 AWT와는 다르게 아래와 같이 설정을 해야 한다.

 

- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

- 기본적으로 AWT에서 확장된 클래스들은 앞에 'J'를 붙여주면 된다.

 

예) Jframe , Jpanel , Jbutton , JTextField , JTextArea , Jlist , JCombo(Choice)

     Jcheckbox , Jlabel , Jdialog , JFileChooser(FileDialog) , JScrollpane

     JMenuBar , Jmenu , JMenuItem , JPopupMenu

 

 

 

 #Canvas를 이용해 여러가지 그려넣어보기

 

 

 

 

 

 

#Canvas를 이용하여 공 튀기기

 

 

 

 

 

 

 

 

#Canvas keyCode를 받아 공을 방향키로 조작하기

 

 

 

 

 

'Java > Java2' 카테고리의 다른 글

Java [스레드(Thread),멀티 스레드]  (0) 2017.10.03
Java [자료구조]  (0) 2017.09.24
Java [예외처리,직렬화]  (0) 2017.09.18
Java [Object,Inner 클래스]  (0) 2017.09.16
Java [Gregorian Calendar,Math,Wrapper]  (0) 2017.09.14

+ Recent posts