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

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

?? ex12.cpp

?? 這里有大量的習題解答
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

			/////	第12章   結  構 與 聯 合

	
 ////   [例12.1]結構變量的內存與邊界對齊效應
    #include<stdio.h>   
	void main (void)
    {   struct S {     char   c;   	  int k;     }  s ;
        struct A {     char  c[9];    double d;  }  a ;		
		struct B {     char  *c[9];    double* d; }  b;
		struct C {     char  c[8];    double  d; }  c ;
		printf("%d,%d, %d,%d \t",sizeof(S),sizeof(a) ,sizeof(B),sizeof(c));	
	}   //輸出:8 ,24,40,16
////	[例12.2] 字符指針成員和字符數組成員
	# include<stdio.h>  
    typedef struct data_s	{     int  n;	 char *s;		} SData;
    typedef struct data_a	{     int  n;	 char a[12];	} AData;
	void main(void) 
	 {  SData d[]={1,"For",2,"Before",3,"And",4,"Anyone"};
        AData c[]={5,"for",6,"before",7,"and",8,"anyone"};
        const int n=sizeof(d)/sizeof(d[0]);
		d[1].s=c[3].a;// d[1].s是char *型的左值,c[3].a是char *型的右值
	    d[1].s[1]='N';//當SData的指針成員s指向左值內存區時可以對其更新
    	//d[0].s[1]='O';// 當SData的指針成員s指向只讀內存區時不應對其更新
		SData*p=d;//定義結構指針p,以優化輸出的尋址計算,p初值等于d
		int k ;for(k=0;k<n;k++,p++)      printf("{%p,%s} ",d[k].s,p->s);   
		printf("\n");
        for( k=0;k<n;k++)   printf("{%p,%s} ",(*(c+k)).a,(c+k)->a);		printf("\n"); 
		AData *q=c; //定義結構指針q,優化輸出的尋址計算,q初值等于c
	  	for(p=d,k=0;k<n;k++,p++,q++)  printf("[%d,%d] ",p->n,q->n);
     }//輸出結果:
//////////[例12.3]求數組和的函數double sum(double* ,int )求結構成員數組的和
	# include<stdio.h>  
   	typedef struct SType {    int  v;   double  a[6];   }   S,  *  PS;	
    double sum(double* q,int n) 
	{ 
		double s=0;
       for(double*p=q;p<q+n;p++) s+=*p;  return s;  
	}
    void main()
    {   S a[2]={4,{1,2,3,4},5,{1,2,3,4,5}};    //結構成員數組的截斷賦值
	    for(PS  s=a;s<a+2;s++)    printf("%2.0f ",sum(s->a,s->v)); //輸出結果:10 15
    }

////[例12.4]數值形參a,引用形參r和指針形參p對實參結構變量的影響
	# include<stdio.h>  
   	typedef struct Sa {    int x;   }   A;	
    void f(A a,A& r,A* p){     a.x += 1;   r.x += 2;    p->x  += 3;   }
	void main()
    {   A a[3]={1,2,3};    //結構數組的初始賦值
        f(a[0],a[1],a+2);
	    printf("%d,%d,%d",a[0].x, a[1].x, a[2].x); //輸出結果:1,4,6
    }
//[例12.5] 數值形參v和引用形參u求點積的函數double DotProduct( PT& u, PT  v)
    # include <stdio.h>    
	# include <stdio.h>    
	typedef  struct point_t { double x,y,z;} PT;
	double DotProduct( PT& u, PT  v)		{ return  u.x*v.x+u.y*v.y+u.z*v.z;}
	double Dot(double p[3], double *q){return  p[0]*q[0]+p[1]*q[1]+p[2]*q[2]; }
	void main(void)
	{     PT x={1,1,0},y={0,2,1},z={1,0,3};
		 PT  a;	          a.y=Dot(&y.x,&z.x);
        a.x=DotProduct(x,y);		a.z=DotProduct(z,x);
		printf("a={%1.0f,%1.0f,%1.0f}\t", a.x,a.y,a.z); 
	}   //輸出:a={2,3,1}
 ///   [例12.6] 只讀指針形參double DotProduct(const point_t *, const point_t *)求點積
    # include <stdio.h>    
	typedef  struct {   double   v[3];    }   point_t;
	double DotProduct(const point_t *p, const point_t *q)
		{ 	return  p->v[0]*q->v[0]+p->v[1]*q->v[1]+p->v[2]*q->v[2]; }
	double Dot(double *p, double q[3]){return p[0]*q[0]+p[1]*q[1]+p[2]*q[2]; }
	void main(void)
	{   point_t  x={1,1,0},  y={0,2,1},  z={1,0,3};
	    point_t  a={DotProduct(&x,&y),DotProduct(&y,&z),Dot(z.v,x.v)};		
   		printf("a={%1.0f,%1.0f,%1.0f}\n", a.v[0],a.v[1],a.v[2]); 	
	 }  //輸出:a={2,3,1}
