基础知识

C++的基本元素及基本数据类型

基本符号

大、小写字母;下划线(不是连接符);数字;标点符号及运算符

标识符

  • 用来标识变量、常量、函数及文件的字符序列
  • 只能由字母、数字、下划线组成
  • 第一个字符必须是字母或下划线
  • 有长度限制且区分大小写

基本数据类型

整型:(unsigned) int、short、long
实型:float、double
字符型:(unsigned) char
布尔型:bool

常用运算符及其优先级别

算术运算符

*、/、%(高)
+、-(低)

关系运算符

<、> 、>=、 <=(高)
==、!=(低)

程序的三种基本控制结构

顺序结构、选择结构、循环结构

选择结构的几种基本语句

if(e) A;
if(e) A;
else B;
if(e1) A1;
else if(e2) A2;
else if(e3) A3;else An;
switch(e)
{
   
   case e1: A1; break;
   case e2: A2; break;default: An;
}

循环结构的几种基本语句

while(e)
   A;
do A;
while(e);
for(e1;e2;e3) A;

C++程序的开发流程

函数

函数的定义

  • C++程序是由一个一个的函数组成的

  • 函数的定义:
    函数类型 函数名([形参类型说明表])
    { 函数体
    }

  • 形式参数表中必须指出每个变量的类型:

int max(int x, int y)
{
   
     int z;
     z=x>y ? x: y;
     return(z);
}
int max(int x, y)
{
   
     int z;
     z=x>y ? x: y;
     return(z);
}           

函数的参数和函数的值

形式参数与实际参数

  • 函数参数:用于函数间数据的传递
  • 形式参数:定义函数时使用的参数
  • 实际参数:调用函数时使用的参数

函数的返回值

  • 函数的返回值即函数的值,是一确定的值。
  • 一个函数可以有多个return语句,但不论执行到哪个return,都将结束函数的调用而返回主调函数。
  • return后面的括号可以省略,return后面可以是表达式。

函数的调用

调用形式

函数名(实参表);

说明

  • 如果是调用无参函数,则没有“实参表”,但括号不能省略;
  • 实参个数与形参个数一般是相同的,但如果有缺省值,则可以不相同;
  • 实参类型与形参类型最好相同,如果不相同,编译系统会进行数据类型转换;
  • 函数调用在函数定义之前时,必须在函数调用前对该函数进行函数声明
main()
{
     
     float a=3.5, b=6.5, c;
     c = add(a, b);
     printf(“sum is %f", c);
}
float add(float x, float y)
{
        return(x+y);
}

函数的嵌套调用:在一个函数的函数体内又调用了另一个函数
函数的递归调用:函数直接或间接的调用自身

内置函数(内联函数)

  • 函数调用会增加执行的开销,C++中提供了内联函数,可以减少函数调用的开销;
  • 编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销;
  • 定义内联函数时,使用关键字inline。

带缺省形参的函数

函数在定义时可以预先定义出默认的形参值,调用时如给出实参,则采用实参值,否则采用预先定义出的默认形参值。

int add(int x=5, int y=6)
{
   
    return  x+y;
}
void main(void)
{
    
     add(10,20); //10+20
      add(10);  //10+6
      add();  //5+6
}

函数的重载

  • C++允许功能相近的函数在相同的作用域内以相同函数名定义,从而形成重载。重载函数的形参列表必须不同: 个数不同或类型不同。
  • 函数重载且具有缺省参数时,不能引起二义性:
int fun ( int x, char y);  {
     …… }
int fun (int x=1, char y= ‘a’, float z = 6.2);  {
    …… }
fun ( 2, 3);//产生了二义性

函数模板

  • 函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,
  • 例,计算两个向量和的函数模板:
# include <iostream.h>
Template <class T> //模板声明,其中T为虚拟类型
T* sum(T* a, T* b, int n)
{
       T* c = new T[n];
      for(int i=0; i<n; i++) c[i] = a[i] + b[i];
      retrun c;
}

数组

  • 数组是一种构造类型数据,它是按序排列的具有相同类型变量的集合。
int a[10];   
float b[12];  
char c[20];
  • 数组名后只能用方括号括起来的正常量表达式(正常数或正符号常量)
#define M 10
int i=15;
int data[M];float f[i];char c(20);
  • 数组元素的下标从0开始,且不能越界(虽然下标越界不是语法错误)。
  • 一维数组如果不初始化,则自动赋随机值。
  • 可以只组前面部分元素赋初值,系统会自动给其它元素赋0,但所赋初值个数不能大于数组长度。
int a[4] = {
   1, 2};  <=>  int a[4] = {
   1, 2, 0, 0};
int a[4] = {
   1, 2, 3, 4, 5};
  • 如果给一维数组的所有元素初始化,则可以不指定数组的长度,系统会自动根据初始化元素的个数确定数组长度。
    int a[ ] = {1, 2, 3, 4};
  • 对于二维数组,如果对所有元素赋初始,则必须指明第二维的长度,而不必指明第一维的长度。
    int a[3][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    int a[ ][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

指针

参考

结构体

结构体类型定义的一般形式为:

struct 结构体名
{成员表列};

struct  student
{
   
   int num;
   char name[20];
   char sex;
   int age;
   float score;
   char addr[30];
};
  • struct是关键字,表示是结构体类型,不可省略。
  • student是一种数据类型,而不是一个变量,因此不分配内存。
  • 对各成员都应进行类型说明。
  • 结构体名和成员名命名规则与变量命名规则相同。

结构体一个很典型的应用是链表