목록학습 (34)
while (1): study();

C++에서 구현하는 함수의 매개변수는 이용되는 형태에 따라 다양하게 불리운다. 가장 기본적인 경우는 call-by-value로, 전달받은 인수의 값을 복사하여 함수 내부의 지역변수로만 사용하고, 함수 외부에는 전혀 영향을 미치지 않는다. #include int MyAdd(int, int); int main(void) { int a = 3; int b = 5; std::cout

함수 오버로딩이란 이름과 기능이 같은 함수를 인자에 따라 다르게 작동하도록 구현하는 것을 말한다. 기존 C언어에서는 함수의 이름으로 함수를 호출하기 때문에 함수 오버로딩이 불가능했으나, C++에서는 함수의 이름에 더해 매개변수의 수, 타입까지 감안하여 서칭하기 때문에 오버로딩이 가능하다. 여담으로 파이썬에서는 오버로딩은 안되지만 디스패치 함수를 구현할 수는 있다. 다음은 swap 함수를 다양한 자료형에 호환되도록 구현한 함수 오버로딩의 예시이다. #define _CRT_SECURE_NO_WARNINGS #include void swap(int*, int*); void swap(char*, char*); void swap(double*, double*); int main(void) { int num1 = ..

사칙연산 수식을 입력하면 그 결과를 출력하는 프로그램을 작성합니다. 단, 수식을 입력하는 함수와 사칙연산 함수를 매크로 함수로 작성하세요. #define _CRT_SECURE_NO_WARNINGS #define ADD(x, y) ((x) + (y)) #define SUB(x, y) ((x) - (y)) #define MUL(x, y) ((x) * (y)) #define DIV(x, y) ((x) / (y)) #define GET(x, op, y) tmp = scanf("%d", &x);\ if (tmp == EOF) break;\ getchar();\ scanf("%c", &op);\ scanf("%d", &y); #include #include int main(void) { int x, y; int t..

소스 코드를 컴파일하기까지의 과정은 크게 3단계로 나뉩니다. 전처리: 소스코드를 컴파일하기 좋은 형태로 적절히 수정 컴파일: 전처리된 소스코드를 기계가 읽을 수 있는 객체 파일(object file)로 변환 링크: 객체 파일을 운영체제가 읽을 수 있도록 startup code를 붙여 실행 파일로 변환 이 중 가장 첫 단계인 전처리 단계에서 쓰이는 지시자들을 알아봅니다. 1. #include 가장 흔하게 접할 수 있는 전처리 지시자인 #include는 텍스트 형태의 파일을 현재 소스코드에 붙여넣는 기능을 수행합니다. #include #include "my_header.h" #include "my_module.c" 불러올 텍스트 파일은 또는 " "를 사용하여 불러옵니다. 를 사용하는 경우 컴파일러의 incl..

텍스트 파일에서 등록된 단어 이외의 단어를 찾아 새로운 파일에 출력합니다. 모든 단어의 길이는 최대 20자, 등록 단어 수는 최대 10개로 제한하며 검출 대상 단어 수는 제한이 없습니다. b.txt에서 a.txt에 등록되지 않은 단어를 찾아 c.txt에 출력합니다. #define _CRT_SECURE_NO_WARNINGS #include #include #include int get_words(char**, FILE*); void file_open_error(void); void free_all(int, int); int main(void) { FILE* wfp, * ifp, * ofp; int i, j; int is_detected; // printing flag char* words[10], *inp..

학생 5명의 국어, 영어, 수학 점수를 입력하여 총점, 평균, 학점을 구하고 총점 순으로 정렬하여 출력합니다. 학점은 평균이 90점 이상이면 A, 80점 이상이면 B, 70점 이상이면 C, 그 외는 F로 평가합니다. #define _CRT_SECURE_NO_WARNINGS #include #include #pragma pack(1) typedef struct { int id; char name[20]; int kor; int eng; int math; int total; double average; char grade; } Student; void get_info(Student**); void sort_by_total(Student**); void print_info(Student**); int main..

키보드로 양수를 입력한 후에 입력한 수까지의 모든 소수를 출력합니다. 2부터 한 줄에 5개씩 출력하며 소수가 아닌 수는 X를 출력합니다. 입력한 수에 따라 적절한 크기의 배열을 동적 할당하여 사용합니다. #define _CRT_SECURE_NO_WARNINGS #include #include #include int is_prime_number(int); void print_2darray(int**); int main(void) { int end; int flg; int i; char value[80]; // 동적할당용 임시 버퍼 printf("정수 입력 : "); scanf("%d", &end); char** nums = (char**)calloc(end - 2, sizeof(char*)); if (nu..

두 명의 나이와 키를 입력한 후에 바꾸어 출력합니다. 단, 나이와 키를 바꾸는 함수는 int형과 double형을 모두 교환할 수 있도록 하나의 함수로 구현하세요. #define _CRT_SECURE_NO_WARNINGS #include #include void swap(char*, void*, void*); int main(void) { int age1, age2; double h1, h2; printf("첫 번째 사람의 나이와 키 입력 : "); scanf("%d%lf", &age1, &h1); printf("두 번째 사람의 나이와 키 입력 : "); scanf("%d%lf", &age2, &h2); swap("int", &age1, &age2); swap("double", &h1, &h2); prin..

여기서는 이중 포인터, 배열 포인터, 함수 포인터, 그리고 void 포인터의 의미와 용례를 살펴본다. 1. 이중 포인터 이중 포인터란 포인터의 주소를 저장하는 포인터이다. 일반적으로 깊이가 3 이상인 (포인터의 포인터의 포인터부터) 다중 포인터라고 부르는데, 가독성 문제로 잘 사용되지는 않는다. // 이중 포인터 선언 int **ppi; 포인터 선언에서 중요한 것은 포인터가 가리키는 자료형과 포인터 자신의 자료형이다. 따라서 다음 선언문은 다음과 같이 분해할 수 있다. 정수포인터를 가리키는 포인터 변수임을 쉽게 알 수 있다. // int*형을 가리키는 포인터 int* (*ppi); 이중 포인터는 다음과 같이 함수의 매개변수를 받을때 유의미하게 사용할 수 있다. 활용1. 포인터 값을 바꾸는 함수의 매개변수..

5행 6열의 2차원 배열을 선언하고 4행 5열 부분은 1부터 20까지 초기화합니다. 초기화된 배열에서 마지막 열의 요소에는 각 행의 합을 저장하고 마지막 행의 요소에는 각 열의 합을 저장한 후 전체 배열의 값을 출력하세요. #define _CRT_SECURE_NO_WARNINGS #include int main(void) { int i, j; int ary[5][6] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20} }; // 행의 합계 for (i = 0; i < 4; i++) { for (j = 0; j < 5; j++) { ary[i][5] += ary[i][j]; } } // 열의 합계 for (i =..