C(38)
-
C - 자료구조 3장 연습문제 풀이
1. int a[10][20]에서 배열이 차지하는 메모리 공간의 크기는 얼마인가? 정답은 4(int 자료형의 크기)x10x20 = 800바이트 2. float a[100]으로 선언된 배열의 시작 주소를 1000번지라고 할 때, 배열의 10번째 요소의 주소는 몇 번지인가? float 자료형의 크기는 4이다. 1000+(4*10) 이므로 정답은 1040번지이다. 3. 다음의 배열 중에서 크기가 가장 큰 배열은? (1)int array1[10] (2)double array2[10] (3)char array3[40](4)float array4[10] (1)4*10 = 40 (2)8*10 = 80 (3)1*40 = 40 (4)4*10 = 40 이므로 정답은 (2)이다. 4. 크기가 10인 배열 two를 선언하고 ..
2022.04.07 -
C - call by value / call by reference
#include void swap(int x, int y){ int tmp = x; x = y; y = tmp; } int main() { int a, b; scanf("%d%d", &a, &b); swap(a, b); } a와 b의 값을 서로 바꾸는 swap 함수이다. 분명 코드만 보면 a와 b의 값이 바뀌어야 하는데 결과적으론 바뀌지 않는다. 입력 값이 a = 2, b = 3이라고 가정하자 swap 함수 안으로 매개변수 x, y를 받으면 x = 3, y = 2로 바뀐다. 하지만 함수가 종료되면 a,b와 x,y는 다르다. 핵심은 a, b를 통해 x, y의 값을 전달해줬고 x,y의 값이 각각 바뀌게 된 것이다 이렇게 a,b의 값을 넘겨준 것을 call by value라 하며 변수 자체를 넘긴것이 아닌 값..
2022.04.05 -
C - 자료구조 배열/구조체/포인터/동적 메모리 할당
* 배열의 응용 : 다항식 수학에서 나오는 다항식을 배열을 이용해 표현 해보자. 다항식은 p(x)=a(n)x^n+a(n-1)x^n-1+....+a(1)x+a(0)의 형태를 가진다. a : 계수 x : 변수 n : 차수라고 부른다. 다항식을 나타내는 두가지의 자료 구조가 있는데 첫번째 방법이다. 모든 차수의 계수 값을 배열에 저장하는 방법이다. 가령 10x^5+6x+3 이라는 다항식이 있다면, 0번 인덱스 1번 인덱스 2번 인덱스 3번 인덱스 4번 인덱스 5번 인덱스 10x^5 0x^4 0x^3 0x^2 6x^1 3x^0 의 형식으로 배열에 저장이 될 것이다. #include #define MAX_DEGREE 101 typedef struct { int degree; float coef[MAX_DEGREE..
2022.04.05 -
C - 자료구조 통곡의 벽 연습 문제 풀이
1. //팩토리얼을 계산하는 순환호출 함수 factorial에서 매개 변수로 5를 주었다면 //최대 몇개의 factorial 함수의 활성 레코드가 동시에 존재할 수 있는가? //정답은 5개이다 factorial(5) -> factorial(4) -> factorial(3) -> factorial(2) -> factorial(1) //순으로 호출하고 f(1)부터 차례대로 함수를 종료하기에 5개가 맞다 2. //순환 호출을 하였을 경우에 활성 레코드들이 저장되는 위치는 스택이다 3. //활성 레코드에 저장되지 않는 것은 무엇인가? //하나의 함수가 자기자신을 다시 호출하는 것은 다른 함수를 호출하는 것과 동일하다. //복귀주소가 시스템 스택에 저장되고 호출되는 함수를 위한 매개변수와 지역 변수를 //스택으로..
2022.03.30 -
C - 자료구조 순환
순환이란 ? 어떠한 알고리즘이나 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다. 일반적으로 반복문보다 느리다. 반복문을 쓰면 코드가 개판이 되지만 재귀로 적으면 깔끔해지는 코드를 쓰는데 활용 된다 #include int factorial(int n){ if(n==1){ return 1; } else if(n>=2){ return (n + factorial(n-1)); } } int main(void){ int b=0; scanf("%d", &b); printf("%d", factorial(b)); } 1+2+3+...+n을 계산하는 순환 함수이다. 함수명이 factorial인 이유는 n! 함수 먼저 풀면서 공부해서 그런거니 신경 쓰지 마 아무튼 factorial함수를 잘 보면 자기 자신..
2022.03.23 -
C - Big-O 표기법
1. g(n)=1 - 상수 시간 복잡도 - f(n) = O(1) - 입력이 증가해도 항상 일정한 시간이 걸리는 경우 - 가장 이상적인 성능 void f(int n) { //n은 입력의 크기 printf("Hello"); } //어떠한 크기의 n이 들어올지라도 "Hello"한번 찍어주고 프로그램을 끝냄 //n이 몇이던지 자신의 일을 수행하는데 걸리는 시간은 1로 일정함 void f(int n) { printf("Hello"); printf("World"); } //어떠한 크기의 n이 들어올지라도 "Hello" 한번 "World" 한번 찍어주고 프로그램을 끝냄 //n이 몇이던지 자신의 일을 수행하는데 걸리는 시간은 2로 일정함 2. g(n)=n - 선형 시 간 복잡도 - f(n) = O(n) - 시간은 입력..
2022.03.22