变量

作者: qiqi 分类: c++ 发布时间: 2024-07-01 23:34

存储数据的容器——变量

今天我们要学习一个非常重要的概念——变量。在生活中,我们经常会遇到各种各样的变化,比如温度的变化、身高的增长等。在计算机编程中,也有类似的概念,那就是变量。变量是用来存储数据的容器。我们可以把变量理解为装液体的瓶子。不同瓶子之间的形状和材质各不相同,有的适合装水,有的适合装油,有的适合装醋,所有可以把这些瓶子分成不同的种类,即瓶子的“类型”不同。在编程中,这个瓶子的类型称作变量的“数据类型”。比如能存储整数的变量是整数类型,简称“整型”,能存储字母的变量是字符类型。当然,在生活中为了防止错拿调料瓶,比如放陈醋和酱油的瓶子很容易被混淆,我们还会为每个瓶子都贴上一个标签,比如“陈醋”、“酱油”、“色拉油”等等。这些标签就如同这些容器的“名字”一样,我们称其为变量名。那我们该如何获得和使用变量呢?

变量的声明

如果你想用瓶子装某种液体,你首先得先有一个瓶子才行。在C++中也是如此,你想存储一个数据,你首先要有一个变量,而这个变量可不会凭空出现,你必须明确的向计算机系统表达你的需求:“计算机我需要一个瓶子!”。这个过程叫变量的声明。声明变量时,你需要告诉计算机这个变量的名称和类型。比如在C++中这样声明一个变量:

int n;

计算机系统就会给你一个瓶子,不仅如此他还会为你在这个瓶子上贴上一个标签:“n”,他还会时时刻刻帮你记得这个瓶子只能装整数(int代表整数类型)。你还可以声明一个能装字母的字符型变量,如:

char ch;

当然如果你一次需要多个同类型的变量,也可以一起跟计算机说,而不用一次一次的声明。比如:

int a,b,c;

这样计算机一次帮你申请了3个int类型的变量。千万注意,变量a、b、c之间是英文的逗号,而最后用的是英文的分号。在C++中,分号表示这句话结束了,功能有点类似中文中的句号。

聪明的小朋友们,你们现在可以在编译器中尝试声明一下变量吧!

变量赋值

有了瓶子,我们就可以往瓶子里装东西了。在C++中,往变量中“放”数据的工作叫做变量的赋值。比如:

n = 10;

注意,初学者不要把它读成“n等于10”,正确的读法是把10赋值给变量n。当然在使用n这个变量之前,前面要先定义好。

字符型变量的赋值如下:

ch = ‘A’;

这里应该读作:“把字母A赋值给变量ch”。

有的时候我们可以在声明变量的时候直接给变量赋值。这有点像在超市买矿泉水——瓶子里直接已经有水了,不需要我们另外去装。

比如:

int n = 10;

char ch = ‘A’;

除了在程序中直接给变量赋值以外,还可以在程序运行的时候,通过键盘输入得方式为变量赋值。

比如:

cin>>a;

程序运行到这条代码的时候就会暂停,在控制台上闪烁光标,等待你为变量a来赋值。你现在就可以动手试一下了,注意光标是否在闪烁。

cin的功能非常强大,可以一次同时为多个不同类型的变量赋值。比如:

cin>>a>>ch;

如果在控制台输入10   A,那么整型变量a中存储的就是10,字符型变量ch中存储的就是字母’A’。

注意:在控制台为字符型变量赋值的时候不需要单引号,但是在程序中赋值的时候需要单引号。

 

这里请你思考一个问题:对于一个刚声明的变量,在被赋值之前里面有没有内容呢?

其实是有的。你可以这样理解,这些瓶子都是反复循环利用的。之前的瓶子装过东西,你申请到这个瓶子以后,可能还残留前一个使用者装的液体,因此对于变量,一定要赋值以后再使用!

变量的使用

首先我们经常做的操作是,看瓶子里还有多少东西?C++中叫做查看变量的内容。比如:

cout<< a<<endl;

就是在控制台中显示变量a中存储的数据。

我们在瓶中保存数据的目的并不是用来看这么简单的,我们还可以做很多其他的事情:

比如,我们可以用来参与计算:

cout<<20+a<<endl;

看看控制台会输出什么内容,是不是输出的是30?因为变量a中保存的数据是10。20+10等于30。在一个运算中,变量可以当一个具体的数来使用。

请思考一下,如果有下面的代码会输出什么内容?

int a, b = 20, c;

a = 10;

c = a + b;

cout << c << endl;

当你心中有了结果以后,可以在你的编译器中,运行上面的代码,看看程序在你头脑中运行的结果与计算机是否一致?是的,以后所有的程序都要现在脑袋里运行,然后再去计算机中验证。那么你的脑袋就会越来越好使,最终会像电脑一样厉害!

