How We Coding

Tutoring/17-1 C Lang (Summer) +5

Week 6

1. 색종이(넓이)

- 도화지를 2차원 배열(0으로 초기화)로 생각할 수 있고, 색종이를 붙인다는 건

  그 도화지에 1을 채우는 것으로 생각할 수 있다.

- 결국 1의 갯수가 색종이가 붙여진 곳의 넓이..!!

2. 색종이2(둘레)

- 000

  010

  000 에서 1은 1x1 크기의 색종이, 이 색종이의 둘레는 4


- 000

  010

  000

  010

  000 에서 도화지에 붙인 색종이의 둘레는 8.

- 즉 1의 상하좌우에 있는 0의 갯수가 둘레가 됨..!!

  for(i=0; i<100; i++) {

  for(j=0; j<100; j++) {

if(dowhaji[i][j] == 1) {

if(dowhaji[i-1][j] == 0) cnt++; // 상

if(dowhaji[i+1][j] == 0) cnt++; // 하

if(dowhaji[i][j-1] == 0) cnt++; // 좌

if(dowhaji[i][j+1] == 0) cnt++; // 우

}

}

  }

3. 통계학 문제

- 빈도수관련 하여 배열을 이용하여 카운트 할 수 있는데,

  이 문제에서 값의 범위는 절대값이 4000 이하.

  즉 -4000 ~ 4000 까지의 값이 들어오게 되는데,

  이 값을 0 ~ 8000 으로 매핑해서 빈도수를 체크할 수 있음.

  즉 scanf("%d", &k); cnt[k]++; 이런식으로 가능

- 반올림의 경우 0.5를 더한 후 버림을 하면 구할 수 있음.

4. 동적할당

- #include <stdlib.h> 헤더파일 선언 필요

- 배열의 크기를 그때그때 다르게 하고 싶을때..?

int main() {

f(n);

}

void f(int n)

{

int arr[n]; // 컴파일 에러 발생

}


int *arr = (int*)malloc(sizeof(int)*n);

>> malloc() 은 주소를 반환. int*로 캐스팅을 하는 이유는

   포인터 연산(배열의 인덱싱)을 할 때 자료형의 크기(여기서는 int)만큼

   계산되기 위해..

   위의 경우 sizeof(int) = 4Bytes * n 크기의 공간이 생성되고,

   그 공간의 시작주소를 반환하게 되며 arr에 그 시작주소가 저장됨.

   (int*)으로 캐스팅하여 arr[0] ~ arr[n-1]까지 배열처럼 사용가능.


동적할당은 힙 이라는 메모리 영역이 할당되어,

free(arr); 이라는 명령어를 통해 해당 메모리를 따로 해제시켜줘야함.

#include <stdio.h>

char* getName();


int main()

{

char *name;

name = getName();

printf("%s\n", name);

return 0;

}


char* getName()

{

char name[30];

scanf("%s",name);

return name;

}


>> 위 문장은 에러발생. 에러메세지 확인해보기. 

>> getName() 의 name은 지역변수..!!

>> 지역변수는 함수가 소멸되면 같이 소멸됨 

>> 동적할당으로 해결 가능

'Tutoring > 17-1 C Lang (Summer)' 카테고리의 다른 글

170727 - Week 5  (0) 2018.02.21
170720 - Week 4  (0) 2018.02.21
170706 - Week 2  (0) 2018.02.21
170629 - Week 1  (0) 2018.02.21

Week 5


