c++语法教程

ads
点击蓝字   关注我
简介

通过解决一个问题,来进入C++的学习:输入两个整数相加,并返回结果

#include <iostream>using namespace std;int main(){  int a,b;    cin>>a>>b;  cout << "a+b="<<a + b << endl;  return 0;}

现在来逐行解释上面的程序:

第一行:#include <iostream> 这个表示引入头文件,这个和python中的import 用法是一样的,在python中如果要使用python语言自带的随机库,我们会通过import random来导入随机库,以便我们可以用到随机库中的方法。C++中的#include也一样,因为我们要用到输入输出,所以我们需要导入iostream头文件。

第二行:using namespace std;using是使用的意思,而namespace是命名空间的意思,std是standard标准的意思。在c++标准库中,所有的标识符都定义在名为std的命名空间中。

这个类似与python中的作用域,为了解决命名冲突的问题。比如python在全局作用域定义了变量name,在局部作用域中也可以定义name,只是在使用的时候,有特定的查找规则。

在c++中,使用namespace也可以解决全局命名冲突问题。记得要在末尾加上分号;

第三行:int main() c++源程序可以包含一个或者多个函数,其中有一个必须是main函数,操作系统通过调用main来运行c++程序。和python中定义函数有些许不同,c++中的函数包含以下几个部分:

1.返回类型(return type)  

2.函数名(function name)

3.形参列表(parameter list,可以为空)

4.函数体(function body)

// int:返回类型;//main:函数名;//()形参列表未空;//return 0 返回值;//{}中包含的是函数体int main(){    return 0;}

我们写的main函数,参数列表是空的,且返回值必须是int整数类型,函数的最后一部分是函数体,由花括号{}包裹起来。

第四行:int a,b;定义两个整数变量a和b。因为python是在执行的时候动态的自动决定数据的类型,所有Python在定义变量的时候是不需要声明变量类型的。不过c++需要手动声明变量类型,否则会出现错误。这里需要的是两个整型,所以需要将变量a,b声明为int整型。

连续定义多个相同类型的变量,可以通过逗号隔开,也可以分开写:

int a;int b;

第五行:cin >> a >> b; 表示从键盘输入两个整数类型的数,分别赋值给变量a和b,因为在定义这两个变量的时候,已经声明是整数类型了,所以在通过键盘输入的时候,也需要是整数类型。这个和python中的input函数类似,通过键盘接收输入,不过python中不管输入的是什么数据,都会自动转成字符串类型。

第六行:cout << “a+b=”<<a+b<<endl;cout表示输出,会输出<<后面的内容,endl表示换行。在python中通过print进行输出,print默认换行输出。

到此为止,我们已经将c++的一些基础用法介绍完毕,在通过c++去解决算法问题的时候,我们要关注的是算法思想本身,对于语法层面的研究要适可而止。


c++中常见的数据类型

c++中的数据类型有以下几种:

int:整型,不同的整数类型取值范围如下:

类型名 类型 字节 表示范围
int 整型 4 -2,147,483,648 ~2,147,483,647
unsigned int 无符号整型 4 0~4,294,967,295
signed int 有符号整型(与整型相同) 4 2,147,483,648 ~ 2,147,483,647
short int 短整型 2 -32,768~ 32,767
unsigned short int 无符号短整型 2 0~65,535
signed short int 有符号短整型(与短整型相同) 2 -32,768~ 32,767
long int 长整型 4 -2,147,483,648 ~2,147,483,647
signed long int 有符号长整型(与长整型相同) 4 -2,147,483,648 ~ 2,147,483,647
unsigned long int 无符号长整型 4 0~4,294,967,295

整型值相互之间的大小规则如下:

长整型至少应该和整型一样长,而整型至少应该和短整型一样长。

char: 字符型

类型名 类型 字节 表示范围
char 字符型 1 -128 ~127
unsigned char 无符号字符型 1 0 ~255
signed char 有符号字符型(与字符型相同) 1 -128 ~127

浮点型

类型名 类型 字节 表示范围
float 浮点型 4 3.4E +/- 38 (7位有效数字)
double 双精度型 8 1.7E +/- 308 (15位有效数字)
long double 长双精度型 10 1.2E +/- 4932 (19位有效数字)



输入输出

在c++中,我们通过cout和cin来进行输出和输入。

cout