这里还有一个小技巧要偷偷的告诉你。C++中,针对整型变量,有个特殊的写法:

a++;

他会让变量a里的内容增加1。比如a里面原来存储的数据是10,这行这个操作以后就会变成11。前面这种写法完全等价于下面的写法:

a = a + 1;

你猜一猜,下面的代码有什么作用呢?

a–;

 

思考题:如何交换两个变量的值?

我们可以把变量看做装了水的瓶子,那这个问题就转换成如何交换两个瓶子里的水。通常的做法是:第一步,我们先找朋友借一个空瓶子;第二步,把第一个瓶子里的水倒入借来的瓶子中;第三步,把第二个瓶子里的水倒进第一个瓶子里;最后,借来瓶子中的水倒入第二个瓶子中(还有别忘了把瓶子还给你的朋友)。

我们在C++中模拟这个过程:

int a = 10, b = 20;

int c; //变量c用来模拟借来的瓶子

c = a;

a = b;

b = c;

cout << a << ” ” << b << endl;

 

当然,还有不是“通常”的做法。要了解这种做法,首先要知道变量在给别的变量赋值时,自身不会发生变换的(这与现实生活中的倒水不同)。比如执行下面的语句:

c = a;

系统会用a的值赋为变量c赋值,这个过程中变量a的值是不会改变的。知道了这个事情,我们再来看一下下面的代码:

int a = 10, b = 20;

a = a + b;

b = a – b;

a = a – b;

cout << a << ” ” << b << endl;

这段代码同样实现了变量值的交换。聪明的你能看懂原理么?如果懂了做一下下面的填空题看看:

//交换两个变量的值

int a = 10, b = 20;

a = a – b;

______;

______;

cout << a << ” ” << b << endl;

 

对于int类型变量有个非常特别的性质:当两个整数做除法的时候得到的结果是商。比如下面的代码:

int a = 5, b = 2;

cout << a/b << endl;

输出的结果是2,不是5.2!一定要记住两个整数相除的时候得到的是商!!!那余数怎么求呢?C++给了另外一个运算符,专门计算两个整数相除的余数,他就是“%”。大家可以试一下cout << a%b << endl;的结果是什么。

这里一定要注意两点:

  • 对于除法运算符“/”,只有两边都是整数时结果才是商,两边只要有一个是其他类型的数据就会直接计算结果;
  • 求余数运算符“%”,两边必须是整数,否则系统编译时会报错!

好了,学了这么知识,让我们来实践一下吧。你的好朋友小明同学家里经常来客人,现在需要为每个人准备茶水。已知小明家的水壶能有n毫升水,纸杯能装m毫升水。请你帮助小明同学设计一个程序,能帮助小明快速计算能倒多少杯水(每杯都要满)?水壶还剩下多少水?

int n, m;
cin >> n >> m;
cout << “能倒” << n / m << “杯水,水壶中还剩余” << n % m << “毫升水” << endl;

现在我们挑战一下更有难度的一道题。假设输入一个三位数,求各个位上的数字之和是多少?首先我们需要知道怎么求个位。因为我们是十进制的整数n,所以除以10的余数就是个位,商就是去掉个位以后的数值。比如整数n的值是123。

123%10结果是3, 123/10的结果是12,即去掉个位以后的值。这样我们就可以用“降维”的方法来思考问题,把3位数降到2位数,然后再降到1位数。参考代码如下:

int n, sum = 0;
cin >> n; //输入一个三位整数
 
sum = sum + n % 10; //把个位加入到sum中
n = n / 10;//去掉个位数,把原来的十位变成个位
 
sum = sum + n % 10; //继续把个位加入到sum中
n = n / 10; //再次去掉个位,n只剩下一位了
 
sum = sum + n;
 
cout << sum << endl;
 
对于初学者目前只能这么来写,等学习了循环结构以后,这段代码可以得到极大的简化。另外这段代码直接修改了n的值,如果后面还需要用到n的值那么显然是不恰当的。这里给出一个通用的求整数每个位上值的方法:
int n;
cin >> n; //输入一个三位整数
 
int gw = n/1%10;//求个位值。除1就是为了跟后面对其,更加美观
int sw = n/10%10;//求十位值。
int bw = n/100%10;//求百位值。
int qw = n/1000%10;//求千位值。
… …
有了这个求各个位的方法,刚才求3位整数各个位之和的算法可以改写成下面的代码:
int n, sum;
cin >> n; //输入一个三位整数
 
int gw = n / 1 % 10; //求个位值
int sw = n / 10 % 10; //求十位值。
int bw = n / 100 % 10; //求百位值。
sum = gw + sw + bw;
cout << sum << endl;
2 条评论
  • 卉通天下

    2024 年 7 月 2 日 上午1:29

    a=a-1

  • qiqi

    2024 年 7 月 6 日 下午2:07

    这里是否需要加上负整数取余的讨论?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

标签云