
上节简单介绍了C++的数据类型和运算符,在程序中如果定义了一个变量,计算机就会在内存中开辟一个空间来存储这个变量,如果不合理设置变量,要么程序出错,要么就会出现资源浪费。比如在程序中float a表示在内存中开辟一个存储占用4字节的空间,double则在内存中开辟一个8字节空间。
整型(int)中最常用的就是int和long long,而实型(正、负实数和0)有三种类型float、double、long double都常用,一般记住这三种类型的有效位数(精确度)即可。
在实际应用中还有一个变量类型的转换问题需要注意,也是经常使用的。比如下面的例子:
#include<iostream>using namespace std;int main(){int a=3.1415926;cout<<a;return 0;}
#include<iostream>using namespace std;int main(){int a,h,s; //底,高,面积cin>>a>>h;s=a*h/2;cout<<s<<endl;return 0;}
#include<iostream>using namespace std;int main(){int a,h;float s;cin>>a>>h;s=a*h/2;cout<<s<<endl;return 0;}
变量的类型间是可以互相转换的,类型的转换一般遵循一定的规则,可分为自动转换和强制转换。仔细揣摩下面的规则,后期运用中别踩漏了。
自动转换规则 a、若两种类型的字节数不同,转换成字节数高的类型 b、若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int型转成long型后再进行运算。 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。 char型和short型参与运算时,必须先转换成int型。 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。 强制转换规则 强制类型转换是通过类型转换运算来实现的。其一般形式为:(类型说明符)表达式其功能是把表达式的运算结果强制转换成类型说明符所表示的类型,如下面样子;
int a = 1;double b = 2.1;cout << "a + b = " << a + (int)b << endl; //输出为a + b = 3
所以上面计算三角形面积的小程序需要写成下面的样子才可以,大家可以试验一下。
#include<iostream>using namespace std;int main(){int a,h;float s;cin>>a>>h;s=a*h/2.0; //注意这里cout<<s<<endl;return 0;}
需要注意的是,无论哪种转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,不改变数据说明时对该变量定义的类型。
前面我们练习的几个例子都是按照编写的顺序一条一条的执行,这种结构叫做顺序结构,但在实际应用中,不可避免的会遇到选择、循环等情况,C++为了支持这些控制结构,提供了丰富灵活的控制语句,从结构化程序设计的观点看,所有的程序都可以用顺序结构、选择结构和循环结构来实现。
在C++中提供了三种选择结构,即if选择结构、if-else选择结构和switch选择结构。
if(需要达到的条件){//当达到括号中的条件时,执行花括号中的语句;单个句子不需要花括号,下面也一样 需要执行的语句;//可有多句,但需要有花括号}
这些选择结构只有表达式值为真,即表达式(需要达到的条件)成立时才会执行后面的语句。
关系表达式运算符一般包含:
等于== 、 不等于!= 、 大于> 、 小于< 、大于等于>= 、 小于等于<=
等几种,关系表达式的值是一个逻辑值,即“真”或“假”,如果为真,则表达式条件成立。
在表达式运算中还有可能出现逻辑运算,一般是多个条件的判断。逻辑运算符一般包含&& 与运算,||或运算,!非运算。优先级为:! > && > ||。
#include<iostream>using namespace std;int main(){int a;cout<<"请输入一个不为0的整数:";cin>>a;if(a<0)cout<<"a是负数"<<endl;if(a>0)cout<<"a是正数"<<endl;return 0;}
if(判断条件){满足 判断条件(true),就执行此大括号里面的内容}if(判断条件){满足 判断条件(true),就执行此大括号里面的内容}
例子:设计一个程序,输入三个整数a、b、c,判断以这三个整数为边长能否构成三角形,如果能,输出yes,否输出no。
#include<iostream>using namespace std;int main(){int a,b,c;cout<<"请输入3个不为0的整数:"<<endl;cin>>a>>b>>c;if(a+b>c && b+c>a && a+c>b)cout<<"yes"<<endl;elsecout<<"no"<<endl;return 0;}
3.多分支选择语句
if(判断条件A){满足 判断条件A(true),执行此大括号内部内容,后面的else-if及else不执行}else if(判断条件B){满足 判断条件B(true),执行大括号里面的内容,后面的else-if 及else不执行} else if(判断条件C){满足 判断条件C(true),就执行此大括号里面的内容,后面的 else 不执行}else{前面的if esle-if 都不满足条件(false),执行此大括号里面的内容}
例子:输入一整数,根据1-7数字显示周一至周日。
#include<iostream>using namespace std;int main(){int week;cout<<"请输入1-7中任意整数:"<<endl;cin>>week;if(week==1)cout<<"周一"<<endl;else if(week==2)cout<<"周二"<<endl;else if(week==3)cout<<"周三"<<endl;else if(week==4)cout<<"周四"<<endl;else if(week==5)cout<<"周五"<<endl;else if(week==6)cout<<"周六"<<endl;else if(week==7)cout<<"周日"<<endl;elsecout<<"输入错误"<<endl;return 0;}
多个条件时还可以做嵌套,比如输入性别和身高条件,判断满足男性,身高170以上的才可以加入篮球队。可以实操看看如何编写。
switch(x){//x是 变量或者一个表达式。case 变量的可能值1: 功能语句;break;case 变量的可能值2: 功能语句;break;case 变量的可能值3: 功能语句;break;........default:功能语句;}
#include<iostream>using namespace std;int main(){int week;cout<<"请输入1-7中任意整数:"<<endl;cin>>week;switch(week) {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;case 6:cout<<"周六"<<endl;break;case 7:cout<<"周日"<<endl;break;default:cout<<"输入错误"<<endl;}return 0;}
思考:如果case语句后面漏掉了break;会出现什么状况呢?
微信编辑器的代码输入真坑人,保存了一下再打开格式颜色都变了,还吃字符,比如<iostream>,在代码框里面竟然可以自动消失。





