예시로 먼저 학습하기
모든 값의 순위 저장하기
#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 |