亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ex8.cpp

?? C/C++程序設計教程
?? CPP
字號:

                    第8章函數

	 
 //  [例8.1]swap函數僅交換函數局部變量的值 
    #include <stdio.h>           		      
    inline void swap(int x,int y)        	     
    {  int t=x; x=y; y=t;         			   
     printf("%d,%d;",x,y);}                       
    void main(void)                               
    {  int a=1,b=2;                                
       swap(a,b);                                
       printf("%d,%d\n",a,b);                      
    }                                       
	
	//     [例8.2]內層塊交換內層局部變量的值
	 #include <stdio.h>
	 void main(void)
	{  int a=1,b=2;
	  {  int x=a;  int y =b;
		 int t=x; x=y; y=t;
		  printf("%d,%d;",x,y);
	  }// 內層塊是swap(a,b)的內聯展開
	   printf("%d,%d\n",a,b);
	}

    //[例8.3]指針的數值形參交換間接變量      
	#include <stdio.h>                      
	inline void swap(int *x,int *y)             
	{  printf("%d,%d",*x,*y);                 
 		 int t=*x; *x=*y;*y=t; 	                 
	}	                                           
	void main(void) 	                               
	{  int a=1,b=2; 	                              
  	  swap(&a,&b);	                          
      printf("%d,%d\",a,b); 	                     
    }                                	  
    //  [例8.4]內層塊交換間接變量的值  
    #include <stdio.h>
	void main(void) 
	{  int a=1,b=2;
		{     int *y =&b;
		int* x=&a;
		printf("%d,%d ",*x,*y);
		 int t=*x; *x=*y; *y=t;
		}//內層塊是swap(&a,&b)的內聯展開
		 printf("%d,%d",a,b);
	}
 //  [例8.5]函數f返回n的立方,引用形參x計算正方形周長,訪問指針*p得到正方形面積
	#include <stdio.h> // 函數調用z=f(x,&y,3)導致x=4*3,*(&y)=3*3, z=3*3*3。
    int f(int & r,int*p ,int n)//引用形參r匹配左值x, 指針數值形參p匹配右值地址&y。
	{  r=4*n; 
	   *p=n*n;  
	   return n*n*n;	
	}//變量數值形參n匹配右值3。	
    void main()	
	{ int x,y,z;
	   z=f(x,&y,3);
	   printf("%d,%d,%d\n",x,y,z);
	} //輸出:12,9,27
//   [例8.6]交換變量值的函數。 程序運行都輸出:1,2 ;2,1
	//[1]指針的數值形參版本   
	#include <stdio.h>                     
	void swap(int *x,int *y)           
	{ printf("%d,%d;",*x,*y);             
	  int t=*x; *x=*y;*y=t; 	                      
	}	                                                     
	void main(void) 	                              
	{ int a=1,b=2; 	                                   
	  swap(&a,&b);	                               
	  printf("%d,%d",a,b); 	                  
	} 
    // [2]變量的引用形參版本  
	#include <stdio.h>  
	void swap(int &x,int &y)  
	{  printf("%d,%d;",x,y);
		int t=x; x=y; y=t; 
	} 
	 void main(void)
	 { int a=1,b=2; 
		swap(a,b); 
		printf("%d,%d",a,b); 
	 } 
///////////////////  [3]相當于引用版本的內聯展開
	#include <stdio.h>
	 void main(void)
	 {  int a=1,b=2;
		{  int& y =b;
		 int& x=a;
		 printf("%d,%d;",x,y);
		 int t=x; x=y; y=t;
		}// swap(a,b)的內聯展開
		printf("%d,%d",a,b);
	}
	 //// [例8.7]求函數極大值(多學時)。兩邊程序都輸出: x=200.000000,y=0.000000
///  [1]double*型指針輸入和指針返回  
       #include<stdio.h>  
	    double* pmax(double* x,double* y)  
		{	 if(*x>*y) return x;  
	    	else     return y;                    
		} 
		void main(void) 
		{     double x=100, y=0;              
        *pmax(&x,&y)+=100;                    
   	  printf("x=%f,y=%f\n",x,y);            
     }                                       
//  [2]double&型引用輸入和引用返回
	 #include<stdio.h>
	double& rmax(double& x,double& y)
	 {	   if(x>y)  return x;
		   else     return y;
	 }
	 void main(void) 
	 {    double x=100, y=0;
		  rmax(x,y)+=100;
		   printf("x=%f,y=%f\n",x,y);
	 }
////	 [例8.8]參數類型和位置不同的重載函數
	#include<stdio.h>	
	long& max(long& s,long& l)
	{	   printf("max(long&);");		
	    return s>l?s:l;
	}
	double& max(double& s,double& l)
	{	  printf("max(double&);\n");		
 	    return s>l?s:l;
	}
	long min(short s,long l) { printf("min(short,long);"); return s<l?s:l; }
	long min(long l,short s) { printf("min(long,short);"); return s<l?s:l;  }
	void main(void)
	{	long l='l';   long L='L'; short s='s';
		double d= 'd';double D='D';         //輸出結果:
		max(L,l)--;    max(D,d)++;    	   // max(long&);max(double&);
	    printf("min=%c\n",min(s,l));        // min(short,long) ; min=k
	    printf("min=%c\n",min(L,s));       // min(long,short) ; min=L
	}
////    [例8.9]指針形參和引用形參強制類型轉換
    #include <stdio.h>
  	void f(short  v)  { 	printf("%d\t",v);	}
    void f(short * p)  { 	printf("%d\t",*p);	} 
	void f(int & r)    {	 printf("%d\t",r);	}	
    void main()       
    {  long  v;
       v=10;       f( v);   //warning : conversion from 'long' to 'short', possible loss of data
       v=20;       f((short*)&v);
       v=30;       f((int&)v); //輸出: 10  20  30
	}					
//    [例8.10] 函數重載時的參量提升匹配和精確匹配
   #include <stdio.h>
	void f(long  v)        { 	printf("long %d;",v);	     }
    void f(unsigned long n)  { 	printf("unsigned long %d;",n);} 
	void f(double d)        {	 printf("double %3.1f;",d);	}	
	void f(char*  v)       { 	printf("char*%s;",v);	    }
    void f(const char * p)   { 	printf("const char*%s\t",p);	}
    void main()
    {   f(1L);	  f(2Lu);   f(3.0f);	  f(4.0) ;
        char* p="aa";     f(p);	    const char* r="bb";   f(r);
	}  //輸出:long 1;unsigned long 2;double 3.0;double 4.0 ; char*aa ;const char* bb   
  ///  [例8.11]默認參數值的函數
	#include<stdio.h>	
	int d;
	int  f3(int n=3) {return n;}         // 默認值為3
	void f(int i=1,long l=2,int f=f3())        //所有的參數都有缺省值 
    {      d=i+l+f;         }
	void main(void)
	{ f();    /*等價于函數調用f(1,2,3);*/   printf("f() sets d=%d\n",d);
	  f(2);   /*等價于函數調用f(2,2,3);*/  printf("f(2) sets d=%d\n",d);
	  f(2,3);  /*等價于函數調用f(2,3,3);*/  printf("f(2,3) sets d=%d\n",d);
	  f(2,3,4);                           printf("f(2,3,4) sets d=%d\n",d);
	}      //輸出:f() sets d=6  f(2) sets d=7  f(2,3) sets d=8    f(2,3,4) sets d=9
///   [例8.12]默認參數導致的語法模糊
	#include<stdio.h>	
	double d;
	void funct(int i,long =2,float f=3);         //函數原型中默認值可省去形參名
	void funct(int i,long l)    {     d=i+l;    }
	void main(void)
	{ 	funct(2);                //調用void funct(int i,long =2,float f=3);
  		funct(2,3);               // error take place  here,
  		funct(2,3,4);             //調用void funct(int,long,float);  
	}
	void funct(int i,long l,float f)   {  d=i+l+f;  }
	
    
///	 [例8.14] 嵌套與遞歸的比較
    #include<stdio.h>	
    long fac1(long n)  	{   return  1;	}
	long fac2(long n)  	{   return  n*fac1(n-1);	}	
	long fac3(long n)  	{   return  n*fac2(n-1);	}
    long fac4(long n)  	{   return  n*fac3(n-1);	}
	long facn(long n)        //注意facn實現了(n>0)條件
	{   if(n>0)          return  n*facn(n-1);
	    else             return  1;	
	}       //首先判斷if(n>0) 然后遞歸調用是關鍵的
	void main(void)
	{	printf(" embedding 3!=%d,recursion 3!=%d\t",fac3(3),facn(3));
		printf(" embedding 4!=%d,recursion 4!=%d\n",fac4(4),facn(4));
	}    //輸出:embedding 3!=6,recursion 3!=6      embedding 4!=24,recursion 4!=24
	
 ///   [例8.15] 遞歸和嵌套計算數組的和
	#include<stdio.h>	
	long rsum(long *p,int n)       //遞歸實現求數組元素從p[n-1]到p[0]的和
	{	if(n>0) return rsum(p,n-1)+p[n-1];
		else   return 0;         //遞歸結束條件,遞歸函數的結果一般并不簡單地等于0
	} // rsum(p,n)計算的結果相當于p[n-1]+ p[n-2]+ ...+p[1]+ p[0]+0= rsum(p,n)
	long sum0(long *p,int n=0)	{ return 0;}
    long sum1(long *p,int n=1)	{ return sum0(p,n-1)+p[n-1];}
	long sum2(long *p,int n=2)	{ return sum1(p,n-1)+p[n-1];}
	long sum3(long *p,int n=3)	{ return sum2(p,n-1)+p[n-1];}
	void main(void)     // sum3(p,n)計算的結果相當于p[n-1]+ p[n-2]+ p[n-3]+ (p[n-4]=0)
	{	long a[]={1,2,3,4,5,6,7,8,9,10};		
		printf("1+2+3 =%d,sum=%d\t",sum3(a,3),rsum(a,3));
		printf("4+5+6=%d,sum=%d\t",sum3(a+3),rsum(a+3,3));
		printf("7+8+9=%d,sum=%d\n",sum3(a,9),rsum(a,9));
	}     // 輸出: 1+2+3=6,sum=6    4+5+6 =15,sum=15		7+8+9=24,sum=45
 //   [例8.16]遞歸顯示字符串。f1順序顯示指針數組的字符串,f2逆序顯示。
    # include<stdio.h>
    char* s[]={ "a", "bb", "ccc", "dddd", 0  }; //定義全局指針數組,0作為結束標志	
    void f2(char* *p)	{  if(*p!=0)	f2(p+1),	printf("%s;",*p); }//*p!=0作為過濾條件
    void f1(char* p[])	{  if(*p!=0)	printf("%s;",*p),  f1(p+1);}//	*p==0不進入遞歸調用
	void main()	{ f1(s);  f2(s); }//輸出:a; bb;ccc;dddd;dddd;ccc;bb;a;
  ////  [例8.17]間接遞歸交錯地顯示字符數組的字符
    # include<stdio.h>
    char s[]="abcd"; //定義全局字符數組,0作為結束標志	
	void f1(char p[]);             //逗號表達式語句作為if分支的執行語句
    void f2(char *p)	{  if(*p!=0)	f1(p+1),	printf("%c",*p); }//*p!=0作為過濾條件
    void f1(char p[])	{  if(*p!=0)	printf("%c",*p),  f2(p+1);}
	void main()	{ f1(s);  f2(s); }//輸出:acdbbdca
////  [例8.18]   直接插入排序
	# include<stdio.h>	
    void show(long * a,int i,int n)
	{  printf("%d  ",i);	
	  for(int k=0;k<n;k++)		printf("%d\t ",a[k]);
	  printf("\n");
	}
	void InsertSort(long a[],int n)
	{  for(int i=1;i<n;i++)       //將中小的元素依次前插
		{                     //某次插入排序前
         show(a,i,n);	          //i++導致無序區變小
         long temp=a[i];         //記住要搬遷的元素值,無序區的第一個元素
		 int j=i;                 //定位搜尋的初始位置
	     for(;temp<a[j-1];j--)      //從起 向前搜尋要插入的位置,條件是temp>=a[j-1]
			    a[j]=a[j-1];       //元素依次后移,跳出循環時即找到插入位置
		 a[j]=temp;               //內層循環一次后
		}
	}
	void main(void) 
	{  long a[7]={5,4,3,1,2,6,7};	   
	    InsertSort(a,7);     show(a,7,7);
     }
////  [例8.19]  選擇排序
     void swap(int &x,int &y)    {    int t=x; x=y; y=t;}
	void SelectSort(int a[], int n)
	{	for(int i=0;i<n-1;i++)  
		 {                     //進入內層循環前[]()
		  int min=i;             //設置最小元素下標初始值為i
  		  for(int j=i+1;j<n;j++)    //在區間中()尋找最小值對應的下標min         
			  if (a[j]<a[min])     //條件成立時
				min=j;          //最小元素下標動態對應最小元素的位置
		  if(min!=i)              //如果最小值對應的下標min在區間()中
			 swap(a[i],a[min]);    //交換元素后[,]()
		 }                   //設置if(min!=i)過濾條件可以防止min==i時多余的交換
	}
////  [例8.20]   交換法實現冒泡排序
   void swap(int &x,int &y)    {    int t=x; x=y; y=t;}
	void BubbleSortB(int a[],int n)         //大的元素優先降落
	{for(int i=1;i<n;i++)                  //外層循環i共循環n-1回
	   for(int j=0;j<n-i;j++)              //內層循環從0~n-i掃描,前半部正序掃描
          if (a[j]>a[j+1])                //比較判斷
             swap(a[j],a[j+1]);          //大的元素排在后面		
	}
   void BubbleSortS(int a[],int n)          //小元素優先上升
	{ for(int i=0;i<n-1;i++)               //外層循環i共循環n-1回		
	   for(int j=n-1;j>i;j--)              //內層循環從n-1到i掃描,后半部反序掃描
          if (a[j-1]>a[j])               //比較判斷
             swap(a[j-1],a[j]);          //小的元素排在前面		
	}
    void main(void)                    
	{  int a[7]={4,6,1,5,2,3,0};	        
	   int b[7]={4,6,1,5,2,3,0};
	  BubbleSortS(a,7);                 
	  BubbleSortB(b,7);  
	}                              
////  [例8.21]三路分支確定二分查找函數的流程
    /*BinSearch:在a[low]<=a[low+1]<=......<=a[high-1]中查找x對應的索引下標*/
	#include <stdio.h>
	int BinSearch (int a[],int low,int high,int x)
	{	int mid;                           //mid用于將low和high圈圍的空間折半
		while(low<=high)                  //低邊界小于等于高邊界則繼續搜尋
		 {   mid=(low+high)/2;               //將原來的區間一分為二,mid為中值  
		   if(x<a[mid])      high=mid-1;    //待查元素在前半區間high設置為mid-1
		   else if(x>a[mid])  low=mid+1;    //待查元素在后半區間low設置為mid+1
		   else             return mid;    //知道mid是要找的元素下標
		}
		return -1;                        //區間根本沒有要找的值,-1標志失敗
	}
	void main()
	{	int a[]={2,4,6,8,10,12,12,14,18};    const int n=sizeof(a)/sizeof(a[0]);
		int s= BinSearch(a,0,n-1,6);		   int f = BinSearch(a,1,n-1,18);		
		printf("s=%d,f=%d\n",s,f);
	}                     //程序運行輸出結果:s=2,f=8


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线播放欧美女士性生活| 高潮精品一区videoshd| 欧美丰满嫩嫩电影| 蜜臀av亚洲一区中文字幕| 91精品综合久久久久久| 久久99精品久久久久久动态图| 精品久久久久一区二区国产| 国产在线精品免费av| 国产精品久久久久影院| 91九色02白丝porn| 免费在线观看成人| 欧美激情一区二区三区| 色狠狠一区二区三区香蕉| 香蕉乱码成人久久天堂爱免费| 日韩欧美电影一二三| 成人av在线观| 午夜亚洲国产au精品一区二区| 欧美xxxxxxxx| 91免费精品国自产拍在线不卡| 亚洲成人免费视| 久久综合网色—综合色88| 91视频你懂的| 免费在线欧美视频| 亚洲品质自拍视频| 日韩一区二区在线播放| 99国产欧美另类久久久精品| 日韩有码一区二区三区| 中文子幕无线码一区tr| 欧美性猛交xxxxxxxx| 国精产品一区一区三区mba桃花 | 欧美久久婷婷综合色| 久久99精品久久只有精品| 亚洲人成伊人成综合网小说| 日韩美女在线视频| 日本精品视频一区二区| 国产一区二区不卡在线| 亚洲午夜一区二区三区| 欧美国产1区2区| 日韩一区二区高清| 色猫猫国产区一区二在线视频| 狠狠久久亚洲欧美| 亚洲一级不卡视频| 中文字幕的久久| 日韩精品专区在线| 欧美亚洲日本国产| 成人va在线观看| 毛片不卡一区二区| 亚洲福利视频导航| 亚洲乱码中文字幕综合| 国产精品人妖ts系列视频| 日韩欧美色综合| 欧美三级电影网| 91免费版在线| 99久久精品99国产精品| 成人性视频免费网站| 国产一区二区三区精品欧美日韩一区二区三区| 一区二区三区精品在线| 中文字幕欧美日本乱码一线二线| 欧美不卡激情三级在线观看| 欧美久久久久中文字幕| 欧美丝袜第三区| 色综合中文字幕国产| 成人黄动漫网站免费app| 国产一区二区剧情av在线| 久久99蜜桃精品| 免费视频一区二区| 蜜臀a∨国产成人精品| 日韩电影在线一区二区| 首页亚洲欧美制服丝腿| 日韩在线a电影| 秋霞午夜鲁丝一区二区老狼| 亚洲电影在线免费观看| 无码av免费一区二区三区试看| 一区二区欧美视频| 亚洲高清一区二区三区| 午夜精品爽啪视频| 日韩高清欧美激情| 麻豆成人综合网| 美女www一区二区| 美女在线观看视频一区二区| 久久国产成人午夜av影院| 激情综合网激情| 国产精品一区三区| 成人手机电影网| 91啪在线观看| 欧美性受xxxx黑人xyx性爽| 欧美日韩国产片| 欧美一级二级在线观看| 久久久蜜臀国产一区二区| 国产亚洲成aⅴ人片在线观看| 日本一区二区三区dvd视频在线| 国产欧美精品一区二区三区四区| 国产精品激情偷乱一区二区∴| 亚洲色欲色欲www在线观看| 亚洲精品成人少妇| 日本成人中文字幕在线视频| 狠狠狠色丁香婷婷综合久久五月| 成人永久aaa| 91搞黄在线观看| 日韩欧美一区在线| 中文字幕乱码日本亚洲一区二区| 中文字幕一区免费在线观看 | 欧美三级视频在线观看| 欧美刺激午夜性久久久久久久| 久久精子c满五个校花| 亚洲色图一区二区| 日韩不卡在线观看日韩不卡视频| 韩国三级电影一区二区| 99v久久综合狠狠综合久久| 欧美老女人第四色| 日本一区二区三区dvd视频在线| 亚洲免费观看视频| 美女视频一区二区三区| www.欧美色图| 日韩欧美在线不卡| 中文字幕亚洲一区二区va在线| 日韩激情视频在线观看| 成人福利视频网站| 精品日韩欧美在线| 亚洲综合免费观看高清完整版| 九一久久久久久| 欧美性淫爽ww久久久久无| 久久嫩草精品久久久久| 午夜精品福利一区二区三区蜜桃| 国产精品综合一区二区三区| 欧美性做爰猛烈叫床潮| 中文字幕成人网| 秋霞电影一区二区| 97久久超碰国产精品| 亚洲精品在线免费播放| 亚洲va欧美va天堂v国产综合| 国产成人一级电影| 91 com成人网| 亚洲精品免费在线播放| 粗大黑人巨茎大战欧美成人| 日韩欧美一区二区免费| 亚洲国产精品久久艾草纯爱| 国产成人av影院| 日韩欧美中文字幕精品| 亚洲图片一区二区| 99久久精品国产导航| 日本一二三四高清不卡| 久久精品99国产精品| 欧美裸体一区二区三区| 一区二区三区在线视频观看58| 国产裸体歌舞团一区二区| 日韩三级电影网址| 日韩电影一区二区三区四区| 欧美日韩亚洲综合| 亚洲精品免费播放| 91视频91自| 亚洲免费av观看| 91色porny| 亚洲美女淫视频| 91网站在线播放| 亚洲欧美激情一区二区| 成人av午夜电影| 国产精品国产三级国产普通话99 | 奇米影视一区二区三区小说| 欧美视频一二三区| 亚洲欧美日韩小说| 91国产丝袜在线播放| 亚洲精选视频免费看| 色婷婷av久久久久久久| 国产精品久久久久影院老司| 成人丝袜视频网| 亚洲日本免费电影| 日本韩国视频一区二区| 又紧又大又爽精品一区二区| 91蜜桃在线免费视频| 亚洲午夜精品17c| 欧美日韩一区三区| 日本欧美韩国一区三区| 亚洲精品在线网站| 国产91丝袜在线18| 中文成人综合网| 91丨九色丨国产丨porny| 亚洲精品ww久久久久久p站| 欧美亚洲日本一区| 麻豆91免费观看| 国产欧美一区二区三区鸳鸯浴 | 欧美网站一区二区| 午夜欧美电影在线观看| 日韩免费电影一区| 成人理论电影网| 亚洲综合色区另类av| 欧美一区二区不卡视频| 国产一区二区在线影院| 亚洲欧洲日韩女同| 欧美日韩一区二区欧美激情| 奇米色一区二区| 国产精品毛片久久久久久| 在线影视一区二区三区| 日本视频中文字幕一区二区三区| 日韩精品最新网址| 色综合网色综合| 久久99精品一区二区三区三区| 国产精品高潮久久久久无| 欧美精品在线一区二区三区| 国产呦萝稀缺另类资源|