回 帖 发 新 帖 刷新版面

主题:帮我看看怎么无法运行啊

#include <stdio.h>

void fac()
{
    double f, s;
    int n, t;
    
    printf("请输入1个数:");
    scanf("%d", &n);
    t = n;
    if(n < 0) {
        printf("输入有误");
        return;
    }
    f = 1;
    s = 0;
    while(t > 0)
        f *= t, s += t--;

    printf("%d的阶乘积是:%.f\n", n, f);
    printf("%d的累加和是:%.f\n", n, s);
}

void pown()
{
    double x;
    int n, m, f, i;
    
    printf("请输入底数和幂:");
    scanf("%d%d", &n, &m);
    if(n < 0) {
        printf("输入有误");
        return;
    }
    x = n;
    f = 0;
    if(m < 0) m = -m, f = 1;
    
    for(i = 1; i < m; ++i)
        x *= n;
    if(f) x = 1/x;
    printf("%d的%d次幂是:%f\n", n, f ? -m : m, x);
}

void gcdlcm()
{
    int a, b, a1, b1, t;
    
    printf("请输入2个数:");
    scanf("%d%d", &a, &b);
    a1 = a;
    b1 = b;
    while(b1 % a1 != 0) {
        t = a1;
        a1 = b1 % a1;
        b1 = t;
    }
    
    printf("%d与%d的最大公约数是:%d\n", a, b, a1);
    printf("%d与%d的最小公倍数是:%d\n", a, b, a*b/a1);
}

void prime()
{
    int n, i;
    
    printf("请输入1个数:");
    scanf("%d", &n);
    if(n == 0 || n == 1) i = 1; else
    for(i=n/2; n%i; --i);
    printf("%d%s素数\n", n, i == 1 ? "是" : "不是");
}

void fib()
{
    int n, a, b, c;
    
    printf("请输入项数:");
    scanf("%d", &n);
    a = 1;
    b = 0;
    printf("Fibonacci数列前%d项为:\n", n);
    while(n-- > 0) {
        printf("%d ", c=a+b);
        a = b;
        b = c;
    }
    putchar('\n');
}


int main()
{
    void (*f[])() = {fac, pown, gcdlcm, prime, fib};
    int s;
    while(s) {
        printf("(1)阶乘和累加积\t(2)正整数N次方\n");
        printf("(3)gcdlcm\t(4)判断素数\n");
        printf("(5)Fibonacci\t\n");
        printf("请选择:");
        scanf("%d", &s);
        if(s < 0 || s > 5)
            printf("输入有误!\n");
        else if(s != 0)
            f[s-1]();
    }
    return 0;
}
32.数学计算工具程序设计(3人,C类)
功能要求:各计算功能单独编写成函数,在主函数中通过选项菜单调用函数。
(1)选项菜单集成各个计算功能函数
(2)求任意数的阶乘
(3)求组合数
(4)求任意两个整数的最大公约数和最小公倍数
(5)判断任意数是否是素数
(6)显示菲波拉契数列的前N项

回复列表 (共1个回复)

沙发

函数指针数组?!看着晕菜了。你应该给s初始化一个不为0的值,或者用do while循环,否则的话部分编译器会把s初始为0,自然就直接结束了

我来回复

您尚未登录,请登录后再回复。点此登录或注册