鱼C论坛

 找回密码
 立即注册
查看: 818|回复: 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 编码导致的乱码问题。下面是重新编码后的代码,你可以参考一下:
#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[N];
    int i, option;
    do {
        // 输入 10 个整数保存到数组中
        printf("请依次输入%d个整数:\n", N);
        for (i = 0; i < N; i++) {
            scanf("%d", &arr[i]);
        }

        // 输出数组
        printf("您输入的10个整数为:\n");
        for (i = 0; i < N; i++) {
            printf(" %d", arr[i]);
        }
        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[i]);
                }
                printf("\n");
                break;

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

            case 5:
                printf("1! + 2! + ... + %d! = %d\n", arr[0], 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[i];
    }
    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[j] < a[j+1]) {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = 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[j] > a[j+1]) {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
}

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

最佳答案

查看完整内容

非常抱歉,可能是因为我的回答不支持 UTF-8 编码导致的乱码问题。下面是重新编码后的代码,你可以参考一下:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[N];
    int i, option;
    do {
        // 输入 10 个整数保存到数组中
        printf("请依次输入%d个整数:\n", N);
        for (i = 0; i < N; i++) {
            scanf("%d", &arr[i]);
        }

        // 输出数组
        printf("您输入的10个整数为:\n");
        for (i = 0; i < N; i++) {
            printf(" %d", arr[i]);
        }
        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[i]);
                }
                printf("\n");
                break;

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

            case 5:
                printf("1! + 2! + ... + %d! = %d\n", arr[0], 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[i];
    }
    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[j] < a[j+1]) {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = 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[j] > a[j+1]) {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
}

int factorial_sum(int a[]) {
    int i, fac = 1, sum = 0;
    for (i = 1; i <= a[0]; i++) {
        fac *= i;
        sum += fac;
    }
    return sum;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[N];
    int i, option;
    do {
        // 输入 10 个整数保存到数组中
        printf("请依次输入%d个整数:\n", N);
        for (i = 0; i < N; i++) {
            scanf("%d", &arr[i]);
        }

        // 输出数组
        printf("您输入的10个整数为:\n");
        for (i = 0; i < N; i++) {
            printf(" %d", arr[i]);
        }
        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[i]);
                }
                printf("\n");
                break;

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

            case 5:
                printf("1! + 2! + ... + %d! = %d\n", arr[0], 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[i];
    }
    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[j] < a[j+1]) {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = 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[j] > a[j+1]) {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
}

int factorial_sum(int a[]) {
    int i, fac = 1, sum = 0;
    for (i = 1; i <= a[0]; i++) {
        fac *= i;
        sum += fac;
    }
    return sum;
}
在实现上述菜单功能时,通过引入函数将不同操作封装进行处理,使代码更清晰易读。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

大哥出乱码了,看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[i];
    }
    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[i] > arr[j]) || (!asc && arr[i] < arr[j])) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}

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

int main() {
    int arr[10];
    int arrCopy[10];
    int option;

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

    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[i]);
                printf("\n");
                break;
            case 4:
                sort(arrCopy, 10, 1);
                printf("数组从小到大排序: ");
                for (int i = 0; i < 10; i++) printf("%d ", arrCopy[i]);
                printf("\n");
                break;
            case 5: {
                sort(arrCopy, 10, 1);
                int min = arrCopy[0];
                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[i] = arr[i];
        }
    }
    return 0;
}

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

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

使用道具 举报

 楼主| 发表于 2023-5-20 16:47:32 | 显示全部楼层
谢谢各位大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 20:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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