| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1139 人关注过本帖
标题:为什么这里的sum函数老是提示警告呢?
只看楼主 加入收藏
晨曦你妹
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-4-24
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:9 
为什么这里的sum函数老是提示警告呢?
求解释啊 ,,为什么sum函数不能调用啊??以前都可以直接用的啊!?
题目是:编写一个函数,计算s=1/2+2/3+3/4+...+n-1/n。
我的代码是:
#include<stdio.h>
main()
{
double s,n;
scanf("%d",&n);  
s=sum(n);
printf("%f\n",s);
}
int sum(int m)
{
    int h,k,j;
    for(k=1,j=2;j<=m;j++)
    h=k/j;
    k=j;
    return h;
}
运行老是提示这个:C:\Users\Administrator\Desktop\f.c(6) : warning C4013: 'sum' undefined; assuming extern returning int
不知道哪里不对啊 ??大神......
搜索更多相关主题的帖子: double 函数 
2013-05-08 21:43
fxbszj
Rank: 5Rank: 5
来 自:阿修罗界
等 级:职业侠客
威 望:4
帖 子:163
专家分:331
注 册:2012-10-8
收藏
得分:2 
没有声明,在int main()前加一个int sum(int m);注意有分号。或者把后面的定义直接移动到main之前,那样就不用声明了。另外,int main(){}    别把int给省了
2013-05-08 22:03
晨曦你妹
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-4-24
收藏
得分:0 
回复 2楼 fxbszj
感谢大神,能给我直接改下吗?我还是不太明白啊,新手呢....
2013-05-08 22:07
谢跃锋
Rank: 2
等 级:论坛游民
威 望:2
帖 子:50
专家分:77
注 册:2013-4-14
收藏
得分:1 
简单的说,就是这样
#include<stdio.h>
int sum(int m)
 {
     int h,k,j;
     for(k=1,j=2;j<=m;j++)
     h=k/j;
     k=j;
     return h;
 }
 void main()
 {
 double s,n;
 scanf("%d",&n);  
 s=sum(n);
 printf("%f\n",s);
 }懂么?
2013-05-08 22:56
晨曦你妹
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-4-24
收藏
得分:0 
回复 4楼 谢跃锋
嗯,明白了,可是运行还是有提示错误
C:\Users\Administrator\Desktop\x.c(14) : warning C4244: 'function' : conversion from 'double ' to 'int ', possible loss of data
C:\Users\Administrator\Desktop\x.c(14) : warning C4761: integral size mismatch in argument; conversion supplied
怎么回事呢?输入一个数结果是个错误的结果。。。一个很大的负数
2013-05-08 23:23
fxbszj
Rank: 5Rank: 5
来 自:阿修罗界
等 级:职业侠客
威 望:4
帖 子:163
专家分:331
注 册:2012-10-8
收藏
得分:5 
程序代码:
#include<stdio.h>
int sum(int m);
void main()
{
double s,n;
scanf("%d",&n);  
s=sum(n);
printf("%f\n",s);
}
int sum(int m)
{
    int ,k,j;
    double h;
    for(k=1,j=2;j<=m;j++)
    h=k/j;
    k=j;
    return h;
}


至于你上面的的提示,是因为那句  h=k/j  而你定义h的却是int型,应该定义为double型。你这么做结果就会将double型强制转化成int型,运行应该没有问题,只是结果会省略小数部分

[ 本帖最后由 fxbszj 于 2013-5-9 08:34 编辑 ]
2013-05-09 08:28
不要脸的猫
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:41
专家分:126
注 册:2012-6-20
收藏
得分:0 
double h=0;

h+=(double)k/j;

埋骨何须桑梓地,人生无处不青山
2013-05-09 08:59
尹金魁2031
Rank: 3Rank: 3
来 自:河南省南阳市
等 级:论坛游侠
帖 子:156
专家分:162
注 册:2012-12-29
收藏
得分:1 
这是C++论坛,不是C论坛.
2013-05-10 17:36
大头皮鞋
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2013-5-10
收藏
得分:1 
因为能力有限并且对c也不了解,没有正确运行(编译器没报错但得不出任何结果)   但我还是找出几个自认为有错误的地方   
#include<stdio.h>
double sum(double m);
int main()
{
double s,n;
scanf("%d",&n);  
s=sum(n);
printf("%f\n",s);
}
double sum(double m)
{
    int k,j;
    double h;
    for(k=1,j=2;j<=m;j++)
    h=k/j;
    k=j;
    return h;
}
我根据阿修罗界的代码又改了一些东西
将int sum(int m)改为 double sum(double m):  因为开始你将n初始化为double类型, s=sum(n)中n为double类型但是你却将形参m初始化为int类型  形参m与实参n类型不匹配不可能发生函数的调用
在sum()函数中h为double类型,return h函数sum()返回的h是double类型   所以int sum()改为double sum()
我的编译器DEV-C++将void main()报错 说  必须用int main() 这个我也不知为什么应该是编译器问题并且标准的是int main()
2013-05-10 21:50
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:0 
你写在主函数下面了,所以会提示没有声明,就是不合法,所以你在主函数中声明下就可以了。

Maybe
2013-05-10 21:53
快速回复:为什么这里的sum函数老是提示警告呢?
数据加载中...
 
   



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

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