1.cout是ostream类的对象,可以在屏幕上对指定数据进行输出。我们可以通过cout对象调用插入运算符”<<”和一些成员函数来输出信息,cout可以直接输出常量的值。将要输出的常量内容直接放在”<<”运算符后面即可

#include <iostream>using namespace std;int main(){
cout << 10 << endl; return 0;}


2.cout输出变量的值。在输出变量的值时,”<<”运算符会根据要输出的数据类型自动匹配正确的输出方式。这一点和python的print函数类似。

#include <iostream>using namespace std;int main(){    //定义一个字符类型  char a = 'c';  cout << a << endl;  return 0;}


3.cout可以连续输出数据。比如:

#include <iostream>using namespace std;int main(){  char a = 'c';  int b = 20;    //连续输出数据  cout << a << " " << b<<endl;  return 0;}


4.对于浮点数的输出,可以通过setprecision(int n)来设置数值精度;

#include <iostream>#include <iomanip>using namespace std;int main(){  float c = 3.14159;  cout << setprecision(3) << c <<endl;  return 0;}#输出3.14

5.可以通过setw(int n)来设置域宽,默认右对齐

#include <iostream>#include <iomanip>using namespace std;int main(){  int a = 5;  int b = 6;  cout << a << setw(5) << b<<endl;  return 0;}#输出5    6

6.可以通过setfill(char c) 用c变量中的字符来填充空白

#include <iostream>#include <iomanip>using namespace std;int main(){  int a = 5;  int b = 6;    //setfill不能放在b的后面,否则不生效  cout <<a << setw(5)<<setfill('a') << b<<endl;  return 0;}//输出5aaaa6

进行这些操作时全部需要引入头文件#include <iomanip>


cin

cin是istream类的对象,用来从键盘上读取输入,和python中的input类似。cin从键盘中获取数据,然后通过提取运算符”>>”从流中提取数据,然后cin对象将这个数据发送到指定的地方。

#include <iostream>#include <iomanip>using namespace std;int main(){  int a ;  int b ;    //输入操作  cin >> a >> b;  return 0;}

需要注意的是:

1.如果我只是输入3,这个时候3还在缓冲区内,不能被”>>”运算符提取,只有当我按下了回车键后,此时3才会被提取,然后传递给cin对象,再由cin对象将这个值放到变量a中去。

2.如果定义变量a是整型,此时如果输入的是其他类型,比如字符串,则提取操作就会失败。所以要注意输入的数据和定义的变量类型保持一致

3.cin可以连续读入多个数据,不过在输入时,要将多个数据之间用空格隔开。

c++常见运算符

1.算术运算符


#include <iostream>#include <iomanip>using namespace std;int main(){  int a = 10;  int b = 3;  int c;  int d;  cout << a+b <<endl;  cout << a-b << endl;  cout << a*b <<endl;    //会直接舍弃掉余数  cout << a/b << endl;    //这里是直接求余数  cout << a%b << endl;    //先对a加1,然后再赋值给c  c = ++a;    //先赋值给d,然后再将b加1  d = b++;  cout << c << " " << d<<endl;  return 0;}
#输出137303111 3

2.赋值运算符


#include <iostream>#include <iomanip>using namespace std;int main(){  int a = 10;  int b = 3;  a += 2;  b += 3;  cout << a <<setw(3)<< b <<endl;  return 0;}

3.关系运算符


#include <iostream>#include <iomanip>using namespace std;int main(){  int a = 10;  int b = 3;  bool c,d,e,f;  c = a > b;  d = a < b;  e = a == b;  f = a >= b;    //注意判断的结果要么是0要么是1  cout << c << endl;  cout << d << endl;  cout << e << endl;  cout << f << endl;  return 0;}//输出1001

4.逻辑运算符


#include <iostream>#include <iomanip>using namespace std;int main(){  int a = 10;  int b = 3;  int i = 9;  bool c,d,e,f;  c = a > b && a>i;  d = a < b || b < i;  e = a == b && a > i;  f = a >= b || a == i;  cout << c << endl;  cout << d << endl;  cout << e << endl;  cout << f << endl;  return 0;}//输出1101

选择结构

1.if...else...

对条件进行判断,从而选择满足条件的分支执行程序。

1.单分支语句


