| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2949 人关注过本帖
标题:函数嵌套调用出现错误
只看楼主 加入收藏
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:15 
函数嵌套调用出现错误
//给出一个正整数,求小于等于该正整数的所有自然数的 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
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:10 
最好给出数学公式,感觉你的描述有歧义。
对于你说的编译错误,你自己查看你的源代码,看看所有的内容是否是你逻辑的真实表达。
不要抄袭网上代码或别人写的代码,编译一不通过就来论坛问大家。遇到编译错误,仔细找寻出错的地方。编译错误信息会很清晰地指出错误所在。

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

2020-07-18 02:51
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:570
专家分:3727
注 册:2019-7-29
收藏
得分:10 
程序代码:
//给出一个正整数,求小于等于该正整数的所有自然数的 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;
}

告警问题消除了,不过感觉你这里还是有逻辑问题

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-07-18 09:50
风过无痕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
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
回复 4楼 风过无痕1989
不运行是什么意思?
2020-07-18 10:54
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:0 
回复 6楼 八画小子
我调试时到了主程序的循环时,已经不能按 F10 了
2020-07-18 11:06
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
单步调试也不可以?
2020-07-18 11:12
风过无痕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
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
1、有没有单步调试,看看执行到哪个地方了?
2、有没有考虑计算结果已经超过了范围?
2020-07-18 11:13
快速回复:函数嵌套调用出现错误
数据加载中...
 
   



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

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