C++語言發展歷史 & 基礎知識


 C++語言發展歷史

 

     自從1946年第一台電子數字計算機ENIAC問世以來,隨着計算機應用領域的不斷擴大,促進了計算機技術的高速發展,尤其是近年來計算機的硬件和軟件都是日新月異。作為應用計算機的一種工具程序設計語言,得到不斷的充實和完善。每年都有新的程序設計語言問世,老的程序設計語言不斷地更新換代。

 

20世紀60年代,Martin Richards為計算機軟件人員在開發系統軟件時,作為記述語言使用而開發了BCPL語言(Basic Combined Programming Language)

1970年,Ken Thompson在繼承BCPL語言的許多優點的基礎上發明了實用的B語言。

到了1972年,貝爾實驗室的Dennis RitchieBrian kernighanB語言的基礎上,作了進一步的充實和完善,設計出了C語言。

當時,設計C語言是為了編寫UNIX操作系統的。

 

以后,C語言經過多次改進,並開始流行。C++是在C語言的基礎上發展和完善的,C是吸收了其它語言的優點逐步成為實用性很強的語言

 

C語言的主要特點是:

1C語言是一種結構化的程序設計語言,語言本身簡潔、使用靈活方便。既適用於設計和編寫大的系統程序,又適用於編寫小的控制程序,也適用科學計算。

2它既有高級語言的特點,又具有匯編語言的特點。運算符豐富,除了提供對數據的算術邏輯運算外,還提供了二進制的位運算。並且也提供了靈活的數據結構。用C語言編寫的程序表述靈活方便,功能強大。用C語言開發的程序,其結構性好,目標程序質量高,程序執行效率高。

 

 

3程序的可移植性好。用C語言在某一種型號的計算機上開發的程序,基本上可以不作修改,而直接移植到其它型號和不同檔次的計算機上運行。

 

4程序的語法結構不夠嚴密,程序設計的自由度大。這對於比較精通C語言的程序設計者來說,可以設計出高質量的非常通用的程序。但對於初學者來說,要能比較熟練運用C語言來編寫程序,並不是一件容易的事情。與其它高級語言相比而言,調試程序比較困難。往往是編好程序輸入計算機后,編譯時容易通過,而在執行時還會出錯。但只要對C語言的語法規則真正領會,編寫程序及調試程序還是比較容易掌握的。

 

 

隨着C語言應用的推廣,C語言存在的一些缺陷或不足也開始流露出來,並受到大家的關注。如:C語言對數據類型檢查的機制比較弱;缺少支持代碼重用的結構;隨着軟件工程規模的擴大,難以適應開發特大型的程度等等。

 

 

為了克服C語言本身存在的缺點,並保持C語言簡潔、高效,與匯編語言接近的特點,1980年,貝爾實驗室的BjarneStroustrup博士及其同事對C語言進行了改進和擴充,並把Simula 67中類的概念引入到C中。並在1983年由Rick Maseitti提議正式命名為C++C Plus Plus)。后來,又把運算符的重載、引用、虛函數等功能加入到C++中,使C++的功能日趨完善。

當前用得較為廣泛的C++有:VC++ Visual C Plus Plus)、 BC++Borland C Plus Plus)、AT&T C++等。

 

 

#include  <iostream.h>

void  main(void)

{

  cout << i=;   //顯示提示符

  inti;          //說明變量i

  cin  >>i;       //從鍵盤上輸入變量i的值

  cout << “i的值為:” <<i<<’\n’; // 輸出變量i的值

}

 

 

一般變量都是用匈牙利命名法命名的。

intnCount;

char  chChoice;

 

 

整型變量:

分為有符號型與無符號型。

有符號型:

          short 在內存中占兩個字節,范圍為-215~215-1

  int在內存中占四個字節,范圍為-231~231-1

  long在內存中占四個字節,范圍為-2-31~231-1

 

無符號型:最高位不表示符號位

unsigned  short 在內存中占兩個字節,范圍為0~216-1

unsigned int  在內存中占四個字節,范圍為0~232-1

unsigned  long在內存中占四個字節,范圍為0~232-1

 

實型數又稱浮點數,有兩種表示方式:

1)十進制形式:  23.0    24.5     3.56789

2) 指數形式:   23E1    145e-1    356789e1   e 前有數字,后面必須是整數。

 

