| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 629 人关注过本帖
标题:求助,大神帮我看看这道程序
只看楼主 加入收藏
小陈陈
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-12
结帖率:85.71%
收藏
 问题点数:0 回复次数:9 
求助,大神帮我看看这道程序
fun(int x)
{
 int j,sum=0;
for(j=1;j<=x;j++)
sum+=j;
return sum;
}
main()
{
int s,n;
scanf("%d",&n);
s=fun(n);
printf("%d",s);
}假如输入的是5,为什么去掉return后,输出会变成6,没有return语句sum的值不还是15吗?怎么会是6?也就是为什么去掉return语句后那个for语句只执行了一次就将sum的值返给s了。不是应该一直循环直到j<=x吗?
2013-08-13 22:13
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
sum值是必须要通过return 返传给调用者  你去掉return 后 行为未知

另:代码太乱  还没有分

DO IT YOURSELF !
2013-08-13 22:42
Mirob
Rank: 4
来 自:农村
等 级:业余侠客
帖 子:191
专家分:264
注 册:2012-7-20
收藏
得分:0 
楼主,我顶你
2013-08-13 23:30
mynameCX
Rank: 2
等 级:论坛游民
帖 子:7
专家分:13
注 册:2013-7-27
收藏
得分:0 
fun函数是整形函数,没返回值怎可能给s值???????????
2013-08-14 00:49
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
return表示返回返回值,去掉return,fun函数就没有返回值了,至于你说去掉return后sum是6,应该是巧合吧

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-08-14 06:21
谢跃锋
Rank: 2
等 级:论坛游民
威 望:2
帖 子:50
专家分:77
注 册:2013-4-14
收藏
得分:0 
当你去掉return后,该函数没有了返回值。即就是fun函数中的sum不会进行累加。所以只执行for语句中的第一句,满足后就是5+1=6.最后就得出6
2013-08-14 08:25
鱼儿海
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:77
专家分:194
注 册:2013-8-14
收藏
得分:0 
for语句里面,J=1,j<=x,J++,当X=5时,X的值是1,2,3,4,5.相加的15
2013-08-14 08:39
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:0 
LZ,哥来给你解惑:
因为你的函数在主函数前面定义,所以声明和定义在一块,没有写返回值的默认返回int类型,因此你的return语句才没有出错,否则会有问题

但是当你去掉return语句时候,由于函数要返回一个int类型参数,所以就返回了你fun函数里面的j的值,
你把函数返回值赋值给s,因此s就是6

不信你可以测试一下,如果你把j++改成j+=2,则返回7,如果改为j+=4则返回9

总之,这是个未知的行为,楼主以后没有必要探究这些,好像是返回最后一个赋值语句吧:

fun(int x)
{
    int j,sum=0;
   
    for(j=1;j<=x;j++)
    sum+=j;
    sum += 12;
}
main()
{
    int s,n;
    scanf("%d",&n);

    s=fun(n);
    printf("%d",s);
}



如果fun函数最后再给sum+=12赋值,则返回的是sum的值,你可以试一下,总之是未定义的行为!

[ 本帖最后由 liufashuai 于 2013-8-14 08:59 编辑 ]

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-14 08:51
jg658237
Rank: 7Rank: 7Rank: 7
来 自:青藏高原
等 级:黑侠
帖 子:224
专家分:529
注 册:2013-8-8
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
 int fun(int x)
{
int j,s=0;
for(j=1;j<=x;j++)
s+=j;

return (s);
}
 main(void)
{
int s,n;
scanf("%d",&n);
s=fun(n);
printf("%d",s);   
system("pause");
return 0;
}                        我帮你修改好了.

武功再高也怕菜刀.
2013-08-14 14:56
犿蚂
Rank: 2
等 级:论坛游民
帖 子:29
专家分:23
注 册:2013-4-24
收藏
得分:0 
假如输入的是5,去掉return后,fun()好像是返回j值,反正不是sum的值,执行的次数没问题,是返回值得问题。调用函数fun()要确定返回值类型,即这里返回值类型为int类型,在fun()前加int。
int fun(int x)
{
    int j,sum=0;
    for(j=1;j<=x;j++)
        sum+=j;
    return sum;
}
main()
{
    int s,n;
    scanf("%d",&n);
    s=fun(n);
    printf("%d",s);
}
注意书写规范,老师教我们这样写比较好看
2013-08-15 15:54
快速回复:求助,大神帮我看看这道程序
数据加载中...
 
   



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

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