注册 登录
编程论坛 C语言论坛

函数嵌套调用出现错误

风过无痕1989 发布于 2020-07-17 20:22, 3318 次点击
//给出一个正整数,求小于等于该正整数的所有自然数的 N 次数的阶乘之和
#include<stdio.h>
int power(int,int);                              // 声明求 N 次方函数
long factorail(int);                             // 声明求阶乘函数
int main()
{
     int i,m,n,sum=0;
    scanf("%d,%d\n",&m,&n);
    sum = 1;
    for (i = 2;i <= m;i++)
    {
        sum = sum + power(m,n);                   // 调用求 m 的 n 次方函数
    }
    printf("%d 的 %d 次方的阶乘是:%d\n",m,n,sum);
}


//求数的N次方子函数
int power(int m,int n)
{
    int x = 1;
    int y =0;
    while (n != 0)
    {
        x *= m;
        --n;
    }
        y = factorail(int x);                       // 调用求阶乘函数
    return 0;

}


//求数的阶乘子函数
long factorail(int)
{
    int result = 1;
    int z;
    z = x;
    while (z != 0)
    {
        result = result * z;
        --z;
    }                           
    return 0;
}

    程序编译时在 y = factorail(int x) 出现三个错误:1、error C2143: syntax error : missing ')' before 'type'  2、error C2198: 'factorail' : too few actual parameters  3、error C2059: syntax error : ')'  请教如何修改程序,谢谢!
 
15 回复
#2
八画小子2020-07-18 02:51
最好给出数学公式,感觉你的描述有歧义。
对于你说的编译错误,你自己查看你的源代码,看看所有的内容是否是你逻辑的真实表达。
不要抄袭网上代码或别人写的代码,编译一不通过就来论坛问大家。遇到编译错误,仔细找寻出错的地方。编译错误信息会很清晰地指出错误所在。

[此贴子已经被作者于2020-7-18 09:46编辑过]

#3
纯蓝之刃2020-07-18 09:50
程序代码:
//给出一个正整数,求小于等于该正整数的所有自然数的 N 次数的阶乘之和
#include<stdio.h>
long power(int,int);                              // 声明求 N 次方函数
long factorail(int);                             // 声明求阶乘函数
int main()
{
    int i,m,n;
    long sum;
    scanf("%d,%d",&m,&n);
    sum=1;
    for(i=2;i<=m;i++)
    {
        sum=sum+power(m,n);                   // 调用求 m 的 n 次方函数
    }
    printf("%d 的 %d 次方的阶乘是:%d\n",m,n,sum);
}


//求数的N次方子函数
long power(int m,int n)
{
    int x=1;
    while(n!=0)
    {
        x*=m;
        --n;
    }
    return factorail(x);                       // 调用求阶乘函数
}


//求数的阶乘子函数
long factorail(int x)
{
    int result=1;
    int z;
    z=x;
    while(z!=0)
    {
        result=result*z;
        --z;
    }
    return result;
}

告警问题消除了,不过感觉你这里还是有逻辑问题
#4
风过无痕19892020-07-18 10:26
//给出一个正整数,求小于等于该正整数的所有自然数的 N 次方数的阶乘之和
// sum = 1 + (2^n)! + (3^n)! + .....+ (m^n)!
#include<stdio.h>

int main()
{
    int power(int m,int n);                              // 声明求 N 次方函数
    int factorail(int x);                                // 声明求阶乘函数
     int i = 1;
    int m;
    int n;
    int sum = 1;
    scanf("%d,%d\n",&m,&n);
    sum = 1;
     while( i < m)                                        // 调用求 m 的 n 次方函数
    {
        sum = sum + power(m,n);
        i++;

    }
    printf("%d 的 %d 次方的阶乘是:%d\n",m,n,sum);
}


//求数的N次方子函数
int power(int m,int n)
{
    int x = 1;
    int y =0;
    while (n != 0)
    {
        x = x * m;
        --n;
    }
        y = factorail(x);                                // 调用求阶乘函数
    return y;

}


//求数的阶乘子函数
int factorail(int x)
{
    int result = 1;
    int z;
    z = x;
    while (z != 0)
    {
        result = result * z;
        --z;
    }                           
    return result;
}

    经检查修改,已经没有错误了,也没有报警,但程序就是不运行:

    Loaded 'ntdll.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.

    请各位给予帮助指导,谢谢!
 
#5
风过无痕19892020-07-18 10:44
回复 3楼 纯蓝之刃
谢谢你! 我复制你的程序,已经可以运行了,但结果不对,我再修改
#6
八画小子2020-07-18 10:54
回复 4楼 风过无痕1989
不运行是什么意思?
#7
风过无痕19892020-07-18 11:06
回复 6楼 八画小子
我调试时到了主程序的循环时,已经不能按 F10 了
#8
八画小子2020-07-18 11:12
单步调试也不可以?
#9
风过无痕19892020-07-18 11:13
回复 3楼 纯蓝之刃
我试过了,你的程序没有调用求阶乘函数:

    int x=1;
    while(n!=0)
    {
        x*=m;
        --n;
    }
    return factorail(x);                       // 调用求阶乘函数

我改回了:

    int x = 1;
    int y = 0;
    while(n != 0)
    {
        x *= m;
        --n;
    }
        y = factorail(x);                       // 调用求阶乘函数
    return y;

但是很遗憾,求5的3次方时,调用求阶乘函数运行到:125 x 124 x123 x 122 x 121 x 120 时就溢出了,result 变成了负数

#10
八画小子2020-07-18 11:13
1、有没有单步调试,看看执行到哪个地方了?
2、有没有考虑计算结果已经超过了范围?
#11
风过无痕19892020-07-18 11:14
回复 8楼 八画小子
按 F10 就是单步呀
#12
风过无痕19892020-07-18 11:18
回复 10楼 八画小子
超出范围应该也是可以运行的吧?如三楼的朋友所修改的,可以运行,但是溢出了
#13
八画小子2020-07-18 11:19
以下是引用风过无痕1989在2020-7-18 11:14:01的发言:

按 F10 就是单步呀

我用的开发环境,按下F10,打开的是视频播放器😂😂😂
#14
八画小子2020-07-18 11:21
既然你是单步调试,那应该可以执行到结束吧?
#15
风过无痕19892020-07-18 11:31
回复 14楼 八画小子
    按不了 F10 键了,也就没法运行了。
    算了,三楼的朋友的程序我复制来运行,虽然溢出了,但我知道了,我的程序错在哪里了,加深了对函数调用的理解,也就可以了。
    以后还请各位朋友多多指导,谢谢!
#16
八画小子2020-07-18 11:36
以下是引用风过无痕1989在2020-7-18 11:31:30的发言:

    按不了 F10 键了,也就没法运行了。
    算了,三楼的朋友的程序我复制来运行,虽然溢出了,但我知道了,我的程序错在哪里了,加深了对函数调用的理解,也就可以了。
    以后还请各位朋友多多指导,谢谢!


Good luck!
1