在C 中“=”作为赋值运算符,我们之前已经用过很多次了。
今天我们主要讲一下《信息学奥赛一本通》赋值语句这一节中的两道例题。
例一. 输入两个正整数a和b,试交换a和b的值。
这道题有一个陷阱,如果我们之前没接触过这种题,很容易被坑。写成这样:
但是我们发现,程序运行之后,完全不是我们要的结果:
到底是哪错了呢?
问题就出在这:
a=b;
b=a;
假如说我们输入a的值是1,b的值是2.
在a=b这步时,a的值就是2了
然后让b=a,b还是2 。
这就不是互换了,而是都变成b的值了。
我们要达到互换的 目的,我们需要一个用来中转的变量c。
这样,我们先把a的值赋给c,然后把b的值赋给a,再把c的值赋给b,这样就可以了。
看看运行结果,这回换过来了:
例三. 鸡兔同笼。
笼子里有若干只鸡和兔,头共30个,脚共90只。问笼中鸡和兔各有多少只?
在这道题里,我们可以定义4个变量,c r f h
c代表鸡,r代表兔,f代表脚,h代表头
根据题意,我们可以得到:
c r=h
2c 4r=f
如果我们解数学题,可以将这两个等式列一个方程组,然后计算出来就可以了。
不过在C 中这样显然是不行的,因为我们不能把一个值赋给一个表达式。
所以需要我们稍微计算一下。经过计算我们得出:
c=h-r
2(h-r) 4r=f
r=(f-2h)/2
现在我们可以编写代码了: