C语言 编写程序,用起泡法对数组a中前n个元素,进行分段排序,其中前一半为从大到小排序后一半为从小到大排序,并把n个数的平均值存在变量average中,n为奇数时,位于中间点的数不需要排序。
时间: 2023-09-06 18:05:12 浏览: 348
C语言程序设计-编写函数用冒泡排序法对数组中的数据进行从小到大的排序;.c
5星 · 资源好评率100%
### 回答1:
以下是一个可以实现上述要求的 C 语言程序:
```
#include <stdio.h>
void bubble_sort(int *arr, int n, int ascending) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (ascending ? arr[j] > arr[j + 1] : arr[j] < arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int a[10] = {6, 2, 4, 8, 3, 9, 1, 5, 7, 0};
int n = 10;
int i;
double average = 0;
// 对前一半的数进行从大到小排序
bubble_sort(a, n / 2, 0);
// 对后一半的数进行从小到大排序
bubble_sort(a + n / 2, n / 2, 1);
// 计算平均值
for (i = 0; i < n; i++) {
average += a[i];
}
average /= n;
// 输出排序后的数组
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
// 输出平均值
printf("average = %.2lf\n", average);
return 0;
}
```
在这段代码中,我们使用了起泡排序算法对数组进行排序。起泡排序是一种简单的排序算法,它会不断地比较相邻的两个数,并将它们进行交换,直到整个数组都按照要求排好序为止。
在上述代码中,我们定义了一个名为 `bubble_sort` 的函数,它接受三个参数:数组指针 `arr`,数组的长度 `n`,以及
### 回答2:
以下是使用C语言编写的程序,对数组a中前n个元素进行分段排序,并计算出n个数的平均值存在变量average中。
```c
#include <stdio.h>
#define MAX_SIZE 100
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void bubbleSort(int arr[], int start, int end, int isAscending)
{
for (int i = start; i < end; i++)
{
for (int j = start; j < end - i - 1; j++)
{
if (isAscending)
{
if (arr[j] > arr[j + 1])
{
swap(&arr[j], &arr[j + 1]);
}
}
else
{
if (arr[j] < arr[j + 1])
{
swap(&arr[j], &arr[j + 1]);
}
}
}
}
}
int main()
{
int a[MAX_SIZE];
int n;
float average = 0.0;
printf("请输入n的值:");
scanf("%d", &n);
printf("请输入数组a的元素值:");
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
average += a[i];
}
average /= n;
if (n % 2 == 0)
{
bubbleSort(a, 0, n / 2, 0); // 前一半从大到小排序
bubbleSort(a, n / 2, n, 1); // 后一半从小到大排序
}
else
{
bubbleSort(a, 0, n / 2, 0); // 前一半从大到小排序
bubbleSort(a, n / 2 + 1, n, 1); // 后一半从小到大排序
}
printf("排序后的数组a为:");
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n平均值为:%0.2f\n", average);
return 0;
}
```
以上程序通过调用bubbleSort函数来实现冒泡排序。根据n的值,如果n为奇数,则只需要对前一半进行排序,不对中间的数进行排序。如果n为偶数,则需要对前一半进行从大到小排序,后一半进行从小到大排序。最后,计算出n个数的平均值存在变量average中,并输出排序后的数组和平均值。
### 回答3:
以下是用C语言编写的程序,使用起泡法对数组a中的前n个元素进行分段排序,并将平均值存储在变量average中。如果n为奇数,则中间点的数不需要排序。
```c
#include<stdio.h>
void bubble_sort(int arr[], int n)
{
int i, j;
// 对前一半进行从大到小排序
for(i = 0; i < n/2 - 1; i++){
for(j = 0; j < n/2 - 1 - i; j++){
if(arr[j] < arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
// 对后一半进行从小到大排序
for(i = n/2; i < n - 1; i++){
for(j = n/2; j < n - 1 - i + n/2; j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main()
{
int n, i;
float sum = 0.0;
float average;
printf("请输入n的值: ");
scanf("%d", &n);
int arr[n];
printf("请输入数组元素: ");
for(i = 0; i < n; i++){
scanf("%d", &arr[i]);
sum += arr[i];
}
average = sum/n;
// 如果n是奇数,则不需要排序中间点的数
if(n % 2 != 0){
printf("中间点的数不需要排序。\n");
}
else{
bubble_sort(arr, n);
}
printf("排序后的数组: ");
for(i = 0; i < n; i++){
printf("%d ", arr[i]);
}
printf("\n平均值为: %f\n", average);
return 0;
}
```
这个程序首先根据输入的n值创建一个整数数组a。接下来,它会要求输入数组a的元素,并且计算这些元素的和以计算平均值。
然后,程序使用起泡法对数组a的前一半进行从大到小排序,同时对后一半进行从小到大排序。
最后,程序会输出排序后的数组以及平均值。如果n是奇数,则程序只会输出排序后的数组,不会对中间点的数进行排序。
阅读全文