170803 - Week 6
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 |
170727 - Week 5
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 |
170720 - Week 4
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 |
170706 - Week 2
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 - Week 1
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 |