1、第三章 基本结构程序设计(参考学时:10)本章教学与考核内容1、基本要求:了解结构化程序设计的三种基本结构;熟练掌握赋值语句、输入/输出函数的使用方法;熟练掌握程序的语句格式和功能,完成顺序、选择、循环结构的程序设计;掌握在 Turbo C 环境下,建立源程序清单、编译连接生成可执行程序、编辑修改源程序、运行目标程序、查看运行结果等基本操作方法。重点:输入/输出函数的使用方法; if、if-else、switch、while 、do-while、for、break、continue、goto 语句的格式和功能;顺序结构、选择结构、循环结构的程序设计方法2、考核目标:掌握程序的三种结构,能够根据
2、问题画出简单的流程图。正确运用赋值语句。正确运用 putchar、getchar 函数。正确运用 printf、scanf 函数及 d、o、x、u、e、s、f 、g、c 格式字符及 l、m、n 附加说明符。能够根据实际问题熟练写出正确的逻辑表达式能够正确理解和运用三种 if、if-else 语句和 if 语句的嵌套。正确运用 switchcase 语句。正确运用 while、dowhile 和 for 语句,掌握循环的中断方法,正确运用break、 continue 语句。 。正确使用 Turbo C 建立、修改、保存 C 程序的操作。正确使用 Turbo C 运行可执行程序和查看运行结果的操
3、作。3.1 程序基本结构与结构化程序设计从程序流程的角度来看,程序可以分为三种基本结构, 即顺序结构、分支结构、循环结构3.1. 1 引言例 1:求 12345。怎样表示一个算法除了很简单的问题,一般不用自然语言表示算法。1.用流程图表示算法流程图表示算法,直观形象,易于理解。例如将【例 1】求 5!的算用流程图表示。3.1.2 程序基本结构1. 顺序结构:2. 选择结构:3. 循环结构三种基本结构的共同特点: 只有一个入口; 只有一个出口; 结构内的每一部分都有机会被执行到; 结构内不存在 “死循环 ”。3.1.3 用 N-S 流程图表示算法1973 年美国学者提出了一种新型流程图:N-S
4、流程图。顺序结构:选择结构:循环结构:3.1.4 结构化程序设计方法 自顶向下; 逐步细化; 模块化设计; 结构化编码。程序的结构:源 程 序 文 件 1 1 n源 程 序 文 件 2 源 程 序 文 件 nC程 序3 2 顺序结构程序设计3 21 顺序执行语句概述程序的执行部分是由语句组成的。 程序的功能也是由执行语句实现的。C 语句可分为以下五类:1) 表达式语句2) 函数调用语句3) 控制语句4) 复合语句5) 空语句1. 表达式语句:表达式语句由表达式加上分号“;”组成。其一般形式为:表达式;2. 函数调用语句:由函数名、实际参数加上分号“;”组成。其一般形式为:函数名(实际参数表);
5、3. 控制语句:控制语句用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。语言有九种控制语句。 可分成以下三类:1) 条件判断语句:if 语句、switch 语句;2) 循环执行语句:do while 语句、while 语句、for 语句;3) 转向语句:break 语句、goto 语句、continue 语句、return 语句。4. 复合语句:把多个语句用括号括起来组成的一个语句称复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。例如: x=y+z;a=b+c;printf(“%d%d”,x,a) ;是一条复合语句。复合语句内的各条语句都必须以分号“;”
6、结尾,在括号“” 外不能加分号。5. 空语句:只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用来作空循环体。例如while(getchar()!=n);本语句的功能是,只要从键盘输入的字符不是回车则重新输入。这里的循环体为空语句。3.2 .2 赋值语句赋值语句是由赋值表达式再加上分号构成的表达式语句。其一般形式为:变量=表达式;赋值语句的功能和特点都与赋值表达式相同。 它是程序中使用最多的语句之一。在赋值语句的使用中需要注意以下几点:1. 由于在赋值符“=”右边的表达式也可以又是一个赋值表达式,因此,下述形式变量=(变量=表达式);是成立的,从而形成嵌套的情形
7、。其展开之后的一般形式为:变量=变量=表达式;例如:a=b=c=d=e=5;按照赋值运算符的右接合性,因此实际上等效于:e=5;d=e;c=d;b=c;a=b;2. 注意在变量说明中给变量赋初值和赋值语句的区别。给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。例如:int a=5,b,c;3. 在变量说明中,不允许连续给多个变量赋初值。 如下述说明是错误的:int a=b=c=5必须写为int a=5,b=5,c=5;而赋值语句允许连续赋值。4. 注意赋值表达式和赋值语句的区别。赋值表达式是一种表达式,它可以出现在任何允许表达
8、式出现的地方,而赋值语句则不能。下述语句是合法的:if(x=y+5)0) z=x;语句的功能是,若表达式 x=y+5 大于 0 则 z=x。下述语句是非法的:if(x=y+5;)0) z=x;因为 x=y+5;是语句,不能出现在表达式中。3.2.3 数据输入输出的概念及在 C 语言中的实现1) 所谓输入输出是以计算机为主体而言的。2) 本章介绍的是向标准输出设备显示器输出数据的语句。3) 在语言中,所有的数据输入输出都是由库函数完成的。因此都是函数语句。4) 在使用语言库函数时,要用预编译命令#include将有关“头文件”包括到源文件中。使用标准输入输出库函数时要用到 “stdio.h”文件
9、,因此源文件开头应有以下预编译命令:#include 或 #include ”stdio.h”stdio 是 standard input (输出大写字母 A)putchar(x); (输出字符变量 x 的值)putchar(101); (也是输出字符 A)putchar(n); (换行)对控制字符则执行控制功能,不在屏幕上显示。使用本函数前必须要用文件包含命令:#include或#include “stdio.h”【例 3.1】输出单个字符。#includemain()char a=B,b=o,c=k;putchar(a);putchar(b);putchar(b);putchar(c);p
10、utchar(t);putchar(a);putchar(b);putchar(n);putchar(b);putchar(c);2 、 getchar 函数(键盘输入函数)getchar 函数的功能是从键盘上输入一个字符。其一般形式为:getchar();通常把输入的字符赋予一个字符变量,构成赋值语句,如:char c;c=getchar();【例 3.2】输入单个字符。#includevoid main()char c;printf(“input a charactern“);c=getchar();putchar(c);使用 getchar 函数还应注意几个问题:1) getchar 函
11、数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。2) 使用本函数前必须包含文件“stdio.h” 。3) 在 TC 屏幕下运行含本函数程序时,将退出 TC 屏幕进入用户屏幕等待用户输入。输入完毕再返回 TC 屏幕。4) 程序最后两行可用下面两行的任意一行代替:putchar(getchar();printf(“%c”,getchar();二、 格式输入与输出1、 printf 函数(格式输出函数)printf 函数称为格式输出函数,其关键字最末一个字母 f 即为“格式”(format)之意。其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上。在前面的例题中
12、我们已多次使用过这个函数。1. printf 函数调用的一般形式printf 函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用 printf 函数之前必须包含 stdio.h 文件。printf 函数调用的一般形式为:printf(“格式控制字符串” ,输出表列)其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如:“%d”表示按十进制整型输出;“%ld”表示按十进制长整型输出;“%c”表示按字符型输出等。非格式字符
13、串在输出时原样照印,在显示中起提示作用。输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。【例 3.3】main()int a=88,b=89;printf(“%d %dn“,a,b);printf(“%d,%dn“,a,b);printf(“%c,%cn“,a,b);printf(“a=%d,b=%d“,a,b);本例中四次输出了 a,b 的值,但由于格式控制串不同,输出的结果也不相同。第四行的输出语句格式控制串中,两格式串%d 之间加了一个空格 (非格式字符),所以输出的 a,b值之间有一个空格。第五行的 printf 语句格式控制串中加入的是非格式字符逗号,
14、因此输出的 a,b 值之间加了一个逗号。第六行的格式串要求按字符型输出 a,b 值。第七行中为了提示输出结果又增加了非格式字符串。2. 格式字符串在 Turbo C 中格式字符串的一般形式为:标志输出最小宽度.精度长度类型其中方括号中的项为可选项。各项的意义介绍如下:1) 类型:类型字符用以表示输出数据的类型,其格式符和意义如下表所示:格式字符 意 义d 以十进制形式输出带符号整数(正数不输出符号)o 以八进制形式输出无符号整数(不输出前缀 0)x,X 以十六进制形式输出无符号整数(不输出前缀 Ox)u 以十进制形式输出无符号整数f 以小数形式输出单、双精度实数e,E 以指数形式输出单、双精度
15、实数g,G 以%f 或%e 中较短的输出宽度输出单、双精度实数c 输出单个字符s 输出字符串2) 标志:标志字符为-、+、#、空格四种,其意义下表所示:标 志 意 义- 结果左对齐,右边填空格+ 输出符号(正号或负号)空格 输出值为正时冠以空格,为负时冠以负号# 对 c,s,d,u 类无影响;对 o 类,在输出时加前缀 o;对 x 类,在输出时加前缀 0x;对 e,g,f 类当结果有小数时才给出小数点3) 输出最小宽度:用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或 0。4) 精度 :精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,