| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 912 人关注过本帖
标题:求助各位好心人帮忙解答
只看楼主 加入收藏
baby99
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-3-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
求助各位好心人帮忙解答
#include<stdio.h>
int Square(int i);
main()
{
   int i=0;
   i = Square(i);
   for( ; i<5; i+=2 )
   {
       static int i = 1;
       i += Square(i);
       printf("%d\t", i);
   }
   printf("%d\n", i);
}
 
int Square(int i)
{
   return i*i;
}

输出结果是:2       6       42      6
-------------------------------------
想问下for循环为什么循环了3次?
第一次 i=0<5  i=1+1=2  i=2+2=4
第二次 i=4<5  i=2+4=6  i=6+2=8
第三次 1=8>5 跳出循环

不知道哪里错了,感谢各位大神帮忙看下
搜索更多相关主题的帖子: static include return 
2013-03-25 11:19
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
为啥要使用static呢

DO IT YOURSELF !
2013-03-25 11:21
baby99
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-3-25
收藏
得分:0 
回复 2楼 wp231957
是一个学校的期末考试题 可能他想考static的用法吧 我也纠结那个static到底是怎么用的呢
2013-03-25 11:30
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:0 
典型的自己蒙自己,定义两个一样的变量在那儿跑,这种题没意思
2013-03-25 11:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
现在的考试就是专门用这种题毁人子弟。

授人以渔,不授人以鱼。
2013-03-25 11:53
pengyancai
Rank: 2
等 级:论坛游民
帖 子:57
专家分:46
注 册:2013-3-4
收藏
得分:0 
回复 3楼 baby99
static是申明静态变量,会保留被申明的变量上次调用结束时的值。至道程序结束才释放存储单元。
2013-03-25 12:09
pengyancai
Rank: 2
等 级:论坛游民
帖 子:57
专家分:46
注 册:2013-3-4
收藏
得分:0 
回复 5楼 TonyDeng
兄弟,同感啊
2013-03-25 12:27
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
静态变量是运行时一直存在滴

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-03-25 12:31
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:20 
楼主的问题涉及到自动(auto)变量,和静态(static)变量,   
自动变量在定义时可以加前缀 auto 也可以什么都不加,就像int i....
静态变量定义时前面加上static修饰,使用特征是:静态变量被调用后,调用是值并不消失,当再次调用时上次调用的结果就作为本次的初值使用;

注意变量 i ,楼主在两个地方有定义(如下程序红色代码),但它们的作用范围不同,内嵌复合语句中的 i 只在此复合语句中起作用;而外部的 i 在整个函数中起作用,但因为被内嵌复合语句中的 i 所屏蔽,所以其作用达不到复合语句内部;因此,这两个 i 虽然名字一样,但却是两个不同的变量。

下面我们就楼主的程序进行分析:
#include<stdio.h>
int Square(int i);
main()
{
   int i=0;         //此处定义的i是外部变量
   i = Square(i);
   for( ; i<5; i+=2 ) //括号里面的i任然是外部变量
   {
       static int i = 1; //此处楼主又定义了一个静态变量,也是复合语句内的变量,只在此复合语句中起作用,而且for后面花括号里面的复合语句里的 i 全是静态变量
       i += Square(i);
       printf("%d\t", i);
   }
   printf("%d\n", i); //到此,复合语句已经结束,所以此处输出的 i 是外部的 i
}

int Square(int i)
{
   return i*i;
}

下面,我们来讨论输出:(这里,为讨论方便,外部 i 就用 i 表示,内部 i 用 si 表示)
i=0<5, si=1, si=1+1*1=2,  输出2; i=i+2=2;
i=2<5, si=2, si=2+2*2=6,   输出6; i=4;
i=4<5, si=6, si=6+6*6=42,  输出42; i=6;
i=6>5,循环结束;
输出i ,i=6;

三十年河东,三十年河西,莫欺少年穷!
2013-03-25 12:37
pengyancai
Rank: 2
等 级:论坛游民
帖 子:57
专家分:46
注 册:2013-3-4
收藏
得分:0 
回复 9楼 韶志
好精辟的讲解,学习了。
2013-03-25 13:17
快速回复:求助各位好心人帮忙解答
数据加载中...
 
   



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

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