• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天之道

            享受編程的樂趣。
            posts - 118, comments - 7, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            構(gòu)造函數(shù)是什么?看下面幾行代碼:
            class GradeBook
            {
              public:
                  void setCourseName(string name)
                  {
                          courseName=name;
                   }
                   string getCourseName()
                   {
                        return courseName;
                   }
                   GradeBook myGradeBook;
                   cout<<"Initial course name is: "<<myGradeBook.getCourseName()<<endl;
            }
            這幾行代碼中,定義一個(gè)類GradeBook,成員訪問說明符public表示在這個(gè)符號(hào)之下的函數(shù),函數(shù)都是公共可相互被調(diào)用的。創(chuàng)建GradeBook類的對(duì)象時(shí)(對(duì)象可以這樣創(chuàng)建:GradeBook myGradeBook; 這里myGradeBook就是類的對(duì)象 ),該對(duì)象的數(shù)據(jù)成員courseName被初始化為默認(rèn)的空串。事實(shí)上,我們可用定義一個(gè)構(gòu)造函數(shù),用于類對(duì)象創(chuàng)建時(shí)的初始化。
            構(gòu)造函數(shù)是一種特殊的成員函數(shù),定義時(shí)必須與類同名。它和其他成員函數(shù)的一個(gè)重大差別是構(gòu)造函數(shù)不能返回值,通常構(gòu)造函數(shù)聲明為public。

            請(qǐng)看一個(gè)實(shí)例:
             1 #include<iostream>
             2 #include<string>
             3 using namespace std;
             4 
             5 class GradeBook  //定義類
             6 {
             7 public:
             8     GradeBook(string name)//定義了GradeBook類的一個(gè)構(gòu)造函數(shù),有一個(gè)string形參name,與下面的形參name名字相同,但互不干擾
             9     {
            10         setCourseName(name);//調(diào)用函數(shù)賦值,構(gòu)造函數(shù)的好處是:只是簡(jiǎn)單調(diào)用,要改變時(shí)只需對(duì)被調(diào)用函數(shù)進(jìn)行修改
            11     }
            12 
            13     void setCourseName(string name)//這個(gè)函數(shù)的形參為name
            14     {
            15         courseName=name;
            16     }
            17     string getCourseName()
            18     {
            19         return courseName;
            20     }
            21 
            22     void displayMessage()
            23     {
            24         cout<<"Welcome to the grade book for\n"<<getCourseName() //下面的main()函數(shù)中,沒有調(diào)用getCourseName()函數(shù)
            25             <<"!"<<endl;
            26     }
            27 private:    // 私有的,在這個(gè)成員訪問說明符之后聲明的變量或者函數(shù),只可以被聲明它們的類的成員函數(shù)所訪問
            28     string courseName;
            29 };
            30 
            31 int main()
            32 {
            33     GradeBook gradeBook1("CS101 Introduction to C++ Programming"); //創(chuàng)建類的對(duì)象,并把實(shí)參賦予形參name
            34     GradeBook gradeBook2("CS102 Data Structures in C++");
            35 
            36     cout<<"gradeBook1 created for course: "<<gradeBook1.getCourseName()   //調(diào)用類的成員函數(shù)getCourseName(),初始化類的對(duì)象
            37         <<"\ngradeBook2 created for course: "<<gradeBook2.getCourseName()<<endl;
            38 }
            39 
            40 


            PS:1)為類提供默認(rèn)構(gòu)造函數(shù)的兩種方法:編譯器隱式地在沒有定義構(gòu)造函數(shù)的類中創(chuàng)建一個(gè)默認(rèn)的構(gòu)造函數(shù),這樣的默認(rèn)構(gòu)造函數(shù)不初始化類的數(shù)據(jù)成員,而是調(diào)用其他類的對(duì)象的每個(gè)數(shù)據(jù)成員的默認(rèn)構(gòu)造函數(shù)。沒有初始化的變量通常包含“垃圾”值。
              程序員顯式定義一個(gè)不接受實(shí)參的構(gòu)造函數(shù)。

            2)除非沒有必要初始化類的數(shù)據(jù)成員(幾乎不可能),否則請(qǐng)?zhí)峁?gòu)造函數(shù),這樣可以保證當(dāng)類的每一個(gè)新對(duì)象被創(chuàng)建時(shí),類的數(shù)據(jù)成員都用有意義的值進(jìn)行了初始化。






                      

            posted @ 2011-09-22 00:01 hoshelly 閱讀(2214) | 評(píng)論 (0)編輯 收藏

            先給出一個(gè)程序,C++寫成。
            #include<iostream>
            int main()
            {
                
            int number1;
                
            int number2;
                
            int sum;
                std::cout
            <<"Enter first integer:\n";
                std::cin
            >>number1;
                std::cout
            <<"Enter second integer:\n";
                std::cin
            >>number2;
                sum
            =number1+number2;
                std::cout
            <<"Sum is"<<sum<<std::endl;//輸出變量sum;
                
            return 0;
            }


            std::cout是標(biāo)準(zhǔn)輸出流對(duì)象,通常“連接”到屏幕;雙尖括號(hào)<<運(yùn)算符稱為流插入運(yùn)算符,顯示輸入的值;
            std::cin是輸入流對(duì)象,流提取運(yùn)算符>>是來獲取鍵盤輸入的值。
            std::endl輸出一個(gè)換行符,然后“刷新輸出緩沖”。簡(jiǎn)單來說,在一些系統(tǒng)中,輸出在機(jī)器中積存,直到積累到“值得”輸出到屏幕上為止;而std::endl 則強(qiáng)制顯示所有積存的輸出。

            運(yùn)算符的優(yōu)先級(jí)規(guī)則。
            1)圓括號(hào)具有最高的優(yōu)先級(jí);
            2)接下來是乘法、除法和求模運(yùn)算(%)。
            3)最后是加法和減法運(yùn)算。加法和減法具有相同的運(yùn)算級(jí)。


            聲明:using std::cout;是一個(gè)using 聲明,它可以消除重復(fù)使用std::前綴的需要。
            更多程序員用using namespace std;使程序可以使用程序包含的任何標(biāo)準(zhǔn)的C++頭文件中的所有名字(如std)。


            例子:編寫一個(gè)完整的程序,計(jì)算并顯示三個(gè)整數(shù)的乘積。

            #include<iostream>
            using namespace std;
            int main()
            {
             int x;
             int y;
             int z;
             int result;
             cout<<"input three numbers:\n";
             cin>>x>>y>>z;
             result=x*y*z;
             cout<<"The product is "<<result<<endl;
             return 0;
            }

             


            posted @ 2011-09-19 23:22 hoshelly 閱讀(209) | 評(píng)論 (0)編輯 收藏

            要求:編寫一個(gè)遞歸函數(shù),將一個(gè)整數(shù)n轉(zhuǎn)換為字符串,例如輸入483,應(yīng)輸出字符串“483”。
            設(shè)計(jì)思想:設(shè)置一個(gè)字符型數(shù)組str,用于存放轉(zhuǎn)換后的字符串,因?yàn)檫f歸函數(shù)中要反復(fù)使用它,所以將其設(shè)置為全局?jǐn)?shù)組變量。要實(shí)現(xiàn)整數(shù)n轉(zhuǎn)換成字符串的遞歸轉(zhuǎn)換,首先要將n的個(gè)位數(shù)n%10轉(zhuǎn)換為字符,插入到str字符串的最前面,然后將除個(gè)位后的高位部分n/10按照相同的方式來轉(zhuǎn)換,直到要轉(zhuǎn)換的數(shù)為0結(jié)束。
            #include<stdio.h>
            #include
            <string.h>
            void IntToStr(int n);
            char str[80]={0};
            void main()
            {
                
            int num;
                printf(
            "input an integer number:");
                scanf(
            "%d",&num);
                IntToStr(num);
                printf(
            "The string is:%s\n",str);
            }

            void IntToStr(int n)
            {
                
            int i;
                
            if(n==0)//整數(shù)為0時(shí),遞歸結(jié)束
                    return;
                
            for(i=strlen(str)-1;i>=0;i--//將字符串整個(gè)往后移一個(gè)字符
                    str[i+1]=str[i];
                str[
            0]=n%10+0x30;  //將該數(shù)的個(gè)位數(shù)轉(zhuǎn)換成字符放在字符數(shù)組的第一個(gè)元素的位置,+0x30表示十六進(jìn)制的0,其實(shí)可以不加

                IntToStr(n
            /10);//將該數(shù)的商,即除個(gè)位外的其他數(shù)通過遞歸轉(zhuǎn)換
            }

            //遞歸過程:例如輸入n=148,那么第一次遞歸時(shí),str[0]存放的數(shù)是8,n/10=14,得到第二次遞歸的數(shù)是14;
            //8原先存儲(chǔ)在str[0],但第二次遞歸向后移動(dòng)一個(gè)字符,變成存在str[1]內(nèi),而4存在str[0]內(nèi);
            //第三次遞歸時(shí),同理可知8放在str[2],4放在str[1],而1放在str[0],這樣就將148轉(zhuǎn)換為字符串。


            posted @ 2011-09-18 21:03 hoshelly 閱讀(376) | 評(píng)論 (0)編輯 收藏

            注:斐波納契數(shù)列的第一項(xiàng)和第二項(xiàng)的值都為1,以后各項(xiàng)的值為其前兩項(xiàng)值之和。所以要計(jì)算第n項(xiàng)的值F(n),可以列出遞歸式F(n)=F(n-1)+F(n-2),當(dāng)n=1或n=2時(shí),其值為1;

            用C語言代碼表示如下:


            #include<stdio.h>
            long F(int n);
            void main()
            {
                
            int i;
                
            for(i=1;i<=40;i++)
                {
                    printf(
            "F(%2d)=%-9ld",i,F(i));
                    
            if(i%4==0)
                    printf(
            "\n");
                }
            }

            long F(int n)//求第n項(xiàng)的值
            {
                
            if(n<=2)
                    
            return (1);
                
            return(F(n-1)+F(n-2));
            }



            posted @ 2011-09-18 15:27 hoshelly 閱讀(1074) | 評(píng)論 (0)編輯 收藏

             冒泡排序的基本概念:
            依次比較相鄰的兩個(gè)數(shù),將小數(shù)放在前面,大數(shù)放在后面。即在第一趟:首先比較第1個(gè)和第2個(gè)數(shù),將小數(shù)放前,大數(shù)放后。然后比較第2個(gè)數(shù)和第3個(gè)數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個(gè)數(shù),將小數(shù)放前,大數(shù)放后。至此第一趟結(jié)束,將最大的數(shù)放到了最后。在第二趟:仍從第一對(duì)數(shù)開始比較(因?yàn)榭赡苡捎诘?個(gè)數(shù)和第3個(gè)數(shù)的交換,使得第1個(gè)數(shù)不再小于第2個(gè)數(shù)),將小數(shù)放前,大數(shù)放后,一直比較到倒數(shù)第二個(gè)數(shù)(倒數(shù)第一的位置上已經(jīng)是最大的),第二趟結(jié)束,在倒數(shù)第二的位置上得到一個(gè)新的最大數(shù)(其實(shí)在整個(gè)數(shù)列中是第二大的數(shù))。如此下去,重復(fù)以上過程,直至最終完成排序。需要用二重循環(huán)排序。
            Example:
            #include<stdio.h>
            int main() 

                
            int i,j,temp,tag; 
                
            int a[11];  //數(shù)組第0位空出
                
            for(i=1;i<=10;i++
                scanf (
            "%d,",&a[i]); 
                
            for(j=1;j<=10;j++
                

                   tag
            =1;
                   
            for (i=1;i<=10-j;i++
                   
            {
                    
            if (a[i]>a[i+1]) 
                   

                       temp
            =a[i]; 
                       a[i]
            =a[i+1]; 
                       a[i
            +1]=temp;
                       tag
            =0;
                   }
             
                   }


                   
            if(1==tag)
                   
            {
                     
            break;
                   }

                }

                    
            for(i=0;i<10;i++)
                        printf(
            "%5d",a[i]);
                        
            return 0;
            }




            以下是選擇排序法:

            每次外循環(huán)先將定位元素的小標(biāo)i值記錄到K,認(rèn)為a[k]是最小值,第一輪比較時(shí),若遇到比a[k]更小的數(shù),則交換兩數(shù)的下標(biāo),由下面的if語句進(jìn)行交換處理。
            這樣第一輪就選出了最小的數(shù),第二輪,同理選出次小的數(shù)排在最小的數(shù)后面。如果是輸入10個(gè)數(shù),那么進(jìn)行9輪排序后就可完成整個(gè)排序過程。



            #include<stdio.h>//選擇排序法
            void main()
            {
                
            int i,j,t,a[10],k;
                printf(
            "input 10 numbers:\n");
                
            for(i=0;i<10;i++)
                scanf(
            "%d",&a[i]);

                
            for(i=0;i<9;i++)//這里也要注意i=0;i<9;
                {
                    k
            =i;
                    
            for(j=i+1;j<10;j++)
                        
            if(a[k]>a[j])
                            k
            =j;

                        
            if(k!=i)//如果k不等于i,改變了,則交換兩個(gè)數(shù)的位置
                        {
                            t
            =a[i];
                            a[i]
            =a[k];
                            a[k]
            =t;
                        }
                }
                
            for(i=0;i<10;i++)//最后輸出已經(jīng)排好序的數(shù)
                    printf("%5d",a[i]);
            }




            PS:大一剛開始接觸這兩個(gè)排序算法時(shí),感覺有點(diǎn)亂,現(xiàn)在回過頭來仔細(xì)看,思路清晰了不少。時(shí)刻回顧過去的知識(shí),進(jìn)行整理,再認(rèn)識(shí),很重要呀。:-D












            posted @ 2011-09-17 16:53 hoshelly 閱讀(342) | 評(píng)論 (0)編輯 收藏

            輾轉(zhuǎn)相除法,又名歐幾里得算法,是求最大公約數(shù)的算法。

            原理及其詳細(xì)證明

              設(shè)兩數(shù)為a、b(b<a),用gcd(a,b)表示a,b的最大公約數(shù),r=a mod b 為a除以b以后的余數(shù),輾轉(zhuǎn)相除法即是要證明gcd(a,b)=gcd(b,r)。
              第一步:令c=gcd(a,b),則設(shè)a=mc,b=nc
              第二步:根據(jù)前提可知r =a-kb=mc-knc=(m-kn)c
              第三步:根據(jù)第二步結(jié)果可知c也是r的因數(shù)
              第四步:可以斷定m-kn與n互素【否則,可設(shè)m-kn=xd,n=yd,(d>1),則m=kn+xd=kyd+xd=(ky+x)d,則a=mc=(ky+x)dc,b=nc=ycd,故a與b最大公約數(shù)成為cd,而非c】
              從而可知gcd(b,r)=c,繼而gcd(a,b)=gcd(b,r)。
              證畢。

            用C表示則:

                 int gcd(int a,int b)
              {
              int temp;
              if(a<b)/*交換兩個(gè)數(shù),使大數(shù)放在a上*/
              {
              temp=a;
              a=b;
              b=temp;
              }
              while(b!=0)/*利用輾除法,直到b為0為止*/
              {
              temp=a%b;
              a=b;
              b=temp;
              }
              return a;
              }




            posted @ 2011-09-17 02:00 hoshelly 閱讀(2415) | 評(píng)論 (0)編輯 收藏

            算法分析:因?yàn)閷?duì)于a與b兩個(gè)數(shù),當(dāng)a>b時(shí),如果a中含有與b相同的公約數(shù),則a-b也含有與b相同的公約數(shù),反復(fù)循環(huán),直到a和b相等為止,這時(shí)a或b就是它們的最大公約數(shù)。

             1 #include<stdio.h>
             2 int Maxcommonfactor(int a,int b);
             3 void main()
             4 {
             5     int a,b,c;
             6     printf("input two integer number:");
             7     scanf("%d%d",&a,&b);
             8     c=Maxcommonfactor(a,b);
             9     if(c!=-1)
            10         printf("The biggest common factor of %d and %d is %d\n",a,b,c);
            11     else
            12         printf("The biggest common factor of %d and %d isn't exist\n",a,b);
            13 }
            14 int Maxcommonfactor(int a,int b)
            15 {
            16     if(a<=0||b<=0)
            17         return(-1);
            18     while(a!=b)
            19     {
            20         if(a>b)
            21             a=a-b;
            22         else if(b>a)
            23             b=b-a;
            24     }
            25     return(a);//返回的值為最大公約數(shù)
            26 }
            27 
            28 


            posted @ 2011-09-16 18:35 hoshelly 閱讀(1079) | 評(píng)論 (0)編輯 收藏

             

             1 #include<stdio.h>
             2 #include<math.h>
             3 int pdss(int number);//定義一個(gè)函數(shù),判斷一個(gè)數(shù)是 否為素?cái)?shù)
             4 int main()
             5 {
             6     int n;
             7     printf("input the integer:\n");
             8        scanf("%d",&n);
             9     if(pdss(n))//如果是1,輸出素?cái)?shù)
            10        printf("%d 是素?cái)?shù).",n);
            11     else
            12        printf("%d 不是素?cái)?shù).",n);
            13     return 0;
            14 }
            15 
            16 int pdss(int number)
            17 {
            18     int i;
            19     if(number<=1)
            20         return 0;
            21     for(i=2;i<=sqrt(number);i++)//檢驗(yàn)一個(gè)數(shù)為素?cái)?shù)時(shí),用其平方根小或等于的數(shù)去整除所輸入的數(shù),即可判斷。為什么?
            22         if(number%i==0)
            23         return 0;
            24         else 
            25         return 1;
            26         return 0;
            27 }
            28 

             

            posted @ 2011-09-16 14:31 hoshelly 閱讀(870) | 評(píng)論 (0)編輯 收藏

            僅列出標(biāo)題
            共12頁: First 4 5 6 7 8 9 10 11 12 
            色88久久久久高潮综合影院| 2021精品国产综合久久| A级毛片无码久久精品免费| 午夜天堂av天堂久久久| 亚洲日韩欧美一区久久久久我| 久久国产美女免费观看精品| 久久精品一区二区三区不卡| 久久久无码精品亚洲日韩蜜臀浪潮| 久久人做人爽一区二区三区| 亚洲精品成人网久久久久久| 深夜久久AAAAA级毛片免费看| 亚洲一区精品伊人久久伊人| 亚洲国产精品综合久久网络| 合区精品久久久中文字幕一区| 亚洲欧美久久久久9999| 亚洲国产成人久久综合区| 无码国内精品久久综合88| 三级三级久久三级久久| 亚洲国产精品高清久久久| 久久夜色精品国产噜噜麻豆| 久久ZYZ资源站无码中文动漫| 精品无码久久久久久尤物| 国产精品久久久久久一区二区三区| 欧美久久精品一级c片片| 久久国产成人午夜AV影院| 亚洲国产精品综合久久一线| 亚洲欧美伊人久久综合一区二区 | 久久久久久久亚洲Av无码| 精品少妇人妻av无码久久| 超级碰久久免费公开视频| 污污内射久久一区二区欧美日韩| 久久久久久久波多野结衣高潮| 日韩乱码人妻无码中文字幕久久| 99久久无色码中文字幕| 久久精品国产亚洲AV不卡| 中文字幕久久久久人妻| 成人久久综合网| 狠狠色丁香久久婷婷综合_中 | 久久久久久av无码免费看大片| 亚洲国产精品狼友中文久久久| 日产精品99久久久久久|