#include <iostream>#include <iomanip>using namespace std;int main(){  int a;  cin >> a;  if (a>10){    cout << "大于10";  }else{    cout << "小于10";  }  return 0;}

2.多分支语句

#include <iostream>#include <iomanip>using namespace std;int main(){  int a;  cin >> a;  if (a>20){    cout << "大于20";  }else if (a > 10) {    cout << "大于10";  }else{    cout << "小于10";   }  return 0;}


3.if嵌套语句




#include <iostream>#include <iomanip>using namespace std;int main(){  int a;  int b;   cin >> a >> b;  if (a>20){    cout << "大于20";  }else{    if (b>30){      cout << "a大于20,b大于30";    }else{      cout << "a大于20,b不大于30";    }  }  return 0;}


2.switch

switch也是一种常见的选择结构,一般和case搭配起来用。




和if不同,switch只能针对表达式的值来进行判断,而不能对数据的范围进行判断。需要注意的是switch语句在执行完一个case语句后,不会自动停止,需要加上break使其停止执行下一个case语句。

任务:根据分数来划分等级

#include <iostream>#include <iomanip>using namespace std;int main(){  int score;  int level;  cin >> score;    //这一行可以利用布尔值,来判断分数是哪个层级  level = (score<=60)*1 + (score>60 && score<=70)*2 +(score>70 && score<=80)*3 + (score>80 && score<=90)*4 + (score>90 &&score<=100)*5;  switch (level){    case 1:      cout<<"不及格"<<endl;      break;    case 2:      cout<<"及格"<<endl;      break;    case 3:      cout<<"良好"<<endl;      break;    case 4:      cout<<"优秀"<<endl;      break;    case 5:      cout<<"完美"<<endl;      break;    default:cout<<"分数有问题"<<endl;     }    return 0;  }


循环结构


在c++中有以下几种循环语句:

1.while

while语句会对后面的条件语句进行判断,如果结果为真,则会反复执行{}中的语句,直到条件语句的结果为假。



#include <iostream>#include <iomanip>using namespace std;int main(){  int a = 1;  while (a<5){    cout << a<<endl;    a++;  }    return 0;  }//输出1234

2.for

for循环的流程如下,括号中包括初始化,循环条件,以及循环更新:



#include <iostream>#include <iomanip>using namespace std;int main(){    //初始化:int i=0;    //循环条件:i<5;    //循环更新:i++  for (int i=0;i<5;i++){    cout << i << endl;  }    return 0;}

3.do...while

和while循环不一样的地方在于,do...while会先执行一次大括号中的程序,然后再去执行while循环


#include <iostream>#include <iomanip>using namespace std;int main(){  int i=1;  do {    i++;    cout << i << endl;  }while (i<5);  return 0;}//输出234    5  

4.break

break指跳出所在的循环,这个和python中的break一致。

#include <iostream>#include <iomanip>using namespace std;int main(){  int i=1;  while (i<5){    if(i==2){      break;    }    cout <<i<<endl;    i++;  }  return 0;}//输出1


5.continue

continue指跳过本次循环,直接进入下一次循环

#include <iostream>#include <iomanip>using namespace std;int main(){  int i=0;  while (i<5){    i++;    if(i==2){      continue;    }    cout <<i<<endl;      }  return 0;}//输出1345


函数


1.标准函数

C++中定义一个函数的语法和python中的不一样,格式如下:

#include <iostream>#include <iomanip>using namespace std;//int:返回值类型//test:函数名//(int a,int b): 函数参数//return a+b :函数返回值int test(int a,int b){    return a+b;}

