C语言第4章程序设计的三种基本结构.ppt
《C语言第4章程序设计的三种基本结构.ppt》由会员分享,可在线阅读,更多相关《C语言第4章程序设计的三种基本结构.ppt(89页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章第四章 程序设计的三种基本结构程序设计的三种基本结构 第四章第四章 程序设计的三种基本结构程序设计的三种基本结构 前前面面章章节节介介绍绍了了程程序序设设计计中中用用到到的的一一些些基基本本要要素素(常常量量、变变量量、运运算算符符、表表达达式式等等),它它们们是是构构成成程程序序的的基基本本成成份份。程程序序设设计计是是为为了了完完成成某某一一项项任任务务而而编编写写的的指指令令集集合合,它它是是人人与与计计算算机机进进行行信信息息交交流流的的工工具具。本本章章将将介介绍绍为为编编写写简简单单的程序所必需的一些内容及程序设计的三类语句的程序所必需的一些内容及程序设计的三类语句。v4.1
2、 C语句概述语句概述任何一种程序设计语言都具有特定的语法规则和一定的表现形任何一种程序设计语言都具有特定的语法规则和一定的表现形式。按照一定的格式和构成规则书写程序,不仅可以使程序设式。按照一定的格式和构成规则书写程序,不仅可以使程序设计人员和使用程序的人员易于理解,更重要的是把程序输入到计人员和使用程序的人员易于理解,更重要的是把程序输入到计算机时,计算机能够充分识别,并且正确执行它。计算机时,计算机能够充分识别,并且正确执行它。C程序是程序是用用C语句来书写的,语句来书写的,C语句可以分为以下三类:语句可以分为以下三类:1.控制语句控制语句控制语句完成一定的控制功能。控制语句完成一定的控制
3、功能。C只有以下只有以下9种控制语句:种控制语句:(1)if()else (条件语句条件语句)(2)for()(循环语句循环语句)(3)while()(循环语句循环语句)(4)dowhile()(循环语句循环语句)(5)continue (结束本次循环语句结束本次循环语句)(6)break (终止执行终止执行switch或循环语句或循环语句)(7)switch (多分支选择语句多分支选择语句)(8)goto (转向语句转向语句)(9)return (从函数返回语句从函数返回语句)以上以上9种控制语句中的种控制语句中的()表示其中是一个条件,表示其中是一个条件,表示内嵌语表示内嵌语句。句。2表达
4、式语句表达式语句表达式语句由表达式加上分号表达式语句由表达式加上分号“;”组成。它包括三种基本组成。它包括三种基本语句。语句。(1)赋值语句赋值语句 执行赋值语句就是计算表达式的值,并将其赋执行赋值语句就是计算表达式的值,并将其赋给左边的变量。给左边的变量。例如:例如:z=x+y;i+;(2)函数调用语句函数调用语句 由一次函数调用加一个分号构成一个语句。由一次函数调用加一个分号构成一个语句。例如:例如:clrscr();(3)空语句空语句 空语句是只有一个分号而没有表达式的语句。下空语句是只有一个分号而没有表达式的语句。下面是一个空语句:面是一个空语句:;它只是形式上的语句,什么也不做。有时
5、用来作被转向点,它只是形式上的语句,什么也不做。有时用来作被转向点,或循环语句中的循环体,表示循环体什么也不做。或循环语句中的循环体,表示循环体什么也不做。3复合语句复合语句用用“”把一些语句括起来成为复合语句,也称为分程把一些语句括起来成为复合语句,也称为分程序。如:序。如:z=a+b;t=z/100;couttendl;复合语句内的各条语句都必须以分号复合语句内的各条语句都必须以分号“;”结尾,在右括号结尾,在右括号“”外面不能加分号。外面不能加分号。C语言允许一行写几个语句,也允许语言允许一行写几个语句,也允许一个语句分开写在几行上,书写格式无固定要求一个语句分开写在几行上,书写格式无固
6、定要求。4.2顺序结构程序设计顺序结构程序设计顺序结构程序是一组按书写顺序执行的语句。顺序结构程序顺序结构程序是一组按书写顺序执行的语句。顺序结构程序中的语句由赋值语句和输入、输出语句组成。它是中的语句由赋值语句和输入、输出语句组成。它是C程序中最程序中最简单、最基本的一种结构,是进行复杂程序设计的基础。执简单、最基本的一种结构,是进行复杂程序设计的基础。执行顺序如图行顺序如图4.1。图.1执行a执行b(b)执行a执行b(a)4.2.1顺序结构程序设计举例顺序结构程序设计举例下面介绍几个顺序结构程序设计的例子。下面介绍几个顺序结构程序设计的例子。例例4.1 有三个电阻并联,其阻值分别为有三个电
7、阻并联,其阻值分别为10、20、30,求并联后的电阻。计算并联电阻的公式是:,求并联后的电阻。计算并联电阻的公式是:r=1/(1/r1+1/r2+1/r3)。#includevoid main()float r,r1,r2,r3;r1=10;r2=20;r3=30;r=1/(1/r1+1/r2+1/r3);cout并联电阻并联电阻r=rendl;运行结果:运行结果:并联电阻并联电阻r=5.455例例4.2 从键盘输入一个大写字母,要求改用小写字母从键盘输入一个大写字母,要求改用小写字母输出。输出。大写字母的大写字母的ASCII码值比小写字母的码值比小写字母的ASCII码值小码值小32,因此将大
8、写字母的因此将大写字母的ASCII码值加码值加32便可得到相应的小便可得到相应的小写字母的写字母的ASCII码值,根据此思路编程如下。码值,根据此思路编程如下。#include void main()char c1,c2;cinc1;c2=c1+32;coutc1,c20。众所周知,一元二次方程的根为:众所周知,一元二次方程的根为:x1x2可以将上面的分式分为两项:可以将上面的分式分为两项:p=,q=,x1=p+q,x2=p-q根据以上分析,画出根据以上分析,画出N-S流程图如图流程图如图4.2所示所示。float a,b,c,disc,x1,x2,p,q输入a,b,c计算disc=b*b-4
9、*a*c计算p=-b/(2*a)计算q=sqrt(disc)/(2*a)计算x1=p+q,x2=p-q输出x1,x2图4.2据此编写源程序如下:据此编写源程序如下:#include#include void main()float a,b,c,disc,x1,x2,p,q;cout请输入请输入a、b、c的值:的值:abc;disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;coutx1=x1endl;coutx2=x2y)coutxy)coutxendl;else couty500)cost=0.15;else if(numbe
10、r300)cost=0.10;else if(number100)cost=0.075;else if(number50)cost=0.05;elsecost=0;这种if语句的执行过程见图4.6。三种if结构比较:三种形式的if语句中在if后面都有“表达式”,一般为逻辑表达式或关系表达式。第二、三种形式的if语句中,在每个else前面有一个分号,整个语句结束处有一个分号。其中else子句不能做为语句单独使用,它必须是if语句的一部分,与if配对使用。在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,但此时必须用一对花括号“”将几个语句括起来成为一个复合语句。如:if(xy
11、)x=x*x;y=y*y;coutx*x=xendl;couty*y=yendl;elsecoutxy 不做运算b 假a,b值互换输出a,b值图4.7例4.4输入两个整数,按由小到大的次序输出这两个数。这个问题算法很简单,只做一次比较即可。但需要用到一个中间变量t做为媒介,当输入变量ab时,进行交换,先将a的值存入t,再将b的值存入a,然后将t中保存的a的原值存入b,运行前t中无固定值,运行后t中存有a的值。N-S流程图如图4.7所示。据此写出源程序如下:#include void main()int a,b,t;cinab;if(ab)t=a;a=b;b=t;/交换变量a,b的值 couta
12、 bendl;执行情况为:5 35注意:若交换变量a,b的值,直接用如下两条语句做,行不行?a=b;b=a;例4.5输入3个整数a,b,c,要求按由小到大的顺序输出。算法N-S流程图如图4.8所示。据此算法写出源程序如下:#include void main()int a,b,c,t;int a,b,c,t cinabc;if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(bc)t=b;b=c;c=t;couta b cb真 假a,b互换 ac真 假a,c互换 bc真 假b,c互换输出a,b,c图4.8例4.6 从键盘输入某位同学的各科成绩,数学(sx)、英语(yy)
13、、计算机(jsj),要求判断该同学是否有不及格,如有则输出不及格课程名称和成绩,否则不输出。算法N-S流程图如图4.9所示。据此算法写出源程序如下:#include void main()int sx,yy,jsj;cinsxyyjsj;if(sx60)cout数学 sxendl;if(yy60)cout英语 yyendl;if(jsj60)cout计算机 jsjendl;运行情况为:567886数学 56 int sx,yy,jsj输入sx,yy,jsjsx60真 假输出sxyy60真 假输出yyjsj89真 假 score74 真 假 score60 真 假输出优 输出良 输出及格 输出不
14、及格图4.10例4.7 编写一程序,根据学生的分数来划分成绩的等级。其划分规则如下:分数 等级90100 优7589 良6074 及格059 不及格假定考分变量为score,学号变量为num,则其算法N-S流程图如图4.10所示。据此算法写出源程序如下:#include void main()int score,num;cinnumscore;if(score89)coutnum:优74)coutnum:良60)coutnum:及格endl;else coutnum:不及格y真 假zx yx真 假 真 假max=z max=y 输出max图4.11例4.8 从键盘输入三个数,求其中最大数。算法
15、N-S流程图如图4.11所示。据此算法写出源程序如下:#include void main()int x,y,z,max;cinxyz;max=x;if(zy)if(zx)max=z;elseif(yx)max=y;coutmaxb)max=a;else max=b;可以用下面的条件运算符来处理:max=(ab)?a:b;其中“(ab)?a:b”是一个“条件表达式”。它是这样执行的:如果(ab)条件为真,则条件表达式取值a,否则取值b。条件运算符要求有3个操作对象,称三目(元)运算符,它是C语言中唯一的一个三目运算符。条件表达式的一般形式为表达式1?表达式2:表达式3它的执行过程如图4.12所
16、示。表达式1条件表达式取表达式2的值条件表达式取表达式3的值假面具真图4.12说明:(1)条件运算符的执行顺序:先求解表达式1,若为真则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为假,则求解表达式3,表达式3的值就是整个条件表达式的值。max=(ab)?a:b执行结果就是将条件表达式的值赋给max。也就是将a和b中大者赋给max。(2)条件运算符优先于赋值运算符,因此上面赋值表达式的求解过程是先求解条件表达式,再将它的值赋给max。条件运算符的优先级别比关系运算符和算术运算符都低。所以max=(ab)?a:b 括号可以不要,完全等价于max=ab?a:b如果有ab?
17、a:b+1相当于ab?a:(b+1),而不相当于(ab?a:b)+1.(3)条件表达式不能取代一般的if语句,只有在if语句中内嵌的语句为赋值语句(且两个分支都给同一个变量赋值)时才能代替if语句。以下语句则无法用一个条件表达式代替。if(ab)couta;else coutb;但可以用下面语句代替:coutb?a:b;即将条件表达式的值输出。(4)条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不同。如x?a:bx是整型变量。若x0,则条件表达式的值为a;若x=0,则条件表达式的值为b。例4.9 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。输出最
18、后得到的字符。本题算法比较简单,在此直接给出源程序如下:#include void main()char ch;cinch;ch=(ch=A&ch=Z)?(ch+32):ch;coutch;运行情况为:Aa条件表达式中的(ch+32),其中32是小写字母和大写字母的ASCII码的差值。例4.9 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。输出最后得到的字符。本题算法比较简单,在此直接给出源程序如下:#include void main()char ch;cinch;ch=(ch=A&ch=Z)?(ch+32):ch;coutch;运行情况为:Aa条件表达式中
19、的(ch+32),其中32是小写字母和大写字母的ASCII码的差值。4.3.3 switch语句switch语句是多分支选择,也称为开关分支或开关语句。在上一节中介绍了如何用嵌套的if结构来解决多路选择问题,我们还可以利用本节将要介绍的switch语句来解决多路选择问题。switch语句的一般形式如下:switch(表达式)case 常量1:语句1或空;case 常量2:语句2或空;case 常量n;语句n或空;default:语句n+1或空;执行switch开关语句时,将变量逐个与case后面的常量进行比较,若与其中一个相等,则执行该常量下的语句,默认一直执行到语句体结束,除非遇有break
20、转向语句跳出执行体,若不与任何一个常量相等,则执行default后面的语句。说明:(1)switch后面括弧中的表达式只能是整形、字符型。case后面的常量表达式的类型必须与其匹配。(2)case语句仅起标号的作用,所以每一个case的常量表达式的值必须互不相同,否则就会出现矛盾的现象(对表达式的同一个值,有两种或多种执行方案)。(3)每个case或default后面的语句可以是复合语句,但不需要使用“”括起来。例4.10 从键盘输入一个整型数,根据输入值的大小输出不同的值。#include void main()int test;cintest;switch(test)/变量为整型数的开关语
21、句 case 1:cout test;break;/退出开关语句 case 2:cout test+1;break;case 3:couttest+2;break;default:coutError;运行情况为:23 6Error(4)case和default的出现次序不影响执行结果。(5)多个case可以共用一组执行语句,如:case A:case B:case C:cout60endl;(6)ifelse ifelse结构用于多种条件的多次判断的情况,而switch结构则用于一次条件判断多种结果的情况,二者可以互相补充,有时也可以等价使用。(7)switch结构可以用break结束,而if
22、else ifelse结构不能使用break结束。输入a,b,c ab 真 假bc ac真 假 真 假max=c max=b max=c max=a输出max图.134.3.4 选择结构程序设计举例例4.11从键盘输入三个数,求其中最大数。算法N-S流程图如图4.13所示。据此算法写出源程序如下:#include void main()int a,b,c;coutabc;if(ab)if(bc)coutmax=cendl;elsecoutmax=bendl;else if(ac)coutmax=cendl;elsecoutmax=aendl;运行情况为:123456max=56结合例4.8可知
23、,同一问题可以有不同的算法程序。例4.12编写一个程序:将用户输入的分数按以下规则转换成相应的等级:分数:90100 等级:优分数:8089 等级:良分数:7079 等级:中分数:6069 等级:及格分数:059 等级:不及格解此问题,先要构想解题的方法。分析题目所给的条件,可以发现等级共分为五个档次,而每个档次所对应的成绩(score)的下限都是10的倍数。第一档次,成绩的下限为90分,等级为优;第二档次,成绩的下限为80分,等级为良;第三档次,成绩的下限为70分,等级为中;第四档次,成绩的下限为60分,等级为及格;第五档次,成绩的下限为0,等级为不及格。以上各档次score的下限分别为90
24、,80,70,60,0,它们分别为10的9倍、8倍、7倍、6倍、0倍 scoreb等级901009优80898良70797中60696及格0590不及格也就是说,当score的值不足六个10分时,等级为不及格;当score的值满六个10分而未满七个10分时,等级为及格;当score的值满七个10分而未满八个10分时,等级为中;当score的值满八个10分而未满九个10分时,等级为良;当score的值满九个10分时,等级为优。以n代表score的值满n个10分,可以将上表改写为 scoren等级901009,10优80898良70797中60696及格0595,4,3,2,1,0不及格根据此表,
25、只要找出n的值,就可以确定等级。n的值可以由下面的公式求出:n=(int)(score/10)说明:(int)(score/10)的作用是将(score/10)的值进行强制类型转换,得到一个整型值。例如当score=68时,n的值为6;score的值为54时,n的值为5;score的值为89时,n的值为8。算法N-S流程图如图4.14所示。输入score计算(int)(score/10)真 10或9 假 真 8 假 真 7 假 真 6 假真 5,4,3,2,1,0 假输出优 输出良 输出中 输出及格 输出不及格 输入错误 图4.14据此算法写出源程序如下:#include void main(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 章程 设计 基本 结构
限制150内