练习与自测

1.计算多项式3x3-5x2+3x+6的值,设x=1.23。结果和笔算一样么?如果希望和笔算结果完全一致,你会怎样写代码。

2.编程求1234567890123+3210987654321。

3.一对小兔子在出生两个月后每个月都生出一对小兔子。如果所有兔都不死,那么半年以后可以繁殖多少对兔子?

4.有一段楼梯有6级台阶,规定每一步只能跨一级或两级,要登上第6级台阶有几种不同的走法?

5.从前有一个农夫,死后留下15头牛,他在遗书中写到“妻子:分给全部牛的半数再加半头;长子:分给剩下的牛的半数再加半头;次子:分给剩下的牛的半数再加半头;长女:分给最后剩下的。”编程求长女得到了几头牛。

6.某人有12品脱的啤酒一瓶,另有一个8品脱和5品脱的容器。按照如下步骤操作

(1)把12品脱酒瓶内的酒倒入8品脱的容器,倒满为止;

(2)把8品脱的容器内的倒入5品脱的容器,倒满为止;

(3)把5品脱容器内酒的倒入12品脱酒瓶,倒完为止;

(4)把8品脱酒瓶内的酒倒入5品脱的容器,倒完为止;

(5)把12品脱的容器内的倒入8品脱的容器,倒满为止;

(6)把8品脱容器内酒的倒入5品脱酒瓶,倒满为止;

(7)把5品脱容器内酒的倒入12品脱酒瓶,倒完为止;

编程模拟这个过程,输出最后各容器内剩多少酒。

7.5个小孩围成一圈分糖果。最初第一个小孩有66块糖果,第二个有35块,第三个有24块,第四个有7块,第五个有34块。第一个小孩把自己的一半分给第二个小孩,然后第二个小孩把自己现有的一半分给第三个小孩……最后第五个小孩把自己现有的一半分给第一个小孩。编程模拟这个过程,输出最后每个小孩的糖果数。

8.5张卡片排成一列,上面依次写着A,B,C,D,E。把第1张插入第3和第4张之间,再把第2张插入第4和第5张之间,再把第5张插入第1和第2张之间。问此时卡片上的字母的顺序是什么样的?

9.编程,输入一个大写字母字符,输出其小写字母字符。

10.printf("%.201f\n",1.23456+56789.0007);的输出结果是多少,这个结果和笔算的结果一致吗?如果希望得到和笔算完全一致的结果,你会怎样设计程序。

11.求123423455678。

12.编写程序,要求用户输入两个整数值,输出这两个整数的和、差、积、商和余数(假设输入的数据不至于引起溢出,且除数不为0)。

13.编写程序,要求能求出ASCII表中可打印字符的ASCII码值。

————————————————————

(1) 这是GB/T 15272-94中的称呼,有的书籍把这个词译为“主表达式”,似乎更妥当些。我倾向于译成“元表达式”。

(2) 也包含数组名。

(3) 没查到正式称呼,也可以理解为界定符。

(4) 变量名本身就是表达式。

(5) 正式的C语言文档中把这种具有特定数据类型含义的一块连续内存空间叫做对象(Object)。

(6) 只有左值才能被赋值,但并非所有左值都能被赋值。

(7) 在stdio.h中对printf的描述是:int printf (const char*, …);, printf前面的int表明了printf函数调用是一个int类型的表达式。

(8) 典型的错误说法是“在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。”

(9) 算术类型还包括其他一些目前没讲到的类型。

(10) 利用续行的标志,从某种意义上说,单调也可以割裂。

(11) 指整数是按补码、原码还是反码表示。C语言并不要求一定用补码来表示负数,尽管我们遇到的多是用补码来表示负数。

(12) 在有些特别讲究规则的语言中,混合运算是被严格禁止的。

(13) 提升必须保证数据的范围没有变小,有一些琐碎的细节需要注意,比如在int和short范围同样大小的条件unsigned short将会被转变成unsigned int,而当int的范围大于short的范围的时候,unsigned short将会被转变成int。

(14) 这里只涉及前面介绍过的几种类型。