C언어 : 배열 예제(C/C++)

지환·2022년 1월 5일
0

C언어

목록 보기
13/37
post-thumbnail

학생 평균을 구하는 프로그램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;



}

<결과>

  1. 소수 찾는 프로그램
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;
}
  • 따라서, 위와 같이 index 를 하나 더 증가시킨 후 prime[index] 에 guess 를 추가 시켜 준다. 만일 index 가 999 가 된다면 배열이 꽉 찼단 뜻이 되므로 break 를 해서 for(;;) 를 빠져 나가게 된다.
profile
아는만큼보인다.

0개의 댓글