본문 바로가기

프로그래밍/C언어.33

[C언어] main에서 입력받기. argc / argv / 간단예제 빼먹었던 소스 사진 첨부;; 모르고 있다가 이제야 발견; [C언어] main에서 입력받기. argc / argv / 간단예제 main에서 인자를 전달 받을 수 있다. (argc, argv) 보기만 해도 아는 사람이 있겠지만.. 간단하게 설명을 하자면 argc 는 int 로, 입력 받는 인자(문자열)의 개수 이다. 여기서 잠깐 착각 할 수 있는데. 실질적으로 내가 입력한 인자보다 1개가 더 나온다. 이유는 내가 실행시킨 파일명도 인자로써 전달되기 때문. argv는 문자열배열로 여러개의 문자들(문자열)을 배열로 저장한다. 문자열의 기준은 "공백" 또는 "엔터" 이다. argv에 0번째는 위에서 설명했듯이 파일명. argv에 1번째는 첫 번째 인자. argv에 2번째는 두 번째 인자. 이런식으로 입력된다. a.. 2011. 5. 23.
[C언어] 삽입정렬 간단예제. [C언어] 삽입정렬 간단예제. 삽입 정렬. selection 이라고도 하지만 일반적으로 그냥 삽입 정렬 이라고 한다. (5,6,4,3,1,6,2) 이렇게 존재 한다고 가정했을 때. 가장 작은 숫자를 찾는다. (1) 이를 첫번째 자리의 숫자과 교체한다. 일반적으로 교체하는 알고리즘(?)이 굉장히 많이 쓰이는데 잠깐 알아보도록 하자. 1. 임의의 변수를 하나 만들고 그 안에 교체될 대상의 값을 저장한다. [temp = 5] 2. 교체될 대상에 선택한 값을 덮어 씌운다. [5에 1을 덮어 쓴다.] 3. 그러면 5라는 값은 사라지고 1 이 2개가 되었을 것이다. (1,6,4,3,1,6,2) 4. 여기서 선택했던 1에 temp의 값을 덮어 씌운다.(대입) [1 = temp] 5. temp는 5가 들어 있었으므로 .. 2011. 5. 12.
[C언어] %연산자, Mod 연산자란? 간단 예제. [C언어] %연산자, Mod 연산자란? 간단 예제. 나머지 연산. 이라고 하며 % 또는 mod (모드) 연산자 라고도 한다. %연산자를 배우기 전에 꼭 알아야 하는 나누기의 주의사항을 알아보자. 프로그래밍에서 나누기를 하는 방법은 3가지가 있다. 언어마다 다르긴 하지만. 1. 나누어서 몫과 나머지를 구하는 방법. 2. 나누어서 몫만 구하는 방법. 3 .나누어서 나머지만 구하는 방법. 비쥬얼 베이직에서는 위 3가지 방법이 모두 존재 하는데. 다른 언어에서 몫만 구하는 연산자가 있는지 확실히 모르겠다. 물론, 일부러 정수로 나누어서 소수점을 떼어버릴 수도 있긴 하다. 일반적인 나누기에서도 주의할 점이 있다. 처음 접하거나, 오랜만에 접하는 사람들이 자주 범하는 실수로 대상 값을 정수로 나누는 것이다. 3/2.. 2011. 5. 11.
[C언어] 단순 정렬 / 오름차순 / 내림차순 간단 예제. [C언어] 단순 정렬 / 오름차순 / 내림차순 간단 예제. 가장 단순한 정렬로 교환법 이라는 방법이다. 첫번째를 기준으로 잡고. 그 다음으로 한칸씩 넘어가며 비교를 하되 기준이 되는 수 보다 크거나, 혹은 작거나 하면 값을 바꾼다. (오름차순, 내림차순에 따라 다름) 0번째 1번째 비교. 1번이 크면 값을 교체. 아니라면 0번째와 2번째를 비교. 2번이 크면 값을 교체. 아니라면 0번째...마지막을 비교. 이렇게 한번씩 비교가 끝나면 0번째에는 가작 큰 값이 자리하게 된다. 그리고 다시 1번째를 기준으로 위의 비교를 반복한다. 결과적으로 모든 정렬이 같지만, 비교하는 방식에 따라 종류가 나뉜다. 당연히 if 문에서 부등호의 방향에 따라 오름차순 내림차순으로 바뀐다. 만약, 위의 코드에서 랜덤수를 발생하는.. 2011. 5. 11.
[C언어] 버블소트 / 버블정렬 / 거품정렬 간단예제. [C언어] 버블소트 / 버블정렬 / 거품정렬 간단예제. 버블소트. 버블정렬. 거품정렬. 흔히들 이렇게 이야기 한다. 현재 기준 되는 배열과 바로 다음 배열의 값을 비교해서 정렬한다. 그리고 다음 배열과 그 다음 배열의 값을 비교해서 정렬. 0번째와 1번째를 비교하고, 1번째와 2번째를 비교하고, 2번째와 3번째를 비교하는 방식 비교를 해서 오른쪽에 큰 수를 놓는다. 이렇게 큰 수가 오른쪽 끝에 떠오른다 해서 거품 정렬이라 함. 계속 비교를 해서 큰 수를 오른 쪽에 놓으며. 오른쪽 제일 끝에 가장 큰 수가 자리하게 되면 그 다음엔 처음부터 다시 하되, 마지막에 놓인 가장 큰 수를 비교하지 않는다. 당연히 더 작을테니. 따라서 큰 수가 오른쪽부터 차례로 놓이게 되고, 비교하는 횟수도 점차 줄어들게 된다. 결.. 2011. 5. 11.
define란? define 사용법. [스샷설명. 2011/09/09일 수정] define란? #define 사용법. 간단 예제. 매크로와 전처리기 지시자. #define에서 #의미, # 사용법. #define PI 3.14 라고 가정하면 #define를 전처리기 지시자 라고 하며, PI를 매크로 상수 라고 한다. 위와 같이 선언을 해 두었다면 아래 코드 부분에서는 3.14 대신 PI 라고 하면 된다. 이를 PI라는 변수를 만들어서 3.14를 넣은것과 같다고 착각하면 안된다. 결과는 비슷해 보일 수 있으나, 엄밀히 말하면 다른 것이다. define은 단순한 치환으로써. 내가 아끼는 연필에 "몽당이"라는 이름을 지어주고 그 연필을 "몽당이" 라고 부르는 것과 같은 것이다. 때문에 PI의 값은 변경이 불가능 하며, printf 로 찍어도 주소값이 나온다. 여전히 상수이다. 이렇게 상수.. 2011. 5. 11.
[C언어] 랜덤함수 사용법. rand(), srand() 간단예제. [C언어] 랜덤함수 사용법. rand(), srand() 간단예제. C언어에서는 랜덤수 발생을 위해서 rand()와 srand()를 주로 사용한다. 아직 학생이라 실무나 이런 부분에서 어떤지는 잘 모르겠지만. 사실 rand는 딱히 쓸모는 없을거 같다. 해본 사람은 알겠지만 rand의 경우 랜덤으로 발생하긴 하지만 실행시 매번 같다는 점이 문제다. 5개의 랜덤수를 발생했다. 종료 후 다시 실행하면 이전과 동일한 랜덤수가 발생한다. 랜덤수 발생의 기초가 되는 seed (씨앗)이 동일하기 때문이라고 한다. 이러한 문제점을 보안하는 방법으로 srand()가 있다. 일단 기본부터 하자. rand(), srand()는 stdlib.h 에 정의 되어 있으므로 #include 를 반드시 선언해 주어야 한다. 기본적으로.. 2011. 5. 11.
[C언어] char을 int형으로 int형을 char형으로. 간단예제. [C언어] char을 int형으로 int형을 char형으로. 간단한 예제. 일단 기본 설명을 하자면 atoi, atof, itoa함수 원형은 int atoi (const char* str) double atof (const char* str) char *itoa ( int value , char *str , int radix ); 대충 이런식이다. 보면 아는 사람도 있겠지만 문자열을 정수로 바꾸는 것은 atoi 문자열을 실수로 바꾸는 것은 atof 정수를 문자열로 바꾸는 것은 itoa 이다. 일단 기본적으로 문자열을 정수로 바꿀 때 당연히 숫자만 정수로 바뀌며 문자가 시작 된 다음부터는 인식하지 않는다. ex)"2005년도 10월" 이라고 하면 2005만 정수로 바뀌어서 저장 됨. 간단한 예제를 보자. .. 2011. 5. 9.
동적 메모리 할당 (malloc / calloc / realloc / free) 동적 메모리 할당 (malloc / calloc / realloc / free) 동적 메모리. malloc, calloc, realloc 에 대해서 알아보자. 일단 기본적인 개념부터 이해 하자면. 배열을 예로 들어서, 배열이 필요하지만 몇개가 필요한지 알 수 없는 경우. 우리는 일반적으로 예제를 하거나 간단한 코딩을 하는 경우에는 아래와 같이 사용한다. int arr[100]; 100정도. 혹는 1000 실행에도 크게 문제가 없고 별 다른 문제는 없어 보인다. 하지만 만약에. 이 중 단 10개만 사용한다면? 혹은 그래서 10개만 선언 했는데 20개가 필요하게 된다면? 크게 잡아 놓으면 낭비가 되고, 모자라면 처리를 못하는 것이다. 게다가 공간 할당은 메인의 최 상위 처음 프로그램 실행시 미리 할당을 받아.. 2011. 4. 26.
구조체에서 char의 크기가 다른 이유. char형 int 강제 형 변환(정수의 승격.) char형 int 강제 형 변환(정수의 승격.) 일단 기초부터 시작하자면. CPU는 Word 단위로 연산을 한다. word란 CPU가 한번에 처리할 수 있는 데이터 크기를 의미한다. 우리가 흔히 말하는 32비트 시스템. window 32비트, 64비트 뭐 이런게 있는데 32bit 에서는 int를 32bit 로 표현한다. 즉 4byte. 당연히 32bit 단위로 일을 처리하는게 가장 빠르며. 때문에 char, short int 등은 int로 변환(승격) 되어진 후 연산이 되고 다시 원래대로 돌아간다. 즉, char는 int로 변환 된 후 연산하고 다시 char로 돌아간다 이야기다. 때문에 변환과 변환이 있어 사이즈가 작음에도 불구하고 더 느리다는 이야기. 사실 이 부분은 어셈블리어나 조금 더 기계적인 부분.. 2011. 4. 10.