반응형
6. [프로그램 8-23]의 find_min 함수는 배열의 최솟값만 반환하므로 최솟값이 배열의 어느 원소에 해당하는지는 알 수 없다. 배열 원소의 첨자를 반환하는 함수 index를 정의해 이 최솟값이 배열의 어느 원소에 해당하는지 나타내도록 [프로그램 8-23]을 수정하시오. |
[프로그램 8-23]
#include <stdio.h>
#define SIZE 5
// 함수의 원형 선언
int find_min(int arr[]);
void print_arr(int arr[]);
// main 함수의 정의
int main()
{
int f[SIZE] = {3, 0, -30, -20, -1}; // 배열을 선언과 동시에 초기화하기
int min;
// 최솟값 구하기
min = find_min(f);
// 배열 내용 출력하기
printf("어는 점 목록:");
print_arr(f);
// 최솟값 출력하기
printf("\n가장 낮은 어는 점: %d \n", min);
return 0;
}
// 배열의 최솟값을 구하는 함수
int find_min(int arr[])
{
int i, min;
min = arr[0];
for (i=1; i<SIZE; i++)
{
if (arr[i] < min)
min = arr[i];
}
return min;
}
// 배열의 원소를 출력하는 함수
void print_arr(int arr[])
{
int i;
for (i=0; i<SIZE; i++)
printf("%4d", arr[i]);
}
[수정한 프로그램]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 5
// 함수의 원형 선언
int find_min(int arr[]);
void print_arr(int arr[]);
int index(int arr[], int n);
// main 함수의 정의
int main()
{
int f[SIZE] = { 3, 0, -30, -20, -1 }; // 배열을 선언과 동시에 초기화하기
int min, where;
// 최솟값 구하기
min = find_min(f);
where = index(f, min);
// 배열 내용 출력하기
printf("어는 점 목록:");
print_arr(f);
// 최솟값 출력하기
printf("\n가장 낮은 어는 점: %d \n", min);
printf("위치: %d", where + 1);
return 0;
}
// 배열의 최솟값을 구하는 함수
int find_min(int arr[])
{
int i, min;
min = arr[0];
for (i = 1; i < SIZE; i++)
{
if (arr[i] < min)
min = arr[i];
}
return min;
}
// 배열의 원소를 출력하는 함수
void print_arr(int arr[])
{
int i;
for (i = 0; i < SIZE; i++)
printf("%4d", arr[i]);
}
//배열 원소의 첨자를 반환하는 함수
int index(int arr[], int n)
{
int i;
for (i = 0; i < SIZE; i++) {
if (arr[i] == n)
return i;
}
}
7. 연도(year)와 월(month)을 입력받아 year년 month월의 마지막 일(28~31 중 1개)을 출력하는 프로그램을 작성하시오. 이때 마지막 일은 함수 last_day를 이용해 구하시오. |
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int last_day(int y, int m);
int main(void)
{
int year, month;
scanf("%d %d", &year, &month);
int res = last_day(year, month);
printf("%d", res);
return 0;
}
int last_day(int y, int m)
{
if ((m == 4) || (m == 6) || (m == 9) || (m == 11))
return 30;
else if (m == 2) {
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
return 29;
else
return 28;
}
else
return 31;
}
8. 한 달 동안의 음성 통화 시간이 voice분이고 문자 전송 건수가 text건일 때 휴대폰 사용료 계산 방법을 사용해 휴대폰 사용료 charge를 구하는 프로그램을 작성하시오. 음성 통화료는 voice_charge 함수를, 문자 전송료는 text_charge 함수를 정의해 사용한다. |
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int voice_charge(int v);
int text_charge(int t);
int main(void)
{
int voice, text;
double total = 0;
scanf("%d %d", &voice, &text);
int voiceFee = voice_charge(voice);
int textFee = text_charge(text);
total = (10000 + voiceFee + textFee) * 1.1;
printf("%g", total);
return 0;
}
int voice_charge(int v)
{
if (v > 100)
return (v - 100) * 80 + 100 * 100;
else
return v * 100;
}
int text_charge(int t)
{
if (t > 20) {
t -= 20;
return t * 20;
}
}
9. 학생 N명의 퀴즈 점수 10, 8, 7, 9, 6, 10, 9, 8, 7이 저장된 배열 class에 대해 사용자의 점수가 입력되면 순위를 출력하는 프로그램을 작성하시오. 입력된 점수 my_score의 순위를 구하는 함수 rank를 정의해 사용하시오. |
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 10
int rank(int arr[], int score);
int main(void)
{
int class[SIZE] = { 10, 8, 7, 9, 6, 10, 9, 8, 7 };
int score, res;
scanf("%d", &score);
res = rank(class, score);
printf("%d", res);
return 0;
}
int rank(int arr[], int score)
{
int ranking = 0;
for (int i = 0; i < SIZE; i++) {
if (score < arr[i])
ranking++;
}
return ranking + 1;
}
10. [프로그램 7-3]의 연예인 인기도 설문 조사 프로그램을 확장하여 다음과 같이 출력한느 프로그램을 작성하시오. 각 연예인의 득표수는 1번 문제의 frequency 함수를 완성해 이용하고, 득표수 순위는 9번 문제의 rank 함수를 이용한다. |
[프로그램 7-3]
#include <stdio.h>
#define PERSONS 30 // 설문 조사 응답수
#define STARS 6 // 연예인 번호와 vote 배열의 첨자를 일치시키기 위해 연예인 수+1
int main()
{
int survey[PERSONS] = {1, 3, 2, 5, 3, 2, 1, 2, 3, 4, 5, 2, 3, 3, 2,
1, 4, 5, 2, 3, 5, 1, 3, 4, 2, 3, 1, 4, 2, 3};
int vote[STARS] = {0};
int i;
for (i=0; i<PERSONS; i++)
{
vote[survey[i]]++; // 응답자가 답한 연예인(survey[i])의 득표수를 1 증가
}
printf("연예인 득표수 \n");
printf("============== \n");
for (i=1; i<STARS; i++) // vote[0]에는 아무런 자료도 저장되어 있지 않다.
printf(" %d번 %d표 \n", i, vote[i]);
return 0;
}
[수정한 프로그램]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define PERSONS 30 // 설문 조사 응답수
#define STARS 6 // 연예인 번호와 vote 배열의 첨자를 일치시키기 위해 연예인 수+1
int rank(int arr[]);
void frequency(int arr[], int arr2[]);
int main()
{
int survey[PERSONS] = { 1, 3, 2, 5, 3, 2, 1, 2, 3, 4, 5, 2, 3, 3, 2,
1, 4, 5, 2, 3, 5, 1, 3, 4, 2, 3, 1, 4, 2, 3 };
int vote[STARS] = { 0 };
int ranking[STARS] = { 0 };
int i;
frequency(survey, vote);
for (i = 1; i < STARS; i++)
ranking[i] = rank(vote, vote[i]);
printf("연예인 득표수 \n");
printf("============== \n");
for (i = 1; i < STARS; i++) // vote[0]에는 아무런 자료도 저장되어 있지 않다.
printf(" %d번 %d표 %d위\n", i, vote[i], ranking[i]);
return 0;
}
int rank(int arr[], int score)
{
int ranking = 0;
for (int i = 0; i < STARS; i++) {
if (score < arr[i])
ranking++;
}
return ranking + 1;
}
void frequency(int arr1[], int arr2[])
{
int i, count = 0;
for (i = 0; i < PERSONS; i++)
arr2[arr1[i]]++;
}
반응형
'프로그래밍 > C, C++' 카테고리의 다른 글
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 9 (1, 2, 3, 4, 5) (0) | 2020.10.16 |
---|---|
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 8 (11, 12, 13) (0) | 2020.10.16 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 8 (1,2,3,4,5) (0) | 2020.09.12 |
(C언어) 배열과 함수, 배열과 포인터 (0) | 2020.09.10 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 7(11, 12) (0) | 2020.08.29 |