《第三章_顺序程序设计.ppt》由会员分享,可在线阅读,更多相关《第三章_顺序程序设计.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章 顺序程序设计n预备知识nC语言的基本语句n数据输入与输出n顺序结构程序设计举例预备知识(P5)n算法:描述某一问题求解的有限步骤。n也可以表述如下:算法是为解决一个问题采取的方法和步骤。n简单的算法举例:例1:设有两个杯子A和B,分别盛放了酒和醋,要求将两个杯子的内容互换。n分析:直接交换A、B杯子的内容会使得酒和醋掺在一起,显然不符合要求。在这儿,我们应首先拿来一个空杯子C,利用它来帮助完成工作。n算法描述(算法3.1)(1)将A杯子中的酒倒入C中(2)将B杯子中的醋倒入A中(3)将C杯子中的酒倒入B中 例2:依次将20个数输入,要求将其中最大的数输出。n分析:我们可以定义20个变量
2、a1,a2,a3,a4,a20,分别用于存储这20个将要被输入的数,再定义一个变量max,用于存储最大值,然后对这20个变量的值进行比较,求出最大值输出。n算法描述(算法3.2.1)(1)从键盘输入20个数,分别送入a1a20中存放(2)将a1和a2进行比较,取得较大值,放在max中(3)将max与a3进行比较,取得他们的较大值,再放入max中,此时,max里存放的是前三个数a1,a2,a3的最大值。(4)将max与a4进行比较,取得他们的较大值,放入max中,此时,max里存放的是前四个数的最大值(5)将max与a5进行比较,(20)将max与a20进行比较,取得较大值放入max中。(21)
3、输出max.n利用一组数,检验算法的正确性。如:2 23 45 43 32 56 54 32 34 6 通过上组数据的检验,说明了算法的可行性,但这个算法描述起来过于麻烦,共分为了21个步骤,并且,使用了21个变量,使得以后的程序书写很麻烦,也在一定程度上存在存储空间和运行时间的浪费。n将上述算法进行简化(算法3.2.2)n首先定义变量a,用于接收每次输入的数;再定义变量x,用于控制输入的次数,定义变量max,存放最大值(1)从键盘输入一个数,送入a中,因为已经输入了一次,设置x的值为1,并将a的值赋给max(2)再输入一个数,送入a中,x增1(3)判断x的值是否小于等于20,如果是,转到(4
4、),否则,转到(5)(4)将max和a进行比较,较大值放入max中,转到(2)(5)输出max也可以用较少的数据验证算法3.2.2的可行性n算法的特性:n有穷性n确定性n零个和多个输入n一个和多个输出n可行性n算法的表示n用自然语言描述,如算法3.1,3.2.1,3.2.2等n用流程图表示(P7)nC程序三种基本结构:顺序结构、选择结构、循环结构(算法3.1只用到顺序结构形式,3.2.1同时用到顺序结构和选择结构形式,算法3.2.2中3种基本结构都有涉及到)n流程图符号n利用传统流程图表示算法3.1,3.2.1和算法3.2.2n注意:算法只是说明完成一项工作的步骤,只有将算法中的每个步骤用C语
5、言的语句描述出来,才是程序。3.1 C语言的基本语句n一个实际的C程序是一系列语句的集合,每一条语句都用来完成一定的操作任务,C程序的每一条语句都要有分号结束,但变量声明部分不算严格意义上的C语句。main()int a,b;a=2;b=+a;printf(“%d,%dn”,a,b);严格说来,应不称为语句。C语句分为以下几类:(1)控制语句 (2)函数调用语句(3)表达式语句(4)空语句(5)复合语句3.2 数据输入与输出n数据的“输入”和“输出”是相对于计算机主机而言的。nC语言本身不提供输入输出语句,输入输出操作是通过调用库函数来实现的,例如:printf和scanf就是c语言中用于实现
6、数据输入、输出的库函数之一。n因为c语言的输入输出库函数都位于一个名为stdio.h的头文件中,所以,每一个c语言程序的开始都要用下面的编译预处理命令将该头文件包括到用户编辑的文件中去。#include “stdio.h”或#include 3.2.1 字符数据的输入输出n字符输出函数putcharn语法:putchar(字符常量或字符变量);n功能:将括号内的字符常量或字符变量的值显示在屏幕上。如:#include main()char c;c=A;putchar(c);putchar(n);putchar(c);cA n字符输入函数getcharn语法:getchar();注意:()内为空
7、n功能:要求用户在程序执行时从键盘上输入一个字符,输入的字符先放在缓冲区中,等待用户按回车键确认,用户敲入回车键后,该函数才真正获得输入的字符,同时将输入的字符显示在屏幕上。n使用时,一般用一个字符变量接收getchar()获得的字符。例:#include main()char c;c=getchar();putchar(c);例:#include main()putchar(getchar();3.2.2 格式化输入与输出n格式化输出函数printfn功能:向显示屏输出数据。n语法:printf(格式控制,输出表列);n例如:printf(“%d,%d”,x,y);n说明:n格式控制部分是用
8、双引号括起来的字符串,用于描述输出时的格式要求,其中包含两种信息:(1)普通字符和转义字符常量,普通字符原样输出,转义字符按所表示的字符含义输出;(2)格式说明:如%d,%c等形式的字符串,指定输出表列中相应的变量或表达式的值的输出形式。例如:若已知整型变量a的值为65,整型变量b的值为97,程序中有输出语句:printf(“a=%d,%cnx=%dn”,a,b,a+b);输出结果为()。a=65,ax=162n输出表列其实就是输出内容,可以是变量、常量或者是表达式。当有多个对象需要输出时,用“,”间隔。n注意:一个正确的输出语句要求输出列表中的输出对象和格式控制中的格式说明符一一对应(即数目
9、相同且类型一致)。n当然,printf函数也可以用于输出一个字符串常量;如:printf(“hello kittyn”);n格式说明部分介绍n%d 用来输出十进制有符号整数。(1)%d 按整型数据的实际长度输出。(2)%md m是正整数,指明数据输出所占列数,若数据实际位数小于m,则左端补空格,若数据实际位数大于m,则按实际位数输出。例如:main()int a,b;clrscr();/*清屏*/a=123,b=12345;printf(“%d,%2d,%d,%10dn”,a,a,b,b);结果:123,123,12345,12345n(3)%-md m是正整数,指明数据输出所占列数,若数据位
10、数小于m,则右端补空格,若数据实际位数大于m,则按实际位数输出。main()int a,b;a=123,b=12345;printf(“%-2d,%-10d,%dn”,a,b,b);(4)%ld 用于输出长整型数据。也可使用%mld、%-mld形式。main()long l=65536;printf(“%ldn”,l);printf(“%dn”,l);main()long l=32000;printf(“%ld,%-3ldn”,l,l);printf(“%8ld,%-8ld,%dn”,l,l,l);n注意:基本整型数据用%ld格式输出,也会出错。如:main()int a=12;printf(
11、“%ldn”,a);n%o、%mo、%-mo 以八进制形式输出基本整型整数n%lo 以八进制形式输出长整型整数n%x、%mx、%-mx 以十六进制形式输出基本整型整数n%lx 以十六进制形式输出长整型整数如:eg1:main()int a=012,b=34;printf(“%d,%d,%o,%o”,a,b,a,b);eg2:main()int a=012,b=0 x34;printf(“%x,%x,%d”,a,b,b);n%u 一般用于输出无符号整数,但一个有符号整数也可以用%u格式输出,同样,一个无符号整数也可以用%d格式输出。例:main()unsigned u=65535;int a=-
12、1;printf(“%u,%un”,u,a);printf(“%d,%dn”,u,a);n%c、%mc、%-mc 以字符形式输出。例:main()char c=101;printf(“%cn”,c);printf(“%dn”,c);printf(“%3cn”,c);n%f 以小数形式输出实型(包括单、双精度)数据值(1)%f 不指定输出宽度,由系统自动指定,使整数部分全部如数输出,并输出6位小数。例:main()float f1=3.54,f2=3.54678892;printf(“%f,%fn”,f1,f2);注:double类型的数据用%lf格式输出,也可以用%f格式输出。(2)%m.nf
13、 指定输出的数据共占m列,其中有n位小数。如果(整数部分位数+1+n)=m,输出占(整数部分位数+1+n)列。例:main()float f=123.375;printf(“%f,%10f,%10.2fn”,f,f,f);printf(“%.2f,%-10.2fn”,f,f);注意:整型数据不能以%f形式输入或输出,同样,实型数据也不能用%d格式输入输出。n格式化输入函数scanfn用于在程序运行时,由用户自行输入数值送入相应变量保存。n语法:scanf(格式控制,地址表列);n说明:格式控制含义与printf中的相同,地址表列一般是由若干个变量的地址组成的。n例:用scanf函数输入数据,并
14、用printf函数输出。main()int a,b;float f,d;scanf(“%d%d”,&a,&b);scanf(“%f,%f”,&f,&d);printf(“%d#%d#%f#%fn”,a,b,f,d);n说明:nc语言程序执行时,首先会找到main函数,然后按顺序执行main函数内部的每条语句,当遇到scanf语句时,程序会暂停,等待用户输入数据后按回车,才继续向下运行,运行到main函数的最后一条语句后,运行结束,可以看结果了。n用户输入时应按格式控制部分要求的格式输入,否则会出错。(1)格式控制部分若有普通字符,按原样输入。(注:scanf函数的格式控制部分中,不应该出现转义
15、字符。)(2)格式控制部分若有格式说明符,如%d,%f等,要求输入相应格式的数据。n思考:像上例的scanf(“%d%d”,&a,&b);语句,格式说明部分只要求输入两个十进制整数,并且两个%d相连,之间没有任何间隔符,那么在输入的时候是不是直接输入两个相连的整数呢?n若输入语句格式控制为“%d%d”,那么在输入两个整数时,在数据之间以一个或多个空格间隔,也可以用回车键、tab键间隔。n若输入语句格式控制为“%d,%d”,那么在输入两个整数时,在数据之间必须以“,”间隔。n若输入语句格式控制为“a=%d,#%d”,那么在输入时,应首先输入:a=,再输入一个整数,接着输入,#,然后输入下一个整数
16、。n若输入语句为printf(“%c%c%c”,&a,&b,&c);又希望用户输入后a,b,c变量的值分别是a、A、d,正确的输入格式应是什么?3.3 顺序结构程序设计举例 例1:输入一个华氏温度,要求输出对应的摄氏温度(保留两位小数),转换公式为c=5/9(f-32)。n分析问题,找出求解问题的方法和步骤(简称问题求解的算法)。n该问题的求解步骤很简单,首先要从键盘输入一个华氏温度,存储在一个变量里,供以后做华氏温度向摄氏温度的转换用;接着,使用转换公式,将转换后的摄氏温度值保存在另一变量中,等待输出;然后输出该摄氏温度值。n用c语言语句描述上面的算法,写成完整的程序。main()float
17、 f,c;scanf(“%f”,&f);c=5.0/9*(f-32);printf(“%.2fn”,c);书写程序时,注意:(1)首先,应考虑程序中要使用几个变量,每个变量的含义及类型(2)变量应在有了确定值后,才可以使用(3)数学表达式到c语言表达式的转换 例2:输入两个整数,分别存放在变量a和b中,要求将这两个变量的值互换,输出它们的值。n分析:完成该问题的算法可分为以下几步:(1)输入两个数,分别存入a和b中(2)将a,b变量的值相互交换(3)输出交换后的a和b的值问题是:第(2)步如何具体实现?main()int a,b,c;scanf(“%d,%d”,&a,&b);printf(“f
18、irst:a=%d,b=%dn”,a,b);c=a;a=b;b=c;printf(“later:a=%d,b=%dn”,a,b);例3:编写c程序,按下列公式计算并输出s的值,其中,a和b的值由键盘输入。s=2ab/(a+b)2n分析:求解该问题的算法分为以下几步(1)输入a和b的值(2)由公式计算出s的值(3)输出s main()float a,b,s;scanf(“%f,%f”,&a,&b);s=2*a*b/(a+b)*(a+b);printf(“s=%fn”,s);若程序如下,则不能实现题意要求的功能。为什么?main()int a,b;float s;scanf(“%d,%d”,&a,&b);s=2*a*b/(a+b)*(a+b);printf(“s=%fn”,s);思考:如果要求对上面的程序作修改,但不允许改变变量的类型,使程序仍能实现题意要求的功能,应该怎么办?