C++从入门到入土4——如何使用变量(不定期连载)

大家好,我是Michael_cmr(一位蒟蒻)
今天给大家讲解——如何使用变量。
来吧!上节课已经说了大概的变量类型。现在开始使用变量

1.赋值操作(基本操作)

赋值操作就是给变量赋值。来,咱们上代码!

#include<iostream>
using namespace std;
int main()
{
	int a,b,c;
	a=1,b=2,c=3;
	cout<<"a="<<a<<"  b="<<b<<"  c="<<c<<endl;
	a=50,c=8884,b=454;
	cout<<"a="<<a<<"  b="<<b<<"  c="<<c<<endl;
	a=b=c;
	cout<<"a="<<a<<"  b="<<b<<"  c="<<c<<endl;
	system("pause");
	return 0;
}

很好,让我们一起来分析一下这段代码。
首先,我们给整形变量a,b,c赋了初值,运用了 = 号,
然后输出了
在这里插入图片描述
接着,我们又给了它们三个新的值——
于是:
在这里插入图片描述
我们发现,我们后面给予它们的数值覆盖了前面的值。

最后,我们写了一个语句“a=b=c”
这句话什么意思呢?
就是说,把 c 的数值赋给 b 然后再给 a 。
注意我的语序是c->b->a 的,所以,可以得出赋值语句是从右往左赋值的。
来个例子证明一下
还是定义a,b,c;

#include<iostream>
using namespace std;
int main()
{
	int a,b,c;
	a=20;
	b=30;
	c=b;     //此处c的值应该为b,也就是30,尝试输出一下
	cout<<"a="<<a<<"  b="<<b<<"  c="<<c<<endl;
	b=a; 	 //此处b的值应该为a,也就是20,尝试输出一下
	cout<<"a="<<a<<"  b="<<b<<"  c="<<c<<endl;
	system("pause");
	return 0;
}

在这里插入图片描述
结果与注释当中预料的一模一样。所以要注意,在C++当中 a=b 和 b=a 是两个完全不同的语句。
让我们来一道题目体会一下:

题目:我们有整形变量a和b,现在要交换它们的值。

分析:假设我买了一瓶82年的雪碧和一瓶92年的可乐,现在要把可乐装进雪碧瓶里,然后把雪碧装进可乐瓶里。可以想象,除非我们有超能力,不然是不可能直接交换两个饮料的。
于是,我们就想到了——我们再花3个亿买下一个72年的空瓶子,然后把雪碧到进去(这时我们就的可乐瓶就空了),然后再把3亿的空瓶子里的雪碧到到可乐瓶里————任务完成(成功AC)
代码实现

#include<iostream>
using namespace std;
int main()
{
	int a,b,c;   //a是可乐,b是雪碧,c是空瓶子
	a=200;       //可乐有200ml
	b=300; 		 //雪碧有300ml
	cout<<"a"<<a<<"	 b"<<b<<endl;  //先输出一下初始值 
	c=a;         //把可乐倒进空瓶里 
	a=b;         //把雪碧倒进可乐瓶里
	b=c; 		 //把空瓶里的可乐倒进雪碧瓶里
	cout<<"a"<<a<<"	 b"<<b<<endl;  //输出交换后的值 
	system("pause");
	return 0;
}

运行结果
在这里插入图片描述
可以看出,我们三亿元的空瓶产生了非常大的作用。

很好,细细品味一下——是不是醉了(毕竟是82年的东西)

哈哈~,我们继续来看其他的数据类型操作

精度(就是有小数)的操作

嘻嘻~,习惯性的——咱先上代码

