예시로 먼저 학습하기

 

모든 값의 순위 저장하기

#include <stdio.h>
#pragma warning(disable: 4996)
#pragma warning(disable: 6031)
#define NUM_OF_SCORE 5

int main()
{
	int scores[NUM_OF_SCORE] = { 97, 85, 89, 72, 96 };
	int ranks[NUM_OF_SCORE] = { 0 }, i, target;

	for (target = 0; target < NUM_OF_SCORE; target++)
	{
		ranks[target] = 1;
		for (i = 0; i < NUM_OF_SCORE; i++)
		{
			if (scores[target] < scores[i])
			{
				ranks[target]++;
			}
		}
	}

	for (target = 0; target < NUM_OF_SCORE; target++)
	{
		printf("%d번째: ", target + 1);
		printf("%d점의 순위: ", scores[target]);
		printf("%d위\n", ranks[target]);
	}

	return 0;
}

 

여기서는 순위를 매겨야하기에 ranks[NUM_OF_SCORE] = {0}을 생각해낼 수 있어야 하는 거 같다.

 

이걸을 먼저 선언하고 초기화할 수 있어야 똑바로 순위를 매겨서 출력을 할 수 있기 때문이다. 

 

 

2차원 배열에 저장하기 

 

2차원 배열 선언 및 참조

2차원 배열 선언

int scores[3][5];
double rates[10][15];

 

 

2차원 배열 초기화

int scores[3][5] = {{97, 85, 89, 72, 96}, {96, 94, 90, 88, 89}, {80, 85, 79, 70, 82}}

 

int scores[][5] = {{97, 85, 89, 72, 96}, {96, 94, 90, 88, 89}, {80, 85, 79, 70, 82}}

 

2차원 배열에서는 초기화 값이 있을 때 행수만 생략이 가능하다. 권장하지 않는다. 

 

또 다음과 같이 단일 중괄호를 사용하여 초기화할 수 있으나 권장하지 않는다.

int scores[3][5] = {97, 85, 89, 72, 96, 96, 94, 90, 88, 89, 80, 85, 79, 70, 82}

 

 

주의! 

기본변수는 선언 후 필요할 때마다 변수의 값을 대입 연산자를 사용하여 수정할 수 있으나 

배열은 선언 이후에 중괄호를 사용하여 변경할 수 없다. 

 

즉 아래와 같이 사용해서는 안된다!!!!

int scores[3][5]

scores = {{97, 85, 89, 72, 96}, {96, 94, 90, 88, 89}, {80, 85, 79, 70, 82}}
scores[3][5] = {{97, 85, 89, 72, 96}, {96, 94, 90, 88, 89}, {80, 85, 79, 70, 82}}

// scores 또는 scores[3][5]에 대입연산자를 사용하여 일괄적으로 할당할 수 없다!

 

 

2차원 배열 원소 참조

int scores[3][5] = {{97, 85, 89, 72, 96}, {96, 94, 90, 88, 89}, {80, 85, 79, 70, 82}}

//원소 참조//
scores[0][0] // 97로 나옴.//

 

 

 

2차원 배열 입력 및 출력

#include <stdio.h>
#pragma warning(disable: 4996)
#pragma warning(disable: 6031)
#define NUM_OF_STD 3
#define NUM_OF_SBJ 5

int main()
{
	int scores[NUM_OF_STD][NUM_OF_SBJ], i, j;

	for (i = 0; i < NUM_OF_STD; i++)
	{
		printf("%d번째 학생의 %d과목 성적입력: ", i + 1, NUM_OF_SBJ);
		for (j = 0; j < NUM_OF_SBJ; j++)
		{
			scanf("%d", &scores[i][j]); //항상 주의! "%d  "을 하면 안된다!!//
		}
		
	}

	for (i = 0; i < NUM_OF_STD; i++)
	{
		printf("%d번째 학생의 성적: ", i + 1);

		for (j = 0; j < NUM_OF_SBJ; j++)
		{
			printf("%5d", scores[i][j]);
		}
	}

	return 0;
}

 

 

 

