C语言求助
1、依次输入10个整数保存到一个数组中,并统一输出一次;2、输出功能项和菜单如下:
$******************功能菜单***********************$
$ 0. 退出 $
$ 1. 计算数组中10个数之和并输出 $
$ 2. 计算数组中10个数的平均数并输出 $
$ 3. 数组从大到小排序输出,需保留原数组 $
$ 4. 数组从小到大排序输出,需保留原数组 $
$ 5. 计算1!+2!+..+(数组中最小数)!之和并输出 $
$**************************************************$
请选择您的操作(0-5):
3、完善上述0-5的相应程序
本帖最后由 陶远航 于 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;
}
下面是 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:09
下面是 C 语言代码,实现了输入 10 个整数并在菜单中提供了 5 种操作选项:
在实现上述菜单功能时,通过 ...
大哥出乱码了,看不懂{:10_282:} 以下是针对您问题的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个整数并存储在数组中,然后循环输出功能菜单并等待用户输入选项。根据用户的选择,执行相应的功能,并打印结果。如果用户选择退出,程序将结束运行。在排序和计算阶乘和的操作中,我们都使用了一个副本数组,以防改变原始数组的顺序。
请注意,这个程序没有异常处理,因此,如果输入的不是整数或者超出选项范围,程序可能会出现错误。为了使程序更稳定,你可能需要添加一些异常处理的代码。 谢谢各位大佬
页:
[1]