문자

- C프로그램의 문자는 아스키 코드를 따른다.


- 아스키 코드는 0~127중의 1바이트로 구성되며 주요 문자를 출력하도록 해준다.

+ 0 = 48, A = 65, a = 97


- 컴퓨터는 내부적으론 다 숫자로 처리한다.


버퍼

- 문자열을 처리할 때 버퍼의 개념이 많이 사용된다.


- 버퍼(buffer)란 임시적으로 특정한 데이터를 저장하기 위한 목적으로 사용한다.


- C 프로그램은 기본적으로 사용자가 의도하지 않아도 자동으로 버퍼를 

  이용해 입출력을 처리한다.


  - scanf로 5를 입력하게되면 버퍼에 5를 입력할때 입력된 엔터도 저장되게된다.

    while((temp = getchat()) != EOF && temp != '\n') {} 구문으로 엔터를 제거해준다.

실습내용


실습결과




문자열

- 문자열은 말 그대로 문자들의 배열이다


- 문자열은 컴퓨터 메모리 구조상에서 마지막에 널(NULL) 값을 포함한다.

+끝을 알기위해 NULL(\0) 한자리가 추가된다.




문자열과 포인터

- 문자열 형태로 포인터를 사용하면 포인터에 특정한 문자열의 주소를 넣게된다.


- 예를들어 char *a = "Hello World"라는 문자열이 입력되면 읽기 전용으로 

  메모리 공간에 넣고 그 위치를 처리한다.


- 위에 방식을 "문자열 리터럴"이라고 한다.


- 문자열리터럴방식은 컴파일러가 알아서 메모리 주소를 결정한다.


  - gets()함수를 이용하게 문자배열의 길이를 제한할 수 없다.

    gets_s()함수를 사용하여 문자배열 크기만큼 입력받고 넘을경우 런타임 오류를 낸다.

실습내용

실습결과


문자열함수

- strlen()은 문자열의 길이를 반환한다.


- strcmp()는 문자열1이 문자열2보다 사전적으로 앞에 있으면 -1, 뒤에 있으면 1을 반환한다.


- strcpy()는 문자열을 복사한다.

  기본적으로 C언어에선 a = b같은 방법으로 복사가 안된다.


- strcat()는 뒤에 있는 문자열을 앞에 있는 문자열에 합친다.


- strstr()은 긴 문자열에서 짧은 문자열을 찾아 그위치를 반환한다.

  짧은 문자열을 찾은 주소 값 자체를 반환하므로 단순히 출력하면

  찾은 이후 모든 문자열이 반환된다.

실습내용

실습결과


포인터의 개념

- 변수는 그 자체로 자신의 자료형에 맞는 값을 저장한다.


- 포인터(Pointer) 변수는 특이한 변수로, 메모리 주소를 저장한다.


- 포인터는 특정한 변수 자체가 존재하는 메모리 주소값을 가진다.

+ int a = 5; 의 주소값 : 0xAFB03954

  int *b = &a; 의 값 : a의 메모리 주소 0xAFB03954

  int *b 도 변수이기때문에 주소값을 가진다.


- int *b = &a;에서 *(포인터 변수 선언)은 포인터 변수임을 알려주기 위한 목적이다.

  &는 변수 앞에 붙어서 변수의 메모리 시작 주소값을 구한다.

- 따라서 위에 *b는 5라는 값 자체가 된다. 


- *(간접참조연산자) : 현재 포인터가 가르키고있는 주소에 들어있는 값을 참조한다.


 실습내용

실습결과


- 실제로 int a = 5; 와 같이 변수를 할당하면 메모리 주소상에서는 4Byte를 차지한다.

+ 메모리주소를 한칸에 1Byte씩 표현한다면 4칸을 차지한다.


실습내용 : 배열 각 원소의 주소 값 출력하기

십습결과 : 주소값이 4씩 증가하는것을 확인할 수 있다.




포인터의 강력한 기능

