特黄特色三级在线观看免费,看黄色片子免费,色综合久,欧美在线视频看看,高潮胡言乱语对白刺激国产,伊人网成人,中文字幕亚洲一碰就硬老熟妇

學(xué)習(xí)啦 > 知識大全 > 知識百科 > 百科知識 > C語言程序中什么是函數(shù)

C語言程序中什么是函數(shù)

時間: 思行858 分享

C語言程序中什么是函數(shù)

  C語言的函數(shù)問題是困擾很多學(xué)者的問題的,c程序中也有一定的函數(shù)的。那么下面一起來看看學(xué)習(xí)啦小編為大家精心推薦的c程序中的函數(shù),希望能夠?qū)δ兴鶐椭?/p>

  C語言讀書筆記:函數(shù)

  先來看看函數(shù)的一般形式,嘗試寫一個加法的函數(shù):

  思路是這樣的:首先得有頭文件,頭文件之后就得寫主函數(shù),主函數(shù)的內(nèi)部應(yīng)該就是加法的過程,我們將所有加法的語句都拿出來組成一個函數(shù)。代碼如下:

  #include <stdio.h>

  int add(int a, int b);

  int main()

  {

  int result = add(3,5);

  printf("sum is %d\n", result);

  return 0;

  }

  int add(int a, int b)

  {

  int sum;

  sum = a+b;

  return sum;

  }

  這是一個最簡單的函數(shù),描述了一個加法函數(shù)的定義和調(diào)用的過程。

  int add(int a, int b) 成為函數(shù)的首部。

  有了首部之后,就得考慮一件事情,將首部復(fù)制之后,加上一個分號,粘貼在主函數(shù)之前,作為函數(shù)的原型聲明。試想,我們在主函數(shù)里邊是不是要先定義變量result才能使用result?那么函數(shù)的道理也是一樣的,當程序運行到主函數(shù)中語句“int result = add(3,5);”的時候,如果向上沒有尋找到add()的定義,那么編譯器一定就會報錯。所以要不然添加函數(shù)的原型聲明,要不然就將函數(shù)的定義直接寫在主函數(shù)之前。

  函數(shù)首部int add(int a, int b)中的第一個int,即add之前的這個int稱為函數(shù)的類型。表明這個函數(shù)將要返回一個整數(shù)類型的值。這個類型可以是C語言中任何被允許的數(shù)據(jù)類型,包括void,意為無返回值類型,即這個函數(shù)不需要返回任何的值。

  函數(shù)首部int add(int a, int b)中的add稱為函數(shù)的名字,簡稱函數(shù)名。

  函數(shù)首部int add(int a, int b)中int a和int b稱為函數(shù)的形式參數(shù)。這里形式參數(shù)理論上可以有無窮多個,當然,現(xiàn)實情況下3-5個就已經(jīng)算是很多了;形式參數(shù)中,即使a和b都是int類型的,也要分別定義才行;形式參數(shù)可以在函數(shù)中直接使用,無須再次定義;形式參數(shù)是用來告訴調(diào)用者,你應(yīng)該給我傳遞來什么樣子的數(shù)據(jù),我好利用你給我的數(shù)據(jù)在函數(shù)中進行計算。

  int add(int a, int b){}中的{}就是函數(shù)體的內(nèi)容了。函數(shù)需要進行的所有的操作都要放在這對大括號中。想必大家也看到了函數(shù)體中最后有一條語句是return,這條語句起到的作用就是返回函數(shù)計算的結(jié)果,在這個程序中就是將加法的結(jié)果返回給主函數(shù)。需要注意的是,函數(shù)的類型和返回值的類型必須嚴格一致!

  函數(shù)的定義到此為止,接下來講講函數(shù)的調(diào)用方式。只要定義好函數(shù),通過函數(shù)名(實際參數(shù)1,實際參數(shù)2,實際參數(shù)n)這種方式就可以調(diào)用函數(shù)了。例如主函數(shù)中的“int result = add(3,5);”,就是調(diào)用了add函數(shù)。這里,3和5稱為實際參數(shù),即你究竟想讓函數(shù)幫你計算哪兩個數(shù)的加法結(jié)果,你就在這個括號里邊寫哪幾個數(shù)字。必須要嚴格遵守的規(guī)定:實際參數(shù)和形式參數(shù)必須一一對應(yīng),數(shù)量應(yīng)該相同,類型也保持一致。

  理解了這幾點之后,一個基本的函數(shù)就已經(jīng)可以寫出來了。接下來來個題目嘗試一下:

  輸入精度e,使用公式求π的近似值,精確到最后一項的絕對值小于e。公式:π=1-1/3+1/5-1/7+...

  代碼:

  //首先得有頭文件

  #include <stdio.h>

  #include <math.h> //后邊要使用到fabs絕對值函數(shù)

  //然后就是主函數(shù)了

  int main(void)

  {

  double pi, e; //定義所需變量

  double f_pi(double e); //原型聲明。函數(shù)名只要符合命名規(guī)則即可 //因為要求小于e,所以也將這個e傳遞過去

  printf("enter e: "); //輸入的提示

  scanf("%lf", &e); // double類型的e對應(yīng)%lf,記住不要缺少&

  printf("pi=%lf\n", f_pi(e) ); // 函數(shù)返回的是個double類型的值,直接輸出

  return 0;

  }

  double f_pi(double e) //函數(shù)首部,形參和實參一定要對應(yīng),可以重名

  {

  int denominator, flag;

  double item, sum;

  //請注意“先定義,然后賦初值再使用”的好習(xí)慣!!!

  flag = 1; //負責(zé)變換正負符號的變量

  denominator = 1; //分母初值為1,第一項的1為1/1

  item=1.0; //存放每一項的值

  sum=0;

  while(fabs(item)>=e) //滿足條件就循環(huán)

  {

  item=flag*1.0/denominator; //計算每一項的值。flag控制符號

  //1.0必須寫出小數(shù)位,否則整項就變成一個整型值

  sum+=item; //累加

  flag = -flag; //符號正負切換

  denominator = denominator + 2;//分母遞增

  }

  return sum; //sum的類型和函數(shù)的類型必須一致

  }

  函數(shù)的定義和調(diào)用其實并不難理解,相信很多人困擾在參數(shù)的傳遞上,接下來總結(jié)一下函數(shù)參數(shù)傳遞的幾種方式:

  正常的參數(shù)調(diào)用,例如int、float、double等一一對應(yīng)的傳遞。

  無參數(shù),也無返回值。例如下列代碼就只是為了輸出一些語句。這種做法在語法上是被允許的,但是并不推薦這么寫。

  void printf()

  {

  printf("hello world!");

  }

  3. 參數(shù)是數(shù)組的名字。我們知道數(shù)組的名字是個地址,那么如果實參是數(shù)組名的話,我們可以將形參設(shè)置成指針,指向?qū)崊鬟f過來的數(shù)組的首地址。

  4. 參數(shù)是指針。如果實參是指針,那么形參肯定也得是指針。保持類型一致即可,然后在函數(shù)內(nèi)部再對指針進行操作。

  5. 參數(shù)是結(jié)構(gòu)體。如果實參是結(jié)構(gòu)體,一般來說我們使用結(jié)構(gòu)體指針來做形參比較合適。

  還是在此分割一下吧,說了這么多,可能很多人在問問什么函數(shù)定義這么麻煩,還要定義函數(shù),直接都寫在main函數(shù)中多方便?

  非也!

  C語言是一個過程化的語言,C語言中的主函數(shù)其實是用來主導(dǎo)程序的進程和數(shù)據(jù)的流動方向的。如果將主函數(shù)寫的過于復(fù)雜,我們閱讀程序的結(jié)構(gòu)就會非常的費力。

  C語言中的函數(shù)回調(diào)

  什么是回調(diào)函數(shù)?

  簡而言之,回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當這個指針被用為調(diào)用它所指向的函數(shù)時,我們就說這是回調(diào)函數(shù)。

  為什么要使用回調(diào)函數(shù)?

  因為可以把調(diào)用者與被調(diào)用者分開。調(diào)用者不關(guān)心誰是被調(diào)用者,所有它需知道的,只是存在一個具有某種特定原型、某些限制條件(如返回值為int)的被調(diào)用函數(shù)。

  如果想知道回調(diào)函數(shù)在實際中有什么作用,先假設(shè)有這樣一種情況,我們要編寫一個庫,它提供了某些排序算法的實現(xiàn),如冒泡排序、快速排序、shell排序、shake排序等等,但為使庫更加通用,不想在函數(shù)中嵌入排序邏輯,而讓使用者來實現(xiàn)相應(yīng)的邏輯;或者,想讓庫可用于多種數(shù)據(jù)類型(int、float、string),此時,該怎么辦呢?可以使用函數(shù)指針,并進行回調(diào)。

  回調(diào)可用于通知機制,例如,有時要在程序中設(shè)置一個計時器,每到一定時間,程序會得到相應(yīng)的通知,但通知機制的實現(xiàn)者對我們的程序一無所知。而此時,就需有一個特定原型的函數(shù)指針,用這個指針來進行回調(diào),來通知我們的程序事件已經(jīng)發(fā)生。

  下面是自己寫的一個簡單的回調(diào)函數(shù),相比其他的那些復(fù)雜的代碼,這個更容易理解:

  #include<stdio.h>

  #include<stdlib.h>

  void perfect(int n)

  {

  int i=1;

  int count=0;

  for(i=1;i<n;i++)

  {

  if(0==n%i)

  {

  count+=i;

  }

  }

  if(count==n)

  printf("%d是完數(shù)\n",n);

  else printf("%d不是完數(shù)\n",n);

  }

  void myCallback(void (*perfect)(int ),int n)

  {

  perfect(n);

  }

  int main()

  {

  int n;

  printf("請輸入一個正整數(shù)\n");

  scanf("%d",&n);

  myCallback(perfect,n);

  return 0;

  }

  C語言中的刷新和定位函數(shù)

  一.fflush

  1.fflush的原型如下:

  intfflush(FILE *stream);

  2.當需要立即把輸出緩沖區(qū)的數(shù)據(jù)進行物理寫入時,應(yīng)該使用這個函數(shù)。例如調(diào)用fflush函數(shù)保證調(diào)試信息實際打印出來,而不是保存在緩沖區(qū)中直到以后才打印。

  二.定位函數(shù)

  1.在正常情況下,數(shù)據(jù)以線性的方式寫入,這意味著后面寫入的數(shù)據(jù)在文件中的位置是在以前所有寫入數(shù)據(jù)的后面。C同時支持隨機訪問I/O,也就是以任意順序訪問文件的不同位置。隨機訪問是通過在讀取或?qū)懭肭?,先定位到文件中需要的位置來實現(xiàn)的。

  2.定位函數(shù)原型:

  1>long ftell(FILE*stream);

  2>intfseek(FILE *steam,long offset,intfrom);

  3.ftell函數(shù)返回流的當前位置。即:下一個讀取或?qū)懭雽⒁_始的位置距離文件起始位置的偏移量。該函數(shù)允許保存一個文件的當前位置。

  1>在二進制流中,這個值就是當前位置距離文件起始位置之間的字節(jié)數(shù)。

  2>在文本流中,這個值表示一個位置,但它并不一定準確地表示當前位置和文件起始位置之間的字符數(shù),因為有些系統(tǒng)將對行末字符進行翻譯轉(zhuǎn)換。但是,ftell函數(shù)返回的值總是可以用于fseek函數(shù)中,作為一個距離文件起始位置的偏移量。

  4.fseek函數(shù)允許你一個流中定位。這個函數(shù)將改變下一個讀取或?qū)懭氩僮鞯奈恢?。它的?1個參數(shù)是需要改變的流。它的第2和第3個參數(shù)標識文件中需要定位的位置。

  1>試圖定位到一個文件的起始位置之前是一個錯誤。定位到文件尾并進行寫入將擴展這個文件。定位到文件尾之后并進行讀取將導(dǎo)致返回一條“到達文件尾”的信息。

  2>在二進制流中,從SEEK_END進行定位可能不被支持,所以應(yīng)該避免。

  3>在文本流中,如果from是SEEK_CUR或SEEK_END,offset必須是零。如果from是SEEK_SET,offset必須是一個從同一個流中以前調(diào)用ftell所返回的值。

  5.用fseek改變一個流的位置會帶來三個副作用。

  1>首先,行末指示字符被清除。

  2>其次,如果在fseek之前使用ungetc把一個字符返回到流中,那么這個被退回的字符會被丟棄,因為在定位操作以后,它不再是“下一個字符”。

  3>最后,定位允許你從寫入模式切換到讀取模式,或者回到打開的流以便更新。


看了“c程序中什么是函數(shù)”的人還看了:

1.c語言get函數(shù)的用法

2.c程序員筆試題

3.常用c/c++的面試題有些呢

4.c語言中free的用法

5.c語言函數(shù)if的用法

6.c語言中default的用法

7.關(guān)于c語言的面試題

1327881