/////////[例12.7]對結構不同成員的排序
	# include<stdio.h>  
    #include<string.h>  
     typedef struct data_tag	{  int  n;   char *s;} SData;
	void SelectSort(SData* 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(strcmp(a[j].s,a[min].s)<0)	min=j;
		  if(min!=i) {  SData t=a[i];a[i]=a[min];a[min]=t; }
		 }     //僅在min!=i即最小值在無序區才交換結構變量
	}
    void BubbleSort(SData 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].n>a[j+1].n)          
				{ SData t=a[j];a[j]=a[j+1];a[j+1]=t;}//交換結構變量
	}        //對結構數組排序算法的效率不及下面對結構指針數組的排序的效率高
	void BubbleSort(SData *a[],int n) //對結構指針數組的排序
	{ 	for(int i=1;i<n;i++)
	   		for(int j=0;j<n-i;j++)              
          	  if (a[j]->n > a[j+1]->n)
				{SData *t=a[j];a[j]=a[j+1];a[j+1]=t;}    //交換指針數組元素的值	
	}                                 //交換指針的值相當于交換int型變量的值
     void main(void) 
	 {  char *  const  ca[]={"For","Before","FOR","And","anyone"};	 
       SData d[]={6,ca[0],4,ca[1],7,ca[2],5,ca[3],8,ca[4]};//定義結構數組d[5]
       const int n=sizeof(d)/sizeof(d[0]); int k;
	   for(k=0;k<n;k++)  printf("{%d,%s} ",d[k].n,d[k].s);//顯示原始數據
	   printf("\n1");BubbleSort(d,n);      //1調用結構數組的冒泡排序算法
       SData* p=d; //定義一級結構指針p,以優化輸出的尋址計算,p初值等于d
 	   for(k=0; k<n;k++,p++)  printf("{%d,%s} ",p->n,p->s); //顯示排序后的數據
       printf("\n2");SelectSort(d,n);      //2調用選擇法對字符串排序
	   for( k=0;k<n;k++)  printf("{%d,%s} ",d[k].n,(d+k)->s); //顯示排序后的數據
       SData* s[n];  //定義結構指針數組s[5],s[i]分別指向數組d的相應元素d[i]。
	   for( k=0;k<n;k++) s[k]=d+k;//相當于s[0]=&d[0], s[1]=&d[1], ..., s[n-1]=&d[n-1],
	   printf("\n3");BubbleSort(s,n);     //3調用結構指針數組的冒泡排序算法
       SData** pp=s;p=*pp; //定義二級結構指針pp,以優化輸出結構成員的尋址計算
	   for( k=0;k<n;k++,pp++,p=*pp)   printf("{%d,%s} ",p->n,s[k]->s);
     }
///	[例12.8] 指針形參輸出成員數據
   	#include<stdio.h> 
	typedef  struct a_t  { int   x ;     }    A;
	typedef  struct b_t  { 	int   m;    A   a; }   B;
    typedef  struct c_t  { 	int   n;    B   b; }   C; 
	void show(const C* pc)
	{  printf("c={%d,%d,%d}\t",pc->n,pc->b.m,pc->b.a.x);}
	void main (void)
    {	A a={1}; B b={3,4};  	C c={6,7,8};      
		C *pc=&c;	
        pc->b = b;            show(pc); 
		pc->b.a=a;            show(&c);       
	}   //輸出:c={6,3,4}    c={6,3,1}