- 포인터는 컴퓨터 시스템의 특정한 메모리에 바로 접근할 수 있다.


- 기존에 존재하던 중요한 메모리 영역에 접근하지 않도록 해야한다.

+ int *a = 0x1234123;

  *a = 0;

  이렇게 구현한다면 메모리 0x1234123가 무슨 일을하는지 모르기에 위험하다.


다중포인터

- 포인터의 포인터도 존재할 수 있다.


- 포인터도 메모리에 기록되는변수이다. 


- 포인터를 여러개 겹칠 수 있다.


실습내용

실습결과



배열과 포인터관계

- 배열과 포인터는 사실 동일하다.


- 배열을 선언한 이후에는 그 이름 자체를 포인터 변수처럼 쓸 수 있다.


포인터(핵심)

- 포인터는 특정한 변수가 메모리 상에 존재하는 위치 주소를 저장한다.


- 포인터는 특정한 메모리 주소에 바로 접근할 수 있으므로 조심스럽게 사용해야한다.



함수

- 함수는 입력을 받아 처리한 뒤에 출력하는 구조를 가진다.

+ 입력 -> 함수(값처리) -> 출력

- 함수는 특정한 기능에 대한 소스코드가 반복되는 것을 감소하게해준다.

- 함수를 만들어 묶어놓은것을 라이브러리라고 한다.(패키지형태)


- 함수의 형태는 다음과 같다.

+ 매개변수,return 값은 없을 수 있다.(void)

반환자료형 함수명(매개변수){

return 반활할 값;

}


실습내용 - mian함수에서 add 함수를 이용하여 출력하기

실습결과



재귀함수

- 재귀함수란 자기 자신을 포함하는 함수

- 기본적으로 자기 자신을 계속불러낸다.

- 따라서 반드시 재귀 종료 조건이 필요하다.


실습내용 - 숫자 입력시 자기 자신을 1이 될때까지 자기자신을 호출한다.



실습결과

아래 결과에서 보면 factorial 함수가 자기 자신을 계속 호출하는 것을 볼수 있다.

따라서 5 * 4 * 3 * 2 * 1이 실행된다.


함수정리

- C언어는 함수로 시작해서 함수로 끝난다.

- 재귀함수는 반복적으로 자기 자신을 불러내므로 

  경우에따라 무한루프가 일어날 수 있어 조심해야한다..

배열

- 변수가 여러개 필요할때 사용하기 유용하다.

- 배열을 사용안할시 int a,int b,int c...형식으로 해야한다.

- 간단하게 동일한 자료형을 여러개 담을수 있는것을 배열이라고 한다.

- 배열은 인덱스,데이터 조합이다.

+ 인덱스는 0부터 시작하고, 데이터는 입력된 값이다.

- 배열 선언 방법

+ 자료형 배열명[배열의 크기] = {초기화 값};

- INT_MIN은 #include <limits.h>로 사용한다.

- INT_MIN은 최대값을 구하기위해 자주 사용하는 상수이다(int형 최솟값 반환).

- 반대로 INT_MAX도 있다.


문자열과 배열

- 원시적인 C언어는 기본적으로 자체적인 문자열 자료형을 제공하지 않는다.

- C언어는 문자(char)를 여러 개 묶어 놓는 형태로 문자열을 표현한다.

+ char a[20] = "TEST";


실습내용

실습결과


조건문

- 조건의 개수가 적을때 if문, 많을때는 switch문을 사용한다. 


if문

- if문 내부의 조건을 검사해 프로그램의 진행 결로를 결정한다.

- if문은 조건의 개수가 많지 않을때 사용하는것이 유리하다.


if (조건1) {

//조건 1에 부합할 때

}else if (조건2) {

//조건 1에 부합하지 않고 조건2에 부합할 때

}else{

//위 조건들에 모두 부합하지 않을때

}


실습 내용


실습 결과


Switch문

