标题:关于考察变量的作用域和生存期知识点
只看楼主
cquwt
Rank: 1
等 级:新手上路
帖 子:41
专家分:2
注 册:2013-12-24
结帖率:69.23%
已结贴  问题点数:5 回复次数:8 
关于考察变量的作用域和生存期知识点
“编写一个自定义函数求x的n次方,要求利用静态变量实现xn,并编写主函数进行测试。”静态变量不是很懂。。。这是我写的,感觉不会使用静态变量啊。
程序代码:
#include <stdio.h>
double fun(double x,int n);
void main()
{ double x;
  int n;
  double s;
  printf("Input the x&n:  ");
  scanf("%lf,%d",&x,&n);
  s=fun(x,n);
  printf("\n");
  printf("%lf的%d次方是:%.2lf\n",x,n,s);
}
double fun(double x,int n)
{ 
  double g=x;
  int i;
  for(i=1;i<n;i++)
      g*=x;
  return g;  
}
搜索更多相关主题的帖子: 知识点 
2014-05-25 23:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:5 
這個功能沒必要用靜態變量,也用不上。

授人以渔,不授人以鱼。
2014-05-25 23:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
我不知道現在的教程爲什麽那麽喜歡教人無緣無故地使用遞歸編程,還用這種强迫性的題目來達到目的。

授人以渔,不授人以鱼。
2014-05-25 23:24
cquwt
Rank: 1
等 级:新手上路
帖 子:41
专家分:2
注 册:2013-12-24
得分:0 
可是除了这个题本身,静态变量该怎么用啊?
2014-05-26 19:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
以下是引用cquwt在2014-5-26 19:19:00的发言:

可是除了这个题本身,静态变量该怎么用啊?

所謂的靜態,其英文static,是穩定的意思,亦即不易消逝,與自動(auto)相對。在一個作用域中(不管是函數、文件、還是花括號),若聲明是static的變量,則它就與auto變量不同,在運行指令超越作用域的時候,這種變量是不會消失的,但作用域之外,卻仍然與auto變量一樣,無法訪問這個static變量,這點則是很好地保留了數據的隱藏性,是static數據與全局數據的根本區別點,除了在本作用域之内,在外部無法訪問和修改它,而全局變量是非常容易被誤改和泄漏數據内容的。static是C語言模仿C++類數據的重要手段,當我們要用C仿照C++寫面嚮對象程序的時候,就會發現這種聲明起巨大的幫助作用。

由於static是與auto對立的概念,所以它們的用法主要體現在進出作用域上面。如前所述,當你需要某個數據在退出函數(作用域)之後,仍然保持住它已經獲得的數據不丟失,就使用這種數據聲明,盡量避免用全局聲明。

像你這個題目,要使用靜態變量,就應是多次調用同一函數的,但分明是可以在函數中用循環實現的功能,卻要求用靜態,那麽除了需要多次調用同一函數之外,別無可用之處,這種功能非遞歸莫屬——用遞歸的效率絕對比非遞歸的實現效率低,除非表達邏輯清晰需要,應盡量回避遞歸的使用。這個題目根本就不要考慮遞歸!

授人以渔,不授人以鱼。
2014-05-26 21:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
static數據最常用的場合,是文件,即模塊,這種變量在該文件内部是全局的,但在文件外部無法知悉有這種數據的存在,猶如C++類中的私有變量,在類内也是全盤可見的,而在類外則不可見,既有全局變量的優點,又回避了缺點。用C寫面嚮對象的程序,就用模塊文件來封裝數據和函數,是傳統上C程序的做法,不要以爲C程序就不能封裝了,除了繼承難以做到,在封裝方面,C語言完全可以模擬出面嚮對象的功能。學C,若學不會分模塊寫程序,等於白學,算不上會編程,必定無法寫一定規模程序的。

授人以渔,不授人以鱼。
2014-05-26 21:58
cquwt
Rank: 1
等 级:新手上路
帖 子:41
专家分:2
注 册:2013-12-24
得分:0 
可以举几个关于使用到静态变量的例题 分别加以分析吗
2014-05-30 14:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
比如函數:
程序代码:
void fun(void)
{
    static int count = 0;
    ++count;

    ……
}


裏面的靜態變量count,就是一個統計器,它統計本函數被調用了多少次。

授人以渔,不授人以鱼。
2014-05-31 12:03
qidian123
Rank: 2
等 级:论坛游民
帖 子:19
专家分:34
注 册:2012-4-18
得分:0 
tatic數據最常用的場合,是文件,即模塊,這種變量在該文件内部是全局的,但在文件外部無法知悉有這種數據的存在,猶如C++類中的私有變量,在類内也是全盤可見的,而在類外則不可見,既有全局變量的優點,又回避了缺點。用C寫面嚮對象的程序,就用模塊文件來封裝數據和函數,是傳統上C程序的做法,不要以爲C程序就不能封裝了,除了繼承難以做到,在封裝方面,C語言完全可以模擬出面嚮對象的功能。學C,若學不會分模塊寫程序,等於白學,算不上會編程,必定無法寫一定規模程序的。

www.jiajunyuanlin.com  www.futegz.comjtiao.com
2014-06-04 20:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-432048-1-1.html




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

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