C言語——関数


C言語——関数
1、なぜ関数を使うのか:
  • 重複操作を避ける
  • .
  • プログラムのモジュール化(逐一分解)に有利
  • #include 
    
    void max(int i, int j) //       max   ,    i,j ;        
    {					//void        
    	if(i>j)
    		printf("%d
    "
    ,i); else printf("%d
    "
    ,j); } int main(void) // main , main { int a, b, c, d, e, f; a=1, b=4, c=0, d=9, e=90, f=78; max(a,b); // , max ; max(c,d); max(d,f); return 0; }

    2、関数とは何か
  • 論理上:特定の機能を完了するのに十分なコードブロック;
  • 物理的には、受信可能なデータ【もちろん、受け入れなくてもよい】受信可能なデータを処理するデータ処理の結果を返すことができる【任意の値を返さなくてもよい】
  • .
  • まとめ:1.関数は1種のツールで、彼は大量の類似の問題を解決するために設計した.関数はブラックボックス
  • として使用できます.
    # include  
    
    int f(void) //f()      
    {
    	return 10;//      10; 
     } 
     
     void g(void) //         
     {
     	//return 10;error         
     }
     int main(void)
     { 
     int j = 88;
     j = f();
     printf("%d
    "
    , j);// 10 //j = g(); error g return 0; }

    3、関数の定義方法
  • 形式:
  •           (      )
    {
           
    
    }
    
  • 本質:関数が特定の機能を実現できる具体的な実現方法を詳細に説明する.
  • 関数の戻り値のタイプは、関数のタイプとも呼ばれます.つまり、関数のタイプは戻り値のタイプと同じです.
  • return式;の意味:
  • 被変調関数を終了し、主関数に式の値を返す.
  • 式が空の場合、関数は終了し、プライマリ・コール関数に値を返さない.
  • breakはforループとswitchを終了するために使用され、returnは関数を終了するために使用される
  • である.
    # include 
    
    void  f(void)
    {
    	int i;
    	for (i=0; i<5; i++)
    	{
    		printf("     !
    "
    ); // break; // for ,for return ;// f() } printf(" !
    "
    ); } int main(void) { f(); } // break : ! ! // return : !

    4、関数の分類
  • 有パラメトリック関数と無パラメトリック関数
  • 戻り値関数と戻り値なし関数
  • がある.
  • ライブラリ関数およびユーザー定義関数
  • 値伝達関数およびアドレス伝達関数
  • 一般関数とメイン関数(main)注:1つのプログラムに1つのメイン関数が必要であり、1つのメイン関数しかありません.メイン関数は一般関数を呼び出し、一般関数は互いに呼び出すことができます.メイン関数はプログラムの入口であり、関数の出口でもあります.例:
  • /*
    *              
    */
    #include 
    int main(void)
    {
    	int val;//        
    	int i;//          
    	
    	printf("       :");
    	scanf("%d",&val);
    	for (i=2; i<val; i++) //          
    	{
    		if(val%i == 0)
    		break;
    	}
    	if(i == val)
    		printf("Yes!
    "
    ); else printf("No!
    "
    ); return 0; } ========================================================= /* * */ #include bool IsPrime(int val) { int i;// for (i=2; i<val; i++) // { if(val%i == 0) break; } if(i == val) return true; else return false; } int main(void) { int m; printf(" :"); scanf("%d", &m); if( IsPrime(m) ) printf("Yes!
    "
    ); else printf("No!
    "
    ); return 0; }

    5、関数の宣言
  • 注意:実行時は上から下になるので、関数が宣言されず、主関数の後ろに置かれると、プログラムがエラーを報告します.宣言するときはセミコロンをつけてください.
  • ライブラリ関数(printfのような)は、#includeによって実現されるため、これ以上宣言する必要はありません.
  • #include  
    
    void f(void); //   ,       
    int main(void)
    {
    	f();  //       ,     
    	return 0; 
    }
    //   f  main   
    void f(void)
    {
    	printf("test!
    "
    ); }

    6、どのようにソフトウェア開発の中で合理的な設計関数で実際の問題を解決するか
  • 一つの関数の機能はできるだけ独立して、単一であるべきである.牛人のコードを多く勉強し、真似します.
  • /*
       1~val        1 
    */ 
    #include  
    int main(void)
    {
    	int val;
    	int i;
    	int j;
    	
    	scanf("%d", &val);
    	
    	for(i=2; i<=val; i++)//         
    	{
    		for(j=2; j<i; j++)
    		{
    			if(0 == i%j)
    				break;	//  for  ,break        
    		}
    		if(j == i)   
    			printf("%d
    "
    , i); } return 0; } =========================== ======================================== /* 1 , 2 */ # include // : m , true, false bool IsPrime(int m) { int i; for (i=2; i<m; ++i) { if (0 == m%i) break; } if (i == m) return true; else return false; } // 1 n , void TraverseVal(int n) { int i; for (i=2; i<=n; ++i) { if ( IsPrime(i) ) printf("%d
    "
    , i); } } int main(void) { int val; scanf("%d", &val); TraverseVal(val); return 0; }