数据存储—变量2

大家思考一下:假设我们现在有两个变量,该如何交换这两个变量的值呢?

我们可以把变量看做装了水的瓶子,那这个问题就转换成如何交换两个瓶子里的水。通常的做法是:第一步,我们先找朋友借一个空瓶子;第二步,把第一个瓶子里的水倒入借来的瓶子中;第三步,把第二个瓶子里的水倒进第一个瓶子里;最后,借来瓶子中的水倒入第二个瓶子中(还有别忘了把瓶子还给你的朋友)。我们在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类型变量有个非常特别的性质:当两个整数做除法的时候得到的结果是商。比如下面的代码:

int a = 5, b = 2;
cout << a/b << endl;

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

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

现在我们挑战一下更有难度的一道题。假设输入一个三位数,求各个位上的数字之和是多少?首先我们需要知道怎么求个位。因为我们是十进制的整数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, gw, sw, bw;
cin >> n; //输入一个三位整数
 
gw = n / 1 % 10; //求个位值
sw = n / 10 % 10; //求十位值。
bw = n / 100 % 10; //求百位值。
sum = gw + sw + bw;
cout << sum << endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呱呱呱~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值