backup/c,c++
-
매크로(전처리기)backup/c,c++ 2009. 12. 29. 18:46
1. ## 열강에서 필자가 아직 알 필요없다면서 대충 넘어간 부분... 어쩌다 대충 알게된 간단한 이유를 정리해 본다. 모두가 알만한 윈도우 프로그래밍(win32 API, MFC, visual basic,...)등을 하다보면 배열로 선언한게 아니지만 객체들을 배열처럼 접근해야 할 때가 있다. 예를 들어 이름이 obj인 객체가 obj1, obj2, obj3....식으로 있다면 분명 배열은 아니지만 배열처럼 접근하는게 훨씬 용이할 것이다. 이럴 때 #define OBJ obj #define cat(a,b) a##b 처럼 매크로함수로 선언하고 사용시에(문법은 C를 이용했다.. 아직 윈도우즈 프로그래밍은 모르는 관계로...) for(i=0;i
-
열강(몇일째인지...)backup/c,c++ 2009. 12. 28. 23:30
동적할당을 보다가 문자열 입,출력에 대해서 깨닫게 된 것이 있다. 다들 알겠지만,,, 문자 or 문자열 입,출력함수(getc,fgetc,gets,fgets)로 입력 받으면 해당 문자(열)만 입력 받고 입력버퍼에 엔터(\n)를 남겨두게 된다. 따라서 다음 입력시엔 입력할 기회를 박탈당한다....따라서 새로운 입력 전에 fflush(stdin)으로 표준 입력버퍼를 깨끗하게 클리어 해 주어야 한다. #include #include int main() { int len; char* str; printf("길이 : "); scanf("%d",&len); str = (char*)malloc(sizeof(char)*len); //fflush(stdin) printf("문자열 : "); //fgets(str, len,..
-
도전!프로그래밍 threebackup/c,c++ 2009. 12. 22. 20:43
1. 이 문제의 핵심은 (i, j)의 배열을 90도 회전시키면 (j, 3-i)가 된다는 것이다! for(i=0; i 가로로 감소 -> 세로로 감소(횟수 1 감소) 즉, 입력값이 4면 가로로 1 2 3 4(4번)가 채워지고 다음 아래로 내려가면서 5 6 7(3번) 다시 왼쪽으로 가면서 8 9 10(3번), 위로 올라가면서 11 12(2번).......이런식이다. 물론 구현도 쉽지 않다.. 각자 개성에 맞게 하면된다. while(1) { for(count=0, j+= direct; count
-
열혈강의 C 5일차backup/c,c++ 2009. 12. 16. 21:19
C에서 가장 어렵다는 배열과 포인터, 이제 시작이다. 1. 문자는 비교연산시 아스키코드값으로 비교연산을 수행한다. char string[10] = {0,} int len = 0; while(string[len] != 0) //stirng안의 문자가 '\0'인지 비교 len++; //null문자 즉 문자열의 끝인지확인 하는 것으로 문자열 길이를 구한다. while문 반복조건을 string[len] != '\0' 또는 = NULL로도 할 수도 있지만 어차피 널문자는 아스키코드값이 0이므로 비교시 0으로 변환한다. 따라서 그냥 0으로 해도 결과는 같다. 2. 포인터의 타입은 데이터를 참조하는 방법을 알려주는 역할을 한다. 즉, 시작주소부터 몇 byte를 읽은 것인가를 알려준다.(char는 1byte, int는..
-
유클리드 호제법 정리 / 증명backup/c,c++ 2009. 12. 15. 18:31
알고있던 유클리드의 호제법이 생각이 나지 않아서 다시 한번 정리 해둔다.(열강 도전 프로그래밍 ONE을 보다가) 유클리드 호제법이란. A >= B인 어떤 두 정수 A와 B가 있을 때(A = Bq + r로 나타낼 수 있다.) A와 B의 최대공약수 gcd(A, B) = d는 gcd(B, r)과 같다. 즉, 쉽게 말하면 두 수의 최대공약수는 "큰 수를 작은 수로 나눈 나머지"와 "작은 수"의 최대공약수와 같다는 것이다. 증명. gcd(A, B) = d에 의해서 A = ad, B = bd (따라서 a와 b는 서로소이다.) A = Bq + r 이므로 r = A - Bq = ad - bdq = (a-bq)*d 이다. 여기서 B = bd 와 r = (a-bq)d이므로 d는 B와 r의 공약수 중 하나라는 것을 알 수 ..
-
열혈강의 C 4일차backup/c,c++ 2009. 12. 15. 18:06
간단하지만 알고있으면 좋을 것 같아서 기록한다. 1. 보통 변수의 선언은 함수초반부에 한번에 한다. 그렇지 않으면 에러가 생기므로... 하지만 함수 안에 새로운 지역(중괄호)이 존재한다면 그 안에서 새로운 변수를 선언할 수 있다. main() { int i=0; if(1) { int i=1; } { int i = 2; } } 바로 이런식이다. 새로운 지역이라면 항상 새로운 변수 선언이 가능하다. 단 그 지역의 시작부분에!! 즉, 변수는 지역의 시작부에 선언해주면 된다!! 는 사실을 알고 있으면 된다. 쉽지만 미처 생각지 못했던 부분이다. 2. 가변인자함수(Variadic Funcition) C++에서는 본 듯 하지만 C에서 가변인자를 받는 함수를 사용할 수 있다는 사실을 처음 깨달았다. 가변 인자함수란 ..