///	[例12.9]結構數組和鏈表
    # include <stdio.h>    
	# include <memory.h> 
	typedef  struct  SList_tag
	{    float  data;
		 int   elem;
		 struct  SList_tag* pNext;
	} SList;
 	void ShowL(SList* p)                         //顯示單鏈表結構數據的函數
	 {	 while(p!=0)                         //要求鏈表中存在結束的0指針值
		 { printf("p=%p{%3.1f,%d}, ",p,p->data,p->elem);//顯示當前結點的物理數據
             p=p->pNext;                         //指向下一個結點
		 }
	 }
	void ShowP(SList p[],int n)
	 {	for(int k=0;k<n;p++,k++)
		   printf("c[%d]{%3.1f,%d}, ",k,p->data,p->elem);
	 }
	void ShowA(SList *p,int n)
	  { for (int k=0;k<n;k++) printf("d[%d]{%3.1f,%d}, ",k,p[k].data,p[k].elem);	 }
	static SList d[]={5.0,1,NULL,  4.0,2,NULL,	 6.0,3,NULL};	  //靜態結構數組定義
	void main(void)
 	{	 const int n=sizeof(d)/sizeof(SList);      //n=3
		 SList c[n];                          //局部結構數組定義
		 memcpy(c,d,sizeof(d));                //將結構數組d的元素賦值給c的元素
		 printf("show array d:");	 ShowA(d,n);    //顯示d[0],d[1],d[2]
		 printf("\nshow array c:"); ShowP(c,n);    //顯示c[0],c[1],c[2]
		int k; for( k=0;k<n-1;k++)		           //對結構數組元素d[k]的pNext賦值
			 d[k].pNext=&d[k+1];	           //d[0].pNext=&d[1]; d[1].pNext=&d[2];
		 printf("\nshow List  from d[0]:\n");
		 ShowL(d);                           //顯示d單鏈中的元素
		 for( k=n-1;k>0;k--)		                //對結構數組元素c[k]的pNext賦值
			 c[k].pNext=&c[k-1];	            //c[2].pNext=&c[1]; c[1].pNext=&c[0];	 
		 printf("\nshow List from &c[n-1]:\n");
		 ShowL(&c[n-1]);                      //顯示c單鏈中的元素
	}
////////////////[例12.10]先建立單鏈表然后賦值的算法
	# include <stdio.h>  	
    typedef  struct  SList_tag
	{	 float  data; int    elem;
		 struct  SList_tag* pNext;
	} SList;
	void Show(SList* p){ for(;p;p=p->pNext) printf("{%1.0f,%d},",p->data,p->elem);}
	SList* Create(int n)                     //建立擁有n個結點的單鏈表
	{  SList*    pThis=new SList();         //申請新的結點,pThis指向這個結點
	   SList*    pHead=pThis;             //建立表頭
	   SList*    pPrev=pThis;             // 定義pPrev保留當前的位置
	   for(int i=1;i<n;i++)                 //循環建立中間的單鏈表
	   { pThis=new SList();               //申請新的結點,pThis指向這個結點
	     pPrev->pNext= pThis;            //先前結點的pNext指向這個新的結點
		 pPrev=pThis;                    // pPrev保留新的結點位置,以便下次循環
	   }  
	   pThis->pNext=0;                   //尾結點的pNex等于0
	   return pHead;                      //返回鏈結妥當的單鏈表的頭指針
	}
	inline void SetData(SList& d,const SList& s)    //僅僅設置結點的數據項
		{ d.data=s.data; d.elem=s.elem;}
	SList* ListCpy(SList s[],int n)            //將結構數組逆序拷貝給單鏈表
	{  SList* pHead=Create(n);	            //建立單鏈表但數據項尚未賦值
	   SList* p=pHead;
	   int i=0;                            //s的初始值經由虛實結合得到
	   for(s+=n-1;i<n;i++)                  //s+=n-1表示向后偏移入口地址n-1個元素
	   {  SetData(*p,*s);                   //僅僅對單鏈表的數據項賦值操作
		  p=p->pNext;                     //向下遍歷鏈表
		  s--;	                         //向前遍歷數組
	   }        //重要概念:SetData(*p,*s)不能改為*p=*s這破壞單鏈表的連接關系
	   return pHead;                        //返回數據項已經賦值的單鏈表
	}	
   void main(void)
 	{ 	static SList s[]={{5.0,1,0},{4.0,2,0},{6.0,3,0},{7.0,4,0},{8.0,5,0},{9.0,6,0}};
		SList* pHead=ListCpy(s,6);
		Show(pHead);   // 輸出:{9,6},{8,5},{7,4},{6,3},{4,2},  {5,1},          
	}		
