练习与自测
1.即使学过C语言,能正确说出下面程序输出的人也不多。
程序代码2-16
2.判断下列那些值是C语言合法的int或double类型常量:
3.下面那些是有效的double类型常量:
4.下面哪些是合法的标识符:
5.编程求1+3+5+7+9+11。
6.求出整数123的各位数字相应的字符ASCII码编号并输出。
7.父亲将2520个桔子分给6个儿子。分完后父亲说:“老大将分给你的桔子的1/8分给老二;老二拿到后连同原先的桔子分1/7给老三;老三拿到后连同原先的桔子分1/6给老四;老四拿到后连同原先的桔子分1/5给老五;老五拿到后连同原先的桔子分1/4给老六;老六拿到后连同原先的桔子分1/3给老大”。在分桔子的过程中并不存在分得分数个桔子的情形,结果大家手中的桔子正好一样多。问六兄弟原来手中各有多少桔子。
8.编程计算下面多项式的近似值:
9.编程计算下面运算式的近似值,并用指数形式显示结果:
10.编程求最小的大于13495673的且能被72189整除的数。
11.求3/229精确到小数点后20位的结果。
12.输入一身份证号码,输出这个人的生日。
13.两队比赛,甲队有A、B、C3人,乙队有X、Y、Z3人。抽签结束后有人打听比赛名单。A说他不和X比,C说他不和X、Y比。编程找出比赛抽签结果。
14.如果将十进制123456789写成七进制,那么从右边数第3位是几。如果是化成八进制呢(尽量不改动代码部分)?
15.当int类型为16bits的情况下,下面的代码是否成立?
程序代码2-17
16.计算14+24+34+44+54+64+74。
————————————————————
(1) 毕达哥拉斯了解无限循环小数,但计算机中只有有限长度的整数或小数。计算机的世界里没有“无限”这个词。
(2) 这个值被写在编译器的“include”文件夹下的“limits.h”文件中:#define INT_MAX 2147483647
(3) 这里D表示前面的数是十进制的,类似地,二进制数数后面写B,八进制后面写Q,十六进制后面标H。这是平时的文本书写约定,但并不是在代码中书写的格式要求。
(4) 注意这是>C语言中的byte概念,和前一章的Byte不是一回事情,尽管多数情况下它们是一致的。
(5) 如果把string-literal也看做常量的话,那么这是一个例外,它的存储位置在代码中是可知的。
(6) 读音为“标志”。
(7) 这是一个过时的陈述。C99容许标识符可以由更广泛的文字(ISO/IEC 9899:1999,Annex D)组成。鉴于编译器的限制,本书的标识符依然依照原来的方法构造。
(8) 在台湾,这个词被翻译成“记忆体”。
(9) 这个存储空间可能位于内存也可能位于寄存器(CPU内部自己专用的记录数据的空间)。后面的变量除非特别说明,均假设是在内存中。
(10) 可能的例外是,如果把string-literal也看为常量的话,那么这是一种在代码中可以知道其存储位置的“常量”。
(11) 毕竟,没有类型的时代过去了。
(12) 美国一次宇航事故就是因为这个原因。
(13) 得不到值的称为得到了void值,这只发生在函数调用时。
(14) 即可能有这样的情况,2个字节中只有14位用来表示正负号和数值,还有两位不使用。
(15) “当整数相除且不能整除时,若两个操作数均为正,则/算符的结果是小于其代数商的最大整数,且%算符的结果为正。若两个操作数均为负,则/算符的结果是小于等于其代数商的最大整数还是大于等于其代数商的最小整数由实现定义,%算符的结果的符号也由实现定义。若商a/b是可表示的,则表达式(a/b)*b+a%b应等于a。”,GB/T 15272-94程序设计语言C,第35页,国家技术监督局1994-12-07发布。
(16) 本质上这个问题不属于C语言的范畴,这与具体的计算机型号有关,但这的确是学好C语言所需要了解的。
(17) 本书中的“应”通常表示一种提倡的良好编程风格,不表示“必须”的意思,而表示“可以不”但“应该这么做”的含义。
(18) ASCII是American Standard Code for Information Interchange的缩写。
(19) 当然,屏幕也可以输出图形,不过这种输出行书不属于本书讨论的范围。
(20) 0x在DEV C++中不行,这应该视为它的一个bug。
(21) 道理是这么说的,实际上double类型的精度不至于这么差,十进制下15位有效数字的精度是有的。
(22) 后面将会看到,它们之间的差异不仅仅是这些,还有运算规则方面的。
(23) 很可惜,在Dev-C++中没有这样做。
(24) 更专业的说法是size_t类型,size_t类型是unsigned类型在某些情况下的一种更明确、更清晰、更容易理解的一种称呼。对于这种类型可以在调用printf()时采用%u格式输出,C99中可以使用%zd,但目前Dev C++尚不支持这种格式。