- 다양한 조건이 존재할 때 사용하면 소스코드를 짧게 유지할 수 있다.

- 조건을 정확히 판별할때 유용하게 사용가능하다.

- swtich문은 조건에 부합하는 경우 아래쪽의 case도 모두 만족시킨다.

- 따라서 일반적인 경우case문의 마지막에 break를 넣어 특정부분만 실행시키도록한다.


switch (확인 대상) {

case 값1:

//값 1에 부합할 때

break;

case 값2:

//값 2에 부합할 때

break;

Default:

//모든경우

}


실습 내용


실습결과




반복문


for문

- for문 내부의 조건에 부합하면 계속해서 실행한다.

- 반복문을 탈출하고자 하는 위치에 break 구문을 삽입한다.

주의할점

- 무한루프

+ 무한루프란 종료 조건 없이 무한반복되는 것을 말한다.

+ 일부러 무한루프를 만드는 경우는 거의 없고 개발자의 실수로 인해 발생한다.


for( 초기화; 조건; 반복 끝 명령어) {

//반복적으로 실행할 부분

}


실습 내용

실습 결과



while문

- while문의 조건에 부합하면 계속해서 반복한다.

- 반복문을 탈출하고자 하는 위치에 break 구문을 삽입한다.

while (조건) {

//반복적으로 실행할 부분

}


실습 내용


실습 결과


중첩된 반복문(2중for문)

- 중첩된 반복문이란 반복문 내부에 다른 반복문이 존재하는 형태의 반복문을 말한다.

- 반복문이 중첩될수록 연산 횟수는 제곱형태로 늘어난다.


실습내용


실습결과


for문과 while문의 관계

- 모든 for문은 while문으로 변경할 수 있으며 모든 while문은 for문으로 변경할 수 있다.

- C언어 소스코드가 최적화 되면서 어셈블리어 단에서는 동일한 명령어로 동작한다.

연산자

연산자와 피연산자

- 연산자(Operator)란 연산을 수행하는 기호를 의미한다.

- 피연산자(Operator)란 연산에 포함되는 변수나 상수를 의미한다.

- A + B에서 A와 B는 피연산자에 해당하며 +는 연산자에 해당한다.


C언어에서 사용하는 연산자

대입연산자 : =

- '=' 등호를 이용하여 우변항을 좌변항에 넣을 수 있다.

- 자료형에 부합하는 값을 좌변항에 있는 변수에 넣는다.


산술연산자 : +, -, *, /, %

- 기본적인 사칙연산 사용가능하다

- 나머지를 구하기 위해 모듈러연산(%)을 사용한다.

실습 내용


실습결과



관계연산자 : ==, !=, >, <, >=, <=

논리연산자 : !, &&, ||

증감연산자 : ++, --

삼항연산자 : ?:

비트연산자 : !, ~, &, ^, >>, <<


이스케이프 시퀀스(Escape Sequence)

- \n : 줄 바꾸기

- \t : 수평 탭 넣기

- WW : 백슬래시 넣기

- \" : 큰 따옴표 넣기

- \b : 백 스페이스 넣기

실습내용


실습결과



증감연산자

- ++(변수) : i의 값을 1 증가시킨 후에 증가된 값을 반환한다.

- (변수)++ : i의 값을 1 증가시킨 후에 증가되기 전의 값을 반환한다.

- --(변수) : i의 값을 1 감소시킨 후에 감소된 값을 반환한다.

- (변수)-- : i의 값을 1 감소시킨 후에 감소되기 전의 값을 반환한다.

실습내용


실습결과


기본 입출력

scnaf()

- scanf()를 이용할 때 &를 이용하는 이유는?

- &는 특정한 변수의 주소를 의미한다.

- 실제로 컴퓨터는 특정한 메모리 주소에 접근하여 데이터를 수정하므로

  &를 이용하는 것이다.

- 그렇다면 메모리 주소에 얼마만큼의 크기로 데이터를 쓸 지 결정해야한다.


