#3
by box » 1年前
1000個も値を入力させる可能性があるのはあまり現実的とは思えないのと
main()に何でもかんでもやらせるのはあまりよろしくない(main()は全体の司令塔、
必要な処理は下請け関数に任せる)のとから、こんなサンプルを用意してみました。
関数分けが適切かどうかはよくわからないので、加工はお任せします。
コード:
#include <stdio.h>
#define N (30) // データの最大個数
void inputData(int *a, int *c, int *t)
{
int n;
while (1) {
printf("数字を入力(0で終了)");
scanf("%d", &n);
if (n == 0 || *c >= N) break;
a[(*c)++] = n, *t += n;
}
}
void sortData(int *a, int c)
{
int i, j;
for (i = 0; i < c - 1; i++) {
for (j = i; j < c; j++) {
if (a[i] > a[j]) {
int t = a[i];
a[i] = a[j], a[j] = t;
}
}
}
}
void printMaxMin(int *a, int c)
{
printf("最大値は%d\n", a[c-1]);
printf("最小値は%d\n", a[0]);
}
void printAverage(int t, int c)
{
printf("平均値は%f\n", (double) t / c);
}
void printMedian(int *a, int c)
{
if (c % 2 == 1) {
printf("中央値は%d\n", a[c/2]);
}
else {
printf("中央値は%f\n", (a[c/2-1] + a[c/2]) / 2.);
}
}
int main(void)
{
int array[N] = { 0 }, count = 0, total = 0;
inputData(array, &count, &total);
sortData(array, count);
printMaxMin(array, count);
printAverage(total, count);
printMedian(array, count);
return 0;
}
1000個も値を入力させる可能性があるのはあまり現実的とは思えないのと
main()に何でもかんでもやらせるのはあまりよろしくない(main()は全体の司令塔、
必要な処理は下請け関数に任せる)のとから、こんなサンプルを用意してみました。
関数分けが適切かどうかはよくわからないので、加工はお任せします。
[code]
#include <stdio.h>
#define N (30) // データの最大個数
void inputData(int *a, int *c, int *t)
{
int n;
while (1) {
printf("数字を入力(0で終了)");
scanf("%d", &n);
if (n == 0 || *c >= N) break;
a[(*c)++] = n, *t += n;
}
}
void sortData(int *a, int c)
{
int i, j;
for (i = 0; i < c - 1; i++) {
for (j = i; j < c; j++) {
if (a[i] > a[j]) {
int t = a[i];
a[i] = a[j], a[j] = t;
}
}
}
}
void printMaxMin(int *a, int c)
{
printf("最大値は%d\n", a[c-1]);
printf("最小値は%d\n", a[0]);
}
void printAverage(int t, int c)
{
printf("平均値は%f\n", (double) t / c);
}
void printMedian(int *a, int c)
{
if (c % 2 == 1) {
printf("中央値は%d\n", a[c/2]);
}
else {
printf("中央値は%f\n", (a[c/2-1] + a[c/2]) / 2.);
}
}
int main(void)
{
int array[N] = { 0 }, count = 0, total = 0;
inputData(array, &count, &total);
sortData(array, count);
printMaxMin(array, count);
printAverage(total, count);
printMedian(array, count);
return 0;
}
[/code]