출처 | DO IT 자료구조와 함께하는 알고리즘 입분
배열과 포인터
p는 a를 가리키고 있고 a[3]에 접근하는 식을 구해라 라고 가정하면,
배열의 각 요소에 접근하는 식(*)
a[i], *(a+i), p[i], *(p+i)
아래 4개의 식은 배열의 각 요소를 가리키는 포인터(&)
&a[i], a+i, &p[i], P+i 같은 의미다.
헤더파일 정리 : <stddef.h> , <stdio.h>, <stdlib.h>, <stlib.h>, <time.h>
max = a[0];
if(a[1] > max) max = a[1];
if(a[2] > max) max = a[2];
요소의 개수가 3이면 if문 2개를 작성한다.
계속 이어나가면 if문은 n-1개 작성한다.
정리하면,
max = a[0];
for(int i = 0; i < n; i++)
{
if(a[i]>max) max = a[i];
}
//배열 요소의 최댓값을 구하는 함수
#include <stdio.h>
//const 함수는 값을 고정시키는 문법이다. 변수의 초기값을 변경할 수 없게 만든다.
int max(const int a[], int n) // int *a[0] = age
{
int i;
int max = a[0];
for (int i = 0; i < n; i++)
{
if (a[i] > max) max = a[i];
}
return max;
}
int main()
{
int i, * age, number;
printf(" 사람 수를 입력하세요 : ");
scanf_s("%d", &number);
age = calloc(number, sizeof(int));
printf("%d 사람의 나이를 입력하세요 : \n", number);
for (int i = 0; i < number; i++)
{
printf("age[%d] : ", i);
scanf_s("%d", age + i);
}
printf("최댓값은 %d입니다.\n", max(age, number));
free(age);
}
다음은 난수에 대해 알아보겠다.
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int maxof(const int a[], int n)
{
int i;
int max = a[0];
for (int i = 0; i < n; i++)
{
if (a[i] > max) max = a[i];
}
return max;
}
int main()
{
int* age, i, number;
printf("사람 수 : ");
scanf_s("%d", &number);
age = calloc(number, sizeof(int));
srand(time(NULL));
for (i = 0; i < number; i++)
{
age[i] = 100 + rand() % 90;
printf("age[%d] = %d\n", i, age[i]);
}
printf("최댓값은 %d입니다. \n", maxof(age, number));
free(age);
return 0;
}
※ 참고
난수의 생성단계를 요악했다.
<결과>
난수의 생성과 관련된 예제를 보겠다. 2개의 난수를 생성해보자.
#include <stdio.h>
#include <stdlib.h>
x = rand();
y = rand();
printF(" x 값은 %d값이고, y값은 %d입니다.", x, y);
srand(50);라고 seed의 값을 50으로 설정
1. rand함수가 seed의 값을 기준으로 값을 정한다.
2. 이런 문제를 해결하기 위해 srand 함수는 매개변수가 (random) 임의의 난수여야한다.
3. 대표적인 방법은 srand 함수에 time 현재 시간의 값을 주는 방법이다.
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
srand(time(NULL));
x = rand();
y = rand();
printf("x 값은 %d이고 y값은 %d이다.\n", x, y);
다음 시간에는 배열의 요소를 역순으로 출력하는 예제를 살펴보겠다.