과목 합계 및 평균

#include <stdio.h>

#define NUM_OF_STD 3
#define NUM_OF_SBJ 5
int main()
{
	int scores[NUM_OF_STD][NUM_OF_SBJ] = {
				{97, 85, 89, 72, 96},
				{96, 94, 90, 88, 89},
				{80, 85, 79, 70, 82}
	};
	int std, sbj, total;
	int std_tot; //한 학생의 성적 합계를 저장하기 위한 변수

	printf("번호  국어  영어  수학  물리  과학  총점   평균\n");
	printf("==============================================\n");

	//성적 출력하고 합계 구하기
	total = 0;
	for (std = 0; std < NUM_OF_STD; std++) {
		printf("%d번 [", std + 1);
		std_tot = 0;  //성적의 합계를 초기화
		for (sbj = 0; sbj < NUM_OF_SBJ; sbj++) {
			std_tot += scores[std][sbj]; //성적을 누적
			total += scores[std][sbj];
			printf("%5d ", scores[std][sbj]);
		}
		//tot, NUM_OF_SBJ가 정수이므로 (double)로 형변환하여 평균 구하기
		printf(" ] %5d %5.1f\n", std_tot, (double)std_tot / (double)NUM_OF_SBJ);
	}
	printf("==============================================\n");


	printf("전체 총점 %5d점\n", total);
	printf("평균 %.1lf점", (double)total / (NUM_OF_SBJ * NUM_OF_STD));

	return 0;
}

 

 

보너스

#include <stdio.h>
#pragma warning(disable: 4996)
#pragma warning(disable: 6031)

#define NUM_OF_STD 3
#define NUM_OF_SBJ 5
int main()
{
	int std, sbj, sum_sbj;
	int scores[NUM_OF_STD][NUM_OF_SBJ];
	int tot_sbj, total = 0;
	double avg_sbj;

	for (std = 0; std < NUM_OF_STD; std++)
	{
		printf("std %d: ", std + 1);
		for (sbj = 0; sbj < NUM_OF_SBJ; sbj++)
		{
			scanf("%d", &scores[std][sbj]);
		}
	}

	printf("\n");

	for (std = 0; std < NUM_OF_STD; std++)
	{
		sum_sbj = 0;
		printf("std %d: ", std + 1);
		for (sbj = 0; sbj < NUM_OF_SBJ; sbj++)
		{
			printf("%5d", scores[std][sbj]);
			sum_sbj += scores[std][sbj];
		}
		
		printf("|%5d|%5.1lf\n", sum_sbj, (double) sum_sbj / NUM_OF_SBJ);
	}


	printf("tot: ");
	for (sbj = 0; sbj < NUM_OF_SBJ; sbj++)
	{
		tot_sbj = 0;
		for (std = 0; std < NUM_OF_STD; std++)
		{
			tot_sbj += scores[std][sbj];
		}
		total += tot_sbj;
		printf("%5d", tot_sbj);
	}
	printf("|%5d|%5.1lf\n", total, (double)total / (NUM_OF_SBJ * NUM_OF_STD));
	
	printf("avg: ");
	for (sbj = 0; sbj < NUM_OF_SBJ; sbj++)
	{
		tot_sbj = 0;
		for (std = 0; std < NUM_OF_STD; std++)
		{
			tot_sbj += scores[std][sbj];
			avg_sbj = (double)tot_sbj / NUM_OF_STD;
		}
		printf("%5.1lf", avg_sbj);
	}

	return 0;
}

 

결과창

 

'프로그래밍 > C,C++' 카테고리의 다른 글

인수 전달하는 함수  (0) 2024.05.28
인수 전달하지 않는 함수  (0) 2024.05.27
자료 배열 1 (8장)  (0) 2024.04.29
C,C++ - 제어문 (while, do~while문)  (0) 2024.04.08
C,C++ - 반복문  (0) 2024.04.03

+ Recent posts