鱼C论坛

 找回密码
 立即注册
查看: 1143|回复: 5

[已解决]C语言求助

[复制链接]
发表于 2023-5-20 16:06:37 | 显示全部楼层 |阅读模式
10鱼币
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 编码导致的乱码问题。下面是重新编码后的代码,你可以参考一下:
  1. #include <stdio.h>
  2. #define N 10

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

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

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

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

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

  13. int main() {
  14.     int arr[N];
  15.     int i, option;
  16.     do {
  17.         // 输入 10 个整数保存到数组中
  18.         printf("请依次输入%d个整数:\n", N);
  19.         for (i = 0; i < N; i++) {
  20.             scanf("%d", &arr[i]);
  21.         }

  22.         // 输出数组
  23.         printf("您输入的10个整数为:\n");
  24.         for (i = 0; i < N; i++) {
  25.             printf(" %d", arr[i]);
  26.         }
  27.         printf("\n");

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

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

  40.         switch (option) {
  41.             case 0:
  42.                 printf("Bye!\n");
  43.                 break;

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

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

  50.             case 3:
  51.                 sort_descend(arr);
  52.                 printf("数组从大到小排序后为:\n");
  53.                 for (i = 0; i < N; i++) {
  54.                     printf(" %d", arr[i]);
  55.                 }
  56.                 printf("\n");
  57.                 break;

  58.             case 4:
  59.                 sort_ascend(arr);
  60.                 printf("数组从小到大排序后为:\n");
  61.                 for (i = 0; i < N; i++) {
  62.                     printf(" %d", arr[i]);
  63.                 }
  64.                 printf("\n");
  65.                 break;

  66.             case 5:
  67.                 printf("1! + 2! + ... + %d! = %d\n", arr[0], factorial_sum(arr));
  68.                 break;

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

  72.     } while (option != 0);

  73.     return 0;
  74. }

  75. int sum(int a[]) {
  76.     int sum = 0, i;
  77.     for (i = 0; i < N; i++) {
  78.         sum += a[i];
  79.     }
  80.     return sum;
  81. }

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

  85. void sort_descend(int a[]) {
  86.     int i, j, temp;
  87.     for (i = 0; i < N-1; i++) {
  88.         for (j = 0; j < N-i-1; j++) {
  89.             if (a[j] < a[j+1]) {
  90.                 temp = a[j];
  91.                 a[j] = a[j+1];
  92.                 a[j+1] = temp;
  93.             }
  94.         }
  95.     }
  96. }

  97. void sort_ascend(int a[]) {
  98.     int i, j, temp;
  99.     for (i = 0; i < N-1; i++) {
  100.         for (j = 0; j < N-i-1; j++) {
  101.             if (a[j] > a[j+1]) {
  102.                 temp = a[j];
  103.                 a[j] = a[j+1];
  104.                 a[j+1] = temp;
  105.             }
  106.         }
  107.     }
  108. }

  109. int factorial_sum(int a[]) {
  110.     int i, fac = 1, sum = 0;
  111.     for (i = 1; i <= a[0]; i++) {
  112.         fac *= i;
  113.         sum += fac;
  114.     }
  115.     return sum;
  116. }
复制代码

最佳答案

查看完整内容

非常抱歉,可能是因为我的回答不支持 UTF-8 编码导致的乱码问题。下面是重新编码后的代码,你可以参考一下:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-20 16:06:38 | 显示全部楼层    本楼为最佳答案   
本帖最后由 陶远航 于 2023-5-20 16:19 编辑
落不下 发表于 2023-5-20 16:11
大哥出乱码了,看不懂


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

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

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

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

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

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

  13. int main() {
  14.     int arr[N];
  15.     int i, option;
  16.     do {
  17.         // 输入 10 个整数保存到数组中
  18.         printf("请依次输入%d个整数:\n", N);
  19.         for (i = 0; i < N; i++) {
  20.             scanf("%d", &arr[i]);
  21.         }

  22.         // 输出数组
  23.         printf("您输入的10个整数为:\n");
  24.         for (i = 0; i < N; i++) {
  25.             printf(" %d", arr[i]);
  26.         }
  27.         printf("\n");

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

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

  40.         switch (option) {
  41.             case 0:
  42.                 printf("Bye!\n");
  43.                 break;

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

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

  50.             case 3:
  51.                 sort_descend(arr);
  52.                 printf("数组从大到小排序后为:\n");
  53.                 for (i = 0; i < N; i++) {
  54.                     printf(" %d", arr[i]);
  55.                 }
  56.                 printf("\n");
  57.                 break;

  58.             case 4:
  59.                 sort_ascend(arr);
  60.                 printf("数组从小到大排序后为:\n");
  61.                 for (i = 0; i < N; i++) {
  62.                     printf(" %d", arr[i]);
  63.                 }
  64.                 printf("\n");
  65.                 break;

  66.             case 5:
  67.                 printf("1! + 2! + ... + %d! = %d\n", arr[0], factorial_sum(arr));
  68.                 break;

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

  72.     } while (option != 0);

  73.     return 0;
  74. }

  75. int sum(int a[]) {
  76.     int sum = 0, i;
  77.     for (i = 0; i < N; i++) {
  78.         sum += a[i];
  79.     }
  80.     return sum;
  81. }

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

  85. void sort_descend(int a[]) {
  86.     int i, j, temp;
  87.     for (i = 0; i < N-1; i++) {
  88.         for (j = 0; j < N-i-1; j++) {
  89.             if (a[j] < a[j+1]) {
  90.                 temp = a[j];
  91.                 a[j] = a[j+1];
  92.                 a[j+1] = temp;
  93.             }
  94.         }
  95.     }
  96. }

  97. void sort_ascend(int a[]) {
  98.     int i, j, temp;
  99.     for (i = 0; i < N-1; i++) {
  100.         for (j = 0; j < N-i-1; j++) {
  101.             if (a[j] > a[j+1]) {
  102.                 temp = a[j];
  103.                 a[j] = a[j+1];
  104.                 a[j+1] = temp;
  105.             }
  106.         }
  107.     }
  108. }

  109. int factorial_sum(int a[]) {
  110.     int i, fac = 1, sum = 0;
  111.     for (i = 1; i <= a[0]; i++) {
  112.         fac *= i;
  113.         sum += fac;
  114.     }
  115.     return sum;
  116. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-20 16:09:06 | 显示全部楼层
下面是 C 语言代码,实现了输入 10 个整数并在菜单中提供了 5 种操作选项:
  1. #include <stdio.h>
  2. #define N 10

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

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

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

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

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

  13. int main() {
  14.     int arr[N];
  15.     int i, option;
  16.     do {
  17.         // 输入 10 个整数保存到数组中
  18.         printf("请依次输入%d个整数:\n", N);
  19.         for (i = 0; i < N; i++) {
  20.             scanf("%d", &arr[i]);
  21.         }

  22.         // 输出数组
  23.         printf("您输入的10个整数为:\n");
  24.         for (i = 0; i < N; i++) {
  25.             printf(" %d", arr[i]);
  26.         }
  27.         printf("\n");

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

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

  40.         switch (option) {
  41.             case 0:
  42.                 printf("Bye!\n");
  43.                 break;

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

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

  50.             case 3:
  51.                 sort_descend(arr);
  52.                 printf("数组从大到小排序后为:\n");
  53.                 for (i = 0; i < N; i++) {
  54.                     printf(" %d", arr[i]);
  55.                 }
  56.                 printf("\n");
  57.                 break;

  58.             case 4:
  59.                 sort_ascend(arr);
  60.                 printf("数组从小到大排序后为:\n");
  61.                 for (i = 0; i < N; i++) {
  62.                     printf(" %d", arr[i]);
  63.                 }
  64.                 printf("\n");
  65.                 break;

  66.             case 5:
  67.                 printf("1! + 2! + ... + %d! = %d\n", arr[0], factorial_sum(arr));
  68.                 break;

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

  72.     } while (option != 0);

  73.     return 0;
  74. }

  75. int sum(int a[]) {
  76.     int sum = 0, i;
  77.     for (i = 0; i < N; i++) {
  78.         sum += a[i];
  79.     }
  80.     return sum;
  81. }

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

  85. void sort_descend(int a[]) {
  86.     int i, j, temp;
  87.     for (i = 0; i < N-1; i++) {
  88.         for (j = 0; j < N-i-1; j++) {
  89.             if (a[j] < a[j+1]) {
  90.                 temp = a[j];
  91.                 a[j] = a[j+1];
  92.                 a[j+1] = temp;
  93.             }
  94.         }
  95.     }
  96. }

  97. void sort_ascend(int a[]) {
  98.     int i, j, temp;
  99.     for (i = 0; i < N-1; i++) {
  100.         for (j = 0; j < N-i-1; j++) {
  101.             if (a[j] > a[j+1]) {
  102.                 temp = a[j];
  103.                 a[j] = a[j+1];
  104.                 a[j+1] = temp;
  105.             }
  106.         }
  107.     }
  108. }

  109. int factorial_sum(int a[]) {
  110.     int i, fac = 1, sum = 0;
  111.     for (i = 1; i <= a[0]; i++) {
  112.         fac *= i;
  113.         sum += fac;
  114.     }
  115.     return sum;
  116. }
复制代码

在实现上述菜单功能时,通过引入函数将不同操作封装进行处理,使代码更清晰易读。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

大哥出乱码了,看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-20 16:16:18 | 显示全部楼层
以下是针对您问题的C语言程序:

  1. #include <stdio.h>

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

  13. int sum(int arr[], int n) {
  14.     int total = 0;
  15.     for (int i = 0; i < n; i++) {
  16.         total += arr[i];
  17.     }
  18.     return total;
  19. }

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

  23. void sort(int arr[], int n, int asc) {
  24.     int temp;
  25.     for (int i = 0; i < n - 1; i++) {
  26.         for (int j = i + 1; j < n; j++) {
  27.             if ((asc && arr[i] > arr[j]) || (!asc && arr[i] < arr[j])) {
  28.                 temp = arr[i];
  29.                 arr[i] = arr[j];
  30.                 arr[j] = temp;
  31.             }
  32.         }
  33.     }
  34. }

  35. int factorial(int n) {
  36.     int total = 1;
  37.     for (int i = 1; i <= n; i++) {
  38.         total *= i;
  39.     }
  40.     return total;
  41. }

  42. int main() {
  43.     int arr[10];
  44.     int arrCopy[10];
  45.     int option;

  46.     printf("请输入10个整数:\n");
  47.     for (int i = 0; i < 10; i++) {
  48.         scanf("%d", &arr[i]);
  49.         arrCopy[i] = arr[i];
  50.     }

  51.     while (1) {
  52.         print_menu();
  53.         scanf("%d", &option);
  54.         
  55.         switch (option) {
  56.             case 0:
  57.                 return 0;
  58.             case 1:
  59.                 printf("数组中10个数之和: %d\n", sum(arr, 10));
  60.                 break;
  61.             case 2:
  62.                 printf("数组中10个数的平均数: %.2f\n", avg(arr, 10));
  63.                 break;
  64.             case 3:
  65.                 sort(arrCopy, 10, 0);
  66.                 printf("数组从大到小排序: ");
  67.                 for (int i = 0; i < 10; i++) printf("%d ", arrCopy[i]);
  68.                 printf("\n");
  69.                 break;
  70.             case 4:
  71.                 sort(arrCopy, 10, 1);
  72.                 printf("数组从小到大排序: ");
  73.                 for (int i = 0; i < 10; i++) printf("%d ", arrCopy[i]);
  74.                 printf("\n");
  75.                 break;
  76.             case 5: {
  77.                 sort(arrCopy, 10, 1);
  78.                 int min = arrCopy[0];
  79.                 int total = 0;
  80.                 for (int i = 1; i <= min; i++) {
  81.                     total += factorial(i);
  82.                 }
  83.                 printf("

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

  91.         for (int i = 0; i < 10; i++) {
  92.             arrCopy[i] = arr[i];
  93.         }
  94.     }
  95.     return 0;
  96. }
复制代码


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

请注意,这个程序没有异常处理,因此,如果输入的不是整数或者超出选项范围,程序可能会出现错误。为了使程序更稳定,你可能需要添加一些异常处理的代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-20 16:47:32 | 显示全部楼层
谢谢各位大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 16:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表