标题:函数嵌套调用出现错误
取消只看楼主
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
结帖率:88.89%
已结贴  问题点数:20 回复次数:7 
函数嵌套调用出现错误
//给出一个正整数,求小于等于该正整数的所有自然数的 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 : ')'  请教如何修改程序,谢谢!
 
搜索更多相关主题的帖子: 调用 函数 sum 阶乘 int 
2020-07-17 20:22
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
得分:0 
//给出一个正整数,求小于等于该正整数的所有自然数的 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.

    请各位给予帮助指导,谢谢!
 
2020-07-18 10:26
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
得分:0 
回复 3楼 纯蓝之刃
谢谢你! 我复制你的程序,已经可以运行了,但结果不对,我再修改
2020-07-18 10:44
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
得分:0 
回复 6楼 八画小子
我调试时到了主程序的循环时,已经不能按 F10 了
2020-07-18 11:06
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
得分:0 
回复 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 变成了负数

2020-07-18 11:13
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
得分:0 
回复 8楼 八画小子
按 F10 就是单步呀
2020-07-18 11:14
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
得分:0 
回复 10楼 八画小子
超出范围应该也是可以运行的吧?如三楼的朋友所修改的,可以运行,但是溢出了
2020-07-18 11:18
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
得分:0 
回复 14楼 八画小子
    按不了 F10 键了,也就没法运行了。
    算了,三楼的朋友的程序我复制来运行,虽然溢出了,但我知道了,我的程序错在哪里了,加深了对函数调用的理解,也就可以了。
    以后还请各位朋友多多指导,谢谢!
2020-07-18 11:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502555-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.963356 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved