반응형
6. 5번의 프로그램에서 달의 일수가 30일인 달의 수를 다음과 같이 출력하시오. |
#include <stdio.h>
int main(void)
{
//첨자 번호가 월과 일치하도록 첫 요소는 0으로 초기화
int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int count = 0;
printf("12달 중 30일까지 있는 달은");
for (int i = 0; i < 13; i++) {
if (days[i] == 30) {
printf(" %d,", i);
count++;
}
}
printf("\b ");
printf("총 %d달입니다.", count);
return 0;
}
7. 행렬의 덧셈 결과를 다음과 같이 출력하도록 [프로그램 7-7]을 수정하시오. |
#include <stdio.h>
#define M 2
#define N 3
int main(void)
{
int A[M][N], B[M][N], C[M][N];
int i, j;
//행렬 A 입력
printf("\n행렬 A입력 \n");
for (i = 0; i < M; i++)
for (j = 0; j < N; j++) {
printf("%d행 %d열? ", i + 1, j + 1);
scanf("%d", &A[i][j]);
}
//행렬 B 입력
printf("\n행렬 B입력 \n");
for (i = 0; i < M; i++)
for (j = 0; j < N; j++) {
printf("%d행 %d열? ", i + 1, j + 1);
scanf("%d", &B[i][j]);
}
//두 행렬의 합을 배열 C에 구하기
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
C[i][j] = A[i][j] + B[i][j];
printf("행렬 A + 행렬 B = 행렬 C\n");
for (i = 0; i < M; i++) {
printf("[");
for (j = 0; j < N; j++) {
printf("%2d ", A[i][j]);
}
printf("] ");
printf("[");
for (j = 0; j < N; j++) {
printf("%2d ", B[i][j]);
}
printf("] ");
printf("[");
for (j = 0; j < N; j++) {
printf("%2d ", C[i][j]);
}
printf("]\n");
}
return 0;
}
8. 열 가지 물질의 어는 점 15, 0, -20, -30, 50, -5, -120, -5, 10, -12를 freeze 배열에 저장한 후 가장 높은 어는 점(최댓값)을 구하여 다음과 같이 출력하시오. |
#include <stdio.h>
int main(void)
{
int freeze[] = { 15, 0, -20, -30, 50, -5, -120, -5, 10, -12 };
int i, index = 0, max = freeze[0];
printf("어는 점 목록: ");
for (i = 0; i < 10; i++)
printf("%d ", freeze[i]);
printf("\n");
printf("가장 높은 어는 점:");
for (i = 0; i < 9; i++) {
if (max < freeze[i + 1]) {
max = freeze[i + 1];
index = i + 1;
}
}
printf("freeze[%d] = %d", index, max);
return 0;
}
9. 표준편차는 각 자료들이 평균에 얼마나 근접하게 분포되어 있는지 알려주는 값으로 표준편차가 0이라면 모든 자료가 동일한 값임을 의미한다. 실행 결과와 같이 5개의 자료에 대해 표준편차를 구하여 출력하시오. x는 i째 자료의 값을, m은 n개의 자료에 대한 평균을 의미할 때 표준편차 std_D를 구하는 공식은 다음과 같다. |
#include <stdio.h>
#include <math.h>
int main(void)
{
int x[5] = { 55,21,32,47,19 };
int i;
double m,sum = 0;
for (i = 0; i < 5; i++)
sum += x[i];
m = sum / 5.0;
sum = 0;
for (i = 0; i < 5; i++)
sum += ((double)x[i] - m) * ((double)x[i] - m) / 5;
double std_D = sqrt(sum);
printf("평균: %.1lf\n", m);
printf("표준편차: %.1lf", std_D);
return 0;
}
10. [프로그램 7-9]의 학생 정보를 다음 실행결과와 같이 버블 정렬을 이용하여 이름순(가나다순)으로 출력하시오. 단, 학생 정보를 가나다순으로 출력하기 위해 이름을 저장한 name, 전화번호를 저장한 phone, 평점을 저장한 배열 grade의 내용을 직접 정렬(변경)하지 않고 다음 과정을 통해 정렬 결과를 배열 order에 저장한 후 정렬된 결과를 출력하시오. |
#include <stdio.h>
#include <string.h> // strcmp 함수를 위한 헤더 파일
#define N 10
int main()
{
char name[N][10] = { "홍길동", "이몽룡", "성춘향", "제갈공명", "주몽",
"배장화", "배홍련", "홍길동", "연흥부", "연놀부" };
char phone[N][14] = { "010-5210-1234", "010-523-1628",
"010-1235-8765", "010-345-1676", "010-5210-5463",
"010-523-7979", "010-5210-1472", "010-8255-8255",
"010-516-3483", "010-8282-8282" };
double grade[N] = { 4.2, 4.0, 3.2, 4.4, 3.7, 2.9, 4.0, 3.8, 3.2, 2.7 };
int i, j;
char swap;
printf("\n\n");
printf("=======================================\n");
printf(" 이름 전화번호 평점 \n");
printf("=======================================\n");
int order[N] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int temp, index;
for (i = 1; i < N; i++) {
swap = 'N';
for (j = 0; j < N - 1; j++) {
index = order[j];
int index2 = order[j + 1];
if (strcmp(name[index], name[index2]) > 0) {
temp = order[j];
order[j] = order[j + 1];
order[j + 1] = temp;
swap = 'Y';
}
}
if (swap == 'N') break;
}
for (i = 0; i < 10; i++)
{
index = order[i];
printf("%-10s %-14s %5.1lf \n", name[index], phone[index], grade[index]);
}
return 0;
}
책에서는 name
항목을 변경하지 않고 정렬하라 했다. 그래서 버블정렬할 때
if (strcmp(name[j], name[j+1]) > 0) {
temp = order[j];
order[j] = order[j + 1];
order[j + 1] = temp;
}
이렇게 하라고 하는데, 정렬이 되지 않는다.
홍길동과 이몽룡을 비교하여
order = {1, 0, 2, 3, 4, 5, 6, 7, 8, 9}
로 바뀌었다면,
다음엔 name
에서 [0]
과 [2]
항목을 비교해야 한다. 하지만 위 코드는 name[1]
과 name[2]
를 비교한다.
name
에 있는 항목을 비교해서 index
를 바꾸는데, name
은 절대 바뀌지 않는다. 아무리 반복해도 같은 name
배열끼리 반복해서 비교할 뿐이므로 정렬이 될 리 없다.
그래서
index = order[j];
int index2 = order[j + 1];
if (strcmp(name[index], name[index2]) > 0) {
temp = order[j];
order[j] = order[j + 1];
order[j + 1] = temp;
order
가 가지는 값을 index
에 저장하고 이 녀석들끼리 비교하였다.
홍길동과 이몽룡을 비교하여
order = {1, 0, 2, 3, 4, 5, 6, 7, 8, 9}
로 바뀌었다면,
index = order[1] = 0
, index2 = order[2] = 2
가 된다. 이제 name[0]
과 name[2]
항목을 비교할 수 있다.
반응형
'프로그래밍 > C, C++' 카테고리의 다른 글
(C언어) 배열과 함수, 배열과 포인터 (0) | 2020.09.10 |
---|---|
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 7(11, 12) (0) | 2020.08.29 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 7(1, 2, 3, 4, 5) (0) | 2020.08.25 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 6 (11, 12, 13) (0) | 2020.08.04 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 6 (7,8,9,10) (0) | 2020.08.01 |