C言語です。
最大10個の数字を入れて、合計、平均、降順で並べ替え、をするものです。
この中の並べ替えですが、
サンプル数が10個で、
1,2,3,4,5,6,7,8,9,10
を入れると
10,9,8,7,6,5,4,3,2,1
と適切に並べ替えてくれます。
しかし
バラバラな数字を入れると、並べ替えをせずに終わってしまうことが多々あります。
いろいろ調べてみましたが、どうしても上手く行きません。
宜しくお願いします。
#include <stdio.h>
int addavg(int *x, int *y, float *z ,int a);
int narabikae(int *x, int a);
int main(void){
int sum;
float avg;
sum = 0;
avg = 0;
int i=0;
int n=0;
int num[10] = {0,0,0,0,0,0,0,0,0,0};
printf("いくつの数の合計と平均を求めますか? ="); scanf("%d",&n); printf("%d\n",n); for(i=0;i<n;i++) { scanf("%d", &num[i]); printf("num[%d] =%d\n", i, num[i]); } addavg(&num[0], &sum, &avg, n); printf("\n合計 =%d\n",sum); printf("平均 =%.2f\n",avg); /*並び替え*/ narabikae(&num[0], n); printf("\n並び替え結果(降順)\n"); for(i=0;i<n;i++) { printf("num[%d] =%d\n", i, num[i]); }
}
int addavg(int *x, int *y, float *z, int a)
{
int i;
for (i = 0; i < a; i++)
{
*y = *y + *(x+i);
}
*z = (float)*y/a; return 0;
}
int narabikae(int *x, int a)
{
int i;
int j;
int max;
int b;
int temp;
for(i =0; i < a-1; i++) { max = *(x+i); b = i; for(j = i+1; j <a; j++) { if(*(x+j) > max) { max = *(x+j); b = j; } temp = *(x+i); *(x+i) = *(x+b); *(x+b) = temp; } } return 0;
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/18 00:27