编写程序, 先输入一组10个元素,再输出数组中比平均值小的所有奇数。 例如:输入:1 2 3 4 5 6 7 8 9 10 输出:1 3 5
时间: 2024-01-10 21:02:46 浏览: 27
以下是 Python 代码实现:
```python
arr = list(map(int, input("请输入10个整数,以空格分隔: ").split()))
avg = sum(arr) / len(arr) # 计算平均值
result = []
for num in arr:
if num % 2 == 1 and num < avg:
result.append(num)
print("比平均值小的所有奇数为:", end=" ")
print(*result) # 使用 * 将列表展开为多个参数输出
```
示例输出:
```
请输入10个整数,以空格分隔: 1 2 3 4 5 6 7 8 9 10
比平均值小的所有奇数为: 1 3 5
```
相关问题
用c语言编写程序随机生成一组(20个)两位整数,完成如下功能: (1)分别统计输出奇偶数的个数,并求出偶数和、奇数平均值; (2)编写排序函数sort(int a[],int n)实现将数组从小到大排序,在主函数中调用sort函数对这组(20个)整数进行排序,输出排序结果; (3)不重新排序的前提下(即:前后对调),把数组改为从大到小排序并输出结果。
好的,我会依次回答您的问题。对于您的第一个问题,以下是一个C语言程序,可以随机生成20个两位整数,并完成相应的功能:
```c
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void sort(int a[], int n);
int main(){
int i, a[20], even_count = 0, odd_count = 0, even_sum = 0, odd_sum = 0;
float odd_avg;
srand((unsigned)time(NULL));
// 随机生成20个两位整数
for(i=0; i<20; i++){
a[i] = rand() % 90 + 10;
printf("%d ", a[i]);
if(a[i] % 2 == 0){
even_count++;
even_sum += a[i];
}else{
odd_count++;
odd_sum += a[i];
}
}
printf("\n");
odd_avg = (float)odd_sum / odd_count;
printf("even count: %d, odd count: %d, even sum: %d, odd average: %.2f\n", even_count, odd_count, even_sum, odd_avg);
sort(a, 20);
printf("sorted array: ");
for(i=0; i<20; i++){
printf("%d ", a[i]);
}
printf("\n");
printf("reverse sorted array: ");
for(i=19; i>=0; i--){
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
void sort(int a[], int n){
int i, j, temp;
for(i=0; i<n-1; i++){
for(j=i+1; j<n; j++){
if(a[i]>a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
```
程序的核心是sort函数,使用冒泡排序对数组进行排序。在主函数中,我们使用rand函数随机生成20个两位整数,并对数组进行遍历,统计奇偶数的个数并计算偶数和、奇数平均值。然后调用sort函数对数组进行排序,并输出排序结果。最后再将数组从大到小排序输出。
希望这个程序能够满足您的需求,如有疑问,请随时向我提问。
C语言 编写程序,用起泡法对数组a中前n个元素,进行分段排序,其中前一半为从大到小排序后一半为从小到大排序,并把n个数的平均值存在变量average中,n为奇数时,位于中间点的数不需要排序。
### 回答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是奇数,则程序只会输出排序后的数组,不会对中间点的数进行排序。