#include<iostream>
using namespace std;
int main()
{
	float a;   //又是a,大家可能有点讨厌它们了 
	a=3.1415926;
	cout<<a<<endl;    
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
大家发现我们的a明明是3.1415926。但是输出的却只有3.14159。
这是为什么呢?
就是cout输出语句自动判断的输出精度(一般都是5位),如果要保留2位小数的话(只是举个例子),那么,就要加入一些厉害的东西,请看:

#include<iostream>
#include<iomanip>     //加入的头文件 
using namespace std;
int main()
{
	float a;  
	a=3.1415926;
	cout<<fixed<<setprecision(2)<<a<<endl;   //setprecision(2)意思是留2位有小数注意前面要加入fixed 
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
结合注释,你应该就知道了cout处理精度是有多么麻烦了吧?

没事,我们末尾有大彩蛋,不急,先往下看——

字符的操作:

#include<iostream>
using namespace std;
int main()
{
	char a,b;
	a=65;
	b='A';
	cout<<"a="<<a<<"   b="<<b<<endl;
	system("pause");
	return 0;
}                                                   

运行结果:
在这里插入图片描述
我们发现,字符型变量 a 的数值是65,而我们给 b 赋值是字符 ‘A’ 。然而它们的输出却是一样的。
这是为什么呢?
这就涉及到了ASICC码表。(附图一张)
在这里插入图片描述
这个就是常用的ASICC码表。
所以就可以得知,我们给 char (字符型)赋值的时候有两种方式:
1.单引号中间加上字符 如:‘q’
2.直接写ASICC码表的数值 如:87(就等于赋值了‘W’)

但是,有时候,我们会想要输出的是我们字符变量的ASICC码值怎么办呢?
这是,就有一种叫做强制类型转换的东西。来咱上代码

#include<iostream>
using namespace std;
int main()
{
	char a,b;
	a=65;
	b='A';
	cout<<"a="<<(int)a<<"   b="<<(int)b<<endl;
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
不难看出,我们在输出的时候加上了一句(int)这点代码。这是什么意思呢?
这个就是我们传说中的强制类型转换:本来他们要输出的是字符A,但是我们把字符A转换成了int(整形),所以,输出的就是一个整数65(A的ASICC码)。

当然,强制类型转换不知这一点用处,再来一个例子:
我们有int 类型的a=214748364,还有b=999999999
然后输出a+b的和2。
分析:这个时候,很明显a+b超过了int类型范围。
所以,有两个思路:
1.定义long long 类型的c来存储a+b的和
2。
代码实现:

#include<iostream>
using namespace std;
int main()
{
	int a=214748364,b=999999999;
	long long c=(a+b)*2;
	cout<<c<<endl;
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
我们发现,答案是错误的。哎~很奇怪,这是为什么呢?
原因:因为 a 和 b 都是int类型,所以它的运行结果(就是两数相加)也是int 类型,所以数据的溢出导致结果出错。
于是——第二种想法,强制转换类型:
代码实现:

#include<iostream>
using namespace std;
int main()
{
	int a=214748364,b=999999999;
	long long c=(long long)(a+b)*2;
	cout<<c<<endl;
	system("pause");
	return 0;
}

运行结果
在这里插入图片描述
发现,这次就是对的了。
原理:我们把 (a+b)*2的值强制转换成了long long类型,于是——答案正确!

从这道题我们可以看出,编译器会自动转换数据类型。
还记得前面我们将运算符的时候
   8/7=1
这道题吗?
现在用数据类型的眼光来看待这个算式
8和7都是整形变量。所以,两数相除的结果也是整数——1;
然而,根据数据类型转换,我们又可以得出:

#include<iostream>
using namespace std;
int main()
{
	cout<<8.0/7.0<<endl;
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
我们就发现这个时候小数就出来了。这是通过编译器的自动转换数据类型得到的

我们用强制转换数据类型也可以得到同样效果:

#include<iostream>
using namespace std;
int main()
{
	cout<<(float)8/7<<endl;
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
发现与刚刚是一样的。所以————自己体悟一下,这个还是比较重要的东西。

好了~,让我们一起进入彩蛋部分吧!!!

2.彩蛋

这个彩蛋其实也没什么,就是给大家介绍我们的新成员——printf
printf 是C语言的标准输出,对于输出还是很友好的(比cout简单),但是也有一些复杂的地方。现在就让我来为大家一一讲解:
首先,这个函数的头文件是——
#include< cstdio>(C++风格的头)      或者
#include< stdio.h> (C风格的头)

既然是C语言的标准输入输出,那么,我们就可以省略掉

using namespace std;

这一句话,是不是感觉瞬间少写了很多东西?

嘻嘻~抱着这种想法,我们继续往下——

如何使用printf 语句

举例子:

#include<cstdio>
#include<cstdlib>   //包含了system("pause") 
int main()
{
	int a=20;
	printf("a=%d",a);
	float b=3.1415;
	printf("保留2位小数的b=%.2f",b);
	printf("保留3位小数的b=%.3f",b);
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
发现它们是不是黏在了一行?
我们加一个‘\n’在里面就好了——‘\n’表示的意思是换行,等同于cout里面的endl。

我们加进去看一下

#include<cstdio>
#include<cstdlib>   //包含了system("pause") 
int main()
{
	int a=20;
	printf("a=%d\n",a);
	float b=3.1415;
	printf("保留2位小数的b=%.2f\n",b);
	printf("保留3位小数的b=%.3f\n",b);
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
是不是达到了换行的效果?

接下来让我们一起系统的学习printf语句

我们发现,printf后面有个括号,括号里面就是我们要输出的内容。
     接着,括号里面有个双引号是吧?这个双引号里面的除格式符外的所有字符(包括中文)直接输出——看到这里,大家是不是有点懵,格式符是啥?
     格式符就是我们写的%d啊%f啊之类的
     列一个表格来写出所有的格式符
(省略百分号)    
格式字符                意义
d           以十进制形式输出带符号整数(整数不输出符号)
o           以八进制形式输出无符号整数(不输出前缀0)
x,X        以十六进制形式输出无符号整数(不输出前缀0x)
u           以十进制形式输出无符号整数
f,lf         以小数形式输出单、双精度实数
e,E         以指数形式输出单、双精度实数
c          输出单个字符
s          输出字符串

在输出小数(f,lf)的时候,我们可以在%与f或lf之间加上一个  .  然后加上一个数字n,表示输出小数点后 n 位。

请原谅,以后的blog 中,我就讲用printf语句作为输出语句来给大家讲解(根据多年的经验printf语句比cout快),希望大家能够掌握这个语句!谢谢!如有出错,多多包涵(如能指出,感激不尽)!谢谢大家!欢迎各位大神指点!
(转载请标注出处与楼主姓名)
(QQ:2437844684)
(欢迎各位大神评论)

发布了4 篇原创文章 · 获赞 4 · 访问量 1379

猜你喜欢

转载自blog.csdn.net/Michael_cmr/article/details/104867584