標籤: 暫無標籤

數學名詞之一,函數中應用。

1 main函數 -main函數概述

日常生活中,要完成一件複雜的功能,我們總是習慣把「大功能」分解為多個「小功能」以實現。在C++程序的世界里,「功能」可稱呼為「函數」,因此「函數」其實就是一段實現了某種功能的代碼,並且可以供其它代碼調用。   一個程序,無論複雜或簡單,總體上都是一個「函數」;這個函數就稱為「main 函數」,也就是「主函數」。比如有個「做菜」程序,那麼「做菜」這個過程就是「主函數」。在主函數中,根據情況,你可能還需要調用「買菜,切菜,炒菜」等子函數。   main函數在程序中大多數是必須存在的,但是依然有例外情況,比如windows編程中可以編寫一個動態鏈接庫(dll)模塊,這是其他windows程序可以使用的代碼。由於DLL模塊不是獨立的程序,因此不需要main函數。在比如,用於專業環境的程序-----如機器人中的控制晶元--可能不需要main函數。

2 main函數 -main函數的參數

C程序最大的特點就是所有的程序都是用函數來裝配的。main()稱之為主函數,是所有程序運行的入口。其餘函數分為有參或無參兩種,均由main()函數或其它一般函數調用,若調用的是有參函數,則參數在調用時傳遞。   

int main(void)   

{   

...   

y1=f1(x1,x2);   

...   

}   

f1(int a,int b)   

{   

....   

Y2=f2(x3,x4);   

....   

}   

f2(int m,int n)   

{   

....   

....   

}   

在前面課程的學習中,對main()函數始終作為主調函數處理,也就是說,允許main()調用 其它函數並傳遞參數。事實上,main()函數既可以是無參函數,也可以是有參的函數。對於有 參的形式來說,就需要向其傳遞參數。但是其它任何函數均不能調用main()函數。當然也同樣無法向main()函數傳遞,只能由程序之外傳遞而來。這個具體的問題怎樣解決呢?   

我們先看一下main()函數的帶參的形式:   

int main(int argc,char *argv[])   

{   

.....   

}   

從函數參數的形式上看,包含一個整型和一個指針數組。當一個C的源程序經過編譯、鏈接后,會生成擴展名為.EXE的可執行文件,這是可以在操作系統下直接運行的文件,換句話說,就是由系統來啟動運行的。對main()函數既然不能由其它函數調用和傳遞參數,就只能由系統在啟動運行時傳遞參數了。   

在操作系統環境下,一條完整的運行命令應包括兩部分:命令與相應的參數。其格式為:   

命令參數1參數2....參數n¿   

此格式也稱為命令行。命令行中的命令就是可執行文件的文件名,其後所跟參數需用空格分隔,並為對命令的進一步補充,也即是傳遞給main()函數的參數。   

命令行與main()函數的參數存在如下的關係:  

 設命令行為:program str1 str2 str3 str4 str5   

其中program為文件名,也就是一個由program.c經編譯、鏈接後生成的可執行文件program.exe,其後各跟5個參數。對main()函數來說,它的參數argc記錄了命令行中命令與參數的個數,共6個,指針數組的大小由參數argc的值決定,即為char*argv[6]。   

數組的各指針分別指向一個字元串。應當引起注意的是接收到的指針數組的各指針是從命令行的開始接收的,首先接收到的是命令,其後才是參數。   

下面用實例來說明帶參數的main()函數的正確使用。   

[例6-29] 利用圖形庫函數繪製一個變化的環。它是把一個半徑為R 1的圓周分成n份,然 后以每個等分點為圓心,以R s為半徑畫n個圓。利用m a i n ( )函數的帶參數形式,我們可以從鍵盤以命令行的方式輸入R 1和R s及屏幕的背景色。   

#include <graphics.h> /*包含圖形庫函數的頭文件* /   

#include <math.h>   

#define pi 3.1415926   

int m a i n ( int argc;char *argv[]; )   

