C++从入门到成仙——4.认识变量

(如果没有账户而不能复制代码,请在上方地址栏前面加上“read:”打开阅读器模式)

如果你背完了框架,那么就可以学C++中的第一个操作——变量

变量就是存储数据的东西,它的格式是:变量类型 变量名 = 变量的值(可以省略这步,但是类型要匹配),这里的“=”是赋值而不是相等!

1、基本方式

我给你们做了个表,给你们看看变量类型有多少种:

常用的变量类型总结、注意事项和数据范围
变量类型数据范围注意事项
int类型(整形类型)-2,147,483,648~2,147,483,647注意数字溢出,竞赛时看数据范围!
double类型(双精度浮点类型)约 ±1.7e308(约15位有效数字)精度问题!不能直接相加并判断!
float类型(单精度浮点类型)约 ±3.4e38(约6~7位有效数字)同double类型!
char类型(字符类型)

-128~127(有符号)/ 0~255(无符号)

遇到多字节直接截断,编译器警告+不可见字符
bool类型(布尔类型)0或1,如果初始化非0数字,默认1,遇到加减法时,提升到int在初始化时只要数字非0,默认存为1。
long long类型(长整型)-9,223,372,036,854,775,808~ 9,223,372,036,854,775,807同int类型!
string类型(字符串类型)受系统限制,动态分配重分配后迭代器失效、指针错误!

变量的定义方法:

int a=3005;
//变量类型 变量名=变量值; (=...可以省略)

这段代码定义了名为“a”的整型变量,值为3005。

在这里,你或许明白了变量的存储方式,但是调皮的你怎么可能到此为止?于是你写了下面这个代码:

char a=100;

这段代码会编译错误吗?答案是:肯定不会,这里的100会被隐式转换成char类型,结果是'D',因为D的ASCLL码是100,说到ASCLL码,你会感到陌生,没关系,看看下图:

 你会感到非常的复杂,没关系,你只需要记住下面一点:

'0'的ASCLL码是48,' '的ASCLL码是32,'A'的ASCLL码是65,'a'的ASCLL码是97,后面的依次相加即可(空格除外)

隐式转换就是指在赋值的时候如果变量类型不匹配,会尝试转换变量类型,如果转换失败,会编译错误或者运行时错误

例如:

//1
int a=3.14 //a=3
//2
double x=10/3 // '/'在这里是除法,而这里的结果是3而不是3.333…
//3
char* q=100; //运行时错误

当然,你也可以强制转换,强转就是在数字前面写“(目标类型)”,下面是代码示例:

int a=65;
char b=(char)(a) //b='A',建议在值上打括号

2、全局变量

有一种变量叫做全局变量,也就是任何函数都能访问的变量,例如:

#include<iostream>
using namespace std;
int a=20 //全局变量
int main(){
    cout<<a; //输出a
    return 0;
}

相反,还有一种叫做局部变量,仅当前的函数/循环/分支(后面要学的)才能访问,就比如以下的代码会出现编译错误:

#include<iostream>
using namespace std;
int main(){
    if(true){ //如果括号内容成立就进入,true=真,内容永远成立
        int a; //定义a
    }
    cout<<a<<endl; //编译错误!
    return 0;
}

因为变量a在分支语句内,所以是局部变量,分支过后就被销毁,导致我们想要输出a时触发编译错误。

3、特殊值

这是一个拓展知识点,了解即可,我怕你的大脑宕机。

有3个特殊数字,分别是INF(无穷大)、NaN(非数字)、-INF(无穷小)。(IEEE 754规定)

这些数的产生方式很简单:

double x=0.0/0.0; //返回NaN
double y=1.0/0.0; //返回INF
double z=-1.0/0.0; //返回-INF

而且NaN≠NaN,因为NaN不是数字

4、总结

本篇学了变量的定义、赋值和ASCLL码、隐式转换,还有全局变量和特殊值,如果有不会的,请复看一遍!

5、习题(满分60分)

一、填空题。(每空3分,合计30分)

(1)特殊值分三种,分别是(     )、(     )、(     )。

(2)'0'的ASCLL码是(     ),'A'的ASCLL码是(     ),'a'的ASCLL码是(     )

(3)将浮点型数字“3.14”赋给整型变量“a”,结果是(     )。

(4)int范围的类型是(                              )、(                              )。

(5)(     )变量所有函数都可以调用。

二、判断题。(每题6分,共30分)

(1)下面代码会编译错误。(     )

string e="hello"
int f=(int)e;

(2)下面代码输出“True”。(     )

double nan1=0.0/0.0;
double nan2=0.0/0.0;
if(nan1==nan2){ //如果nan1等于nan2
    cout<<"True"<<endl; //输出“True”
}else{ //否则
    cout<<"False"<<endl; //输出“False”
}

(3)下面代码输出“nan”。(     )

double inf1=1.0/0.0;
double inf2=1.0/0.0;
std::cout<<inf1-inf2; //输出inf1-inf2

(4)nan全写是None a Number。(     )

(5)全局变量会自动初始化。(     )

6、答案(写完之后再看!)

一、1、 NAN INF -INF     2、 48 65 97      3、 3      4、 -2,147,483,648   2,147,483,647

5、全局

二、1.√    2.×    3.√    4.×    5.×

7、后记

希望本篇文章对小白有帮助,如果有错误,欢迎大佬来纠错!

如果作者写得好,收藏一下吧,未免以后用得着呢?

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值