목록전체 글 (294)
Minwoo Dev.
도전 1 길이가 4 x 4인 int형 2차원 배열을 선언하고, 모든 요소를 아래 그림의 왼쪽에 있는 형태와 동일하게 초기화하자. 그리고 배열의 요소들을 오른쪽 방향으로 90도씩 이동시켜서 그 결과를 출력하는 프로그램을 작성해보자. 참고로 배열이 변경되는 형태는 다음과 같다. 정답 #include void Turn90do(int (*arr)[4]) { int arr2[4][4]; for(int i=0;i
여자친구의 지인이 수학 문제를 파이썬으로 해결하는 방법을 어려워한다길래 승부욕이 생겨서 한번 해보았다. 문제의 내용은 아래와 같다. 근데 문제는... 영어로 된 문장들이라 처음부터 난관이었다는 것... 하지만 도움을 받아 규칙성을 찾아냈다. 우선, k가 짝수이면 -1을 곱하고, k가 홀수이면 +1을 곱한다. 즉, 짝수이면 음수, 홀수이면 양수의 값을 더한다는 말이다. k=1부터 n까지 이므로 for문을 이용하여 아래와 같이 구현하였다. for(int k=1;k
문제 18-1 문제 1 아래에서 보이는 main 함수에서 물음표 ???을 대신할 수 있는 포인터 변수를 선언해보자. int main(void) { int * arr1[5]; int *arr2[3][5]; ??? = arr1; ??? = arr2; . . . . } 참고로 이 문제는 난이도가 조금 높은 편이다. 이번 Chapter의 내용을 잘 이해한 상태에서 적절히 응용을 해서 해결해야 하는 문제이기 때문이다. 그렇다고 해서 그냥 답을 봐버리면 의미 없는 문제가 될 것이다. 고민해서 해결하자! 그러면 마음속 깊이 포인터를 정복했다는 뿌듯함이 밀려올 것이다. 정답 arr1은 int형 포인터 변수로 이루어진 배열, 즉 포인터 배열이다. 1차원 배열이고, int형 싱글 포인터 변수를 가리키므로 arr의 포인터 ..
문제 17-1 다음과 같이 두 개의 int 형 포인터 변수와 길이가 5인 int 형 배열을 선언한다. int *maxPtr; int *minPtr; int arr[5]; 그리고 MaxAndMin이란 이름의 함수를 정의하고 이를 호출하면서 위의 배열과 두 포인터 변수에 대한 정보를 저장하자. 어떠한 정보를 어떻게 전달할지는 여러분이 결정할 몫이다. 그리고 함수호출이 완료되면, 포인터 변수 maxPtr에는 가장 큰 값이 저장된 배열요소의 주소 값이, minPtr에는 가장 작은 값이 저장된 배열요소의 주소 값이 저장되어야 한다. #include void MaxAndMin(int *arr, int **maxPtr, int **minPtr) { int *max; int *min; max = &arr[0]; min..
문제 16-1 문제 1 가로의 길이가 9, 세로의 길이가 3인 int 형 2차원 배열을 선언하여 구구단 중 2단, 3단, 4단을 다음과 같이 저장하자. 그리고 제대로 저장이 되었는지 확인하기 위한 출력을 진행하는 예제를 작성해보자. #include int main(void) { int arr[3][9]; for(int i=2;i
도전 1 길이가 10인 배열을 선언하고 총 10개의 정수를 입력받아서, 홀수와 짝수를 구분지어 출력하는 프로그램을 작성해 보자. 일단 홀수부터 출력하고 나서 짝수를 출력하도록 하자. 단, 10개의 정수는 main 함수 내에서 입력 받도록 하고, 배열 내에 존재하는 홀수만 출력하는 함수와 배열 내에 존재하는 짝수만 출력하는 함수를 각각 정의해서 이 두 함수를 호출하는 방식으로 프로그램을 완성하자. #include void PrintHol(int n1[],int len) { printf("홀수 출력 : "); for(int i=0;ii&1; printf("%d",result); } printf("\n"); } int main(void) { int n = 0; scanf("%d",&n); PrintToBina..
문제 14-1 문제 1 변수 num 에 저장된 값을 제곱을 계산하는 함수를 정의하고, 이를 호출하는 main 함수를 작성해보자. 단, 여기서는 다음 두 가지 형태로 함수를 정의해야 한다. Call-by-value 기반의 SqareByValue 함수 Call-by-reference 기반의 SqareByReference 함수 #include void SquareByValue(int n) { n*=n; printf("In SquareByValue : %d\n",n); } void SquareByReference(int *m) { *m = (*m)*(*m); } int main(void) { int n=0; scanf("%d",&n); SquareByValue(n); printf("Main_SquarByValu..
문제 13-1 문제 1 길이가 5인 int형 배열 arr을 선언하고 이를 1,2,3,4,5로 초기화한 다음, 이 배열의 첫 번째 요소를 가리키는 포인터 변수 ptr을 선언한다. 그 다음 포인터 변수 ptr에 저장된 값을 증가시키는 형태의 연산을 기반으로 배열요소에 접근하면서 모든 배열요소의 값을 2씩 증가시키고, 정상적으로 증가가 이루어졌는지 확인하는 예제를 작성해보자. #include int main(void) { int arr[5] = {1,2,3,4,5}; int * ptr = &arr[0]; for(int i=0;i
문제 12-1 문제 1 아래의 예제 실행 시 변수와 포인터 변수의 관계를 그림을 그려서 설명해보자. 또한 출력의 결과도 예상해보자. #include int main(void) { int num = 10; int * ptr1 = # int * ptr2 = ptr1; (*ptr1)++; (*ptr2)++; printf("%d\n",num); return 0; } 문제 2 int 형 변수 num1과 num2를 선언과 동시에 각각 10과 20으로 초기화하고, int 형 포인터 변수 ptr1과 ptr2를 선언하여 각각 num1과 num2를 가리키게 하자. 그리고 이 상태에서 포인터 변수 ptr1과 ptr2를 이용해서 num1의 값을 10 증가시키고, num2의 값을 10 감소시키자. 이제 두 포인터 변수 ..