배열에 부족함을 많이 느껴 예제를 통해 자세히 알아보겠다.
학생 평균을 구하는 프로그램1
#include <stdio.h>
int main()
{
int arr[5]; // 5명의 학생 평균을 구하는 배열 선언
int i, ave = 0;
for (i = 0; i < 5; i++)
{
printf("%d 번째 학생의 성적은 ?", i + 1);
scanf_s("%d", &arr[i]);
} // 학생 성적을 받는 반복문
for (i = 0; i < 5; i++)
{
ave = ave + arr[i]; // 성적을 받은 값을 저장하는 반복문
}
printf("전체 학생의 평균은 : %d\n", ave / 5);
return 0;
}
학생 평균을 구하는 프로그램2
int main()
{
int arr[10];
int i, ave = 0;
for (i = 0; i < 10; i++) // 이 반복문이 의미하는 것. 학생들의 성적을 입력받는더.
{
printf("%d 번째 학생의 성적은 ?", i + 1);
// why? i+1 기존 배열 특징에 있다.
scanf_s("%d", &arr[i]);
}
for (i = 0; i < 10; i++) // 학생들의 성적을 입력받고 그것을 arr[i]에 집어넣는다.
{
ave = ave + arr[i]; //ave = ave + arr[i] 값을 통해서 . 인덱스를 돌면서
// ave = ave +arr[1]
// ave = ave +arr[2] 그 값을 ave에 저장
}
ave = ave / 10; //학생들의 평균을 구하는 값
printf("전체 학생의 평균은 : %d\n", ave);
for (i = 0; i < 10; i++) //합격 불합격 반복문을 의미한다. 인덱스 값을 돌리면서 값을 비교하기 시작한다.
{
printf("학생 %d : ", i + 1); // 학생이 몇명이 있는지 출력 arr[i](학생들의 성적) >= ave(평균) -> 합격 그게 아니면 불합격으로 처리
if (arr[i] >= ave)
printf("합격\n");
else
printf("불합격\n");
}
return 0;
}
<결과>
- 소수 찾는 프로그램
int main()
{
int guess = 5;
int prime[1000];
int index = 1;
int i, ok;
prime[0] = 2;
prime[1] = 3;
for (;;) {
ok = 0;
for (i = 0; i <= index; i++)
{
if (guess % prime[i] != 0) {
ok++;
}
else {
break;
}
}
if (ok == (index + 1)) {
index++;
prime[index] = guess;
printf("소수 : %d\n", prime[index]);
if (index == 999) break;
}
guess += 2;
}
return 0;
}
<결과>
<코드 분석>
for (i = 0; i <= index; i++)
{
if (guess % prime[i] != 0) {
ok++;
}
else {
break;
}
-만일 guess 가 prime[i] 로 나누어 떨어지지 않는다면 ok 를 1 증가한다. 그리고 나누어 떨어진다면 소수가 아니므로 바로 break 되서 루프를 빠져 나가게 된다. 만일 ok 가 prime 배열에 저장된 소수의 개수, 즉 (index + 1)과 같다면 자기 자신 미만의 모든 소수들로도 안 나누어 떨어진다는 뜻이 되므로 소수가 된다.
<코드분석2 >
if (ok == (index + 1)) {
index++;
prime[index] = guess;
printf("소수 : %d \n", prime[index]);
if (index == 999) break;
}