2.
const : 변수의 자료형 앞에 붙어 상수화시킨다.
포인터 연산 : +,-,++,--만 가능. 포인터가 가리키는 변수의 값을 바꾼다.
a[i] 와 *(a+i) 는 같다.
const data_type * name : || 가리키는 대상의 값을 직접 변경할 수는 없다. || 가리키는 대상을 바꿀 수 있다. ||
data_type const * name : || 가리키는 대상의 값을 직접 바꿀 수 있다. || 가리키는 대상을 바꿀 수 없다. ||
const data_type const * name : 가리키는 대상의 값도, 가리키는 대상도 바꿀 수 없다.
2차원 배열 : data_type name [][]
2차원 배열의 연산 : arr [m][n] + 1 과 arr [m][n+1]은 같다. (arr [m][n] + 1 하면 sizeof(data_type) 만큼 넘어간다)
void* malloc (num) : num만큼의 크기의 메모리를 할당하는 것.(void포인터면 나중에 다른 타입의 포인터로 바꿔야 한다)
free(포인터이름) : 메모리 할당을 해제한다.
3.
#include<stdio.h>
#pragma warning (disable : 4996)
int main(void)
{
int direction;//방향 : 오른쪽으로 한칸 가려면 1, 왼쪽으로 한칸 가려면 -1
int i = 0; // 현위치
int house[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };// 집: 차례대로 10채
int arr[10]; // 줄 선물 할당 수
int present = 100; // 선물 수: 100개
int paper[10] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 };//원래 줘야할 선물 수
int num = 0;
for (; (house[0] != -1) || (house[1] != -1) || (house[2] != -1) || (house[3] != -1) || (house[4] != -1) || (house[5] != -1) || (house[6] != -1) || (house[7] != -1) || (house[8] != -1) || (house[9] != -1);)
{
for (; present != 0;)
{
printf("현재 위치는 %d번째 집입니다. \n", i + 1);
printf("오른쪽에 있는 다음 칸으로 이동하려면 1을, 왼쪽에 있는 다음 칸 이동하려면 -1을, 계속 여기 있으려면 0을 눌러 enter키를 눌러주세요. \n(만약 틀려서 수정할 곳이 1번 째 집이 아니면 +1을 눌러주세요) \n");
scanf("%d", &direction); //어디로 갈지 방향 지정
if (i == 0 && direction == -1) // 0이나 9에서 넘어갈 경우에 대한 대비
i = 9;
else if (i == 9 && direction == 1)
i = 0;
else
i += direction;
for (; house[i] == -1;)
{
i += direction;
}
printf("%d번째 집입니다. 지금 가지고 있는 선물은 %d개입니다. 얼마나 주시겠습니까? \n", i + 1, present); // 현재 위치한 집에 선물 할당
scanf("%d", &arr[i]);
house[i] += arr[i]; // 현재 집에 있는 선물의 총 개수
present -= arr[i]; //남은 선물 수
printf("현재 %d번째 집에는 %d개의 선물이 있습니다. \n", i + 1, house[i]);
printf("남은 선물 수: %d \n \n \n", present);
if (present < 0) //선물이 모자랄 경우
{
printf("주기 위한 선물이 모자랍니다. 이전 상태로 복구합니다. \n \n \n");
house[i] -= arr[i];
present += arr[i];
}
}
printf("각 집에 할당된 선물의 수가 맞는지 확인하겠습니다. \n");
for (; num < 10;)
if (paper[num] == house[num])
{
house[num] = -1; num ++; //1번째 집
}
else
{
switch (house[num])
{
case -1:
{
num ++;
break;
}
default:
{
printf("%d번째 집에는 줘야할 선물 수와 가진 선물 수가 다릅니다. \n", num + 1);
present += house[num];
house[num] = 0;
num++;
}
}
}
i = 0;
num = 0;
printf("\n\n\n");
}
printf("모든 집에 각각 알맞은 수의 선물을 보냈습니다. \n");
return 0;
}