Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 분할정복
- 다시
- 다이나믹 프로그래밍
- 수학
- 투포인터
- 자료구조
- MST
- GROUP BY
- DFS
- 누적합
- 트리
- 해시
- 시뮬레이션
- 그래프 이론
- 에라토스테네스의 체
- 크루스칼
- 재귀
- 구현
- 우선순위큐
- 그리디
- join
- 플로이드-워셜
- 다이나믹프로그래밍
- 다익스트라
- 그래프 탐색
- 백트래킹
- 브루트포스
- 서브쿼리
- BFS
- DP
Archives
- Today
- Total
기록하고 까먹지 말기
과제8 - Pointer_Array (1 ~ 5) 본문
과제 7의 마지막 문제와 같이 array의 element를 포인터를 사용해 출력하는 문제다.
#include <stdio.h>
int main(){
int arr[5]; // declaring and initializing an int array length 5
int i=0;
int* ptr = arr; // declaring pointer pointing arr
for(i=0; i<5; i++){
*ptr = i + 3; // accessing the array element based on an operation with pointer
printf("%d value in the ith array : %d\n", i, *ptr); // printing output
ptr++; // increasing pointer
}
return 0;
}
기본 array의 element값은 모두 0으로 초기화되기 때문에 *ptr = i + 3;을 통해 샘플의 아웃풋 결과를 도출하였다.
그리고 *ptr을 통해 포인팅하는 메모리가 갖고 있는 값을 출력하였다.
출력 이후 다음 메모리를 가리키기 위해 ptr++;
두 수를 입력받고 두 수의 합을 구하되 이를 포인터로 해결하는 문제다.
#include <stdio.h>
int main(){
int a, b; // declaring 2 variables
int* aptr = &a; // declaring 2 pointers pointing each a and b
int* bptr = &b;
// entering numbers a and b with pointers
printf("Enter any two numbers: ");
scanf("%d %d", aptr, bptr);
int sum = *aptr + *bptr; // arithmetic operation with pointer
printf("Sum = %d", sum); // printing output
return 0;
}
각각 a, b를 가리키는 포인터 변수를 선언하고 sum을 초기화 및 aptr, bptr이 가리키는 메모리의 값을 더하고 이를 출력함으로써 문제를 해결하였다.
포인터를 통해 swap하는 문제다.
#include <stdio.h>
void swap(int* a, int* b){ // declaring function swapping two variables
// swapping with pointers
int temp = *a;
*a = *b;
*b = temp;
return;
}
int main(){
// declaring 2 variables and entering value from user
int n1, n2;
printf("Enter two numbers: ");
scanf("%d %d", &n1, &n2);
// printing values of num1, and num2 before swapping
printf("Before swapping in main nValue of num1 = %d\n", n1);
printf("Value of num2 = %d\n", n2);
swap(&n1, &n2); // call by referene
// printing swapped values of num1 and num2 after swapping
printf("\nAfter swapping in main nValue of num1 = %d\n", n1);
printf("Value of num2 = %d\n", n2);
printf("\nAfter swapping in main nValue of num1 = %d\n", n1);
printf("Value of num2 = %d\n", n2);
return 0;
}
swap함수에 인자를 전달할 때는 지역변수화를 막기 위해 n1과 n2의 주소값을 전달함으로써 메모리에 직접 접근하여 값을 swap하는 작업을 한다는 것을 명심해야 한다.
Q3의 swap하는 과정을 array를 통해 반복적으로 행하는 문제다.
#include <stdio.h>
#define MAX_SIZE 100 // Maximum array size
// declaring swapping function
void swap(int* aptr, int* bptr, int len){
int i=0;
int temp = 0;
for(i=0; i<len; i++){
// logic to swap two arrays with pointers
*aptr ^= *bptr;
*bptr ^= *aptr;
*aptr ^= *bptr;
*aptr++; // increasing address
*bptr++;
}
return;
}
int main(){
int n, i; // declaring and input size of array
int a[MAX_SIZE] = {0, }; // declaring arrays with maximum size
int b[MAX_SIZE] = {0, };
printf("Enter size of array: ");
scanf("%d", &n);
// getting inputs n elements in 2 array from user
printf("Enter %d elements in source array: ", n);
for(i=0; i<n; i++){
scanf("%d", &a[i]);
}
printf("Enter %d elements in destination array: ", n);
for(i=0; i<n; i++){
scanf("%d", &b[i]);
}
printf("\n\n");
// printing values of elements before swapping
printf("Source array before swapping: ");
for(i=0; i<n; i++){
printf("%d, ", a[i]);
}
printf("\n");
printf("Destination array before swapping: ");
for(i=0; i<n; i++){
printf("%d, ", b[i]);
}
printf("\n\n");
// swap with function
swap(a, b, n);
// printing output of swapped array
printf("Source array after swapping: ");
for(i=0; i<n; i++){
printf("%d, ", a[i]);
}
printf("\n");
printf("Destination array after swapping: ");
for(i=0; i<n; i++){
printf("%d, ", b[i]);
}
return 0;
}
이전에 배웠던 xor 연산자 ^를 통해 swap을 하고 싶어 temp 변수를 만들지 않고 위와 같이 행하였다.
len의 경우 for문의 한계치를 정하기 위해 인자로써 사용하였다.
array size와 그 element 값을 입력받고 출력하는 문제이다.
#include <stdio.h>
#define MAX_SIZE 100 // Maximum array size
int main(){
// declaring variabels, array, and pointer
int n, i;
int arr[MAX_SIZE] {0, };
int* ptr= arr; // pointing array
printf("Enter size of array: "); // inputs size of array from user
scanf("%d", &n);
printf("Enter elements in array:\n"); // inputs elements in array from user
for(i=0; i<n; i++){
scanf("%d", &arr[i]);
}
// printing output
printf("Array elements: ");
for(i=0; i<n; i++){
printf("%d, ", *ptr); // printing elements with pointer
ptr++; // going next element's memory address
}
return 0;
}
'전공 > C' 카테고리의 다른 글
과제9 - Pointer Dynamic (1 ~ 5) (0) | 2021.06.22 |
---|---|
과제8 - Pointer Array (6 ~ 10) (0) | 2021.06.22 |
과제7 - Array (1 ~ 4) (0) | 2021.06.22 |
Mid Coding Test (0) | 2021.06.22 |
과제 6 - Function (6 ~ 9) (0) | 2021.06.22 |