////	[例12.11] 插入結點到已知鏈表中
    # include <stdio.h>    
	typedef  struct  SList_tag
	{ 	  int    elem; char  data;
		 struct  SList_tag* pNext;
	} SList;
	SList* Insert(SList*pHead,SList*pAdd)
    {  const int  key=pAdd->elem;            //引入局部不變量使代碼略微清晰
      if(pHead==NULL)                      //頭指針為空時的處理
		{ pAdd->pNext = NULL;              //插入點既是表頭又是表尾        
          return pAdd;                      //返回新的表頭即pAdd
        }
	  if(key <= pHead->elem)  //插入點在原頭結點之前, [pAdd]<= [pHead]<[...]<[Tail]
		{ pAdd->pNext=pHead;                //插入點變為新的表頭
          return pAdd;                       //返回新的表頭即pAdd	
        }
      SList*pFind=pHead;        //pFind是一個探尋插入位置的指針,首先指向頭結點
      SList*pPrev= pFind;        // pPrev記住插入位置的當前結點,此時指向頭結點
		while(pFind->elem<key && pFind->pNext!=0)   //循環查找插入位置
		{  /*要找的結點元素小于關鍵值同時后面尚有非0結點,進入循環*/
			 pPrev=pFind;                // pPrev保留搜尋的當前位置
             pFind=pFind->pNext;        // pFind指針后移,即指向下一個結點
		}                         //循環結束則找到插入位置,分兩種狀況
         if(pFind->elem>=key)       //跳出while循環,此時pFind ->elem>=key
		   {   pPrev->pNext=pAdd;  //包含 pFind->pNext!=0或==0

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱码精品1区2区3区| 亚洲欧洲日韩综合一区二区| 欧美日本在线视频| 91色在线porny| www.亚洲免费av| 99精品久久只有精品| 99久久精品情趣| 色婷婷综合在线| 欧洲亚洲精品在线| 欧美欧美欧美欧美| 日韩免费观看高清完整版在线观看| 日韩欧美专区在线| 久久婷婷色综合| 亚洲欧洲99久久| 亚洲综合在线第一页| 日韩精品久久理论片| 麻豆精品视频在线观看免费| 国产丶欧美丶日本不卡视频| a美女胸又www黄视频久久| 一道本成人在线| 91精品婷婷国产综合久久竹菊| 日韩欧美的一区| 欧美—级在线免费片| 一区二区三区欧美久久| 日韩高清一区在线| 国产精品99久久久久| 色欧美日韩亚洲| 日韩欧美国产精品一区| 中文字幕不卡在线播放| 亚洲午夜三级在线| 国产一区二区三区精品视频| 91在线看国产| 日韩欧美国产不卡| 亚洲欧美日韩在线播放| 美女视频网站久久| 色综合久久久久综合体桃花网| 欧美高清精品3d| 国产精品久久久久三级| 三级久久三级久久| av亚洲精华国产精华精华| 91精品欧美综合在线观看最新| 国产精品网曝门| 另类小说色综合网站| 欧美综合亚洲图片综合区| 久久久一区二区三区捆绑**| 亚洲成人1区2区| 91美女在线看| 国产无一区二区| 婷婷久久综合九色国产成人| 99综合影院在线| 久久久精品2019中文字幕之3| 亚洲国产精品久久艾草纯爱| 99久久免费精品高清特色大片| 精品国产亚洲一区二区三区在线观看| 亚洲一区在线播放| 成人av免费在线| 久久久电影一区二区三区| 天堂成人国产精品一区| 欧美性猛交xxxx黑人交| 国产精品免费观看视频| 国产一区二区三区在线观看免费| 亚洲成人免费看| 国产专区欧美精品| 777午夜精品免费视频| 亚洲一区二区三区四区在线观看 | 国产视频一区二区在线观看| 首页亚洲欧美制服丝腿| 欧美最新大片在线看| 亚洲日本免费电影| 99国产精品久| 国产精品毛片大码女人| 国产成人午夜99999| 国产日本一区二区| 久久99精品国产91久久来源| 欧美videos大乳护士334| 日韩影院免费视频| 欧美精品亚洲二区| 天天av天天翘天天综合网色鬼国产 | 欧美一区午夜精品| 图片区小说区区亚洲影院| 欧美日韩亚州综合| 亚洲成a人v欧美综合天堂| 欧美另类变人与禽xxxxx| 亚洲国产wwwccc36天堂| 欧美美女黄视频| 青青草原综合久久大伊人精品 | 91香蕉视频污| 亚洲精品少妇30p| 欧美日韩久久久一区| 男女性色大片免费观看一区二区| 日韩三级视频在线看| 中文字幕一区二区三区视频| 国产揄拍国内精品对白| 精品国产一区二区精华| 精品一区二区三区免费视频| 国产亚洲欧美在线| 不卡区在线中文字幕| 亚洲三级免费观看| 欧美久久免费观看| 韩国午夜理伦三级不卡影院| 国产精品久久久久久久久搜平片| 91浏览器入口在线观看| 五月天欧美精品| 日韩久久久精品| av中文字幕不卡| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久久欧美精品sm网站 | 日韩视频一区在线观看| 国内精品视频一区二区三区八戒| 亚洲欧美一区二区久久| 91社区在线播放| 日本91福利区| 亚洲特黄一级片| 日韩三级视频在线观看| 99久久精品一区| 国产一区二区三区在线观看免费视频| 亚洲人吸女人奶水| 26uuu精品一区二区三区四区在线| 99精品在线观看视频| 男女男精品视频| 亚洲综合男人的天堂| 欧美激情一区二区在线| 欧美一级生活片| 在线观看91视频| av成人动漫在线观看| 韩日精品视频一区| 五月天视频一区| 亚洲影院久久精品| 中文字幕一区在线观看视频| 精品成人一区二区三区四区| 欧美日韩激情一区二区| 99热精品国产| 成人美女视频在线观看18| 麻豆视频一区二区| 亚洲一区在线观看免费| 亚洲精品免费在线| 国产成人小视频| 中文成人综合网| 91精品国产乱码| 在线观看国产精品网站| 成人h动漫精品| 国产一区二区免费在线| 老司机精品视频导航| 亚洲第一搞黄网站| 亚洲国产精品一区二区www| 亚洲天堂精品视频| 欧美国产一区二区在线观看| 久久综合九色欧美综合狠狠| 制服丝袜激情欧洲亚洲| 91在线云播放| 日本欧美在线观看| 亚洲chinese男男1069| 亚洲一区二区三区爽爽爽爽爽| 亚洲色欲色欲www在线观看| 国产亚洲综合性久久久影院| 久久综合九色综合欧美就去吻 | 午夜日韩在线观看| 性做久久久久久免费观看| 亚洲丰满少妇videoshd| 午夜精品久久久久影视| 秋霞午夜av一区二区三区| 日本va欧美va精品| 国产一区二区调教| 国产成人无遮挡在线视频| av在线这里只有精品| 99久久精品免费看国产免费软件| 色天天综合久久久久综合片| 欧美性色综合网| 日韩欧美成人激情| 久久一夜天堂av一区二区三区| 国产日产精品一区| 亚洲免费三区一区二区| 日日夜夜精品视频免费| 久久er精品视频| 成人高清av在线| 欧洲另类一二三四区| 日韩免费视频一区| 中文字幕在线一区| 一区二区三区自拍| 久久激情五月婷婷| 成人免费福利片| 欧美一区二视频| 国产欧美一区二区在线| 亚洲国产视频在线| 黄色成人免费在线| 欧美这里有精品| 久久综合av免费| 亚洲一区二区三区免费视频| 九色综合狠狠综合久久| 不卡视频免费播放| 日韩欧美色综合网站| 成人欧美一区二区三区小说| 日韩av一二三| 99视频热这里只有精品免费| 日韩一区二区免费电影| 国产精品美女久久福利网站| 男男成人高潮片免费网站| 99riav一区二区三区| 欧美精品一区二区三区高清aⅴ| 亚洲视频资源在线|