《从问题到程序》第二章总结
【第一部分】 介绍了标识符、关键字及数据类型
1、标识符
C语言规定了名字的书写形式。程序中的名字称为标识符。一个标识符是字母和数字字符的一个连续序列,其中不能有空白字符,而且要求第一个字符必须是字母。为了方便起见,C 语言特别规定将下划线字符“_”也当作字母看待。这就是说,下划线可以出现在标识符中的任何地方,特别是可以作为标识符的第一个字符。C 语言还规定,标识符中同一字母的大写形式和小写形式将看作不同字符。
注意:以下划线开始的标识符保留给系统使用,在我们编写普通程序时不要使用这种标识符,以免与系统内部的名字冲突造成程序问题.
2.关键字
C语言的合法标识符中有一个特殊的小集合,其中的标识符称为关键字。作为关键字的标识符在程序里具有语言预先定义好的特殊意义,因此不能用于其他目的,不能作为普通的名字使用。例如:一个数组命名为char[ ]就会报错。
3.数据类型
C语言的基本类型包括字符类型、整数类型、实数类型等。其中实数类型较难掌握。
自己实现了下十进制转换成其他进制的代码:
【第二部分】 介绍了运算符,类型转换,函数
1.运算符
(1)算术运算符
优先级:
注意:溢出的问题:
程序通常不对计算过程中发生溢出的情况做任何事情,不会报告错误,计算将继续下去。这里对溢出时得到的结果也没有任何规定。但无论如何,发生溢出后,得到的结果已不可能是我们所希望的东西了,随后的计算也不可能再有任何价值。例如,如果某 C 系统里的 int 类型由 16 位二进制表示,下面表达式就是不正确的:32766 + 5。因为计算结果超出了 int 类型的最大值 32767,得到的结果不再有意义。写程序时应特别注意这种问题。如果认为可能出现溢出,那么就应该考虑换一个表示范围更大的类型,例如对上面例子,用:32766L + 5L就不会出问题。实数类型的计算中同样可能发生溢出。
2.类型转换
C语言里没有混合类型的(运算对象类型不同的)算术运算。当表达式计算中遇到混合类型计算时,处理方式是转换某个(或两个)运算对象的值,先从计算对象转换出相同类型的值,然后再做实际计算。这种由混合类型计算引起的类型转换称为算术运算中的自动类型转换。“自动”的意思就是说这种转换不需要在程序里明确写出。自动类型转换的基本原则是把表示范围小的类型的值转换到表示范围大的类型的值。按规定,几个算术类型转换的排列顺序从小到大是:int long float double long double。其中long double 是表示范围最大的类型。如果两个运算对象类型不同,就把位于位于左边的类型(小类型)的值转换到另一个类型(较大的类型)的值,然后用这个新值参与计算。
另外,如果表达式自然形成的计算过程不符合需要,可以通过适当加括号的方式,强制性地要求某种特定计算顺序。与此类似,如果自动类型转换不能满足需要,语言也提供了显式要求做特定类型转换的描述形式。显式要求的类型转换也被称为强制转换或者类型强制,其形式是在被转换表达式前面写一对括号,括号里写一个类型名。这表示要求把表达式的计算结果转换到指定类型。例如,表达式:(int)(3.6 * 15.8) + 4 就是要求把 3.6 * 15.8 计算的结果(一个 double 值)首先转换为 int 值,而后再用这个 int 值参与加法运算。实数类型值到整型值的转换方式是直接丢掉小数部分。
3.函数
回答书中提出的问题:
#include <stdio.h>
#include <math.h>
int main () {
printf("%f
", sqrt((3+5+7)/2.0 * ((3+5+7)/2.0 - 3) *
((3+5+7)/2.0 - 5) * ((3+5+7)/2.0 - 7)));
return 0;
}