落不下 发表于 2023-5-20 16:06:37

C语言求助

1、依次输入10个整数保存到一个数组中,并统一输出一次;
2、输出功能项和菜单如下:
$******************功能菜单***********************$
$   0. 退出                                        $
$   1. 计算数组中10个数之和并输出               $
$   2. 计算数组中10个数的平均数并输出             $
$   3. 数组从大到小排序输出,需保留原数组          $
$   4. 数组从小到大排序输出,需保留原数组          $
$   5. 计算1!+2!+..+(数组中最小数)!之和并输出      $
$**************************************************$
请选择您的操作(0-5):
3、完善上述0-5的相应程序

陶远航 发表于 2023-5-20 16:06:38

本帖最后由 陶远航 于 2023-5-20 16:19 编辑

落不下 发表于 2023-5-20 16:11
大哥出乱码了,看不懂

非常抱歉,可能是因为我的回答不支持 UTF-8 编码导致的乱码问题。下面是重新编码后的代码,你可以参考一下:
#include <stdio.h>
#define N 10

// 计算数组和
int sum(int []);

// 计算数组平均值
float average(int []);

// 对数组从大到小排序
void sort_descend(int []);

// 对数组从小到大排序
void sort_ascend(int []);

// 计算 1!+2!+...+(最小数)! 的和
int factorial_sum(int []);

int main() {
    int arr;
    int i, option;
    do {
      // 输入 10 个整数保存到数组中
      printf("请依次输入%d个整数:\n", N);
      for (i = 0; i < N; i++) {
            scanf("%d", &arr);
      }

      // 输出数组
      printf("您输入的10个整数为:\n");
      for (i = 0; i < N; i++) {
            printf(" %d", arr);
      }
      printf("\n");

      // 输出菜单选项
      printf("$******************功能菜单***********************$\n");
      printf("$   0. 退出                                        $\n");
      printf("$   1. 计算数组中10个数之和并输出               $\n");
      printf("$   2. 计算数组中10个数的平均数并输出             $\n");
      printf("$   3. 数组从大到小排序输出,需保留原数组          $\n");
      printf("$   4. 数组从小到大排序输出,需保留原数组          $\n");
      printf("$   5. 计算1!+2!+..+(数组中最小数)!之和并输出      $\n");
      printf("$**************************************************$\n");

      // 选择操作
      printf("请选择您的操作(0-5): ");
      scanf("%d", &option);

      switch (option) {
            case 0:
                printf("Bye!\n");
                break;

            case 1:
                printf("数组元素之和为:%d\n", sum(arr));
                break;

            case 2:
                printf("数组元素平均值为:%.2f\n", average(arr));
                break;

            case 3:
                sort_descend(arr);
                printf("数组从大到小排序后为:\n");
                for (i = 0; i < N; i++) {
                  printf(" %d", arr);
                }
                printf("\n");
                break;

            case 4:
                sort_ascend(arr);
                printf("数组从小到大排序后为:\n");
                for (i = 0; i < N; i++) {
                  printf(" %d", arr);
                }
                printf("\n");
                break;

            case 5:
                printf("1! + 2! + ... + %d! = %d\n", arr, factorial_sum(arr));
                break;

            default:
                printf("输入有误,请重新输入!\n");
      }

    } while (option != 0);

    return 0;
}

int sum(int a[]) {
    int sum = 0, i;
    for (i = 0; i < N; i++) {
      sum += a;
    }
    return sum;
}

float average(int a[]) {
    return sum(a) * 1.0 / N;
}

void sort_descend(int a[]) {
    int i, j, temp;
    for (i = 0; i < N-1; i++) {
      for (j = 0; j < N-i-1; j++) {
            if (a < a) {
                temp = a;
                a = a;
                a = temp;
            }
      }
    }
}

void sort_ascend(int a[]) {
    int i, j, temp;
    for (i = 0; i < N-1; i++) {
      for (j = 0; j < N-i-1; j++) {
            if (a > a) {
                temp = a;
                a = a;
                a = temp;
            }
      }
    }
}

int factorial_sum(int a[]) {
    int i, fac = 1, sum = 0;
    for (i = 1; i <= a; i++) {
      fac *= i;
      sum += fac;
    }
    return sum;
}

陶远航 发表于 2023-5-20 16:09:06

下面是 C 语言代码,实现了输入 10 个整数并在菜单中提供了 5 种操作选项:
#include <stdio.h>
#define N 10

// 计算数组和
int sum(int []);

// 计算数组平均值
float average(int []);

// 对数组从大到小排序
void sort_descend(int []);

// 对数组从小到大排序
void sort_ascend(int []);

// 计算 1!+2!+...+(最小数)! 的和
int factorial_sum(int []);

int main() {
    int arr;
    int i, option;
    do {
      // 输入 10 个整数保存到数组中
      printf("请依次输入%d个整数:\n", N);
      for (i = 0; i < N; i++) {
            scanf("%d", &arr);
      }

      // 输出数组
      printf("您输入的10个整数为:\n");
      for (i = 0; i < N; i++) {
            printf(" %d", arr);
      }
      printf("\n");

      // 输出菜单选项
      printf("$******************功能菜单***********************$\n");
      printf("$   0. 退出                                        $\n");
      printf("$   1. 计算数组中10个数之和并输出               $\n");
      printf("$   2. 计算数组中10个数的平均数并输出             $\n");
      printf("$   3. 数组从大到小排序输出,需保留原数组          $\n");
      printf("$   4. 数组从小到大排序输出,需保留原数组          $\n");
      printf("$   5. 计算1!+2!+..+(数组中最小数)!之和并输出      $\n");
      printf("$**************************************************$\n");

      // 选择操作
      printf("请选择您的操作(0-5): ");
      scanf("%d", &option);

      switch (option) {
            case 0:
                printf("Bye!\n");
                break;

            case 1:
                printf("数组元素之和为:%d\n", sum(arr));
                break;

            case 2:
                printf("数组元素平均值为:%.2f\n", average(arr));
                break;

            case 3:
                sort_descend(arr);
                printf("数组从大到小排序后为:\n");
                for (i = 0; i < N; i++) {
                  printf(" %d", arr);
                }
                printf("\n");
                break;

            case 4:
                sort_ascend(arr);
                printf("数组从小到大排序后为:\n");
                for (i = 0; i < N; i++) {
                  printf(" %d", arr);
                }
                printf("\n");
                break;

            case 5:
                printf("1! + 2! + ... + %d! = %d\n", arr, factorial_sum(arr));
                break;

            default:
                printf("输入有误,请重新输入!\n");
      }

    } while (option != 0);

    return 0;
}

