久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      C語(yǔ)言入門之函數(shù)(2)

         一、函數(shù)的參數(shù)

         前面已經(jīng)介紹過(guò),函數(shù)的參數(shù)分為形參和實(shí)參兩種。 在本小節(jié)中,進(jìn)一步介紹形參、實(shí)參的特點(diǎn)和兩者的關(guān)系。 形參出現(xiàn)在函數(shù)定義中,在整個(gè)函數(shù)體內(nèi)都可以使用, 離開(kāi)該函數(shù)則不能使用。實(shí)參出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實(shí)參變量也不能使用。 形參和實(shí)參的功能是作數(shù)據(jù)傳送。發(fā)生函數(shù)調(diào)用時(shí), 主調(diào)函數(shù)把實(shí)參的值傳送給被調(diào)函數(shù)的形參從而實(shí)現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。

         函數(shù)的形參和實(shí)參具有以下特點(diǎn):

         1.形參變量只有在被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí), 即刻釋放所分配的內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。 函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。

         2.實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等, 無(wú)論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應(yīng)預(yù)先用賦值,輸入等辦法使實(shí)參獲得確定值。

         3.實(shí)參和形參在數(shù)量上,類型上,順序上應(yīng)嚴(yán)格一致, 否則會(huì)發(fā)生“類型不匹配”的錯(cuò)誤。

         4.函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。 即只能把實(shí)參的值傳送給形參,而不能把形參的值反向地傳送給實(shí)參。 因此在函數(shù)調(diào)用過(guò)程中,形參的值發(fā)生改變,而實(shí)參中的值不會(huì)變化。例5.3可以說(shuō)明這個(gè)問(wèn)題。

      void main()
      {
      int n;
      printf(“input numbern”);
      scanf(“%d”,&n);
      s(n);
      printf(“n=%dn”,n);
      }
      int s(int n)
      {
      int i;
      for(i=n-1;i>=1;i–)
      n=n+i;
      printf(“n=%dn”,n);
      }

         本程序中定義了一個(gè)函數(shù)s,該函數(shù)的功能是求∑ni=1i 的值。在主函數(shù)中輸入n值,并作為實(shí)參,在調(diào)用時(shí)傳送給s 函數(shù)的形參量n( 注意,本例的形參變量和實(shí)參變量的標(biāo)識(shí)符都為n, 但這是兩個(gè)不同的量,各自的作用域不同)。 在主函數(shù)中用printf 語(yǔ)句輸出一次n值,這個(gè)n值是實(shí)參n的值。在函數(shù)s中也用printf 語(yǔ)句輸出了一次n值,這個(gè)n值是形參最后取得的n值0。從運(yùn)行情況看,輸入n值為100。即實(shí)參n的值為100。把此值傳給函數(shù)s時(shí),形參 n 的初值也為100,在執(zhí)行函數(shù)過(guò)程中,形參n的值變?yōu)?050。 返回主函數(shù)之后,輸出實(shí)參n的值仍為100。可見(jiàn)實(shí)參的值不隨形參的變化而變化。

         二、函數(shù)的值

         函數(shù)的值是指函數(shù)被調(diào)用之后, 執(zhí)行函數(shù)體中的程序段所取得的并返回給主調(diào)函數(shù)的值。如調(diào)用正弦函數(shù)取得正弦值,調(diào)用例5.1的max函數(shù)取得的最大數(shù)等。對(duì)函數(shù)的值(或稱函數(shù)返回值)有以下一些說(shuō)明:

         1. 函數(shù)的值只能通過(guò)return語(yǔ)句返回主調(diào)函數(shù)。return 語(yǔ)句的一般形式為:

         return 表達(dá)式;

         或者為:

         return (表達(dá)式);

         該語(yǔ)句的功能是計(jì)算表達(dá)式的值,并返回給主調(diào)函數(shù)。 在函數(shù)中允許有多個(gè)return語(yǔ)句,但每次調(diào)用只能有一個(gè)return 語(yǔ)句被執(zhí)行, 因此只能返回一個(gè)函數(shù)值。

         2. 函數(shù)值的類型和函數(shù)定義中函數(shù)的類型應(yīng)保持一致。 如果兩者不一致,則以函數(shù)類型為準(zhǔn),自動(dòng)進(jìn)行類型轉(zhuǎn)換。

         3. 如函數(shù)值為整型,在函數(shù)定義時(shí)可以省去類型說(shuō)明。

         4. 不返回函數(shù)值的函數(shù),可以明確定義為“空類型”, 類型說(shuō)明符為“void”。如例5.3中函數(shù)s并不向主函數(shù)返函數(shù)值,因此可定義為:

      void s(int n)
      { ……
      }

         一旦函數(shù)被定義為空類型后, 就不能在主調(diào)函數(shù)中使用被調(diào)函數(shù)的函數(shù)值了。例如,在定義s為空類型后,在主函數(shù)中寫下述語(yǔ)句 sum=s(n); 就是錯(cuò)誤的。為了使程序有良好的可讀性并減少出錯(cuò), 凡不要求返回值的函數(shù)都應(yīng)定義為空類型。函數(shù)說(shuō)明在主調(diào)函數(shù)中調(diào)用某函數(shù)之前應(yīng)對(duì)該被調(diào)函數(shù)進(jìn)行說(shuō)明, 這與使用變量之前要先進(jìn)行變量說(shuō)明是一樣的。 在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)作說(shuō)明的目的是使編譯系統(tǒng)知道被調(diào)函數(shù)返回值的類型, 以便在主調(diào)函數(shù)中按此種類型對(duì)返回值作相應(yīng)的處理。 對(duì)被調(diào)函數(shù)的說(shuō)明也有兩種格式,一種為傳統(tǒng)格式,其一般格式為: 類型說(shuō)明符 被調(diào)函數(shù)名(); 這種格式只給出函數(shù)返回值的類型,被調(diào)函數(shù)名及一個(gè)空括號(hào)。

         這種格式由于在括號(hào)中沒(méi)有任何參數(shù)信息, 因此不便于編譯系統(tǒng)進(jìn)行錯(cuò)誤檢查,易于發(fā)生錯(cuò)誤。另一種為現(xiàn)代格式,其一般形式為:

         類型說(shuō)明符 被調(diào)函數(shù)名(類型 形參,類型 形參…);

         或?yàn)椋?/p>

         類型說(shuō)明符 被調(diào)函數(shù)名(類型,類型…);

         現(xiàn)代格式的括號(hào)內(nèi)給出了形參的類型和形參名, 或只給出形參類型。這便于編譯系統(tǒng)進(jìn)行檢錯(cuò),以防止可能出現(xiàn)的錯(cuò)誤。例5.1 main函數(shù)中對(duì)max函數(shù)的說(shuō)明若

         用傳統(tǒng)格式可寫為:

      int max();

         用現(xiàn)代格式可寫為:

      int max(int a,int b);

         或?qū)憺?

      int max(int,int);

         C語(yǔ)言中又規(guī)定在以下幾種情況時(shí)可以省去主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)的函數(shù)說(shuō)明。

         1. 如果被調(diào)函數(shù)的返回值是整型或字符型時(shí), 可以不對(duì)被調(diào)函數(shù)作說(shuō)明,而直接調(diào)用。這時(shí)系統(tǒng)將自動(dòng)對(duì)被調(diào)函數(shù)返回值按整型處理。例5.3的主函數(shù)中未對(duì)函數(shù)s作說(shuō)明而直接調(diào)用即屬此種情形。

         2. 當(dāng)被調(diào)函數(shù)的函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前時(shí), 在主調(diào)函數(shù)中也可以不對(duì)被調(diào)函數(shù)再作說(shuō)明而直接調(diào)用。例如例5.1中, 函數(shù)max的定義放在main 函數(shù)之前,因此可在main函數(shù)中省去對(duì) max函數(shù)的函數(shù)說(shuō)明int max(int a,int b)。

         3. 如在所有函數(shù)定義之前, 在函數(shù)外預(yù)先說(shuō)明了各個(gè)函數(shù)的類型,則在以后的各主調(diào)函數(shù)中,可不再對(duì)被調(diào)函數(shù)作說(shuō)明。例如:

      char str(int a);
      float f(float b);
      main()
      {
      ……
      }
      char str(int a)
      {
      ……
      }
      float f(float b)
      {
      ……
      }

         其中第一,二行對(duì)str函數(shù)和f函數(shù)預(yù)先作了說(shuō)明。 因此在以后各函數(shù)中無(wú)須對(duì)str和f函數(shù)再作說(shuō)明就可直接調(diào)用。

         4. 對(duì)庫(kù)函數(shù)的調(diào)用不需要再作說(shuō)明, 但必須把該函數(shù)的頭文件用include命令包含在源文件前部。數(shù)組作為函數(shù)參數(shù)數(shù)組可以作為函數(shù)的參數(shù)使用,進(jìn)行數(shù)據(jù)傳送。 數(shù)組用作函數(shù)參數(shù)有兩種形式,一種是把數(shù)組元素(下標(biāo)變量)作為實(shí)參使用; 另一種是把數(shù)組名作為函數(shù)的形參和實(shí)參使用。一、數(shù)組元素作函數(shù)實(shí)參數(shù)組元素就是下標(biāo)變量,它與普通變量并無(wú)區(qū)別。 因此它作為函數(shù)實(shí)參使用與普通變量是完全相同的,在發(fā)生函數(shù)調(diào)用時(shí), 把作為實(shí)參的數(shù)組元素的值傳送給形參,實(shí)現(xiàn)單向的值傳送。例5.4說(shuō)明了這種情況。[例5.4]判別一個(gè)整數(shù)數(shù)組中各元素的值,若大于0 則輸出該值,若小于等于0則輸出0值。編程如下:

      void nzp(int v)
      {
      if(v>0)
      printf(“%d “,v);
      else
      printf(“%d “,0);
      }
      main()
      {
      int a[5],i;
      printf(“input 5 numbersn”);
      for(i=0;i<5;i++)
      {
      scanf(“%d”,&a[i]);
      nzp(a[i]);
      }
      }void nzp(int v)
      { ……
      }
      main()
      {
      int a[5],i;
      printf(“input 5 numbersn”);
      for(i=0;i<5;i++)
      { scanf(“%d”,&a[i]);
      nzp(a[i]);
      }
      }

         本程序中首先定義一個(gè)無(wú)返回值函數(shù)nzp,并說(shuō)明其形參v 為整型變量。在函數(shù)體中根據(jù)v值輸出相應(yīng)的結(jié)果。在main函數(shù)中用一個(gè)for 語(yǔ)句輸入數(shù)組各元素, 每輸入一個(gè)就以該元素作實(shí)參調(diào)用一次nzp函數(shù),即把a(bǔ)[i]的值傳送給形參v,供nzp函數(shù)使用。

         二、數(shù)組名作為函數(shù)參數(shù)

         用數(shù)組名作函數(shù)參數(shù)與用數(shù)組元素作實(shí)參有幾點(diǎn)不同:

         1. 用數(shù)組元素作實(shí)參時(shí),只要數(shù)組類型和函數(shù)的形參變量的類型一致,那么作為下標(biāo)變量的數(shù)組元素的類型也和函數(shù)形參變量的類型是一致的。因此, 并不要求函數(shù)的形參也是下標(biāo)變量。 換句話說(shuō),對(duì)數(shù)組元素的處理是按普通變量對(duì)待的。用數(shù)組名作函數(shù)參數(shù)時(shí), 則要求形參和相對(duì)應(yīng)的實(shí)參都必須是類型相同的數(shù)組,都必須有明確的數(shù)組說(shuō)明。當(dāng)形參和實(shí)參二者不一致時(shí),即會(huì)發(fā)生錯(cuò)誤。

         2. 在普通變量或下標(biāo)變量作函數(shù)參數(shù)時(shí),形參變量和實(shí)參變量是由編譯系統(tǒng)分配的兩個(gè)不同的內(nèi)存單元。在函數(shù)調(diào)用時(shí)發(fā)生的值傳送是把實(shí)參變量的值賦予形參變量。在用數(shù)組名作函數(shù)參數(shù)時(shí),不是進(jìn)行值的傳送,即不是把實(shí)參數(shù)組的每一個(gè)元素的值都賦予形參數(shù)組的各個(gè)元素。因?yàn)閷?shí)際上形參數(shù)組并不存在,編譯系統(tǒng)不為形參數(shù)組分配內(nèi)存。那么,數(shù)據(jù)的傳送是如何實(shí)現(xiàn)的呢? 在第四章中我們?cè)榻B過(guò),數(shù)組名就是數(shù)組的首地址。因此在數(shù)組名作函數(shù)參數(shù)時(shí)所進(jìn)行的傳送只是地址的傳送, 也就是說(shuō)把實(shí)參數(shù)組的首地址賦予形參數(shù)組名。形參數(shù)組名取得該首地址之后,也就等于有了實(shí)在的數(shù)組。實(shí)際上是形參數(shù)組和實(shí)參數(shù)組為同一數(shù)組,共同擁有一段內(nèi)存空間。圖5.1說(shuō)明了這種情形。圖中設(shè)a為實(shí)參數(shù)組,類型為整型。a占有以2000 為首地址的一塊內(nèi)存區(qū)。b為形參數(shù)組名。當(dāng)發(fā)生函數(shù)調(diào)用時(shí),進(jìn)行地址傳送, 把實(shí)參數(shù) 組a的首地址傳送給形參數(shù)組名b,于是b也取得該地址2000。 于是a,b兩數(shù)組共同占有以2000 為首地址的一段連續(xù)內(nèi)存單元。從圖中還可以看出a和b下標(biāo)相同的元素實(shí)際上也占相同的兩個(gè)內(nèi)存單元(整型數(shù)組每個(gè)元素占二字節(jié))。例如a[0]和b[0]都占用2000和2001單元,當(dāng)然a[0]等于b[0]。類推則有a[i]等于b[i]。

         [例5.5]數(shù)組a中存放了一個(gè)學(xué)生5門課程的成績(jī),求平均成績(jī)。float aver(float a[5])

      {
      int i;
      float av,s=a[0];
      for(i=1;i<5;i++)
      s=s+a[i];
      av=s/5;
      return av;
      }
      void main()
      {
      float sco[5],av;
      int i;
      printf(“ninput 5 scores:n”);
      for(i=0;i<5;i++)
      scanf(“%f”,&sco[i]);
      av=aver(sco);
      printf(“average score is %5.2f”,av);
      }
      float aver(float a[5])
      { ……
      }
      void main()
      {
      ……
      for(i=0;i<5;i++)
      scanf(“%f”,&sco[i]);
      av=aver(sco);
      ……
      }

         本程序首先定義了一個(gè)實(shí)型函數(shù)aver,有一個(gè)形參為實(shí)型數(shù)組a,長(zhǎng)度為5。在函數(shù)aver中,把各元素值相加求出平均值,返回給主函數(shù)。主函數(shù)main 中首先完成數(shù)組sco的輸入,然后以sco作為實(shí)參調(diào)用aver函數(shù),函數(shù)返回值送av,最后輸出av值。 從運(yùn)行情況可以看出,程序?qū)崿F(xiàn)了所要求的功能

         3. 前面已經(jīng)討論過(guò),在變量作函數(shù)參數(shù)時(shí),所進(jìn)行的值傳送是單向的。即只能從實(shí)參傳向形參,不能從形參傳回實(shí)參。形參的初值和實(shí)參相同, 而形參的值發(fā)生改變后,實(shí)參并不變化, 兩者的終值是不同的。例5.3證實(shí)了這個(gè)結(jié)論。 而當(dāng)用數(shù)組名作函數(shù)參數(shù)時(shí),情況則不同。 由于實(shí)際上形參和實(shí)參為同一數(shù)組, 因此當(dāng)形參數(shù)組發(fā)生變化時(shí),實(shí)參數(shù)組也隨之變化。 當(dāng)然這種情況不能理解為發(fā)生了“雙向”的值傳遞。但從實(shí)際情況來(lái)看,調(diào)用函數(shù)之后實(shí)參數(shù)組的值將由于形參數(shù)組值的變化而變化。為了說(shuō)明這種情況,把例5.4改為例5.6的形式。[例5.6]題目同5.4例。改用數(shù)組名作函數(shù)參數(shù)。

      void nzp(int a[5])
      {
      int i;
      printf(“nvalues of array a are:n”);
      for(i=0;i<5;i++)
      {
      if(a[i]<0) a[i]=0;
      printf(“%d “,a[i]);
      }
      }
      main()
      {
      int b[5],i;
      printf(“ninput 5 numbers:n”);
      for(i=0;i<5;i++)
      scanf(“%d”,&b[i]);
      printf(“initial values of array b are:n”);
      for(i=0;i<5;i++)
      printf(“%d “,b[i]);
      nzp(b);
      printf(“nlast values of array b are:n”);
      for(i=0;i<5;i++)
      printf(“%d “,b[i]);
      }
      void nzp(int a[5])
      { ……
      }
      main()
      {
      int b[5],i;
      ……
      nzp(b);
      ……
      }

         本程序中函數(shù)nzp的形參為整數(shù)組a,長(zhǎng)度為 5。 主函數(shù)中實(shí)參數(shù)組b也為整型,長(zhǎng)度也為5。在主函數(shù)中首先輸入數(shù)組b的值,然后輸出數(shù)組b的初始值。 然后以數(shù)組名b為實(shí)參調(diào)用nzp函數(shù)。在nzp中,按要求把負(fù)值單元清0,并輸出形參數(shù)組a的值。 返回主函數(shù)之后,再次輸出數(shù)組b的值。從運(yùn)行結(jié)果可以看出,數(shù)組b 的初值和終值是不同的,數(shù)組b 的終值和數(shù)組a是相同的。這說(shuō)明實(shí)參形參為同一數(shù)組,它們的值同時(shí)得以改變。 用數(shù)組名作為函數(shù)參數(shù)時(shí)還應(yīng)注意以下幾點(diǎn):

         a. 形參數(shù)組和實(shí)參數(shù)組的類型必須一致,否則將引起錯(cuò)誤。

         b. 形參數(shù)組和實(shí)參數(shù)組的長(zhǎng)度可以不相同,因?yàn)樵谡{(diào)用時(shí),只傳送首地址而不檢查形參數(shù)組的長(zhǎng)度。當(dāng)形參數(shù)組的長(zhǎng)度與實(shí)參數(shù)組不一致時(shí),雖不至于出現(xiàn)語(yǔ)法錯(cuò)誤(編譯能通過(guò)),但程序執(zhí)行結(jié)果將與實(shí)際不符,這是應(yīng)予以注意的。如把例5.6修改如下:

      void nzp(int a[8])
      {
      int i;
      printf(“nvalues of array aare:n”);
      for(i=0;i<8;i++)
      {
      if(a[i]<0)a[i]=0;
      printf(“%d”,a[i]);
      }
      }
      main()
      {
      int b[5],i;
      printf(“ninput 5 numbers:n”);
      for(i=0;i<5;i++)
      scanf(“%d”,&b[i]);
      printf(“initial values of array b are:n”);
      for(i=0;i<5;i++)
      printf(“%d”,b[i]);
      nzp(b);
      printf(“nlast values of array b are:n”);
      for(i=0;i<5;i++)
      printf(“%d”,b[i]);
      }

         本程序與例5.6程序比,nzp函數(shù)的形參數(shù)組長(zhǎng)度改為8,函數(shù)體中,for語(yǔ)句的循環(huán)條件也改為i<8。因此,形參數(shù)組 a和實(shí)參數(shù)組b的長(zhǎng)度不一致。編譯能夠通過(guò),但從結(jié)果看,數(shù)組a的元素a[5],a[6],a[7]顯然是無(wú)意義的。c. 在函數(shù)形參表中,允許不給出形參數(shù)組的長(zhǎng)度,或用一個(gè)變量來(lái)表示數(shù)組元素的個(gè)數(shù)。

         例如:可以寫為:

      void nzp(int a[])

         或?qū)憺?/p>

      void nzp(int a[],int n)

         其中形參數(shù)組a沒(méi)有給出長(zhǎng)度,而由n值動(dòng)態(tài)地表示數(shù)組的長(zhǎng)度。n的值由主調(diào)函數(shù)的實(shí)參進(jìn)行傳送。

         由此,例5.6又可改為例5.7的形式。

         [例5.7]

      void nzp(int a[],int n)
      {
      int i;
      printf(“nvalues of array a are:n”);
      for(i=0;i<n;i++)
      {
      if(a[i]<0) a[i]=0;
      printf(“%d “,a[i]);
      }
      }
      main()
      {
      int b[5],i;
      printf(“ninput 5 numbers:n”);
      for(i=0;i<5;i++)
      scanf(“%d”,&b[i]);
      printf(“initial values of array b are:n”);
      for(i=0;i<5;i++)
      printf(“%d “,b[i]);
      nzp(b,5);
      printf(“nlast values of array b are:n”);
      for(i=0;i<5;i++)
      printf(“%d “,b[i]);
      }
      void nzp(int a[],int n)
      { ……
      }
      main()
      {
      ……
      nzp(b,5);
      ……
      }

         本程序nzp函數(shù)形參數(shù)組a沒(méi)有給出長(zhǎng)度,由n 動(dòng)態(tài)確定該長(zhǎng)度。在main函數(shù)中,函數(shù)調(diào)用語(yǔ)句為nzp(b,5),其中實(shí)參5將賦予形參n作為形參數(shù)組的長(zhǎng)度。

         d. 多維數(shù)組也可以作為函數(shù)的參數(shù)。 在函數(shù)定義時(shí)對(duì)形參數(shù)組可以指定每一維的長(zhǎng)度,也可省去第一維的長(zhǎng)度。因此,以下寫法都是合法的。

      int MA(int a[3][10])

         或

      int MA(int a[][10])

         函數(shù)的嵌套調(diào)用

         C語(yǔ)言中不允許作嵌套的函數(shù)定義。因此各函數(shù)之間是平行的,不存在上一級(jí)函數(shù)和下一級(jí)函數(shù)的問(wèn)題。 但是C語(yǔ)言允許在一個(gè)函數(shù)的定義中出現(xiàn)對(duì)另一個(gè)函數(shù)的調(diào)用。 這樣就出現(xiàn)了函數(shù)的嵌套調(diào)用。即在被調(diào)函數(shù)中又調(diào)用其它函數(shù)。 這與其它語(yǔ)言的子程序嵌套的情形是類似的。其關(guān)系可表示如圖5.2。

         圖5.2表示了兩層嵌套的情形。其執(zhí)行過(guò)程是:執(zhí)行main函數(shù)中調(diào)用a函數(shù)的語(yǔ)句時(shí),即轉(zhuǎn)去執(zhí)行a函數(shù),在a函數(shù)中調(diào)用b 函數(shù)時(shí),又轉(zhuǎn)去執(zhí)行b函數(shù),b函數(shù)執(zhí)行完畢返回a函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行,a 函數(shù)執(zhí)行完畢返回main函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行。

         [例5.8]計(jì)算s=22!+32!

         本題可編寫兩個(gè)函數(shù),一個(gè)是用來(lái)計(jì)算平方值的函數(shù)f1, 另一個(gè)是用來(lái)計(jì)算階乘值的函數(shù)f2。主函數(shù)先調(diào)f1計(jì)算出平方值, 再在f1中以平方值為實(shí)參,調(diào)用 f2計(jì)算其階乘值,然后返回f1,再返回主函數(shù),在循環(huán)程序中計(jì)算累加和。

      long f1(int p)
      {
      int k;
      long r;
      long f2(int);
      k=p*p;
      r=f2(k);
      return r;
      }
      long f2(int q)
      {
      long c=1;
      int i;
      for(i=1;i<=q;i++)
      c=c*i;
      return c;
      }
      main()
      {
      int i;
      long s=0;
      for (i=2;i<=3;i++)
      s=s+f1(i);
      printf(“ns=%ldn”,s);
      }
      long f1(int p)
      {
      ……
      long f2(int);
      r=f2(k);
      ……
      }
      long f2(int q)
      {
      ……
      }
      main()
      { ……
      s=s+f1(i);
      ……
      }

         在程序中,函數(shù)f1和f2均為長(zhǎng)整型,都在主函數(shù)之前定義, 故不必再在主函數(shù)中對(duì)f1和f2加以說(shuō)明。在主程序中, 執(zhí)行循環(huán)程序依次把i值作為實(shí)參調(diào)用函數(shù)f1求i2值。在f1中又發(fā)生對(duì)函數(shù)f2的調(diào)用,這時(shí)是把i2的值作為實(shí)參去調(diào)f2,在f2 中完成求i2! 的計(jì)算。f2執(zhí)行完畢把C值(即i2!)返回給f1,再由f1 返回主函數(shù)實(shí)現(xiàn)累加。至此,由函數(shù)的嵌套調(diào)用實(shí)現(xiàn)了題目的要求。 由于數(shù)值很大, 所以函數(shù)和一些變量的類型都說(shuō)明為長(zhǎng)整型,否則會(huì)造成計(jì)算錯(cuò)誤。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)