注册 登录
编程论坛 C++教室

为什么这里的sum函数老是提示警告呢?

晨曦你妹 发布于 2013-05-08 21:43, 1139 次点击
求解释啊 ,,为什么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
不知道哪里不对啊 ??大神......
9 回复
#2
fxbszj2013-05-08 22:03
没有声明,在int main()前加一个int sum(int m);注意有分号。或者把后面的定义直接移动到main之前,那样就不用声明了。另外,int main(){}    别把int给省了
#3
晨曦你妹2013-05-08 22:07
回复 2楼 fxbszj
感谢大神,能给我直接改下吗?我还是不太明白啊,新手呢....
#4
谢跃锋2013-05-08 22:56
简单的说,就是这样
#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);
 }懂么?
#5
晨曦你妹2013-05-08 23:23
回复 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
怎么回事呢?输入一个数结果是个错误的结果。。。一个很大的负数
#6
fxbszj2013-05-09 08:28
程序代码:
#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 编辑 ]
#7
不要脸的猫2013-05-09 08:59
double h=0;

h+=(double)k/j;
#8
尹金魁20312013-05-10 17:36
这是C++论坛,不是C论坛.
#9
大头皮鞋2013-05-10 21:50
因为能力有限并且对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()
#10
邓士林2013-05-10 21:53
你写在主函数下面了,所以会提示没有声明,就是不合法,所以你在主函数中声明下就可以了。
1