《C语言入门经典(第四版)2-编程初步.ppt》由会员分享,可在线阅读,更多相关《C语言入门经典(第四版)2-编程初步.ppt(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C入门经典(第入门经典(第4版)版)第第02章章 编程初步编程初步 现在读者一定很渴望编写程序,让计算机与外界进行实际的交互。我们现在读者一定很渴望编写程序,让计算机与外界进行实际的交互。我们不希望程序只能做打字员的工作,显示包含在程序代码中的固定信息。的确,不希望程序只能做打字员的工作,显示包含在程序代码中的固定信息。的确,编程的内涵远不止此。编程的内涵远不止此。理想情况下,我们应能从键盘上输入数据,让程序把它们存储在某个地理想情况下,我们应能从键盘上输入数据,让程序把它们存储在某个地方,这会让程序更具多样性。程序可以访问和处理这些数据,而且每次执行时,方,这会让程序更具多样性。程序可以访问
2、和处理这些数据,而且每次执行时,都可以处理不同的数据值。每次运行程序时输入不同的信息正是整个编程业的都可以处理不同的数据值。每次运行程序时输入不同的信息正是整个编程业的关键。在程序中存储数据项的地方是可以变化的,所以叫做变量关键。在程序中存储数据项的地方是可以变化的,所以叫做变量(variable)(variable),而,而这正是本章的主题这正是本章的主题 C入门经典(第入门经典(第4版)版)2.1 计算机计算机的内存的内存 首先看看计算机如何存储程序要处理的数据。为此,就要了解计算机的首先看看计算机如何存储程序要处理的数据。为此,就要了解计算机的内存,在开始编写第一个程序之前,先简要介绍计
3、算机的内存。内存,在开始编写第一个程序之前,先简要介绍计算机的内存。计算机执行程序时,组成程序的指令和程序所操作的数据都必须存储到计算机执行程序时,组成程序的指令和程序所操作的数据都必须存储到某个地方。这个地方就是机器的内存,也称为主内存某个地方。这个地方就是机器的内存,也称为主内存(main memory)(main memory),或随机,或随机访问存储器访问存储器(Random Access Memory(Random Access Memory,RAM)RAM)。C入门经典(第入门经典(第4版)版)2.2 什么是变量什么是变量 变量是计算机里一块特定的内存,它是由一个或多个连续的字节所
4、组成。变量是计算机里一块特定的内存,它是由一个或多个连续的字节所组成。每个变量都有一个名称,可以用该名称表示内存的这个位置,以提取它包含的每个变量都有一个名称,可以用该名称表示内存的这个位置,以提取它包含的数据或存储一个新数值数据或存储一个新数值。C入门经典(第入门经典(第4版)版)2.3 计算机绘图系统的硬件组成计算机绘图系统的硬件组成 变量有几种不同的类型,每种变量都用于存储特定类型的数据。首先看看变量有几种不同的类型,每种变量都用于存储特定类型的数据。首先看看用于存储数值的变量。在程序里存放数字的方法很多,下面从最简单的方法开用于存储数值的变量。在程序里存放数字的方法很多,下面从最简单的
5、方法开始始。u 整数变量整数变量uu 变量的命名变量的命名uu 变量的使用变量的使用uu 变量的初始化变量的初始化uu 算术语句算术语句C入门经典(第入门经典(第4版)版)2.3.1 整数变量整数变量首先是存储整数的变量。整数是没有小数点的数字。例如:首先是存储整数的变量。整数是没有小数点的数字。例如:1 110,999,000,00010,999,000,000-1-1这些数值是整数,但这对程序而言并不完全正确。整数是不能包含逗号的,所这些数值是整数,但这对程序而言并不完全正确。整数是不能包含逗号的,所以第二个值在程序里应该写成以第二个值在程序里应该写成1099900000010999000
6、000。C入门经典(第入门经典(第4版)版)2.3.2 变量的命名变量的命名 给变量指定的名称一般称为变量名。变量的命名是很有弹性的。它可以给变量指定的名称一般称为变量名。变量的命名是很有弹性的。它可以是一个或多个大写或小写字母、数字和下划线是一个或多个大写或小写字母、数字和下划线(_)(_)(有时下划线也算做字母有时下划线也算做字母)。下面是一些正确的变量名:下面是一些正确的变量名:RadiusRadiusdiameterdiameterAuntie_MayAuntie_MayKnotted_WoolKnotted_WoolD678D678C入门经典(第入门经典(第4版)版)2.3.3 变量
7、的使用变量的使用 前面介绍了如何声明及命名变量,但这和在第一章学到的知识相比并没前面介绍了如何声明及命名变量,但这和在第一章学到的知识相比并没有太多用处。下面编写另一个程序,在产生输出前使用变量的值。有太多用处。下面编写另一个程序,在产生输出前使用变量的值。C入门经典(第入门经典(第4版)版)2.3.4 变量的初始化变量的初始化 在上面的例子,用下面的语句声明每个变量:在上面的例子,用下面的语句声明每个变量:intint Cats;/*The number of cats as pets*/Cats;/*The number of cats as pets*/用下面的语句设定变量用下面的语句设
8、定变量CatsCats的值:的值:Cats=2;Cats=2;将变量将变量CatsCats的值设为的值设为2 2。C入门经典(第入门经典(第4版)版)2.3.5 算术语句算术语句 上面的程序是第一个真正做了些事情的程序。它非常简单,仅仅相加了上面的程序是第一个真正做了些事情的程序。它非常简单,仅仅相加了几个数字,但这是非常重要的一步。它是运用算术语句进行运算的一个基本例几个数字,但这是非常重要的一步。它是运用算术语句进行运算的一个基本例子。下面介绍一些更复杂的计算子。下面介绍一些更复杂的计算。C入门经典(第入门经典(第4版)版)2.4 变量与内存变量与内存 前面介绍了整数变量,但未考虑过它们占
9、用多少内存空间。每次声明变前面介绍了整数变量,但未考虑过它们占用多少内存空间。每次声明变量时,计算机都会给它分配一块足够大的内存空间,来保存该类型的变量。相量时,计算机都会给它分配一块足够大的内存空间,来保存该类型的变量。相同类型的不同变量总是占据相同大小的内存同类型的不同变量总是占据相同大小的内存(字节数字节数)。但不同类型的变量需要。但不同类型的变量需要分配的内存空间就不一样了。分配的内存空间就不一样了。C入门经典(第入门经典(第4版)版)2.5 整数变量类型整数变量类型 有有5 5种基本的变量类型可以声明为存储带符号的整数值种基本的变量类型可以声明为存储带符号的整数值(无符号的整数值参无
10、符号的整数值参见下一节见下一节)。每种类型都用不同的关键字或关键字组合来指定。每种类型都用不同的关键字或关键字组合来指定。u 无符号的整数类型无符号的整数类型uu 使用整数类型使用整数类型uu 指定整数常量指定整数常量C入门经典(第入门经典(第4版)版)2.5.1 无符号的整数类型 对于每个存储带符号整数的类型,都有一个对应的类型来存储无符号的对于每个存储带符号整数的类型,都有一个对应的类型来存储无符号的整数,它们占用的内存空间与无符号类型相同。每个无符号的类型名称都与带整数,它们占用的内存空间与无符号类型相同。每个无符号的类型名称都与带符号的类型名称相同,但要在前面加上关键字符号的类型名称相
11、同,但要在前面加上关键字unsignedunsigned。C入门经典(第入门经典(第4版)版)2.5.2 使用整数类型 在大多数情况下,在大多数情况下,intint或或longlong类型的变量就能满足我们的需求,偶尔需要类型的变量就能满足我们的需求,偶尔需要unsigned unsigned intint或或unsigned longunsigned long。下面是声明这些类型的例子:。下面是声明这些类型的例子:unsigned unsigned intint count=10;count=10;unsigned long unsigned long inchesPerMileinches
12、PerMile=63360UL;=63360UL;intint balance=-500;balance=-500;C入门经典(第入门经典(第4版)版)2.5.3 指定整数常量 整数变量有不同的类型,整数常量也有不同的类型。例如,如果将整数整数变量有不同的类型,整数常量也有不同的类型。例如,如果将整数写成写成100100,它的类型就是,它的类型就是intint。如果要确保它是。如果要确保它是longlong类型,就必须在这个数值的类型,就必须在这个数值的后面加上一个大写后面加上一个大写L L或小写或小写l l。所以,。所以,longlong类型的整数类型的整数100100应写为应写为100L1
13、00L。虽然写。虽然写为为100l100l也是合法的,但应尽量避免,因为小写字母也是合法的,但应尽量避免,因为小写字母l l与数字与数字1 1很难辨别。很难辨别。C入门经典(第入门经典(第4版)版)2.6 浮点数 浮点变量用来存储浮点数。浮点数包含的值带小数点,也可以表示分数浮点变量用来存储浮点数。浮点数包含的值带小数点,也可以表示分数和整数。下面是浮点数的例子:和整数。下面是浮点数的例子:1.6 0.00008 7655.8991.6 0.00008 7655.899 由于浮点数的表示方式,它的位数是固定的。然而它的取值范围要比整由于浮点数的表示方式,它的位数是固定的。然而它的取值范围要比整
14、数大得多。浮点数通常表示为一个小数值乘以数大得多。浮点数通常表示为一个小数值乘以1010的次方。的次方。C入门经典(第入门经典(第4版)版)2.7 浮点数变量 浮点数变量的声明方式和整数变量类似。只需给浮点数类型使用对应的浮点数变量的声明方式和整数变量类似。只需给浮点数类型使用对应的关键字即可:关键字即可:float Radius;float Radius;double Biggest;double Biggest;如果需要存储至多有如果需要存储至多有7 7位精确值的数位精确值的数(范围从范围从10-3810-38到到10+38)10+38),就应需要使,就应需要使用用floatfloat类型
15、的变量。类型类型的变量。类型floatfloat的值称为单精度浮点数。从表的值称为单精度浮点数。从表2-62-6中得知,它占中得知,它占用用4 4个字节。使用类型个字节。使用类型doubledouble的变量可以存储双精度浮点数。类型的变量可以存储双精度浮点数。类型doubledouble的变的变量占用量占用8 8个字节,有个字节,有1515位精确值,范围从位精确值,范围从10-30810-308到到10+30810+308。它足以满足大多数。它足以满足大多数的需求。但某些特殊的应用程序需要更精确、更大的范围,此时可以使用的需求。但某些特殊的应用程序需要更精确、更大的范围,此时可以使用long
16、 long doubledouble。C入门经典(第入门经典(第4版)版)2.8 使用浮点数完成除法运算使用浮点数完成除法运算 如前所见,除法运算使用的是整数操作数时,通常会得到整数结果。除如前所见,除法运算使用的是整数操作数时,通常会得到整数结果。除非除法运算的左操作数刚好是右操作数的整数倍,否则其结果是不正确的。当非除法运算的左操作数刚好是右操作数的整数倍,否则其结果是不正确的。当然,在将饼干分给孩子们的例子中,整数除法运算的方式是没问题的,但将然,在将饼干分给孩子们的例子中,整数除法运算的方式是没问题的,但将1010尺长的厚板均分成尺长的厚板均分成4 4块时,就有问题了。这时就需要用到浮
17、点数了块时,就有问题了。这时就需要用到浮点数了。u 控制小数位数控制小数位数uu 控制输出字段宽度控制输出字段宽度C入门经典(第入门经典(第4版)版)2.8.1 控制小数位数 在上个例子的输出中有太多不必要的在上个例子的输出中有太多不必要的0 0。擅长使用量尺和锯子,并不说明。擅长使用量尺和锯子,并不说明能用长度为能用长度为2.5000002.500000量尺切割木板,更不用说用量尺切割木板,更不用说用2.5000012.500001长度的量尺了。可长度的量尺了。可以用格式指定符指定小数点后面的位数。例如,要使输出的小数点后有两位数,以用格式指定符指定小数点后面的位数。例如,要使输出的小数点后
18、有两位数,就可以使用格式指定符就可以使用格式指定符%.2f%.2f。如果小数点后需要有。如果小数点后需要有3 3位数,则可以使用位数,则可以使用%.3f%.3f。C入门经典(第入门经典(第4版)版)2.8.2 控制输出字段宽度 输出的字段宽度是输出值所使用的总字符数输出的字段宽度是输出值所使用的总字符数(包括空格包括空格),它一般是默认的。,它一般是默认的。printfprintf()()函数确定了输出值需要占用多少个字符位置,小数点后的位数由我们指定,函数确定了输出值需要占用多少个字符位置,小数点后的位数由我们指定,并将它用作字段宽度。但我们可以自己确定字段宽度。如果要求输出一列排列并将它用
19、作字段宽度。但我们可以自己确定字段宽度。如果要求输出一列排列整齐的数值,就应确定其字段宽度。如果让整齐的数值,就应确定其字段宽度。如果让printfprintf()()函数指定字段宽度,输出的函数指定字段宽度,输出的数字列就不整齐数字列就不整齐。C入门经典(第入门经典(第4版)版)2.9 较复杂的表达式 算术要比两个数相除复杂得多。事实上,如果要进行复杂的算术运算,算术要比两个数相除复杂得多。事实上,如果要进行复杂的算术运算,也可以使用笔和纸。有了加减乘除的工具,就可以开始进行一些真正复杂的计也可以使用笔和纸。有了加减乘除的工具,就可以开始进行一些真正复杂的计算了。算了。对于较复杂的的计算,需
20、要更多地控制表达式的计算顺序。括号可以提对于较复杂的的计算,需要更多地控制表达式的计算顺序。括号可以提供这方面的能力。当遇到错综复杂的情况时,括号还有助于使表达式更清晰供这方面的能力。当遇到错综复杂的情况时,括号还有助于使表达式更清晰。C入门经典(第入门经典(第4版)版)2.10 定义常量定义常量 前面的例子将前面的例子将PiPi定义为变量,但它是一个不会改变的常量,定义为变量,但它是一个不会改变的常量,的值是一个的值是一个不循环的无限小数,其值总是固定不变。唯一的问题是,在指定它时精确到几不循环的无限小数,其值总是固定不变。唯一的问题是,在指定它时精确到几位数。最好确保它的值在程序里保持不变
21、,使之不会因错误而改变位数。最好确保它的值在程序里保持不变,使之不会因错误而改变。u 极限值极限值uu sizeofsizeof运算符运算符C入门经典(第入门经典(第4版)版)2.10.1 极限值极限值 当然,一定要确定程序中给定的整数类型可以存储的极限值。头文件当然,一定要确定程序中给定的整数类型可以存储的极限值。头文件 定义的符号表示每种类型的极限值定义的符号表示每种类型的极限值。C入门经典(第入门经典(第4版)版)2.10.2 sizeof运算符 使用使用sizeofsizeof运算符可以确定给定的类型占据多少字节。当然,在运算符可以确定给定的类型占据多少字节。当然,在C C语言中语言中
22、sizeofsizeof是一个关键字。表达式是一个关键字。表达式sizeof(intsizeof(int)会得到会得到intint类型的变量所占的字节数,所类型的变量所占的字节数,所得的值是一个得的值是一个size_tsize_t类型的整数。类型的整数。size_tsize_t类型在标准头文件类型在标准头文件(和其他和其他头文件如头文件如)中定义,对应于一个基本整数类型。但是,与中定义,对应于一个基本整数类型。但是,与size_tsize_t类型对类型对应的类型可能在不同的应的类型可能在不同的C C库中有所不同,所以最好使用库中有所不同,所以最好使用size_tsize_t变量存储变量存储si
23、zeofsizeof运运算符生成的值,即使知道它对应的基本类型,也应如此算符生成的值,即使知道它对应的基本类型,也应如此。C入门经典(第入门经典(第4版)版)2.11 选择正确的类型 必须仔细选择在计算过程中使用的变量类型,使之能包含我们期望的值。必须仔细选择在计算过程中使用的变量类型,使之能包含我们期望的值。如果使用了错误的类型,程序就可能出现很难检测出来的错误如果使用了错误的类型,程序就可能出现很难检测出来的错误。C入门经典(第入门经典(第4版)版)2.12 定义常量定义常量 在程序在程序2.142.14计算季度收入的表达式中,可以控制操作的执行,得到正确的计算季度收入的表达式中,可以控制
24、操作的执行,得到正确的结果:结果:RevQuarterRevQuarter=QuarterSold/150*Revenue_Per_150;=QuarterSold/150*Revenue_Per_150;要使结果正确,必须修改这个语句,以浮点数的方式计算表达式。如果要使结果正确,必须修改这个语句,以浮点数的方式计算表达式。如果可以把可以把QuarterSoldQuarterSold的值转换为的值转换为floatfloat类型,该表达式就会以浮点数的方式计算,类型,该表达式就会以浮点数的方式计算,问题就解决了。要把变量从一种类型转换为另一种类型,应把目标类型放在变问题就解决了。要把变量从一种类
25、型转换为另一种类型,应把目标类型放在变量前面的括号中量前面的括号中。uu 自动转换类型自动转换类型 uu 隐式类型转换的规则隐式类型转换的规则 u 赋值语句中的隐式类型转换 C入门经典(第入门经典(第4版)版)2.12.1 自动转换类型 该程序的第二个版本的输出如下:该程序的第二个版本的输出如下:Sales revenue this quarter is:$1930.50 Sales revenue this quarter is:$1930.50 即使表达式中没有显式转换类型,结果也是浮点数形式,但它仍是错误即使表达式中没有显式转换类型,结果也是浮点数形式,但它仍是错误的。这是因为编译器在处
26、理涉及不同类型的值操作时,会自动把其中一个操作的。这是因为编译器在处理涉及不同类型的值操作时,会自动把其中一个操作数的类型转换为另一个操作数的类型数的类型转换为另一个操作数的类型 C入门经典(第入门经典(第4版)版)2.12.2 隐式类型转换的规则 确定二元运算中的哪个操作数要转换为另一个操作数的类型时,其机制确定二元运算中的哪个操作数要转换为另一个操作数的类型时,其机制相当简单。其基本规则是,将值域较小的操作数类型转换为另一个操作数类型,相当简单。其基本规则是,将值域较小的操作数类型转换为另一个操作数类型,但在一些情况下,两个操作数都要转换类型。但在一些情况下,两个操作数都要转换类型。C入门
27、经典(第入门经典(第4版)版)2.13 再谈数值数据类型 为了完整论述数值数据类型,下面讨论一些前面未提及的内容。第一个为了完整论述数值数据类型,下面讨论一些前面未提及的内容。第一个未涉及的类型是未涉及的类型是charchar。charchar类型的变量可以存储单个字符的代码。它只能存储类型的变量可以存储单个字符的代码。它只能存储一个字符代码一个字符代码(即一个整数即一个整数),所以被看作整数类型。可以像其他整数类型那样,所以被看作整数类型。可以像其他整数类型那样处理处理charchar类型存储的值,因此可以在算术运算中使用它类型存储的值,因此可以在算术运算中使用它。uu 字符类型字符类型 u
28、u 字符的输入输出字符的输入输出u 宽字符类型u 枚举u 存储布尔值的变量u 复数类型C入门经典(第入门经典(第4版)版)2.13.1 字符类型 在所有数据的类型中,在所有数据的类型中,charchar类型占用的内存空间最少。它一般只需一个字类型占用的内存空间最少。它一般只需一个字节。存储在节。存储在charchar类型变量的整数可以表示为带符号或无符号的值,这取决于编类型变量的整数可以表示为带符号或无符号的值,这取决于编译器译器。C入门经典(第入门经典(第4版)版)2.13.2 字符的输入输出 使用使用scanfscanf()()函数和格式指定符函数和格式指定符%c%c,可以从键盘上读取单个
29、字符,将它存,可以从键盘上读取单个字符,将它存储在储在charchar类型的变量中类型的变量中。C入门经典(第入门经典(第4版)版)2.13.3 宽字符类型 wchar_twchar_t类型的变量存储多字节字符码,一般占用两个字节。在处理类型的变量存储多字节字符码,一般占用两个字节。在处理UnicodeUnicode字符时,就需要使用字符时,就需要使用wchar_twchar_t类型。类型。wchar_twchar_t类型在标准头文件类型在标准头文件 中定义,所以需要在使用该类型的源文件中包含该头文件。在中定义,所以需要在使用该类型的源文件中包含该头文件。在charchar类型的字符常量前面加
30、上修饰符类型的字符常量前面加上修饰符L L,就可以定义一个宽字符常量,就可以定义一个宽字符常量。C入门经典(第入门经典(第4版)版)2.13.4 枚举 在编程时,常常希望变量存储一组可能值中的一个。例如一个变量存储在编程时,常常希望变量存储一组可能值中的一个。例如一个变量存储表示当前月份的值。这个变量应只存储表示当前月份的值。这个变量应只存储1212个可能值中的一个,分别对应于个可能值中的一个,分别对应于112112月。月。C C语言中的枚举语言中的枚举(enumeration)(enumeration)就用于这种情形就用于这种情形。C入门经典(第入门经典(第4版)版)2.13.5 存储布尔值
31、的变量 _ _BoolBool类型存储布尔值。布尔值一般是比较的结果类型存储布尔值。布尔值一般是比较的结果truetrue或或falsefalse;第;第3 3章将学章将学习比较操作,并使用其结果做出判断。习比较操作,并使用其结果做出判断。_ _BoolBool类型的变量值可以是类型的变量值可以是0 0或或1 1,对应,对应于布尔值于布尔值falsefalse和和truetrue。由于值。由于值0 0和和1 1是整数,所以是整数,所以_ _BoolBool类型也被看作整数类型类型也被看作整数类型。C入门经典(第入门经典(第4版)版)2.13.6 复数类型 本节假定读者学过复数。如果读者未学过这
32、个内容,可以跳过本节。如本节假定读者学过复数。如果读者未学过这个内容,可以跳过本节。如果对复数的概念比较模糊,这里将介绍它的基本特性。果对复数的概念比较模糊,这里将介绍它的基本特性。复数的形式是复数的形式是a+bi(a+bi(在电子学中是在电子学中是a+a+bjbj),其中,其中i i是是11的平方根,的平方根,a a和和b b是是实数。实数。A A是实数部分,是实数部分,bibi是复数的虚数部分。复数可以看作实数是复数的虚数部分。复数可以看作实数(a,b)(a,b)的有序对的有序对C入门经典(第入门经典(第4版)版)2.14 赋值操作的op=形式 C C语言是一种非常简洁的语言,提供了一些操
33、作的缩写形式。考虑下面的语言是一种非常简洁的语言,提供了一些操作的缩写形式。考虑下面的代码:代码:number=number=numbernumber+10;+10;这类赋值操作是给一个变量递增或递减一个数字,它非常常见,所以有这类赋值操作是给一个变量递增或递减一个数字,它非常常见,所以有一个缩写形式:一个缩写形式:number+=10;number+=10;C入门经典(第入门经典(第4版)版)2.15 数学函数 math.hmath.h头文件包含各种数学函数的声明。为了了解这些数学函数,下面头文件包含各种数学函数的声明。为了了解这些数学函数,下面介绍最常用的函数。所有的函数都返回一个介绍最常
34、用的函数。所有的函数都返回一个doubledouble类型的值。类型的值。C入门经典(第入门经典(第4版)版)2.16 设计一个程序 下面设计本章末的一个真实例子。在一个新程序中试用一些数值类型是一下面设计本章末的一个真实例子。在一个新程序中试用一些数值类型是一个很不错的想法。这里将从头开始编写一个程序,涉及编程的所有基本要素,个很不错的想法。这里将从头开始编写一个程序,涉及编程的所有基本要素,包括问题的初始描述、问题的分析、解决方案的准备、编写程序、运行程序,包括问题的初始描述、问题的分析、解决方案的准备、编写程序、运行程序,以及测试它,确保它正常工作。该过程的每一步都会引入新问题,而不仅仅
35、是以及测试它,确保它正常工作。该过程的每一步都会引入新问题,而不仅仅是纸上谈兵纸上谈兵。uu 问题问题uu 分析分析uu 解决方案解决方案C入门经典(第入门经典(第4版)版)2.16.1 问题 许多人都对树的高度很感兴趣。如果将树砍倒,量出它的高度,就可以许多人都对树的高度很感兴趣。如果将树砍倒,量出它的高度,就可以确定离树多远才是安全的。这对于患有神经衰弱的人来说非常重要。问题是如确定离树多远才是安全的。这对于患有神经衰弱的人来说非常重要。问题是如何不使用非常长的梯子,就可以确定树的高度,因为长梯也会对人和树枝带来何不使用非常长的梯子,就可以确定树的高度,因为长梯也会对人和树枝带来危险。为了
36、确定树的高度,可以向朋友求助,最好找一个个子比较矮的朋友。危险。为了确定树的高度,可以向朋友求助,最好找一个个子比较矮的朋友。假定要测量的树比自己和朋友都高。比自己还矮的树很容易测量出其高度,除假定要测量的树比自己和朋友都高。比自己还矮的树很容易测量出其高度,除非这棵树长满了刺非这棵树长满了刺。C入门经典(第入门经典(第4版)版)2.16.2 分析 现实问题很少能用适合于编程的方式来表达。在编写代码之前,需要确现实问题很少能用适合于编程的方式来表达。在编写代码之前,需要确保完全理解了问题及其解决方式。只有这样,才能估计出创建解决方案所需的保完全理解了问题及其解决方式。只有这样,才能估计出创建解
37、决方案所需的时间和精力。时间和精力。分析阶段应增强对问题的理解,确定解决它的逻辑过程。一般这需要大分析阶段应增强对问题的理解,确定解决它的逻辑过程。一般这需要大量的工作,这包括找出问题阐述中模糊或遗漏的细节。只有全面理解了问题,量的工作,这包括找出问题阐述中模糊或遗漏的细节。只有全面理解了问题,才能开始以适合编程的形式表达解决方案才能开始以适合编程的形式表达解决方案。C入门经典(第入门经典(第4版)版)2.16.3 解决方案 第一步获取计算树高需要的值。这意味着必须包含第一步获取计算树高需要的值。这意味着必须包含stdio.hstdio.h头文件,因为需头文件,因为需要使用要使用printfp
38、rintf()()和和scanfscanf()()函数。接着确定存储这些值的变量。之后,就可以使用函数。接着确定存储这些值的变量。之后,就可以使用printfprintf()()提示输入数字,使用提示输入数字,使用scanfscanf()()从键盘上读取值从键盘上读取值。C入门经典(第入门经典(第4版)版)2.17 小结 本章介绍了许多基础知识,讨论了本章介绍了许多基础知识,讨论了C C程序的构建方式、各种算术运算、如程序的构建方式、各种算术运算、如何选择合适的变量类型等。除了算术运算之外,还学习了输入输出功能,通过何选择合适的变量类型等。除了算术运算之外,还学习了输入输出功能,通过scanfscanf()()将值输入变量,通过将值输入变量,通过PrintfPrintf()()函数把文本、字符值和数值变量输出到屏幕上。函数把文本、字符值和数值变量输出到屏幕上。读者可能不能第一次就掌握所有这些内容,但可以在需要时复习本章。读者可能不能第一次就掌握所有这些内容,但可以在需要时复习本章。