형식 지정자

- int(4Byte) : 정수형 데이터를 입력 및 출력할때 %d 사용


- long long(8Byte) : 큰 정수형 데이터를 입력 및 출력할때 %lld 사용


- double(8Byte) : 큰 실수형 데이터를 입력할때 %lf, 출력할때 %f 사용

+ 입력과 출력이 다른이유

입력을 받을 땐 특정 주소에 특정한 크기만큼 입력하겠다고 정확하게 명시

출력할땐 주소가 아닌 그값자체를 출력하기 때문에

정확한 크기를 정해주지 않아도 되기 때문이다.

- float(4Byte) : 실수형 데이터를 입력 및 출력할때 %f 사용


- string(제한 없음) : 문자열데이터를 입력 및 출력할때 %s 사용


- char(1Byte) : 문자데이터를 입력 및 출력할때 %c 사용


- %를 출력하고 싶으면 "%%"로 사용한다.


실습 내용

- scanf 사용위해 #define _CRT_SECURE_NO_WARNINGS 사용(화면상단)

- int,double(소수자리설정),int(한자리씩쪼개기) 테스트


실습결과



정리

- C언어에서 입력 받거나 출력할 때는 형식 지정자를 적절히 따라야한다.

- printf()는 단순히 데이터를 넘기고, 

  scanf()는 입력 받을 주소를 나타내기 위해 &를 사용한다.

척도

척도에 따라 분석방법이 달라진다.


척도의 원칙

- 포괄성 : 척도 안에 모든 경우의 수가 포함되어야 한다는 원칙

ex) 잘못된 예 : 고졸, 전문대졸, 4년대졸, 대학원졸

    잘된 예 : 고졸 이하, 전문대졸, 4년대졸, 대학원졸 이상

    모든 경우의 수가 포함되어야 한다.

- 상호배타성 : 척도 안에 중복되는 경우의 수가 없어야 한다는 원칙

ex) 잘못된 예 : 1백만원 이하, 1백만원 ~ 2백만원 

    잘된 예 : 1백만원 이하, 1백만원 초과 ~2백만원 이상

    겹치는 것이 없어야한다.


포괄성, 상호배타성을 기초로 4가지 척도로 구분된다.


명목척도

- 측정이 이루어지는 항목들이 상호배타적인 특성만 가진척도

ex) 남성, 여성

서열척도

- 명목척도들 중 항목들 간에 서열이나 순위가 존재하는 척도

ex) 무학, 초졸, 중졸, 고졸, 전문대졸, 4년대졸등등


등간척도

- 서열척도들 중 항목들 간의 간격이 일정한 척도

ex) 매우불만족,약간불만족,보통,약간만족,매우만족

비율척도

- 등간척도 중 아무 것도 없는 상태를 '0'으로 정할 수 있는 척도

ex) 20세 이하,21~30세,31~40세,41~50세

0이라는 개념은 아직 태어나지않음을 뜻함

반대로 온도는 0도 아래도 있기에 비율척도가 아님


도수분포표,그래프


도수분포표와 그래프는 모아진 데이터를 일목요연하게 보여주는 방법이다.


도수분포표

- 수집된 자료를 쉽게 이해할 수 있도록 일목요연하게 정리된 표로,

  특정 항목 또는 특정 범위에 속하는 빈도수를 나타낸 표

  ex) 연령대가 28, 30, 31, 33, 35, 41, 42가 있다면

      특정범위는 20 초과 30 이하, 30초과 40이하, 40초과 50이하

      빈도수는 1, 4, 2 합계 7로 표현한다.


그래프

- 막대그래프

+ 비연속형 변수(명목척도 및 서열척도)에 사용되는 그래프로,

  각 항목에 속하는 빈도수를 나타낸 그래프


- 히스토그램

+ 연속형 변수(등간척도 및 서열척도)에 사용되는 그래프로,

  일정 범위에 속하는 빈도수를 나타낸 그래프

