可变与不可变的容器——变量与常量的定义和使用
1.定义变量的基本语法
我们知道,在程序运行的过程中,难免会需要存储一些数据。这个时候就需要变量出场了。
&np; 变量,顾名思义,就是可变的量。可以把它看做存储数据的容器。其基本语法如下:
变量类型 变量名称1,变量名称2…变量名称n;
比如:
int money1,money2;
double high_m=1.56;
2. 各种变量类型介绍
2.1.整形
C++基本整形及其存储范围如下:
变量类型 | 称呼 | 存储范围 | 计算出来的存储范围 |
---|---|---|---|
short | 短整型 | -28 ~ 28-1 | -3万 ~ 3万 |
int | 整形 | -216 ~ 216-1 | -21亿 ~ 21亿 |
long | 长整型 | -216 ~ 216-1或-232 ~ 232-1 | -21亿 ~ 21亿或-922 ~ 922亿亿 |
long long | 超长整形 | -232 ~ 232-1 | -922 亿亿~ 922亿亿 |
以上的变量类型都是“整型变量”。顾名思义,就是用来存放整数的变量。
思考:
1.如果在里面强行存放小数会怎么样呢?
2.long long的存储范围那么大,存储整形用long long就够了,为什么还要有其它的整形变量类型呢?
这两个问题会在后面统一解答。
2.2.浮点型(小数)
C++基本浮点型及其存储范围如下:
变量类型 | 称呼 | 存储范围 |
---|---|---|
float | 单精度浮点型 | 3.4e-38~3.4e+38 |
double | 双精度浮点型 | 1.7e-308~1.7e+308 |
浮点型就是存放小数的类型。
思考:
整形有很多就算了,为什么就连浮点型都不只有一种?
这个问题也会在后面解答。
3.变量名命名规则
3.1.规则介绍
所有的变量和常量名都要遵循以下规则:
1.名称各不相同(大小写敏感,如Aswer和aSWER不算同一个变量)
2.只能由字母,数字和下划线组成
3.不能由数字开头
4.不能是关键字(后面会讲)
比如:
int name,name;(不合法,即不能通过编译)
short kkkcs_03;(合法,即能通过编译)
double _666;(合法)
float 0zero;(不合法)
3.2.代码示例
可以自己上Dev-C++上测试一下
int name,name;
short kkkcs_03;
double _666;
float 0zero;
4.变量的赋值
我们在前面已经学习了如何定义一个变量。那么怎样把值放到变量里面去呢(赋值)?主要有以下几种方法:
4.1.在定义变量的时候直接赋值:
4.1.1.基本语法:
变量类型 变量名称=初值;
4.1.2.代码示例:
int a=10;
int b=1+1,c=a+b;//用表达式赋值
int d=c;//将c的值传递给d
完整代码:
#include<iostream>
using namespace std;
int main(){
int a=10;
int b=1+1,c=a+b;//用表达式赋值
int d=c;//将c的值传递给d
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
//输出变量,其中" "代表输出一个空格,可以用' '代替
return 0;
}
4.2.在运行程序的过程中赋值
4.2.1.基本语法
变量名=值;
4.2.2.代码示例:
a=100;//直接赋值
b=5+5;//表达式赋值
d=c;//将c的值传递给d
完整代码:
#include<iostream>
using namespace std;
int main(){
int a,b,c=25;
a=100;//直接赋值
b=5+5;//表达式赋值
a=c;//将c的值传递给a,相当于直接把a以前的值丢弃
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}
4.3.输入数据
前面的程序都是在代码中给变量赋值。那我们可不可以让用户输入变量的数值呢?使用cin输入流就可以解决这个问题。语法如下:
cin>>变量1>>变量2>>…>>变量n;
代码示例:
#include<iostream>
using namespace std;
int main(){
int a;
cin>>a;//输入a的值
cout<<a<<endl;
return 0;
}
运行上面的程序,这时的黑框框就没有直接输出了,如下图:
可以看到这里有一个光标在闪烁,我们在键盘上点击1,如下图:
接下来再按一下回车键(Enter)就完成了。
那多个数据该如何输入呢?很简单,只需要用空格或者回车键分隔就可以了。比如输入三个数据:
代码:
#include<iostream>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;//输入多个数的值
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}
当然,这里输入浮点数的值也是可以的。
4.4.显式类型转换和隐式类型转换
4.4.1.显式类型转换和精度丢失
还记得前面的思考吗?想要解决整形存储小数的问题,我们就需要将浮点类型转换为整形,代码如下:
#include<iostream>
using namespace std;
int main(){
int a;
double f;
cin>>f;
a=int(f);//等价于a=(int)f
cout<<a<<endl;
return 0;
}
在上面的代码中,我们可以得知显式类型转换语法为:
变量1=(变量1的类型)变量2
或者这么表示:
变量1=变量1的类型(变量2)
运行上面的代码,得到输出1。这是因为小数转换成整数时只会保留整数部分,小数部分会被舍去。也可以当做是向下取整。这就是精度丢失。因为造成了精度丢失,所以显式类型转换和隐式类型转换都可以被叫做强制转换。
根据这个特性,我们可以得出如何将一个小数四舍五入,代码如下:
#include<iostream>
using namespace std;
int main(){
double f;
cin>>f;
cout<<int(f+0.5)<<endl;
return 0;
}
可以自己思考一下原理哦。
4.4.2.隐式类型转换和注意事项
既然有了显式类型转换,那有没有隐式类型转换呢?但是当然有。当我们直接将一个小数的值赋给整数,就是隐式类型转换的过程。代码如下:
#include<iostream>
using namespace std;
int main(){
int a;
double f;
cin>>f;
a=f;//隐式类型转换
cout<<a<<endl;
return 0;
}
这段代码和上面的代码效果是一样的。例如,输入2.512时输出2。
注意:
1.虽然各种整形和各种浮点型的存储范围大有不同,但是它们所占有的内存空间也是不相同的。例如int占用内存空间的4个字节,而long long占用内存空间的8个字节。所以一般定义整型变量的时候都是使用int。而如果题目给出的数据范围很大时就要使用long long了。浮点型也是同样的,在写程序时一般直接使用double。
2.在使用变量时,如果没有赋初值,就相当于用没洗过的碗盛菜。以前这个碗装了什么都不知道。比如:
#include<iostream>
using namespace std;
int main(){
int a;
cout<<a;//错误示范,请勿模仿
return 0;
}
所以给变量赋初值是一个很好的习惯。除非后面要输入数据,不然都建议给变量赋一个初值。
5.常量的定义和使用
既然有了变量,那就会有常量。顾名思义,常量就是不可以改变的量。一般用大写字母表示。定义一个常量的基本语法如下:
const 常量类型 常量名=数据;
注意:常量的值要在定义时就确定好,跟变量的赋值一样,可以是一个数据,可以是一个变量或常量,也可以是一个表达式。代码示例如下:
const int a=10;
const double PI=3.1415926;
注意:
在运行程序的过程中,应保证常量不被以任何形式的修改。不然就会报错,比如:
#include<iostream>
using namespace std;
int main(){
const double PI=3.1415926;
PI=3.14;
cout<<PI<<endl;
return 0;
}
在我们点击编译运行后就会变成这样:
在底下的编译器选项中就有我们的错误信息:[Error] assignment of read-only variable ‘PI’。也就是常量"PI"被修改了,只有将它改过来成才能编译成功。
我们发生的第一个错误所在的行会被标红显示,这样可以帮助我们更快地找到错误。
在以后写代码的时候,错误是会经常出现的。我们可以自己上网查一查,也可以去问一问老师。有的时候程序的错误也会是逻辑错误。这就需要我们自己去检查和改正了。
6.课后作业
下期预告:数学运算符与数学函数
喜欢就订阅专辑吧!
【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。
欢迎扫码关注蓝胖子编程教育