반응형
11. 2*3 행렬 A와 3 * 4 행렬 B를 곱한 결과인 2 * 4 행렬 C를 구하여 다음과 같이 출력하시오.
#include <stdio.h>
#define M 2
#define N 3
#define O 4
int main()
{
int a[M][N] = { {1,2,3}, {4,5,6} };
int b[N][O] = { {3,4,5,6}, {1,2,4,3}, {4,2,6,1} };
int c[M][O] = { 0 };
int i, j, k;
for (i = 0; i < M; i++) {
for (j = 0; j < O; j++) {
for (k = 0; k < N; k++) {
c[i][j] += a[i][k] * b[k][i];
}
}
}
for (i = 0; i < M; i++) {
printf("[");
for (j = 0; j < O; j++) {
printf(" %d", c[i][j]);
}
printf(" ]\n");
}
return 0;
}
c[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0]
c[0][1] = a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1]
c[0][2] = a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2]
c[0][3] = a[0][0] * b[0][3] + a[0][1] * b[1][3] + a[0][2] * b[2][3]
배열 c[i][j]
가 만들어지는 과정은 위와 같다. 곱한 값을 더하는 과정은 k
를 제어변수로 하는 반복문에서 실행했다. 보이는대로 첨자를 넣어주면 된다.
12. 10개 문항이 있는 학생 10명의 시험 답안지로부터 채점을 한 후 결과를 다음과 같이 출력하시오. 학생 10명의 시험 답안지는 다음과 같이 2차원 배열을 선언하면서 초기화한다.
#include <stdio.h>
#define STUDENT 10
#define N 10
int main()
{
int paper[STUDENT][N] = {
{1,3,2,3,4,2,3,1,4,3}, {1,2,2,2,4,2,3,1,4,2},
{4,3,2,3,4,2,3,1,4,2}, {1,3,2,2,4,3,3,4,4,2},
{1,3,2,3,4,2,3,3,4,1}, {1,1,2,4,4,3,3,2,4,3},
{1,3,2,3,4,2,3,1,4,2}, {1,3,2,3,3,2,3,1,4,2},
{2,3,3,3,3,2,4,1,4,2}, {3,4,4,2,4,1,2,1,4,2}
};
int answer[N] = { 1,3,2,3,4,2,3,1,4,2 };
int score[STUDENT] = { 0 };
int rank[STUDENT];
int i, j;
int sum;
printf("문항별 채점 결과\n\n");
printf("==================================================\n");
printf("문항 ");
for (i = 1; i <= N; i++) {
printf("%2d ", i);
}
printf(" 점수\n");
printf("==================================================\n");
//정오표 출력
for (i = 0; i < STUDENT; i++) {
sum = 0;
printf("%2d번 ", i + 1);
for (j = 0; j < N; j++) {
if (paper[i][j] == answer[j]) {
printf("O ");
sum++;
}
else {
printf("X ");
}
}
score[i] = sum;
printf("%2d점\n", sum);
}
printf("==================================================\n\n");
printf("정렬 및 석차 \n");
printf("================\n");
printf("번호 점수 석차\n");
printf("================\n");
//맞은 개수 내림차순으로 정렬
int order[N] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int temp, index, index2;
char swap;
for (i = 1; i < N; i++) {
swap = 'N';
for (j = 0; j < N - i; j++) {
index = order[j];
index2 = order[j + 1];
if (score[index] < score[index2]) {
temp = order[j];
order[j] = order[j + 1];
order[j + 1] = temp;
swap = 'Y';
}
}
if (swap == 'N') break;
}
//순위 매겨서 석차 출력
for (i = 0; i < STUDENT; i++) {
rank[i] = 1;
index = order[i];
for (j = 0; j < STUDENT ; j++) {
if (score[index] < score[j]) {
rank[i]++;
}
}
index = order[i];
printf("%2d번 %2d점 %2d등\n", index + 1, score[index], rank[i]);
}
printf("================\n");
return 0;
}
번호, 점수, 석차끼리 연결되어야 하므로 점수 정렬은 10번에서 사용한 알고리즘을 이용했다.
반응형
'프로그래밍 > C, C++' 카테고리의 다른 글
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 8 (1,2,3,4,5) (0) | 2020.09.12 |
---|---|
(C언어) 배열과 함수, 배열과 포인터 (0) | 2020.09.10 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 7(6, 7, 8, 9, 10) (0) | 2020.08.28 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 7(1, 2, 3, 4, 5) (0) | 2020.08.25 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 6 (11, 12, 13) (0) | 2020.08.04 |