int main(){ //函数调用 cout << test(1,2)<<endl; return 0;}

2.无返回值函数

#include <iostream>#include <iomanip>using namespace std;
void test(int a,int b){ cout << a + b << endl;}

int main(){ test(1,2); return 0;}


3.无参数函数

#include <iostream>#include <iomanip>using namespace std;
void test(){ for(int i=0;i<5;i++){ cout << i << endl; }}

int main(){ test(); return 0;}


4.参数值传递函数,在函数内部交换两个数,函数外面的数的值并不会交换

#include <iostream>#include <iomanip>using namespace std;
void swap(int a,int b){  //交换变量的两个值 int temp; temp = b; b = a; a = temp; cout <<"swap:" << a <<" "<< b<< endl;}

int main(){ int a = 5; int b = 10; swap(a,b); cout << "main:"<<a <<" "<< b<< endl; return 0;}
//输出swap:10 5main:5 10

5.参数引用传递函数

引用传递可以直接修改从外面传进去的值,引用传递的原理就是传递的是指针,通过修改指针指向的值,就可以直接改变函数外部的值。

#include <iostream>#include <iomanip>using namespace std;
//传递的是a,b变量的引用,即使在函数内部修改a,b的值,外面的也会受到影响void swap(int &a,int &b){ int temp; temp = b; b = a; a = temp; cout <<"swap:" << a <<" "<< b<< endl;}

int main(){ int a = 5; int b = 10; swap(a,b); cout << "main:"<<a <<" "<< b<< endl; return 0;}//输出swap:10 5main:10 5


一维数组

1.定义

可以在定义的时候,对数组进行初始化,也可以不指定长度,定义数组语法如下:

#include <iostream>#include <iomanip>using namespace std;
//指定长度和初始化数据,int表示数组中的元素都是整数类型int a[5] = {0,1,2,3,4};//不初始化数据,在main函数外,默认数中的数据均为0int b[5];//不指定长度int c[] = {1,2,3,4};int main(){ //在main中初始话数组,里面的元素的值会随机赋值,而不全是0 int c[5]; for (int i=0;i<5;i++){ cout << a[i] << endl; } cout << "================" << endl; for (int i=0;i<5;i++){ cout << b[i] << endl; } cout << "================" << endl; for (int i=0;i<5;i++){ cout << c[i] << endl; } return 0;}//输出01234================00000================002800

2.注意事项

在不是定义的时候,不能直接赋值

#include <iostream>#include <iomanip>using namespace std;

int a[5] = {0,1,2,3,4};int b[5];int d[] = {1,2,3,4};int main(){ //编译不通过 b = a; return 0;}

不同的数组变量之间不能互相赋值,这个和python不一样,python中列表的变量名可以互相赋值,但是c++的则不行

系统不会检查下标,在python中如果在列表中取值超过了列表的长度范围,则会报错,但是在c++中不会报错

#include <iostream>#include <iomanip>using namespace std;
int a[5] = {0,1,2,3,4};int b[5];int d[] = {1,2,3,4};int main(){ cout << a[100]<<endl; return 0;}//输出4774784

如果要定义的数组很大,可以在主函数main外面定义,如果在主函数内定义则会报错


二维数组

1.定义

可以在定义时,对二维数组初始化

#include <iostream>#include <iomanip>using namespace std;
int a[5][3] = { {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}, {13,14,15} };int main(){ for (int i=0;i<5;i++){ for (int j=0;j<3;j++){ cout << a[i][j]<<" "; } } return 0;}//输出1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

2.将二维数组作为参数时,可以省略第1维的长度,但必须指定第2维的长度。

#include <iostream>#include <iomanip>using namespace std;//需要指定第二维的长度void test(int a[][3]){  for (int i=0;i<5;i++){    for (int j=0;j<3;j++){      cout << a[i][j]<<" ";    }  }}
int a[5][3] = { {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}, {13,14,15} };int main(){ test(a); return 0;
}//输出1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

结构体

在设计程序的时候,我们有时候需要知道不止一个数据的数据项。比如游戏中的英雄,可能有血量,护盾,速度等数据,我们可以把这些数据组合在一起形成一个新的数据结构:结构体

#include <iostream>#include <iomanip>using namespace std;
//定义英雄结构体 struct Hero{ int blood; int number; int speed;};
int main(){ Hero a; a.blood = 100; a.number = 5; cout << a.blood << endl; cout << a.number << endl; return 0;
}//输出100 5

为了方便,我们可以用typedef给结构体起一个小名。typedef的作用就是给原有的数据类型起一个别名。

#include <iostream>#include <iomanip>using namespace std;
//给int整型起一个别名typedef int Number;Number c;Number d;//定义英雄结构体,起个别名Htypedef struct Hero{ int blood; int number; int speed;}H;
int main(){ H a; a.blood = 100; a.number = 5; c = 100; d = 200; cout << a.blood << endl; cout << a.number << endl; cout << c << endl; cout << d << endl; return 0;
}//输出1005100200






扫描二维码加我
一起聊聊编程趣事

你的每个赞和在看,我都喜欢!

最后编辑于:2024/1/22 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com