1、1.算法的结构,预备知识,(1)顺序结构,(2)选择结构,(3)循环结构, 操作1 操作2 操作3 ,如果成立,则执行 否则执行, 重复执行 直到不成立,2.算法的描述,(1)自然语言或者伪代码,第1步: 第2步: 第3步: . 第n步:,(2)流程图,(3)N-S图,一.分支结构的实现,例:求解一元二次方程根,求ax2+bx+c=0方程的根(a!=0), a b c由键盘输入, 设b2-4ac0 .,#include #include void main() float a, b , c , x1, x2, p , q , delta ;scanf(“a=%f b=%f c=%f ”, ,若
2、delta=0?,1.实现两分支结构(简单if语句/if.else.语句),例:求解一元二次方程根,设delta=0.,思路1: 如果 0x1=? X2=? 否则x1=x2=?,(1)ifelse语句格式: if(关系或者逻辑表达式) 语句序列1; else 语句序列2;,伪代码,流程图(p20),(1)条件表达式:关系或者逻辑表达式 (2)缩格书写,程序实现: #include #include void main() float a,b,c,p,q,delta,x1,x2;printf(“enter a b c:n“);scanf(“%f %f %f“, ,思路2: 如果 0x1=? X2
3、=? 如果 = =0x1=x2=?,(2)简单if语句格式: if(关系或者逻辑表达式) 语句序列;,程序实现: #include #include void main() float a,b,c,p,q,delta,x1,x2;printf(“enter a b c:n“);scanf(“%f %f %f“, ,练习1: 求输入的一个整数的绝对值,分别用简单if 和 ifelse实现。 例如输出: |-3|=3 或者 |5|=5,2.实现多分支结构(多个简单if/嵌套/多分支if语句/switch语句),思路1: 如果 0x1=实根1 X2=实根2 如果 =0x1=x2=实根 如果 0 x1
4、=虚根2 X2=虚根2,例:求解一元二次方程根,若delta无特殊说明.,#include void main() float a, b,c, disc, x1,x2,real,imag;scanf(“%f,%f,%f“, ,(1)三个简单if实现:,思路2: 如果 =0如果 0x1=实根1 X2=实根2否则x1=x2=实根 否则x1=虚根1 X2=虚根2,#include void main() float a, b,c, disc, x1,x2,real,imag;scanf(“%f,%f,%f“, ,(2)由两分支嵌套实现,思路3: 如果 0x1=实根1 X2=实根2 否则 如果 =0x
5、1=x2=实根 否则x1=虚根2 X2=虚根2,if(关系或者逻辑表达式1) 语句序列1; else if(关系或者逻辑表达式2) 语句序列; else if(关系或者逻辑表达式3) 语句序列; else if(关系或者逻辑表达式m) 语句序列m; else 语句序列n;,(3)多分支if语句:,流程图p97,#include void main() float a, b,c, disc, x1,x2,real,imag;scanf(“%f,%f,%f“, ,(4)switch语句:,任何整类型的表达式,例5:给出成绩等级A B C D E,要求输出一百分制成绩. A:90分以上, B:808
6、9分 C:7079分 D: 6069分 E:不及格,#include void main() char grade;scanf(“%c“, ,首先确定输入数据的特点,然后再设计变量。,思考:若输入数据不在AE范围内程序运行会怎样?,#include void main() char grade;redo:printf(“enter a grade:(AE)n“);scanf(“%c“, ,输入数据的有效性检测,条件写法2:if(gradeE) 或者 if(!(grade=A & grade=E),条件写法3:if(grade!=A & grade!=B& grade!=C &grade!=D
7、&grade!=E),switch出题点:,#include void main() char c;int a=0,b=0;scanf(“%c“, ,(1)对缺少break语句的处理 (2)对default语句的理解,运行1:输入字母A 运行2:输入字母D 运行3:输入字母F,测试的表达式类型可是任意整类型的 若各case后的值都没有与表达式匹配的,则执行default分支. default分支可以没有. 各case后的常量值互不相同 各分支后若有多条语句, 可不用大括号 各case分支和default分支的出现次序可以任意. case 分支若没有break语句则继续执行下一个case 多个c
8、ase可共用一组执行语句.,switch使用说明,switch的嵌套,/*错误范例*/ #include void main() float a, b,c, delta, x1,x2,real,imag;scanf(“%f,%f,%f“, ,#include void main() float a, b,c, delta, x1,x2,real,imag;scanf(“%f,%f,%f“, ,续前例:求解一元二次方程的根。delta无说明。用switch语句实现,嵌套switch,练习2:分别用 if/ ifelse嵌套 / 多分支if语句 /switch语句 四种结构实现分段函数值的计算,(
9、1)三个if实现 #include void main() int x,y;printf(“enter x:n“);scanf(“%d“,()嵌套实现 #include void main() int x,y;printf(“enter x:n“);scanf(“%d“,(3)多分支if语句实现: #include void main() int x,y;printf(“enter x:n“);scanf(“%d“, ,(4)switch语句实现: #include void main() int x,y;printf(“enter x:n“);scanf(“%d“, ,练习3:使用嵌套的sw
10、itch语句, 将输入的三分制转换成百分制输出, 其规则如下所示,请认真分析输入数据以确定对应变量的类型:,#include void main() char c1,c2;c1=getchar();c2=getchar();switch(c1) case 3: switch(c2)case +: printf(“grade=100n“);break;case : printf(“grade=95n“);break;case -: printf(“grade=90n“);break;break;case 2: switch(c2)case +: printf(“grade=85n“);break
11、;case : printf(“grade=80n“);break;case -: printf(“grade=75n“);break;break;case 1: switch(c2)case +: printf(“grade=70n“);break;case : printf(“grade=65n“);break;case -: printf(“grade60n“);break;break;default: printf(“enter error!n“);,/*范例*/,二.分支语句之间的关系,1.两分支语句(if与if.else)之间的关系,ifelse语句: #include #incl
12、ude void main() float a,b,c,p,q,delta,x1,x2;printf(“enter a b c:n“);scanf(“%f %f %f“, ,简单if语句: #include #include void main() float a,b,c,p,q,delta,x1,x2;printf(“enter a b c:n“);scanf(“%f %f %f“, ,前提条件:delta=0,结论: 任何一个应用if.else的结构都可以无条件转换成两个简单if结构; 反之(在小范围内)亦然。,if.else.,求三个数最大值: #include void main()
13、int a,b,c,max;printf(“enter a b c:n“);scanf(“%d %d %d“, ,思考:这里的两个if.if.能不能转换成if.else形式?,前述结论对所有情况都适用吗?分析下面程序:,分析1:以3分支为例求解delta无特殊说明时的方程解。 画出两分支语句嵌套实现的各种算法的流程图(仅逻辑结构不同就有8种),3.思考:多分支if语句与嵌套实现的多分支有什么关系?,分析2:编写程序显示输入的某一级钳工的每小时报酬,共14个级别,报酬分别为5、10、20、50.,2.多分支结构程序编写的多样性,结论:多分支if语句是众多的嵌套方式实现多分支结构中一种形式的“异形
14、”。,参见示例,参见作业2,例8:将例5的switch语句改为多分支if语句实现,#include void main() char grade;scanf(“%c“, ,3.switch语句与多分支if语句的比较,#include void main() char grade;printf(“enter big char AE:n“);scanf(“%c“, ,(1)多分支if语句实现: #include void main() int x,y;printf(“enter x:n“);scanf(“%d“, ,例9 多分支if转换为switch语句,(2)#include void main
15、() int x,y;printf(“enter x:n“);scanf(“%d“, ,结论:switch语句与多分支if语句也是互为“异体”; 但各自有其处理方面的特长。,多分支实现:,(3)多分支if语句,(2)由两分支语句嵌套实现,(4)switch语句,本章总结:,(1)多个简单if,(5)上述四种语句互相嵌套实现,课后练习:将百分制转换以3分制输出,用四种结构来编写(多个if、两分支嵌套、多分支if语句、switch语句) (85100: A 7084: B 70分以下: C),(2)两分支嵌套实现多分支(之一) #include void main() int grade;scanf(“%d“, ,(1)多个简单if实现 #include void main() int grade;scanf(“%d“, ,(4)switch实现多分支 #include void main() int grade;scanf(“%d“, ,(3)多分支if实现多分支 #include void main() int grade;scanf(“%d“, ,谢谢观赏!,