반응형
9. 7명의 심판에게 점수를 입력받고, 최고점과 최저점을 뺀 점수의 평균을 구하는 프로그램을 작성하라.
#include <stdio.h>
#include <stdlib.h>
int sum(int sc[], int N);
int max(int sc[], int N);
int min(int sc[], int N);
int main()
{
int score[7];
int N = sizeof(score) / sizeof(int);
for (int i = 0; i < N; i++) {
printf("%d번째 심판의 점수를 입력하세요 : ", i + 1); scanf_s("%d", &score[i]);
}
printf("최종 점수는 최고점 %d점과 최하점 %d점을 뺀 총점 %d점의 평균인 %.2lf점 입니다. \n",
max(score, N), min(score, N), (sum(score, N) - max(score, N) - min(score, N)),
(double)(sum(score, N) - max(score, N) - min(score, N)) / (double)(N - 2)
);
}
int sum(int sc[], int N)
{
int sum = 0;
for (int i = 0; i < N; i++) {
sum += sc[i];
}
return sum;
}
int max(int sc[], int N)
{
int max = sc[0];
for (int i = 1; i < N; i++) {
if (max < sc[i]) {
max = sc[i];
}
}
return max;
}
int min(int sc[], int N)
{
int min = sc[0];
for (int i = 1; i < N; i++) {
if (min > sc[i]) {
min = sc[i];
}
}
return min;
}10. 2차 방정식 ax^2+bx+c=0에서 a,b,c의 값을 입력받고, 판별식D를 확인하는 함수를 작성하고, 허근이 아닐 때 근을 구하는 함수를 작성하라.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double discriminant(double a, double b, double c);
double quadratic(double a, double b, double c, double D);
int main()
{
double a, b, c;
printf("2차방정식 ax^2+bx+c의 근을 확인합니다. \n");
printf("a값을 입력하세요 : "); scanf_s("%lf", &a);
printf("b값을 입력하세요 : "); scanf_s("%lf", &b);
printf("c값을 입력하세요 : "); scanf_s("%lf", &c);
quadratic(a, b, c, discriminant(a, b, c));
}
double discriminant(double a, double b, double c)
{
return pow(b, 2) - (4 * a*c);
}
double quadratic(double a, double b, double c, double D)
{
if (a == 0) {
printf("2차 방정식이 아닙니다. \n");
printf("1차 방정식의 근은 %lf입니다. \n", (-(double)c/(double)b));
return (-(double)c / (double)b);
}
if (D < 0) {
printf("2차방정식의 두근이 허근입니다. \n");
return 0;
}
if(D > 0) {
printf("2차 방정식의 두근은 %.2lf,%.2lf입니다. \n",
(-b + (pow(D, 1.0 / 2.0))) / 2 * a ,
(-b - (pow(D, 1.0 / 2.0))) / 2 * a);
printf("리턴값은 첫번째 값입니다. \n");
}
if (D == 0) {
printf("이 2차방정식의 근은 %.2lf입니다. \n",
(-b + (pow(D, 1.0 / 2.0))) / 2 * a);
printf("이 2차방정식은 중근 하나만 갖습니다. \n");
}
return (-b + (pow(D, 1.0 / 2.0))) / 2 * a;
}11. 산술, 기하, 조화 평균을 구하는 함수를 각각 작성하라.
#include <stdio.h>
#include <math.h>
double arithmatic(int iarr[],int Num);
double geometric(int iarr[],int Num);
double harmonic(int iarr[], int Num);
int main()
{
const int Num = 2;
int iarr[Num];
for (int i = 0; i < Num; i++) {
printf("%d번째 값을 입력하세요 : ", i + 1); scanf_s("%d", &iarr[i]);
}
int line = 0;
for (int i = 0; i < Num; i++) {
printf("%d ", iarr[i]);
line++;
if (line == 10) {
printf("\n");
line = 0;
}
}
printf("의 산술평균 = %.2lf, 기하평균 = %.2lf, 조화평균 = %.2lf 입니다.",
arithmatic(iarr, Num), geometric(iarr, Num), harmonic(iarr, Num));
}
double arithmatic(int iarr[], int Num)
{
double sum = 0;
for (int i = 0; i < Num; i++) {
sum += iarr[i];
}
return (sum / (double)Num);
}
double geometric(int iarr[], int Num)
{
double multiple = 1;
for (int i = 0; i < Num; i++) {
multiple *= iarr[i];
}
return pow(multiple, 1.0 / Num);
}
double harmonic(int iarr[], int Num)
{
for (int i = 0; i < Num; i++) {
if (iarr[i] < 0) {
printf("모든 수가 양수일 때만 조화평균을 구할 수 있습니다. \n");
return 0;
}
}
double sum = 0;
for (int i = 0; i < Num; i++) {
sum += (1.0 / iarr[i]);
}
return (double)Num / sum;
}12. 1열에 점수가 들어있는 2차원 배열의 2열에 각 점수에 대한 석차를 구해서 저장하는 함수를 작성하라.
#include <stdio.h>
const int N = 5;
void grade(int score[N][2], int Num);
int main()
{
int score[N][2];
printf("점수를 입력받습니다. \n");
for (int i = 0; i < N; i++) {
printf("%d번째 점수를 입력해주세요 : ",i+1); scanf_s("%d", &score[i][0]);
}
grade(score, N);
for (int i = 0; i < N; i++) {
printf("%d점 %d등 \n", score[i][0], score[i][1]);
}
}
void grade(int score[N][2], int Num)
{
int top;
for (int i = 0; i < Num; i++) {
score[i][1] = 1;
}
for (int k = 0; k < Num; k++) {
for (int i = 0; i < Num; i++) {
if (score[i][1] > i) {
top = score[i][0];
break;
}
}
for (int i = 0; i < Num; i++) {
if (score[i][1] > k) {
if (score[i][0] > top) {
top = score[i][0];
}
}
}
for (int i = 0; i < Num; i++) {
if (score[i][0] < top) {
score[i][1]++;
}
}
}
}//머리가 안 돌아... 왜 되는건지 잘 모르겠어... 순서도 그려봐야지...
반응형