int sum(int a[]) {
    int sum = 0, i;
    for (i = 0; i < N; i++) {
      sum += a;
    }
    return sum;
}

float average(int a[]) {
    return sum(a) * 1.0 / N;
}

void sort_descend(int a[]) {
    int i, j, temp;
    for (i = 0; i < N-1; i++) {
      for (j = 0; j < N-i-1; j++) {
            if (a < a) {
                temp = a;
                a = a;
                a = temp;
            }
      }
    }
}

void sort_ascend(int a[]) {
    int i, j, temp;
    for (i = 0; i < N-1; i++) {
      for (j = 0; j < N-i-1; j++) {
            if (a > a) {
                temp = a;
                a = a;
                a = temp;
            }
      }
    }
}

int factorial_sum(int a[]) {
    int i, fac = 1, sum = 0;
    for (i = 1; i <= a; i++) {
      fac *= i;
      sum += fac;
    }
    return sum;
}

在实现上述菜单功能时,通过引入函数将不同操作封装进行处理,使代码更清晰易读。

落不下 发表于 2023-5-20 16:11:39

陶远航 发表于 2023-5-20 16:09
下面是 C 语言代码,实现了输入 10 个整数并在菜单中提供了 5 种操作选项:

在实现上述菜单功能时,通过 ...

大哥出乱码了,看不懂{:10_282:}

isdkz 发表于 2023-5-20 16:16:18

以下是针对您问题的C语言程序:

#include <stdio.h>

void print_menu() {
    printf("$******************功能菜单***********************$\n");
    printf("$   0. 退出                                        $\n");
    printf("$   1. 计算数组中10个数之和并输出               $\n");
    printf("$   2. 计算数组中10个数的平均数并输出             $\n");
    printf("$   3. 数组从大到小排序输出,需保留原数组          $\n");
    printf("$   4. 数组从小到大排序输出,需保留原数组          $\n");
    printf("$   5. 计算1!+2!+..+(数组中最小数)!之和并输出      $\n");
    printf("$**************************************************$\n");
    printf("请选择您的操作(0-5):\n");
}

int sum(int arr[], int n) {
    int total = 0;
    for (int i = 0; i < n; i++) {
      total += arr;
    }
    return total;
}

float avg(int arr[], int n) {
    return sum(arr, n) / (float) n;
}

void sort(int arr[], int n, int asc) {
    int temp;
    for (int i = 0; i < n - 1; i++) {
      for (int j = i + 1; j < n; j++) {
            if ((asc && arr > arr) || (!asc && arr < arr)) {
                temp = arr;
                arr = arr;
                arr = temp;
            }
      }
    }
}

int factorial(int n) {
    int total = 1;
    for (int i = 1; i <= n; i++) {
      total *= i;
    }
    return total;
}

int main() {
    int arr;
    int arrCopy;
    int option;

    printf("请输入10个整数:\n");
    for (int i = 0; i < 10; i++) {
      scanf("%d", &arr);
      arrCopy = arr;
    }

    while (1) {
      print_menu();
      scanf("%d", &option);
      
      switch (option) {
            case 0:
                return 0;
            case 1:
                printf("数组中10个数之和: %d\n", sum(arr, 10));
                break;
            case 2:
                printf("数组中10个数的平均数: %.2f\n", avg(arr, 10));
                break;
            case 3:
                sort(arrCopy, 10, 0);
                printf("数组从大到小排序: ");
                for (int i = 0; i < 10; i++) printf("%d ", arrCopy);
                printf("\n");
                break;
            case 4:
                sort(arrCopy, 10, 1);
                printf("数组从小到大排序: ");
                for (int i = 0; i < 10; i++) printf("%d ", arrCopy);
                printf("\n");
                break;
            case 5: {
                sort(arrCopy, 10, 1);
                int min = arrCopy;
                int total = 0;
                for (int i = 1; i <= min; i++) {
                  total += factorial(i);
                }
                printf("

1!+2!+..+%d!之和: %d\n", min, total);
                break;
            }
            default:
                printf("输入错误,请重新输入\n");
                break;
      }

      for (int i = 0; i < 10; i++) {
            arrCopy = arr;
      }
    }
    return 0;
}


这个程序首先从用户处获取10个整数并存储在数组中,然后循环输出功能菜单并等待用户输入选项。根据用户的选择,执行相应的功能,并打印结果。如果用户选择退出,程序将结束运行。在排序和计算阶乘和的操作中,我们都使用了一个副本数组,以防改变原始数组的顺序。

请注意,这个程序没有异常处理,因此,如果输入的不是整数或者超出选项范围,程序可能会出现错误。为了使程序更稳定,你可能需要添加一些异常处理的代码。

落不下 发表于 2023-5-20 16:47:32

谢谢各位大佬
页: [1]
查看完整版本: C语言求助