Download presentation
Presentation is loading. Please wait.
Published byHamdani Handoko Tan Modified 5年之前
1
第三章 C程序设计初步 3.1 结构化程序设计思想 3.2 C语句概述 3.3 赋值语句 3.4 文件包含 3.5 流和文件初步
3.1 结构化程序设计思想 3.2 C语句概述 3.3 赋值语句 3.4 文件包含 3.5 流和文件初步 3.6 数据输出 3.7 数据输入 3.8 程序举例
2
3.1 结构化程序设计思想 3.1.1 程序的质量标准 一个好的程序在满足运行结果正确的基本条件之后,首先要有良好的结构,使程序清晰易懂。在此前提之下,才考虑使其运行速度尽可能的快, 运行时所占内存应尽量压缩至合理的范围。也就是说,现在的程序质量标准易读性好是第一位的,其次才是效率。因为从根本上说,只有程序具有了良好的结构,才易于设计和维护,减少软件成本,从整体来说才是真正提高了效率。
3
3.1.2 结构化程序设计方法 (1) 一个大的程序开发应当采取“自顶向下, 逐步细化, 模块化”的方法。
(2) 任何程序均由具有良好特性的三种基本模块(顺序, 分支,循环)“堆积”搭成,即由基本小单元顺序组成一个大结构,从而避免了使用goto语句的缺点。
4
3.1.3 结构化程序的标准 (1) 程序符合“清晰第一,效率第二”的质量标准。 (2) 具有良好的特性。 ① 只有一个入口。
② 只有一个出口(有些分支结构很容易写成多个出口)。 ③ 无死语句(永远执行不到的语句). ④ 没有死循环(永远执行不完的无终止的循环)。
5
三种基本模块 1. 顺序结构 图 3.1 顺序结构
6
2. 分支结构 图 3.2 分支结构
7
3. 循环结构 图 3.3 当型循环结构
8
图 3.4 直到型循环结构
9
3.2 C 语 句 概 述 C语言是函数式语言,每一个函数是由数据说明部分和执行语句部分组成。C语言中的所有语句均是执行语句,没有非执行语句。根据C语言的句法, 语句可分为单个语句,复合语句和空语句。根据结构化程序设计的三个模块大致可分为: 用于顺序结构中的表达式语句、赋值语句、函数调用语句等; 用于分支结构中的if语句、switch语句、转移语句、标号语句等;用于循环结构中的while语句、for语句、do-while语句。 另外在后两种结构中还可出现break语句、continue语句、复合语句和空语句等作为其中的一部分。
10
(1) 逻辑上每个语句最后都必须有一个分号(;), 一个语句可分写成几行, 几个语句也可合写成一行(但不提倡, 因其不利于单步调试)。
(2) 空语句直接由分号(;)组成,常用于控制语句中必须出现语句之处,它不做任何操作,只在逻辑上起到有一个语句的作用。 (3) 复合语句由花括号{ }括起的若干个语句, 语法上可以看成是一个语句。复合语句中最后一个语句的分号不能省略。 如下面是一个复合语句: {z=x+y; y=x/z; x=z-y; }
11
(4) 表达式语句是在各种表达式后加一个分号(;)形成一个语句。如赋值语句由赋值表达式加一个分号构成:
x=x+y; 再如表达式x++后加一个分号构成表达式语句: x++; 表达式和表达式语句的区别是表达式后无分号, 可以出现在其它语句中允许出现表达式的地方;而表达式语句后有分号, 自己独立成一个语句,不能再出现在其它语句的表达式中。 如: if((a=b)<0) min=a;
12
(5) 控制语句有条件判断语句(if、 switch), 循环语句(for、 while、 do-while),转移语句(goto、 continue、 break、 return)。
13
3.3 赋值语句 赋值语句是由赋值表达式加上一个分号构成。 如x=a+b;。 C语言的赋值语句具有其它高级语言中赋值语句的一切特点和功能,也有C语言自己的特色: (1) C语言中赋值号“=”作为赋值运算符。 (2) 其它高级语言没有赋值表达式这个概念。作为赋值表达式可以出现在其它表达式能出现的地方,也可出现在其它表达式之中。 例如: if((x=a+b)! =0) t=10;
14
3.4 文件包含 一个C程序由若干个源文件组成,而一个源文件还可将另一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中,二者合为一个大些的文件。这个包含进来的文件只是一个文件名,在编译时先进行展开,这个文件名我们用预编译命令“#include”来指定,其一般形式为: #include <文件名> 或 #include ″文件名″
15
3.5 流和文件初步 C语言的输入和输出由库函数来完成。在C语言中没有用于完成I/O操作的关键字,而是采用I/O操作函数。因此数据的输入输出要调用输入输出库函数。 在ANSI C标准中定义了一组完整的I/O操作函数。这些函数调用时所需的一些预定义类型和常数都在头部文件stdio.h和conio.h中。因此调用输入输出函数时,在程序前面应加上 #include <stdio.h> 和(或) #include <conio.h> 如没有该命令指定, 可能造成错误。
16
C语言I/O系统为C语言编程者提供了一个统一的接口, 与具体的被访问设备无关。也就是说,在编程者和被使用设备之间提供了一层抽象的东西,这个抽象的东西就叫做“流”。 具体的实际设备叫做“文件”。
所有的流具有相同的行为,相当于一个缓冲区,流可分为文字流和二进制流。 一个文字流是一行行的字符,换行符表示这一行的结束。 文字流中某些字符的变换由环境工具的需要来决定。例如一个换行符可以变换为回车换行两个字符。因此所读写的字符与外部设备中的数据没有一一对应的关系。
17
3.6 数据输出 … 3.6.1 putchar函数(字符输出函数) 函数调用形式: char ch;
3.6 数据输出 3.6.1 putchar函数(字符输出函数) 函数调用形式: char ch; putchar (ch); …
18
例 3.1 字符数据的输出。 #include <stdio.h> main( ) { char a, b; a=′b′; b=′o′; putchar(a); putchar(b); putchar(′y′); putchar(′\n′); } 经编译后运行, 在屏幕上显示: boy
19
3.6.2 printf函数(格式输出函数) 函数的调用形式: printf(″控制字符串″, 参量表); 例如:
printf(″The output x=%d\n″, x); 若x=10, 则输出为“The output x=10”。
20
表 3.1 printf()的格式说明
21
例 不同类型数据的输出。 程序:
22
3.6.3 puts函数(字符串输出函数) 函数的原型是: char *puts(char *s) 函数的调用形式是:
23
… 3.7 数据输入 3.7.1 getche函数与getchar( )和getch( ) getche函数的调用形式:
3.7 数据输入 3.7.1 getche函数与getchar( )和getch( ) getche函数的调用形式: char# ch; ch=getche( ); getche( )用于等待从键盘上键入一个字符, 返回它的值并在屏幕上自动回显该字符。使用该函数必须在程序的头部使用文件包含命令: #include <conio.h> …
24
例 3.3 单个字符的输入和输出。 #include <conio.h> #include <stdio.h> main( ) { char ch; ch=getche( ); putchar(ch); putchar(′\n′); } 经编译后运行, 输入a, 最后在屏幕上显示: aa
25
例 3.4 多个字符的输入和输出。 #include <stdio.h> #include <conio.h>
例 多个字符的输入和输出。 #include <stdio.h> #include <conio.h> main( ) { char# a, b, c; a=getch( ); b=getch( ); c=getch( ); putchar(a); putchar(b); putchar(c); putchar(′\n′); getch( ); }
26
3.7.2 scanf函数(格式输入函数) scanf函数的调用形式: scanf(″控制字符串″,参量表);
如scanf(″a, b=%d, %d″, &a, &b); 即要在键盘上输入a, b=12, -34 此时12送给变量a,-34送给变量b,而控制字符串中a, b=和两个%d之间的逗号必须原封不动照样输入。
27
scanf函数括号中的控制字符串包含三类不同的字符内容:
(1) 格式说明。 (2) 空白字符。 (3) 非空白字符。
28
表 3.2 scanf()的格式说明
29
3.7.3 gets函数(字符串输入函数) 函数的原型是: char *gets(char *s)
gets( )函数用来从键盘读入一串字符, 并把它们送到gets函数中的字符数组成字符型指针所指定地址的存贮单元中。 在输入字符串后,必须用回车作为输入结束,该回车符并不属于这串字符,由一个“空操作字符(′\0′)”在串的最后来代替它。此时空格不能结束字符串的输入。gets函数返回一个指针。
30
#include <stdio.h>
例 3.5 字符串的输入和输出。 程序: #include <stdio.h> main( ) { char str[80]; gets(str); puts(str); } 运算结果: ABC DEF ABC DEF
31
3.8 程序举例 例 3.6 输入一个小写字母, 按大写输出。 程序一: #include <stdio.h>
3.8 程序举例 例 3.6 输入一个小写字母, 按大写输出。 程序一: #include <stdio.h> #include <conio.h> main() { char ch; ch=getche( ); putchar(ch-32); } 运行: aA
32
#include <stdio.h>
程序二: #include <stdio.h> #include <conio.h> main( ) { char ch; ch=getch( ); putchar(ch-32); } 运行: A
33
#include <stdio.h>
程序三: #include <stdio.h> main( ) { char ch; ch=getchar( ); putchar(ch-32); } 运行: abcdefgA
34
例 3.7 输入三角形的三条边长,求三角形的面积。我们假设输入的三边能构成三角形。
分析: 三角形面积的计算公式如下: s=(a+b+c)/2
35
程序: #include <math.h> main( ) { float a, b, c, s, area; scanf(″%f, %f, %f″, &a, &b, &c); s=0.5*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(″a=%.2f, b=%.2f, c=%.2f\n″, a, b, c); printf(″area=%.2f\n″, area); } 运行: 3, 4, 6 a=3.00, b=4.00, c=6.00 area=5.33
Similar presentations