<기본입출력 복습>
-가끔 버퍼가 프로그램의 동작을 방해할 때가 있다. c언어에서는 간단하게 getchar() 함수로 버퍼의 공백문자를 받아낼 수 있다.
-주석은 일단 최대한 많이 작성하는 습관을 들이자. 주석은 컴파일 단계에서 제거되기 때문에 프로그램의 크기와는 상관이 없다.
-scanf()함수를 사용할 때는 변수 이름 앞에 &(엠퍼센트)를 붙여야 한다.
-형식 지정자를 %c 로 하면 엔터(enter)도 하나의 공백문자로서 입력받을 수 있다.
c언어를 본격적으로 활용해보는 단계입니다.
어셈블리어라는 것은 기계어와 일대일 대응이 되는 컴퓨터프로그램의 저급언어입니다.
c언어에서는 사용자 정의 함수, 배열, 문자열 및 포인터가 주요하게 다루어지는데 이것들을 손쉽게 구현할 수 있느냐가 고급 개발자의 기준이 된다고 할 수 있습니다. 또한 이중에서 포인터는 c언어의 특징이자 기본적인 자료형태라고 할 수 있습니다. 포인터는 특정한 데이터가 저장되어 있는 메모리의 주소 그 자체를 저장하는 변수로서 c언어를 고급스럽게 활용하기 위해서는 필수적으로 알아야 되는 부분이라고 할 수 있습니다. 무엇보다 c언어는 메모리 주소에 직접 접근할 수 있다는 점에서 강력한 언어가 되며 다양한 운영체제 및 언어들의 기본이 되고 있습니다.
한마디로 사용자 정의 함수는 자기 스스로 만든 함수라는 의미를 가지고 있는데요,
사용자 정의 함수는 정해진 특정한 기능을 수행하는 모듈을 의미하며 함수를 적절히 활용하면 하나의 문제를 잘게 분해할 수 있습니다. 예를 들어 이진 탐색 트리는 삽입, 삭제, 순회 등 다양한 함수의 집합으로 구성됩니다. 만약 사용자 정의 함수가 없다면 오직 메인 함수에서 모든 알고리즘을 처리해야 하는데 이는 작업의 효율성을 저하시킬 수 있습니다. 또한 함수는 각각의 모듈로서 쉽게 수정되고 보완될 수 있다는 장점이 있습니다.
사용자 정의 함수를 이용해서 몇가지 실습을 해보도록 하겠습니다.
-몇 시 몇 분의 시간이 있을 때 거기서 특정 시간을 더해주는 함수를 작성합니다.
-화폐 거스름돈을 줄 때 가장 적은 화폐의 개수로 주는 프로그램을 작성합니다.
-1월 1일부터 현재 날짜까지의 날짜 차이를 구하는 프로그램을 작성합니다.
가장 먼저, 시간을 더해주는 함수를 작성해보겠습니다.
여기에서는 전역변수라는 것을 사용해 볼 텐데요, 전역변수는 쉽게 말해 프로그램 전체에서 공통으로 사용할 수 있는 즉, 프로그램 어디서나 사용할 수 있는 변수입니다.
| #include<stdio.h> int hour, minute, minuteAdd; ->전역변수 void count() ->전역변수를 사용하기 때문에 반환값이 있을 필요가 없어서 void로 바꿈. { 함수의 반환값이 없을 때 void를 해줍니다. (즉 함수가 종료됨과 동시에 return을 안해준다는 말) minute += minuteAdd; ->분에 더할 분을 더한 값이다. hour += minute / 60; ->시간은 분을 60으로 나누었을 때의 "몫"을 더한 값이다. ★잘모르겠음 minute %= 60; ->분은 60으로 나누었을 때의 "나머지" 값이다. hour %= 24; ->시간은 24로 나누었을 때의 "나머지" 값이다. } int main() { printf("몇 시인지 입력하세요:"); scanf_s("%d", &hour); printf("몇 분인지 입력하세요:"); scanf_s("%d", &minute); printf("더할 분을 입력하세요.:"); scanf_s("%d", &minuteAdd); count(); ->count함수를 main함수에서 씀으로써 main함수가 길어지지 않으면서 hour, minute, minuteAdd를 순식간에 계산할 수 있게 되었다. printf("더해진 시간은 %d시 %d분입니다.",hour, minute); } |
int counter()
{}
함수는 위와 같이 이루어져 있습니다.
int(반환형) 함수가 종료될때 int형태의 값을 반환한다는 의미이다.
counter(함수의 이름)
() (매개변수)
-화폐 거스름돈을 줄 때 가장 적은 화폐의 개수로 주는 프로그램을 작성합니다.
(거스름돈 계산 프로그램)
매개변수는 함수의 내부적으로 어떤 처리를 도와주는 기본적으로 존재하는 변수이고,
반환형은 함수가 끝날때 반환하는 어떤 값의 형태를 정해주는 것.
| #include<stdio.h> //특정한 금액을 받아서 가장 적은 거스름돈 화폐의 개수를 구하는 함수입니다. int smallest(int number) ->사용자정의함수. 매개변수로 int형인 number를 쓴다. number에 저장된 값을 쓸 수 있다. { int count = 0; -> 초기화를 하지 않으면 이전에 저장되어 있던 값이 들어갈 수가 있음. while (number >= 50000) { number -= 50000; count++; } while (number >= 10000) { number -= 10000; count++; } while (number >= 5000) { number -= 5000; count++; } while (number >= 1000) { number -= 1000; count++; } while (number >= 500) { number -= 500; count++; } while (number >= 100) { number -= 100; count++; } while (number >= 50) { number -= 50; count++; } while (number >= 10) { number -= 10; count++; ->이 count가 화폐의 개수가 되는 것이다. 즉, number에 어떤 값이 들어오면 그 화폐의 단위를 만들 수 있는 가장 적은 화폐의 개수가 반환 왜냐하면, 반환 형태가 int이기 때문. } } int main() { int number; printf("금액을 입력하세요:"); scanf("%d", &number); printf("최소로 줄 수있는 화폐의 개수는 %d개 입니다.\n", smallest(number)); } |
다음으로 해볼 실습은, 1월 1일부터 현재의 날짜까지 날짜 차이를 구하는 프로그램입니다.
| #include<stdio.h> int getDays(int month, int day) //사용자정의함수를 만들고, month와 day 라는 매개변수를 만듦. { int i, sum = 0; //i와 sum을 초기화해준 뒤에 for (i = 1; i < month; i++) { if (i == 2) //여기서는 윤년을 감안하지 않음 { sum += 28; } else if (i % 2 == 0) //2의 배수라면 { sum += 30; } else //홀수 월이라면 { sum += 31; } return sum + day; //sum은 특정한 달까지의 날짜 개수를 구하는 거고, day는 몇날 며칠이기 때문에 //그날짜를 그냥 더해 주는 것입니다. } } int main() { int month, day; scanf_s("%d %d", &month, &day); printf("1월1일부터 해당 날짜까지의 거리는 %d입니다.", getDays(month, day)); return 0; } |
'플밍 공부' 카테고리의 다른 글
| C언어 (기본입출력) (0) | 2024.01.09 |
|---|---|
| c언어 3(자료형) (0) | 2024.01.08 |
| C언어 1 (0) | 2024.01.05 |