1、第 4章顺序结构程序设计第第 4章顺序结构程序设计章顺序结构程序设计4.1 C语言语句语言语句 4.2 数据输入数据输入 4.3 数据输出数据输出 4.4 算法与程序设计算法与程序设计 4.5 程序设计举例程序设计举例 第 4章顺序结构程序设计4.1 C语言语句语言语句 4.1.1 控制语句控制语句 条件语句:ifelse语句 开关语句:switch语句 当循环语句:while语句 直到循环语句:dowhile语句 计数循环语句:for语句 中止本次循环语句:continue语句 中止整个循环语句:break语句 函数返回语句:return语句 无条件转移语句:goto语句 第 4章顺序结构程
2、序设计 4.1.2 表达式语句表达式语句 在C语言中,任何表达式都可以以相应表达式语句的形式存在于程序中。例如:i+;a=b=c=1;x=y=1,x*x+y*y;sin(0.75);第 4章顺序结构程序设计相应的赋值语句有基本赋值语句与复合赋值语句。例如:S=1+2+3+4+5;x+=1;y*=a;x=y=z=a=b=c=1;函数调用语句由函数调用表达式加分号构成。例如:exp(x);/*求eX*/fabs(x);/*求|x|*/sqrt(x);/*求 */x第 4章顺序结构程序设计4.1.3 特殊语句特殊语句 1.注释语句注释语句 格式为:/*注释文本*/注释语句虽然不对程序的运行产生任何影
3、响,但必要的注释是程序的重要组成部分。注释分功能性注释和说明性注释。功能性注释用以注释程序、函数及语句块的功能,说明性注释用以注释变量的作用。第 4章顺序结构程序设计 给程序加必要的注释时可遵循以下原则:(1)一个程序至少有一条关于整个程序功能说明的注释语句。(2)一个函数至少有一条关于函数功能说明的注释语句。(3)对程序中的主要变量要加必要的注释,以说明变量的作用。(4)对程序中的重要语句块要加必要的注释,以说明语句块的功能。第 4章顺序结构程序设计例如例如:mian()/*求三角形面积*/float a,b,c;/*三角形三边*/float hl;/*半周长*/float h,s;/*周长
4、,面积*/*输入*/*求周长*/*求面积*/*输出*/第 4章顺序结构程序设计 2复合语句 为了满足将多条语句在语法上作为一条语句的使用需要,C语言提供了复合语句。如if语句中的选择体和while语句中的循环体需多条语句描述时,就必须采用复合语句。复合语句只需用大括号“”将一系列语句括起来即可。复合语句不是一条具体语句,它是一种逻辑上的考虑,凡是单一语句可以存在的位置,均可以使用复合语句。复合语句用在语法上只能使用单一语句,而相应操作需由多条语句描述。复合语句又称为分程序,它可以有属于自己的数据说明部分。函数体从一般意义上讲就是一条复合语句。第 4章顺序结构程序设计 3.空语句空语句 空语句是
5、一种概念,C语言的空语句仅由分号构成,在编译时不产生任何指令,在执行时不产生任何操作。空语句常用于:(1)构成标号语句,标识程序中相关位置。(2)循环语句中空循环体。(3)模块化程序中未实现的模块及暂不联入的模块。第 4章顺序结构程序设计4.2 数据输入数据输入 4.2.1 一般格式一般格式 数据输入的一般格式为:scanf(格式字串,输入参数表)(1)格式字串用以描述输入数据的格式,由格式说明符组成,格式说明符由“%”和格式字符组成。不同格式说明对应不同类型的数据输入。格式字串可以包含普通字符,普通字符在数据输入时必须原样输入。第 4章顺序结构程序设计 (2)输入参数只能用地址表,表示将输入
6、的数据送相应地址代表的存储单元中。这点要特别注意,这是与其它高级语言不同的地方。地址通过取地址运算&获取。(3)输入数据默认用空格、回车或Tab键分隔。(4)如果输入数据少于输入参数,则继续等待从键盘输入数据;如果输入数据多于输入参数,则多余的数据对当前的scanf()函数不起作用,但可能影响其后的scanf()函数。(5)使用scanf()函数可让变量在程序执行过程中得到从键盘输入的不同值。第 4章顺序结构程序设计(6)输入函数的调用一般采用语句调用形式,间接形成C语言的输入语句。例如:int i,j,k;scanf(%d%d%d,&i,&j,&k);格式字串 输入参数表从键盘输入i,j,k
7、的值。如有输入:1 2 3i将得到值1,j将得到值2,k将得到值3。如有输入:10 20 30 60i将得到值10,j将得到值20,k将得到值30。第 4章顺序结构程序设计 scanf(i=%d,j=%d,&i,&j);如i的值为1,j的值为2,则必须作如下输入:i=1,j=2 第 4章顺序结构程序设计4.2.2 格式字符格式字符 对应于不同类型的数据输入,C语言用不同的格式字符描述:d:用于输入十进制整数。o:用于输入八进制整数。x:用于输入十六进制整数。c:用于输入字符数据。s:用于输入字符串数据。f:用于输入实数,可以用小数形式或指数形式输入。e:与f 作用相同,e 与f 可以相互替换。
8、例如:int i;char c;float f;第 4章顺序结构程序设计 scanf(%d%f%c,&i,&f,,&c);如有输入:2 3.4ci得到值2,f得到值3.4,c得到值c。第 4章顺序结构程序设计 scanf(%x%f,&i,&f);如有输入:1A 4.93e1i得到值1A(十六进制数),f得到值49.3。C语言还提供以下附加格式字符,用于输入数据格式的进一步描述:l:用于输入长整型数据(%ld、%lo、%lx)以及双精度型数据(%lf、%le)。h:用于输入短整型数据(%hd、%ho、%hx)。n:域宽,为一正整数,用于指明截取输入数据的位数。只能用于整型数据输入。*:表示跳过当
9、前输入项。第 4章顺序结构程序设计 例如:假定已有相应变量定义 (1)scanf(%2d%3d,&i,&j);如输入:12345 i 得到值12,j 得到值345。(2)scanf(%2d%*3d%2d,&a,&b);如输入:1234567 a得到值12,b得到值67。第 4章顺序结构程序设计4.2.3 说明说明 (1)输入函数中格式控制字串中不允许使用转义字符。(2)利用格式字串中普通字符在输入时要原样输入,常引入特定的普通字符如逗号等,作为输入数据的分隔符,如:scanf(%f,%f,%d,&x,&y,&z);输入数据必须用逗号分隔,如:3.0,4.0,5。第 4章顺序结构程序设计 (3)
10、如果数据本身可以将数据分隔时,输入数据不需用分隔符,如:scanf(%d%c%d,&v1,&v2,&v3);v1的值30,v2的值a,v3的值18。可这样输入:30a18,字符数据a能起到分隔数据30、18的作用。(4)无符号整型数据输入用%d、%o、%x描述。第 4章顺序结构程序设计 (5)整型数据输入时通过指定域宽,可指定输入数据精度。对实型数据不能指定输入精度。(6)字符数据、字符串数据输入时不需用描述符单引号和双引号。另请注意:空格字符、转义字符均是有效字符。(7)字符数据的输入可直接使用getchar()函数完成,该函数不带参数,返回值就是所输入的字符。(8)输入函数的返回值为输入数
11、据的个数,需要时可以加以利用。第 4章顺序结构程序设计 (9)在介绍完输入函数后,读者这时还应注意到变量得到值有三种方法:定义时赋给初值,在编译时得到;在执行时利用赋值语句得到;在执行时通过输入函数得到。利用输入函数得到值更具一般性、通用性。另外,数据也常来自磁盘文件。(10)在分析程序的输入数据时,要同时考虑输入数据的输入格式。第 4章顺序结构程序设计4.3 数据输出数据输出 4.3.1 一般格式一般格式 数据输出的一般格式为:printf(格式字串,输出参数表)(1)格式字串用以描述输出数据的格式,由格式说明符和普通字符组成。与scanf()函数中格式字串一样,格式说明符由“%”和格式字符
12、组成,不同的格式说明符对应不同类型数据的输出,普通字符原样输出。第 4章顺序结构程序设计 (2)输出参数可以是表达式。如果是常量,直接输出;如是变量,输出其值;如是表达式,先计算表达式的值,再输出。(3)输出函数的调用一般也采用语句调用形式,间接形成C语言的输出语句。例如:int i=3,j=6;printf(i=%2d,j=%2d,i,j);输出结果:i=3,j=6 printf(%2d*%2d=%2d,i,j,i*j);输出结果:3*6=18 第 4章顺序结构程序设计4.3.2 格式字符格式字符 对应不同类型数据的输出,类似于输入函数,C语言用不同的格式字符描述。d:以带符号的十进制整数形
13、式输出整数(正数不输出符号)。o:以无符号八进制整数形式输出整数(不输出前导符0)。x:以无符号十六进制整数形式输出整数(不输出前导符0 x)。u:以无符号十进制整数形式输出整数。第 4章顺序结构程序设计 c:以字符形式输出,输出一个字符。s:以字符串形式输出,输出字符串的字符至结尾符0为止。f:以小数形式输出实数,小数部分为6位。小数部分少于6位补足0,多于6位四舍五入。e:以标准指数形式输出实数,数字部分为1位整数和6位小数。g:根据给定的值和精度,自动选择f与e中较紧凑的一种格式,不输出无意义的0。一般数据默认的输出宽度等于数据的实际位数。第 4章顺序结构程序设计例如:int a=3,b
14、=12;float x=1.23,y=4.785;printf(a=%d,b=%d,a,b);输出结果:a=3,b=12 printf(%f*%f=%f,x,y,x*y);输出结果:1.230000*4.785000=5.885550 第 4章顺序结构程序设计 l:用于长整型数据输出(%ld,%lo,%lx,%lu),以及双精度型数据输出(%lf,%le,%lg)。m:域宽,十进制整数,用以描述输出数据所占宽度。如果m大于数据实际位数,输出时前面补足空格;如果m小于数据的实际位数,按实际位数输出。n:附加域宽,十进制整数,用于指定实型数据小数部分的输出位数。如果n大于小数部分的实际位数,则输出
15、时小数部分用0补足。如果n小于小数部分的实际位数,则输出时将小数部分多余的位4舍5入。如果n用于字串数据,则表示从字串中截取的字符数。双域宽时,附加域宽与域宽之间用“.”连接。第 4章顺序结构程序设计:输出数据左对齐,缺省时为右对齐。+:输出正数时,也加上“+”号。:作为o,x的前缀时,输出结果前面加上前导符0、0 x。例如:前举例中用指定格式输出:(1)printf(a=%5d,b=%5d,a,b);输出结果:a=3,b=12(2)printf(%5.2f*%5.2f=%5.2f,x,y,x*y);输出结果:1.23*4.79=5.89 第 4章顺序结构程序设计4.3.3 说明说明 (1)可
16、以无输出参数,而只有格式字串。(2)输出对象中使用转义字符,完成一些特殊的输出操作。例如:printf(n);/*输出换行*/printf(t);/*跳到下一个输出区*/(3)字符及字串常量,除了作为输出参数输出外,也可作为格式字串中基本字符输出。第 4章顺序结构程序设计 (4)可以将整数作字符数据输出,输出的是以此作为ASCII码的字符。字符数据也可以作整数输出,输出的是字符的ASCII码。如:printf(%c,%d,97,b);输出结果:a,98 第 4章顺序结构程序设计 (5)负数以补码的形式存储,将负数以无符号数输出时,类似于赋值的规则处理。反之,将一个无符号数用有符号数的格式输出,
17、也是类似于赋值的规则处理。例如:int a=1;printf(a=%d,ox=%o,xa=%x,ua=%u,a,a,a,a);输出结果:a=1,ox=177777,xa=ffff,ua=65535 int b=65535;printf(b=%d,ob=%o,xb=%x,ub=%u,b,b,b,b);输出结果:b=1,ob=177777,xb=ffff,ub=65535 第 4章顺序结构程序设计 (6)利用不同的输出格式可间接完成数制转换。例如:int i=16;printf(i=%d(十进制),i=%o(八进制),i=%x(十六进制),i,i,i);输出结果:i=16(十进制),i=20(八进
18、制),i=10(十六进制)第 4章顺序结构程序设计 (7)字符数据的输出可直接以输出数据作参数,调用输出函数putchar()完成。如:putchar(a);输出字符a (8)在分析程序的输出数据时,要同时考虑输出数据的输出格式。第 4章顺序结构程序设计4.3.4 交互信息交互信息 交互提示信息使用输出函数产生。main()int a,b;int s;printf(请输入两个整数:);/*产生交互信息*/scanf(%d,%d,&a,&b);printf(正在求和);/*产生交互信息*/s=a+b;printf(和=%6d,s);第 4章顺序结构程序设计4.4 算法与程序设计算法与程序设计 4
19、.4.1 算法算法 程序设计的关键是设计算法。算法是求解问题的有限步骤,具有有穷性、确定性、可行性、输入与输出五大特征。求解问题的算法从一般意义上讲可分为输入、处理、输出三个步骤。算法的评价是以正确为前题的,在正确的前题下,一个好的算法应易理解,在易理解的基础上力求算法的高效率。第 4章顺序结构程序设计 算法可以用自然语言描述,也可以用流程图描述。程序也可以认为是算法的一种描述形式或最终形式。从算法的角度看,程序是算法的最终实现。算法的分析采用自顶向下的分析方法,将大问题分解成子问题,将大任务分解成子任务,将大目标分解成子目标,最终分解成计算机能处理的一系列步骤。算法的自然语言描述靠近问题,算
20、法的程序描述靠近机器,算法的流程图描述非常直观。这些具体描述参见后面的实例。第 4章顺序结构程序设计4.4.2 程序程序 1程序的三种基本结构 程序的三种基本结构是指顺序结构、选择结构及循环结构。(1)顺序结构是由一系列顺序执行的操作(语句)组成的,是一种线性结构。(2)选择结构又称为分支结构,它根据一定的条件选择下一步要执行的操作。(3)循环结构是指根据一定的条件反复执行一定的操作。循环是计算机最擅长的工作。结构之间可以是平行关系,也可以相互嵌套。由三种基本结构可以组成各种复杂结构的程序。第 4章顺序结构程序设计 2.程序的质量标准程序的质量标准 对应于算法的评价,程序的质量标准同样以正确作
21、为前提。在正确的前提下,从“效率第一”到“清晰第一”。“清晰”是指程序结构清晰,可读性好。早期的程序由于受计算机执行速度慢及内存小的限制,在正确的前提下,程序的效率是评价程序的首要标准。第 4章顺序结构程序设计 3.结构化程序结构化程序 结构化程序是只由三种基本结构构成的程序。结构化程序的特点是单入口、单出口。第 4章顺序结构程序设计4.4.3 结构化程序设计方法结构化程序设计方法 顺序结构语句2语句1语句3条件选择体1 选择体2循环体循环条件循环体循环条件选择结构当循环结构直到循环结构图4-1 NS流程图 第 4章顺序结构程序设计4.4.4 结构化程序设计方法结构化程序设计方法 结构化程序设
22、计方法认为下层是上层的分解,上层是下层的抽象。从求解问题的角度看,将大问题分解成子问题,将子问题分解成子子问题,直到本原问题,所有的子问题解决了,整个问题就解决了。所谓本原问题,是指有明显解且很容易解的问题。从程序完成的任务看,将大任务分解成子任务,将子任务分解成子子任务,所有子任务的完成意味着整个任务的完成。从程序实现的目标看,将大目标分解成子目标,将子目标分解成子子目标,所有子目标的实现意味着整个目标的实现。第 4章顺序结构程序设计例例4-1 求三角形面积和周长的算法。上层(第一层)分解:步骤1:输入三边。步骤2:求三角形面积和周长。步骤3:输出面积和周长。下层(第二层)分解:步骤2.1:
23、求三角形周长。步骤2.2:求三角形面积。第 4章顺序结构程序设计 能不能构成三角形输入三边TF求周长求面积输出周长和面积输出“不能构成三角形”的信息(a)(b)求周长输入三边求面积输出周长和面积图4-2 求三角形面积和周长的流程图描述 第 4章顺序结构程序设计4.4.5 程序设计过程程序设计过程 关于程序设计的简化过程可分三步:分析问题(Qusetion)、设计算法(Algorithm)和实现程序(Program),简称QAP方法。第一步:分析问题。要明确问题,明确有哪些输入数据,需要那些中间量,要得到哪些处理结果,给出问题的数据分析。第二步:设计算法。在数据分析的基础上寻找解决问题的方法。先
24、找到一种方法,再考虑其它方法,并从中选择较佳的方法。算法通过自然语言及流程图描述。第三步:实现程序。第 4章顺序结构程序设计4.5 程序设计举例程序设计举例 例例 4 2 求五个数的和、积、平均值。数据分析:输入量:输入的五个数 x1、x2、x3、x4、x5,float输出量:和s、积m、平均值a,float注意:输出时要注意输出格式的设计。算法分析:输入x1、x2、x3、x4、x5。求和s。求积m。求平均值a。输出和s、积m、平均值a。第 4章顺序结构程序设计程序如下:/*程序4-2,求五个数的和、积及平均值*/#include stdio.hmain()float x1,x2,x3,x4,
25、x5;float s,m,a;clrscr();/*清屏函数*/*输入五个数x1、x2、x3、x4、x5*/printf(请输入五个数(输入数据用逗号分隔):);第 4章顺序结构程序设计scanf(%f,%f,%f,%f,%f,&x1,&x2,&x3,&x4,&x5);/*求和s、积m、平均值a*/s=x1+x2+x3+x4+x5;m=x1*x2*x3*x4*x5;a=s/5;/*输出和s、积m、平均值a*/printf(和=%6.3f,积=%6.3f,平均值=%6.3f n,s,m,a);输入数据:1.1,1.2,2.1,2.2,3.1 运行结果:和=9.700,积=18.905,平均值=1
26、.940 第 4章顺序结构程序设计例例 4 3 求圆的面积和周长。数据分析:输入量:半径 r,float输出量:面积 s,周长l,float算法分析:输入半径 r。计算面积s。计算周长l。输出面积s和周长l。第 4章顺序结构程序设计/*程序 4-3,求圆的面积和周长*/define PI 3.14159include stdio.hmain()float r;float s,l;clrscr();/*输入数据*/printf(请输入圆的半径:);scanf(%f,&r);/*求面积s、周长l*/s=PI*r*r;l=2*PI*r;/*输出面积s、周长l*/printf(面积=%6.3f,周长=
27、%6.3f n,s,l);输入数据:2运行结果:面积=12.566,周长=12.566 第 4章顺序结构程序设计例例 4 4 求平面上两点之间的距离。数据分析:输入量:第一个点 坐标x1、y1,第二个点 坐标x2、y2,float输出量:两点之间的距离 d,float算法分析:输入第一个点 坐标x1、y1。输入第二个点 坐标x2、y2。求两点之间的距离 d。输出两点之间的距离d。第 4章顺序结构程序设计/*程序 4-4 ,求平面上两点之间的距离*/include stdio.hinclude math.hmain()float x1,y1,x2,y2;float d;clrscr();prin
28、tf(请输入第一个点 坐标x1、y1:);scanf(%f,%f,&x1,&y1);printf(请输入第二个点 坐标x2、y2:);scanf(%f,%f,&x2,&y2);d=sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);printf(两点之间的距离=%8.4f n,d);输入数据:0,0 1,1运行结果:两点之间的距离=1.4142 第 4章顺序结构程序设计例例 4 5 求三角形的面积和周长。数据分析:输入量:三角形三边a、b、c,float中间量:半周长hl,float输出量:面积 s,周长l,float算法分析:输入三边a、b、c。计算周长l。计算半周长hl
29、。计算面积s。输出面积s和周长l。第 4章顺序结构程序设计/*程序4-5,求三角形的面积和周长 */include stdio.hinclude math.hmain()float a,b,c;float hl;float s,l;clrscr();printf(请输入三角形的三边:);scanf(%f,%f,%f”,&a,&b,&c);l=a+b+c;hl=0.5*(a+b+c);s=sqrt(hl*(hla)*(hlb)*(hlc);printf(面积=%5.2f,周长=%5.2f n,s,l);输入数据:3,4,5运行结果:面积=6.00,周长=12.00 第 4章顺序结构程序设计例例
30、4 6 求一元二次方程的两个实根。数据分析:输入量:方程系数a、b、c,float中间量:判别式d,float输出量:两个实根 x1、x2,float算法分析:输入方程系数a、b、c。计算判别式d。计算两个实根 x1、x2。输出两个实根 x1、x2。第 4章顺序结构程序设计/*程序 4-6,求一元二次方程的两个实根*/include stdio.hinclude math.hmain()float a,b,c;float d;float x1,x2;clrscr();printf(请输入方程系数a、b、c:);scanf(%f,%f,%f,&a,&b,&c);d=b*b-4*a*c;x1=(-
31、b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);printf(-第一个根=%5.2f,第二个根=%5.2f n,x1,x2);输入数据:1,3,-4运行结果:第一个根=-4.00,第二个根=1.00 第 4章顺序结构程序设计例例 4 7 编写显示如下界面的程序:通讯录管理程序Add追加数据 Modify修改数据Delete删除数据 Print打印数据 Quit退出程序 第 4章顺序结构程序设计程序如下:/*程序4-7,界面程序之显示部分*/include stdio.hmain()clrscr();printf(%sn,通讯录管理程序”);printf(%sn,Add
32、追加数据 Modify修改数据”);printf(%sn,Delete删除数据 Print打印数据”);printf(%sn,Quit退出程序”);第 4章顺序结构程序设计习习 题题 四四 1C语言的控制语句有哪些?2程序中使用注释语句有何作用?如何给程序加注释?3结构化程序设计方法的基本思想是什么?4简述程序设计的基本过程。第 4章顺序结构程序设计5运行下面的程序时,数据如何输入?main()int a,b;float x,y;char c1,c2;scanf(a=%d b=%d,&a,&b);scanf(x=%f y=%e,&x,&y);scanf(c1=%c c2=%c,&c1,&c2)
33、;假定a=3,b=7,x=8.5,y=71.82,c1=A,c2=a。第 4章顺序结构程序设计6阅读下面的程序,给出程序的运行结果。main()int a=5,b=7;float x=67.8564,y=789.124;char c=A;long n=1234567;unsigned u=65535;printf(%d%dn,a,b);printf(%3d%3dn,a,b);printf(%f%fn,x,y);printf(%10f,%10fn,x,y);第 4章顺序结构程序设计printf(%8.2f,%8.2f,%.4f,%.4f,%3f,%3fn,x,y,x,y,x,y);printf(
34、%e,%10.2en,x,y);printf(%c,%d,%o,%xn,c,c,c,c);printf(%1d,%1o,%xn,n,n,n);printf(%u,%o,%x,%dn,u,u,u,u);printf(%s,%5.3sn,COMPUTER,COMPUTER);第 4章顺序结构程序设计7编写程序,实现如下的输出格式和结果:a=3 b=4 c=5x=1.200000,y=2.400000,z=3.600000 x+y=3.60 y+z=1.20 z+x=2.40u=51274 n=128765c1=a or 97(ASCII)c2=b or 98(ASCII)假定a=3,b=4,c=5
35、,x=1.2,y=2.4,z=3.6,u=51274,n=128765,c1=a,c2=b。第 4章顺序结构程序设计8编写程序,求长方形的面积。9编写程序,求梯形的面积。10编写程序,由底和高求三角形的面积。11编写程序,由一个人的出生时间计算此人某年的年龄。12编写程序,求玲玲同学期末6门课程考试成绩的总分与平均分。13编写程序,计算某个月的应发薪水与实发薪水,其中的薪水项目、扣款项目自定。14编写程序,求空间两点之间的距离。提示:空间一点(x,y,z),可由三个实数来描述。第 4章顺序结构程序设计15编写程序,求两个复数的和与差。提示:C语言中没有复数类型,一个复数可通过实部与虚部两个实数来描述。16编写显示如下界面的程序:成绩处理程序D成绩登录 X成绩修改Z求总成绩 P求平均成绩S成绩排序 Y打印成绩单Q退出程序