zoukankan      html  css  js  c++  java
  • 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'}};

  • 相关阅读:
    《多处理器编程的艺术》读书笔记(2) 互斥
    《多处理器编程的艺术》读书笔记(7) CLH队列锁
    rdlc 套打实现
    《多处理器编程的艺术》读书笔记(6) 队列锁
    《多处理器编程的艺术》读书笔记(3) 双线程解决方案
    《多处理器编程的艺术》读书笔记(4) 自旋锁(1)
    《多处理器编程的艺术》读书笔记(1) 并行的困境和加速比
    反色,霓虹灯,浮雕
    《多处理器编程的艺术》读书笔记(5) 自旋锁(2)
    Open ESRI shape files in Quantum GIS Anny
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3091381.html
Copyright © 2011-2022 走看看