1. 버블정렬(오름차순//내림차순)

for(i=0; i<N-1; i++)

for(j=0; j<N-1-i; j++)

if(a[j] > a[j+1])

swap(a[j], a[j+1]);

2. int strLen(char str[]);

3. void strCpy(char dest[], char src[]); // 널문자 삽입에 주의

4. void strCat(char dest[], char src[]); 

(위 함수들 구현하기)

5. 문자열 길이에 따른 정렬. 

>> 배열에 저장된 문자열들의 스왑은 어떻게..?

'Tutoring > 17-1 C Lang (Summer)' 카테고리의 다른 글

170803 - Week 6  (0) 2018.02.21
170720 - Week 4  (0) 2018.02.21
170706 - Week 2  (0) 2018.02.21
170629 - Week 1  (0) 2018.02.21

Week3


BOJ 3주차 문제 풀기!

파워업 Section 5까지 공부해오기!



Week 4 


1. 2차원 배열 char str[5][20]; 에서 str의 타입은?

>> char [20]

2. 메인함수에 2차원 배열의 이름을 전달하면,

   전달받는 함수에서의 매개변수는 어떻게 선언??

>> void f(char 배열이름[][10]); //

>> 1차원 배열 전달받을 땐 void f2(char str[]); // 타입 잘 생각해보기..!!

>> 매개변수의 한하여 void f(int *s) 와 void f(int s[])는 같은 표현!!

3. 포인터배열 : int *pArr[10]; // 포인터변수를 배열로..

4. 배열포인터 : int (*ArrP)[10]; // 포인터변수 ArrP의 타입은 int [10]

5. int main(int argc, char *argv[]) 

>> argc가 가지는 값, argv[i]에 저장되는 문자열들의 정체..!!

'Tutoring > 17-1 C Lang (Summer)' 카테고리의 다른 글

170803 - Week 6  (0) 2018.02.21
170727 - Week 5  (0) 2018.02.21
170706 - Week 2  (0) 2018.02.21
170629 - Week 1  (0) 2018.02.21

Week 2


1. 배열의 이름 : 배열의 시작주소(첫번째 요소의 주소)

2. 배열과 포인터와의 관계

- 배열의 이름 : 상수형태의 포인터

- 포인터 : 변수

3. 배열을 포인터처럼, 포인터를 배열처럼 사용 가능

4. 포인터 연산

- 1 증가시 자료형의 크기만큼 주소가 증가

- p++ 이후 *p vs *(p+1)

- *(p+i) == p[i] 와 동일

5. 문자열의 저장 방법

- char str1[] = "Good Morning"; // 배열의 초기화

- char *str2 = "Good Bye!"; // str2에는 문자열의 첫번째 문자의 주소가 저장됨.

- " " : 문자열은 첫 문자의 시작주소

cf) "Hello"[0] 이런 표현 가능

cf) printf(str1); 가능 // 이렇게 쓰지는 말구…!!

6. 변수형태의 문자열 vs 상수형태의 문자열

- str2에 저장된 문자열은 변경 불가능..!!

- 배열의 중간요소에 널문자를 대입하고 출력하면..? // 널문자는 문자열의 끝

- 상수(리터럴)와 변수의 차이..!!

7. 함수에 배열 전달하기.

- sizeof 연산자

'Tutoring > 17-1 C Lang (Summer)' 카테고리의 다른 글

170803 - Week 6  (0) 2018.02.21
170727 - Week 5  (0) 2018.02.21
170720 - Week 4  (0) 2018.02.21
170629 - Week 1  (0) 2018.02.21

170629


1. 아스키코드 특징

2. 문자열의 끝은 널문자, 널문자의 아스키값은 0

3. char형은 문자형(1바이트 정수형)

4. 1 vs '1' vs "1" // 메모리에 어떻게 저장이 되는지..

5. -1 은 2진수로 11111111 (1바이트 기준)

6. 문자끼리의 연산 : 'b'-'a'

7. '9'를 9로 만들기

8. 구구단 while()으로 짤 때 주의점.

9. 배열 선언 방법. 배열의 크기.

10. 배열을 사용하는 이유. 

11. 배열의 각 공간은 인덱스를 통해서 접근 (for문으로)

12. 배열의 이름은 배열의 시작주소 (그렇다면 함수의 이름은? )

13. 배열의 초기화 (크기만큼 안하면 0으로 채워짐, 문자열 초기화)

14. 문자배열 vs 문자열 // 널문자..!! (2번 확인)

15. 문자열의 길이 구하기 // while()문 혹은 for()문

16. while(str[i++]) { cnt++; } 이해해보기. 조건식에서 참과 거짓의 값

17. 배열에 있는 요소들중에서 최대값 혹은 최소값 구하기.

18. int arr[100] = {0}; // 모든 배열요소 0으로 초기화

19. 배열의 인덱스는 0부터 크기-1 까지..

20. 포인터 선언방법

21. &는 피연산자의 주소를 반환하는 연산자

22. *는 참조 연산자

23. *a = *b; // 포인터 변수 b가 가리키는 공간(변수)에 있는 값을 포인터변수 a가 가리키는 공간(변수)에 대입

24. L-value = R-value : 공간 = 값

25. swap(a, b); vs swap(&a, &b); 지역변수 개념 생각해보기

'Tutoring > 17-1 C Lang (Summer)' 카테고리의 다른 글

170803 - Week 6  (0) 2018.02.21
170727 - Week 5  (0) 2018.02.21
170720 - Week 4  (0) 2018.02.21
170706 - Week 2  (0) 2018.02.21