{   

int x,y,r1,rs,color;   

double a;   

int gdriver=DETECT,gmode;   

initgraph(&gdriver,&gmode,"..\\BGI ")啟;/動*圖形工作方式*/   

r1=atoi(argv[1]);"   

rs=atoi(argv[2]);"   

color=atoi(argv[3]);"   

cleardevice();"   

SetBkColor(color);"   

setcolor(4);"   

for(a=0;a<=2*pi;a+=pi/18)"   

{   

x=r1*cos(a)+320;   

y=r1*sin(a)+240;   

circle(x,y,rs);"   

}   

getch();"   

close graph();"   

return 0;   

}   

若程序名為L6-29.c,經編譯、連結生成可執行文件L6-29.exe。在操作系統的環境下運行程序,命令行方式為:   

l6-29 40 20 3   

則命令行與main()函數的參數有如圖6-16所示的關係   

圖6-16中,argv[0]是程序名,argv[1]是r1的值,   

argv[2]是rs的值,argv[3]是屏幕的背景色。   

由於指針數組均存放字元串,所需的圓半徑及背景色彩通過atoi()函數轉換為整型。   

通過帶參數的main()函數,我們可以為自己的程序設置口令,在運行程序的命令行中給出所需的口令,正確則繼續,否則退出。程序圖形輸出如圖6-17所示。   

[例6-30]將上述程序作修改,在程序的入口處添置密碼,若給定密碼正確,則顯示圖形。   

#include<graphics.h>   

#include <math.h>   

#define pi 3.1415926   

int m a i n (int argc;char *argv[];)   

{   

int x,y,r1,rs,color;   

double a;   

int gdriver=DETECT,gmode;   

if (strcmp(argv[1],"pass")!=0) 設/置* 口令的比較*/   

{ printf("password error!\n");   e x i t ( 0 ) ;   

}

initgraph(&gdriver,&gmode,"..\\bgi ");   

r1=atoi(argv[2]);   

rs=atoi(argv[3]);   

color=atoi(argv[4]);   

cleardevice();   

setbkcolor(color);   

setcolor(4);   

for(a=0;a<=2*pi;a+=pi/18)   

{

x=r1*cos(a)+320;   

y=r1*sin(a)+240;   

circle(x,y,rs);   

}   

getch();   

closegraph();   

return 0;   

}   

在操作系統的環境下運行程序, 命令行中增加口令「p a s s」,命令行方式為:   

l6-30 pass 20 40 3   

指針數組的存儲字元串如圖6-18所示。   

若給定字元串argv[1]的值是pass,則程序正確運行,否則程序退出。口令正確的情況下,顯示的圖形為圖6-17中的一個。

3 main函數 -函數的分類

1、從用戶使用的角度看,函數有兩種:   

(1)、標準函數,即庫函數。這是由系統提供的。   

(2)、用戶自定義的函數。可以解決用戶的專門需要。   

2、從函數的形勢看,函數分兩類:   

(1)無參函數。printstar和print_message就是無參函數。在調用無參函數時,主調函數並不將數據傳送給被調用函數,一般用來執行指定的一組操作。   

(2)有參函數。在調用函數時,在主調函數和被調用函數之間有數據傳遞。也就是說,主調函數可以將數據傳遞給被調用函數使用,被調用函數中的數據也可以帶回來供主調函數使用。

4 main函數 -函數定義的一般形式

1、無參函數的定義形式

  類型標示符 函數名()   

      {聲明部分 

  語句

   }

2、有參函數定義的一般形式

  類型標示符 函數名 (形式參數列表)

   {聲明部分

   語句 

  }

3、可以有「空函數」

  它的形式為

   類型說明符 函數名()

   { }

   例如:

   dummy(){}

4、對形參的聲明的傳統方式

 
  在老版本c語言中,對形參類型的聲明是放在函數定義的第二行,也就是不再第一行的括弧內指定形參的類型,而在括弧外單獨指定,例如上面定義的max函數可以寫成一下形式:

   int max (x,y)"

   int x,y;" 

  {int z;

   z=x>y?x:y; 

  return(z);

   }

上一篇[藍聖菇]    下一篇 [伊什塔級]

相關評論

同義詞:暫無同義詞