- 선그래프

+ 히스토그램의 끝 부분을 선으로 연결한 그래프

'개발 소발 > 기초 통계' 카테고리의 다른 글

기초통계 | 기술통계,추리통계 란?  (0) 2018.12.11

1980년대

- 개인용 컴퓨터 시대

+ 1980년대 이전 : 대형 컴퓨터를 여러 명이 접속해서 이용(UNIX)

+ 1980년대~ : Personal Computer(PC)


- 용어이해

+ CLI(Command Line Interface): 터미널 환경(리눅스,DOS)

+ GUI(Graphical User Interface): GUI 환경


- CLI -> GUI 변경 되었다.

+ 1980년대 초반: CLI

+ 1980년대 중후반 : GUI


1990년대

- 응용프로그램 시대 

+ GUI 환경,개인용 컴퓨터(사용자 증대)

+ 엑셀, 워드 프로세서 등등

+ Window OS 대중화


- 네트워크 기술 발전

+ 월드와이드웹(WWW) 인터넷 대중화


- 오픈 소스 운동 활성화 시작

+ UNIX OS + 응용 프로그램 자체 개발, 소스 오픈

+ LINUX (리눅스) 운영체제, 소스 오픈, 무료


2000년대 이후

- 오픈 소스 활성화

+ LINIX(리눅스) 운영체제

+ Apache(아파치, 웹서버)

+ MySQL (데이터베이스)

+ 안드로이드,딥러닝,데이터사이언스,IoT관련


- 가상 머신, 대용량 병렬 처리등 활성화


정리

- 1950년대 : 운영체제없음(프로그램이 시스템 자원 직접 제어)

- 1960년대 : 배치 처리 시스템

- 1970년대 : 시분할시스템/멀티 태스킹 시스템 -UNIX OS(C언어)

- 1980년대 : GUI,개인용컴퓨터 등장

- 1990년대 : 다양한 응용프로그램, 인터넷 발달, 오픈 소스 운동 활성화

- 2000년대 : 오픈소스 활성화, 가상 머신, 대용량 병렬 처리등


- 운영체제는 응용 프로그램과 시스템 자원을 제어하고, 관리한다.

- 응용 프로그램(Application) 용어 이해

- 배치 처리 시스템, 시분할 시스템, 멀티 태스킹

- CLI,GUI 용어 이해

코드로 보는 버블정렬(BubbleSort)

간단히 말해 배열에서 배열[i]와 배열[i+1]의 값을 확인 후 
배열[i]가  배열[i+1] 보다 크다면 둘의 위치를 바꾼다
둘의 위치를 바꾸기위해 임시저장소(아래코드:int temp) 사용한다.
위에서 말한 행위를 배열의 크기(for문 i) 안에
배열의 크기-1-i(for문 j)만큼 반복하여 위치를 정렬하는것을 버블정렬이라고 한다.

위 로직이 실행되게되면 10자리의 배열에 0~9까지 값이 랜덤으로 생성된다.

생성된 숫자 : 1338675973


위 로직을 일부 해석해보겠다.


빨간색으로 표시된 부분이 비교하는 부분이다.

배열[0]의 값 1과 3을 비교한다.

1338675973


배열[1]의 값 3과 3을 비교한다.

1338675973


배열[2]의 값 3과 8을 비교한다.

1338675973


배열[3]의 값 8과 6을 비교한다.

1338675973

배열[3]의 데이터가 배열[4]의 데이터보다 크다

배열[3] : 8과 배열[4] : 6 위치를 변경 -> 13368(위치변경)75973



배열[4]의 값 8과 7을 비교한다.

1336875973

배열[4]의 데이터가 배열[5]의 데이터보다 크다

배열[4] : 8와 배열[5] : 7 위치를 변경 -> 133678(위치변경)5973


배열[5]의 값 8과 5을 비교한다.

1336785973

배열[5] 데이터가 배열[6]의 데이터보다 크다

