728x90
<Lab 04 문제 유형 요약>
- Program 1 : 배열의 크기, sizeof()
- Program 2 : 반복문으로 배열 복사
- Program 3 : 반복문으로 배열 같은지 검사
- Program 4 : 배열 요소의 총합과 평균
- Program 5 : 배열 입력, 요소 빈도 검사
- Program 6 : 이차원 배열
- Program 7 : 이차원 배열, 행렬, 행렬의 곱
- Program 8 : 이차원 배열, 행렬, 행렬의 합과 차
Program 1
다음을 참고로 배열을 초기화하고 반복문을 사용하여 배열의 모든 원소를 출력하는 프로그램을 작성하시오.
- 배열 double degree[] = {-5.34, 3.67, 19.76, 28.76, 35.63};
- 배열의 크기를 계산( sizeof 함수 이용)하여 변수 size에 저장하고 반복문에서 사용
#include <stdio.h>
int main()
{
double degree[] = { -5.34, 3.67, 19.76, 28.76, 35.63 };
int size = sizeof(degree) / sizeof(double);
for (int i = 0; i < size; i++)
{
printf("%.2lf ", degree[i]);
}
printf("\n");
return 0;
}
Program 2
다음과 같이 일차원 배열을 복사하여 결과를 알아보는 프로그램을 작성하시오.
- int a[] = { 4, 7, 9, 3, 6 };
- int b[] = { 10, 20, 30, 40, 50, 60 };
- 배열 a의 첫 번째 원소부터 n번째 원소까지 같은 순서대로 배열 b로 값을 복사
- 결과인 배열 b를 모두 출력
#include <stdio.h>
int main()
{
int i = 0;
int a[] = { 4,7,9,3,6 };
int b[] = { 10,20,30,40,50,60 };
int size_a = sizeof(a) / sizeof(int);
int size_b = sizeof(b) / sizeof(int);
for (i = 0; i < size_a; i++)
{
b[i] = a[i];
}
for (i = 0; i < size_b; i++)
{
printf("%d ", b[i]);
}
printf("\n");
return 0;
}
Program 3
다음과 같이 일차원 배열의 동등함을 검사하여 그 결과를 알아보는 프로그램을 작성하시오. (배열 a와 b1, b2, b3에 대해 각각 검사하시오(함수 사용하지 말고 해볼 것))
- int a[] = { 4, 7, 9, 3, 6 };
- int b1[] = { 4, 7, 9, 3, 6 }; // 같은 경우
- int b2[] = { 4, 7, 9, 3, 7 }; // 마지막 원소가 다른 경우
- int b3[] = { 4, 7, 9, 3, 6, 8}; // 원소의 개수가 다른 경우
#include <stdio.h>
int main()
{
int i = 0, dif = 0;
int a[] = { 4, 7, 9, 3, 6 };
int b1[] = { 4, 7, 9, 3, 6 }; // 같은 경우
int b2[] = { 4, 7, 9, 3, 7 }; // 마지막 원소가 다른 경우
int b3[] = { 4, 7, 9, 3, 6, 8 }; // 원소의 개수가 다른 경우
int size_a = sizeof(a) / sizeof(int);
// a - b1
printf("a[] : 4 7 9 3 6\n");
printf("b1[] : 4 7 9 3 6\n");
if (size_a != sizeof(b1) / sizeof(int)) {
dif = 1;
} else {
for (i = 0; i < size_a; i++)
{
if (a[i] != b1[i])
{
dif = 1; break;
}
}
}
if (dif == 0) {
printf("두 배열은 같다.\n\n");
} else {
printf("두 배열은 다르다.\n\n");
}
dif = 0;
// a - b2
printf("a[] : 4 7 9 3 6\n");
printf("b2[] : 4 7 9 3 7\n");
if (size_a != sizeof(b2) / sizeof(int)) {
dif = 1;
}
else {
for (i = 0; i < size_a; i++)
{
if (a[i] != b2[i])
{
dif = 1; break;
}
}
}
if (dif == 0) {
printf("두 배열은 같다.\n\n");
}
else {
printf("두 배열은 다르다.\n\n");
}
dif = 0;
// a - b3
printf("a[] : 4 7 9 3 6\n");
printf("b3[] : 4 7 9 3 6 8\n");
if (size_a != sizeof(b3) / sizeof(int)) {
dif = 1;
}
else {
for (i = 0; i < size_a; i++)
{
if (a[i] != b3[i])
{
dif = 1; break;
}
}
}
if (dif == 0) {
printf("두 배열은 같다.\n\n");
}
else {
printf("두 배열은 다르다.\n\n");
}
dif = 0;
return 0;
}
Program 4
배열을 사용하여 98.56, 78.62, 78.69, 89.32, 95.29를 초기화하여 출력하고 배열의 총합과 평균을 구하여 출력하는 프로그램을 작성하시오.
#include <stdio.h>
int main()
{
double set[] = { 98.56, 78.62, 78.69, 89.32, 95.29 };
int size = sizeof(set) / sizeof(double);
double sum = 0;
for (int i = 0; i < size; i++)
{
sum += set[i];
}
printf("배열의 합 = %.2lf\n", sum);
printf("평균 = %.2lf\n", sum / size);
return 0;
}
Program 5
0에서 9까지의 정수 중에서 10개의 수를 입력 받아 가장 많이 입력 받은 빈도 수는 무엇이고, 몇 번인지 출력하는 프로그램을 작성하시오.
#include <stdio.h>
int main()
{
int set[10] = { 0, };
int cnt = 0, temp = -1, freq = -1;
printf("0에서 9까지의 정수를 입력하시오.\n");
while (cnt != 10) {
scanf("%d", &temp);
if (temp >= 0 && temp <= 9) {
set[temp]++;
cnt++;
}
else {
printf("다시입력(0~9) :\n");
}
}
cnt = 0;
for (int i = 0; i < 10; i++)
{
if (set[i] > cnt) {
cnt = set[i];
freq = i;
}
}
printf("\n0~9 중 가장 많이 나온 수는 %d이고, %d번 나왔습니다.\n", freq, cnt);
return 0;
}
Program 6
다음 [C 프로그래밍] 점수를 이차원 배열에 저장하고, 각 학생의 합과 평균을 구하여 아래와 같이 출력하는 프로그램을 작성하시오.
중간 | 퀴즈1 | 퀴즈2 | 기말 | |
이현수 | 97 | 90 | 88 | 95 |
김기수 | 76 | 89 | 75 | 83 |
김범용 | 60 | 70 | 88 | 82 |
장기태 | 83 | 89 | 92 | 85 |
이명수 | 75 | 73 | 72 | 78 |
#include <stdio.h>
int main()
{
enum _name { 이현수, 김기수, 김범용, 장기태, 이명수 } name;
double score[5][6] = { {97, 90, 88, 95, 0, 0},
{76, 89, 75, 83, 0, 0},
{60, 70, 88, 82, 0, 0},
{83, 89, 92, 85, 0, 0},
{75, 73, 72, 78, 0, 0} };
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 4; j++)
{
score[i][4] += score[i][j];
}
score[i][5] = score[i][4] / 4;
}
printf("=============================================\n");
printf(" 이름 중간 퀴1 퀴2 기말 합계 평균 \n");
printf("=============================================\n");
printf(" 이현수 ");
for (int k = 0; k < 5; k++) printf("%6.0lf", score[이현수][k]);
printf("%7.2lf\n", score[이현수][5]);
printf(" 김기수 ");
for (int k = 0; k < 5; k++) printf("%6.0lf", score[김기수][k]);
printf("%7.2lf\n", score[김기수][5]);
printf(" 김범용 ");
for (int k = 0; k < 5; k++) printf("%6.0lf", score[김범용][k]);
printf("%7.2lf\n", score[김범용][5]);
printf(" 장기태 ");
for (int k = 0; k < 5; k++) printf("%6.0lf", score[장기태][k]);
printf("%7.2lf\n", score[장기태][5]);
printf(" 이명수 ");
for (int k = 0; k < 5; k++) printf("%6.0lf", score[이명수][k]);
printf("%7.2lf\n", score[이명수][5]);
printf("=============================================\n");
return 0;
}
Program 7
다음과 같이 3 x 2와 2 x 3의 두 행렬 a, b에서 행렬의 곱 c를 구하는 프로그램을 작성하시오.
3 | 5 |
4 | 2 |
5 | 7 |
3 | 8 | 2 |
2 | 4 | 6 |
#include <stdio.h>
int main()
{
int mat1[3][2] = {3, 5, 4, 2, 5, 7};
int mat2[2][3] = {3, 8, 2, 2, 4, 6};
int result = 0;
printf("행렬 a\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
printf("%d ", mat1[i][j]);
}
printf("\n");
}
printf("\n행렬 b\n");
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ", mat2[i][j]);
}
printf("\n");
}
printf("\n행렬 c = a x b\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 2; k++)
{
result += mat1[i][k] * mat2[k][j];
}
printf("%d ", result);
result = 0;
}
printf("\n");
}
return 0;
}
Program 8
다음 4 x 3의 행렬에서 두 행렬 x 와 y의 합과 차를 구하는 프로그램을 작성하시오.
- 배열에서 같은 첨자의 행과 열에 대응하는 원소의 합과 차를 구한다
- 행렬 x와 y는 아래 값들로 초기화 된다.
- 합과 차를 구하는 연산에서 배열 포인터(px와 py)를 정의하여 사용 : int (*px)[COLS] = x; int (*py)[COLS] = y; // COLS == 3, ROWS == 4
- 합을 구할 때는 배열 포인터의 px[i] 와 py[i] ([ ] 하나만으로 원소 접근) 사용
- 차를 구할 때는 배열 포인터의 px 와 py ([ ] 사용 없이 원소 접근) 사용
46 | 79 | 78 |
35 | 57 | 28 |
43 | 68 | 76 |
56 | 78 | 98 |
78 | 35 | 99 |
85 | 82 | 34 |
58 | 69 | 29 |
34 | 59 | 35 |
#include <stdio.h>
#define COLS 3
int main()
{
int i, j;
int x[4][3] = { 46, 79, 78, 35, 57, 28, 43, 68, 76, 56, 78, 98 };
int y[4][3] = { 78, 35, 99, 85, 82, 34, 58, 69, 29, 34, 59, 35 };
int(*px)[COLS] = x; int(*py)[COLS] = y;
printf("행렬 x\n");
for (i = 0; i < 4; i++)
{
for (j = 0; j < 3; j++)
{
printf("%4d ", x[i][j]);
}
printf("\n");
}
printf("\n행렬 y\n");
for (i = 0; i < 4; i++)
{
for (j = 0; j < 3; j++)
{
printf("%4d ", y[i][j]);
}
printf("\n");
}
printf("\nx + y\n");
for (i = 0; i < 4; i++)
{
for (j = 0; j < 3; j++)
{
printf("%4d ", *(px[i] + j) + *(py[i] + j));
}
printf("\n");
}
printf("\nx - y\n");
for (i = 0; i < 4; i++)
{
for (j = 0; j < 3; j++)
{
printf("%4d ", *(*(px + i) + j) - *(*(py + i) + j));
}
printf("\n");
}
return 0;
}
728x90
'College Computer Science > C Language' 카테고리의 다른 글
[C 프로그래밍 실습] Report 02 (0) | 2021.01.02 |
---|---|
[C 프로그래밍 실습] 함수 1 (Lab 05) (0) | 2020.11.21 |
[C 프로그래밍 실습] Report 01 (0) | 2020.11.04 |
[C 프로그래밍 실습] 반복 / 포인터 기초 (Lab 03) (0) | 2020.10.27 |
[C 프로그래밍 실습] 연산자 / 조건문 (Lab 02) (0) | 2020.10.14 |
댓글