實型變量分單精度 float 和雙精度 double 兩種形式:

float:占四個字節,提供7~8位有效數字。

double: 占八個字節,提供15~16位有效數字。

 

實數是既有整數又有小數的數。

實數可以表示成:N=S×RJ

稱為尾數,尾數決定有效數字,即數字的精度。

J   表示指數(階碼)。

是基數,可取24816等,對具體機器而言,基數取好后,就不能再變了。

數有正有負, 所以設置數符; 階碼亦有正負, 所以設置階符

 

字長一定,尾數越多,精度越高;階碼越多,范圍越大。

當計算機中出現小於機器所能表示的最小數時,機器只能當零來處理當出現超過機器所能表示的最大數時,出現溢出現象,一旦出現溢出,就會停止運算。定點數,浮點數均會出現溢出現象。

 

轉義字符雖然包含2個或多個字符,但它只代表一個字符。編譯系統在見到字符\時,會接着找它后面的字符,把它處理成一個字符,在內存中只占一個字節。

 

典型轉義字符:

\n’換行            \b’ 退格              '\t'  下一個輸出區

若輸出中包含這些特定格式,則再加一個\

 

#include<iostream.h>

void main(void)

{

   char c1,c2,c3,c4;

   char n1,n2;

   c1='a';  //字符常量

   c2=97;  //十進制

   c3='\x61';  //轉義字符

   c4=0141;  //八進制

   cout<<"c1="<<c1<<'\t'<<"c2="<<c2<<endl;

   cout<<"c3="<<c3<<'\t'<<"c4="<<c4<<endl;

   n1=‘\n’;      //轉義字符:回車

   n2=‘\t’;       //轉義字符:下一個輸出區(Tab)

   cout<<"使用轉義字符\n";

   cout<<"c1="<<c1<<n2<<"c2="<<c2<<n1;

   cout<<"c3="<<c3<<n2<<"c4="<<c4<<n1;

}

 

標識符常量

C++中有二種方法定義標識符常量,一種是使用編譯預處理指令;另一種是使用C++的常量說明符const

例如:

     #define    PRICE  30

//在程序中凡是出現PRICE均用30替代

     #define    PI  3.1415926

     #define    S   China

 

const float pi=3.1415926;  //變量pi定義為常量

(舉例說明)

#include<iostream.h>

#define PI 3.14156

#define S  "China"

void main(void)

{

   const float pi=3.14156;  //變量作為常量使用

   cout<<"PI="<<PI<<endl;

   cout<<"10*PI="<<10*PI<<endl;

   cout<<S<<endl;

//  PI=PI+3;

//  pi=pi+4;

   cout<<"PI="<<PI<<endl;

   cout<<"pi="<<pi<<endl;

}

 

優先級:!à&&à| |

           à算術à關系à邏輯à賦值à逗號

 

 

switch(表達式)

    case  常量表達式1:語句1

         case  常量表達式2:語句2

          … …

         case 常量表達式n:語句n

         default:語句n+1

     

 

void main(void)

{   int  i=1,sum=0;   //定義變量,初始化

     while(i<=100)    //構造循環

     {     sum=sum+i;   // 循環體,多次執行

             i=i+1;

     }

    cout<<“sum=”<<sum<<endl;   //輸出結果

}

 

void main(void)

{   int  i=1,sum=0;   //定義變量,初始化

     do                 //構造循環

     {     sum=sum+i;   // 循環體,多次執行

             i=i+1;

     }while (i<=100);

    cout<<“sum=”<<sum<<endl;   //輸出結果

}

 

 

 

void main(void)

int  i, sum;

    for (i=1, sum=0; i<=100; i++)

          sum=sum+i;

     cout<<“sum=”<<sum<<endl;

}

 

 

寫一個函數驗證哥德巴赫猜想;一個不小於6的偶數可以表示為兩個素數之和,如6=3+3, 8=3+5, 10=3+7……。在主函數中輸入一個不小於6的偶數n,函數中輸出以下形式的結果∶

34=3+31

 

 

 

 

 

 

int power(intm,int n)  //m^n

inti,product=m;

  for(i=1;i<n;i++)

  product=product*m;

  return product;

}

intsum_of_power(intk,int n)  //n^k的累加和

inti,sum=0;

  for(i=1;i<=n;i++)

        sum+=power(i,k);

  return sum;

}

 

 