배열[5] 데이터 : 8와 배열[6] 데이터 : 5 위치를 변경 -> 1336758(위치변경)973


배열[6]의 값 8과 9를 비교한다.

1336758973


배열[7]의 값 9과 7를 비교한다.

1336758973

배열[7] 데이터가 배열[8]의 데이터보다 크다

배열[7] 데이터 : 9과 배열[8] 데이터 : 7 위치를 변경 -> 133675879(위치변경)3



배열[8]의 값 9과 3를 비교한다.

1336758793

배열[8] 데이터가 배열[9]의 데이터보다 크다

배열[8] 데이터 : 9와 배열[9] 데이터 : 3 위치를 변경 -> 1336758739(위치변경)


이런식으로 반복되면 맨 뒷자리는 가장 큰수가 남게된다.


맨 뒷자리 값을 가장 큰수이므로 비교 하지않고 하나씩 작은 숫자로 반복하게된다.

또 check값으로 데이터의 변경이 없을 경우 즉 정렬 완료시 반복을 중지한다.



기술통계

- 수집한 자료를 분석하여 대상들의 속성을 파악하는 통계방법

- 중심경향값 : 전체 자료를 대표할 수 있는 수치들

+ 평균 : 전체 자료가 가지는 수치들의 총합을 전체 자료의 수로 나눈 수치 

+ 중앙값 : 최대값과 최소값의 정가운데 수치

+ 최빈값 : 가장 많은 빈도를 보이는 수치

- 분산도 : 전체 자료가 얼마나 퍼져 있는 지를 알 수 있는 수치들

+ 분산 : 각 자료가 평균으로 부터 떨어진 거리(편차)들을 제곱한 수치들의

총합을 전체 자료의 수로 나눈 수치

+ 표준편차 : 분산의 제곱을 취한 수치


- 상관계수 : 두 변수 간의 관계의 크기


- 회귀계수 : 독립변수(원인)가 종속변수(결과)에 미치는 영향의 크기

추리통계(추론통계)

- 모집단을 대표하는 표본을 추출하고 표본의 기술통계를 이용하여 모집단의 속성들을

  유추하는 통계방법

- 신뢰구간

+ 추리통계에서 예측한 모집단의 특성이 위치할 가능성이 높은 구간

+ 표본에서 구해지는 기술통계값들을 이용하여 계산되며,

  95%,99%,99.9% 신뢰수준에서 따라 달라진다.

  (숫자가 높아질수록 정확성이 높아진다. 정확성을 높이기위해 신뢰구간을 높인다.)


- 모집단 : 연구 또는 분석이 이루어지는 전체 대상

+ 전수조사하는게 제일 좋으나 불가능에 가깝다.


- 표본 : 모집단에서 추출한 일부로, 모집단의 속성들을 유추하는데 사용

+ 확률표본추출방법 :  무작위로 표본을 추출하는 방법으로 모집단을 

      대표할 가능성이 높은 방법

+비확률표본추출방법 : 조사자의 편의나 판단에 의해서 표본을 추출하는

      방법으로 모집단을 대표하지않을 가능성이 존재하는방법


표본을 얼마나 추출해야 모집단을 대표할수있을까

- 중심극한정리 

+ 표본이 30 이상으로 충분히 클 때

1) 모집단의 분포와 상관없이 표본은 정규분포

2) 표본의 평균 = 모집단의 평균

3) 표본의 분산 = (모집단의 분산)/(표본의수)


- 자유도

+ 평균을 유지하면서 자유롭게 어떠한 값도 가질 수 있는 사례의 수 (N-1)

  ex)모집단의 평균이 3일때 네개의 표본을 추출했을경우 3개는 

     자유롭게뽑고 나머지하나는 평균에 맞춰줘야한다.

'개발 소발 > 기초 통계' 카테고리의 다른 글

기초통계 | 척도,도수분포표,그래프 란?  (0) 2018.12.12

+ Recent posts