void main(void)

intk,m;

  cin>>k>>m;

  cout<<"f("<<k<<","<<m<<")="<<sum_of_power(k,m)<<endl//m^k的累加和

}

 

 

 

 

作用域是指程序中所說明的標識符在哪一個區間內有效,即在哪一個區間內可以使用或引用該標識符。在C++中,作用域共分為五類:塊作用域、文件作用域、函數原型作用域、函數作用域和類的作用域。

 

 

在塊作用域內可通過作用域運算符“::”來引用與局部變量同名的全局變量。

#include <iostream.h>

int  i= 100;

void main(void)

{

   inti , j=50;

   i=18;          //訪問局部變量i

   ::i= ::i+4;    //訪問全部變量i

   j= ::i+i  //訪問全部變量i和局部變量j

  cout<<”::i=”<<::i<<’\n’;

  cout<<”i=”<<i<<’\n’;

  cout<<”j=”<<j<<’\n’;

}

 

void main (void)

{   int  i;

     int  f [20]={1,1};

     for (i=2 ; i<20 ; i++ )

           f [i]=f [i-1]+f [i-2]; 

 

for ( i=0; i<20; i++)

   {   if (i%5= =0)  cout<<“\n”;

         cout<<f [i]<<‘\t’;

    }

}

 

 

 

for (j=0; j<n-1; j++)

   for (i=0; i<n-1-j; i++)

      {   if (a[i]>a[i+1])

             t=a[i];

                 a[i]=a[i+1];

                 a[i+1]=t;

              }

        }

 

 

 

有一個3×4的矩陣,要求編程序求出其中值最大的那個元素的值,以及其所在的行號和列號。

先考慮解此問題的思路。從若干個數中求最大者的方法很多,我們現在采用打擂台算法。如果有若干人比武,先有一人站在台上,再上去一人與其交手,敗者下台,勝者留台上。第三個人再上台與在台上者比,同樣是敗者下台,勝者留台上。如此比下去直到所有人都上台比過為止。最后留在台上的就是勝者。

程序模擬這個方法,開始時把a[0][0]的值賦給變量maxmax就是開始時的擂主,然后讓下一個元素與它比較,將二者中值大者保存在max中,然后再讓下一個元素與新的max比,直到最后一個元素比完為止。max最后的值就是數組所有元素中的最大值。

 

max=a[0][0];  //使max開始時取a[0][0]的值

  for (i=0;i<=2;i++)   //從第0行到第2

    for (j=0;j<=3;j++) //從第0列到第3

      if (a[i][j]>max)//如果某元素大於max

     {

           max=a[i][j]; //max將取該元素的值

            row=i;    //記下該元素的行號i

            colum=j;  //記下該元素的列號j

      }

 cout<<row<<‘\t’<<colum<<‘\t’<<max<<endl;

 

 

C++語言規定,數組名代表數組在內存中存儲的首地址,這樣,數組名作函數實參,實際上傳遞的是數組在內存中的首地址。實參和形參共占一段內存單元形參數組中的值發生變化,也相當於實參數組中的值發生變化

 

 

struct

   {    int  num;

         char  name[20];

         char  sex;

         int  age;

         float  score;

         char  addr[30];

    } student1, student2;

 

 

1、結構體類型的變量在內存依照其成員的順序順序排列,所占內存空間的大小是其全體成員所占空間的總和

2、在編譯時,僅對變量分配空間,不對類型分配空間。

3、對結構體中各個成員可以單獨引用、賦值,其作用與變量等同。

 

格式:變量名 . 成員名    student1 . num

 

struct   student

   {    int  num;

         char  name[20];

         char  sex;

         int  age;

         float  score;

         char  addr[30];

} ;

struct  student  stu[30];

struct   student

   {    int  num;

         char  name[20];

         char  sex;

         int  age;

         float  score;

         char  addr[30];

} stu[30];

 

struct   student

   {    int  num;

         char  name[20];

         char  sex;

} stu[3]={ {1011, "Li Lin",'M'}, {1012,"Wang Lan",'F'},

                  {1013,"Liu Fang",'F'};

 

struct   student

   {    int  num;

         char  name[20];

         char  sex;

} stu[ ]={ {1011,"Li Lin",'M'}, {1012,"Wang Lan",'F'},

                  {1013,"Liu Fang",'F'}};

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: