分支程序设计.docx

上传人:b****5 文档编号:8293584 上传时间:2023-01-30 格式:DOCX 页数:15 大小:40.73KB
下载 相关 举报
分支程序设计.docx_第1页
第1页 / 共15页
分支程序设计.docx_第2页
第2页 / 共15页
分支程序设计.docx_第3页
第3页 / 共15页
分支程序设计.docx_第4页
第4页 / 共15页
分支程序设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

分支程序设计.docx

《分支程序设计.docx》由会员分享,可在线阅读,更多相关《分支程序设计.docx(15页珍藏版)》请在冰豆网上搜索。

分支程序设计.docx

分支程序设计

编号:

GXJG/JX-JL-12(08)保存期限:

三年

教案审批表

C语言程序设计

第三章分支程序设计

3.1条件语句

审批签字

授课时数

2

授课方法

多媒体讲授

授课时间

授课班级

12电子

教学目的

知识目标:

掌握if语句的格式及使用,掌握条件运算符的格式及使用。

能力目标:

熟练使用if语句。

情感目标:

培养学生的逻辑思维,提高学生知识应用能力。

教学重点

和难点

重点:

if语句的格式及使用,条件运算符的格式及使用。

难点:

条件运算符。

复习提问

C语言有哪些运算符?

教具

多媒体课件

课外作业

教学内容、方法和过程

附记

一、组织教学:

点名。

二、前课复习:

运算符,顺序结构程序设计。

三、新课导入:

讲解分支语句。

四、新课讲解:

见附页

五、总结回顾:

见附页

课题名称:

3.1条件语句

教学目标:

(1)知识目标:

掌握if语句的格式及使用,掌握条件运算符的格式及使用;

(2)能力目标:

熟练使用if语句;

(3)情感目标:

培养学生的逻辑思维,提高学生知识应用能力。

教学分析与准备:

1.教学重点

if语句的格式及使用,条件运算符的格式及使用。

2.教学难点

条件运算符。

3.教学策略

通过对比,讨论启发学生对if语句的认识,结合具体实例分析加深学生对if语句的认识。

4.课时安排

2课时(45分钟×2)

5.教学环境

多媒体教室

学习过程:

分支程序往往需要一个关系表达式或者逻辑表达式作为判决的条件。

根据其值是真还是假来决定执行相应的语句。

3.1.1if语句

if语句在C语言里有两种基本形式:

(1)if(条件)语句;

(2)if(条件)语句1;

else语句2;

无论是哪种形式的if语句,都要首先判断()内表达式的值,若为真(不为0),执行()后的语句(第

(2)种形式为语句1);若为假(为0)则执行()后面语句之后的语句(第

(2)种形式为else后的语句2)。

图7-1为这两种形式的程序框图。

 

图7-1两种if语句的程序框图

注意,这两种形式if后的“条件”大多是逻辑表达式或关系表达式,根据是0还是非0执行“假”或“真”的处理。

此外,语句之后一定有分号(;),它是语句的组成部分,不能省略(尤其是else前的分号)。

同时,若if和else后有多个语句,可以用{}形成复合语句。

例3-1输入两个实数,按代数值由小到大次序输出这两个数。

main()

{floata,b,x;

printf("Pleaseinputa,b:

\n");

scanf("%f,%f”,&a,&b);

if(a>b)

{x=a;a=b;b=x;}

printf("%f,%f\n",a,b);

}

运行情况如下:

4.5,2.8↙

2.8,4.5

if条件后面是复合语句,完成两个变量的交换,不能用a=b,b=a;来进行交换,常用第三个变量来暂存变量值。

例3-2若上例改为由大到小次序。

main()

{floata,b,x;

printf("Pleaseinputa,b:

\n");

scanf("%f,%f”,&a,&b);

if(a

{x=a;a=b;b=x;}

printf("%f,%f\n",a,b);

}

运行情况如下:

4.5,2.8↙

4.5,2.8

例3-3输入三个实数,求最大者,赋给变量max。

main()

{floata,b,c,max;

priintf("Pleaseinputa,b,c:

\n");

scanf("%f,%f,%f",&a,&b,&c)

max=a;

if(b>max)max=b;

if(c>max)max=c;

prinf("%5.2f\n",max);

}

运行情况如下:

pleaseinputa,b,c;

5.5,8,6.3↙

max=8.00

本例使用两个个if语句,以依次比较出最大者。

3.1.2if语句嵌套

一个if语句可以包含另一个或多个if语句称为语句配套,注意e1se总是与它最近的一个if配套,这一点与Pascal语言相同。

if(条件)

内嵌if

if(条件)语句1

else语句2

else

内嵌if

if(条件)语句3

else语句4

请注意以下两个语句的差别:

(1)if(条件1)

if(条件2)语句1

else语句2

(2)if(条件1)

{if(条件2)语句1}

else语句2

(1)个语句中else后面语句2与条件2有关,在条件1成立的情况下,条件2不成立就执行语句2,当条件1不成立时,语句1及语句2都不执行;第

(2)个语句指条件1和条件2均成立时,执行语句1,若条件1不成立就执行语句2,即语句2的执行与否同条件2无关。

例3-4以下程序输入一个x值,输出y值。

 

试判定下列程序段正确与否。

(1)main()

{intx,y;

scanf("%d",&x);

if(x<0)y=1

if(x=0)y=0

if(x>0)y=-1

printf("x=%d,y=%d\n",x,y);

}

说明;该程序使用三个if语句,对y赋值,因为x取值只能使三个证语句中的一个条件为真,因此y只进行一次赋值,本程序是正确的。

(2)main()

{intx,y;

scanf("%d",&x);

y=1;

if(x!

=0)

if(x>0)y=-1;

elsey=0;

printf("x=%d,y=%d\n",x,y);

}

说明:

该程序中if(x!

=0)中内嵌一个if(x>0)语句,当输入x=0时,y值为1,显然与原意不符,程序有错,如果花括号把if(x>0)y=1;括起来,那么else就与if(x!

=0)匹配,这样当x=0时执行y=0;语句,程序就可以运行正确。

(3)main()

{intx,y;

scanf("%d",&x);

y=0;

if(x>=0)

if(x>0)y=-1;

elsey=1;

printf("x=%d,y=%d\n",x,y);

}

说明:

该程序当x<0时,输出y=0,显示与原意不同,其原因与上述相同,为更正它,也只需用花括号把if(x>0)y=1;括起来。

3.1.3条件运算符的作用

C语言中if(a

elsemin=b;

可简写为:

min=(a

a;b;

条件运算符的功能曾在第二章提到,它需要三个操作时象,是C语言唯一的三目运算符。

下面进一步可以说明,

(1)注意执行的顺序“el?

e2:

e3”中先执行表达式e1,若为非零(真)求解表达式e2,并把e2值作为整个表达式的值;若e1值为零(假)求解表达式e3,并把e3值作为整个表达式的值,在min=(a

a:

b;中把a、b中小的值赋于min。

(2)条件运算符优先于赋值运算符,即先求解后赋值,但条件运算符优先级又低于关系运算符和算术运算符,因此min=(a

a:

b;中括号可以省略,写成min=a

a:

b;

例如:

a>b?

a:

b+1

相当于a>b?

a:

(b+1);

不相当于(a>b?

a:

b)+1

(3)条件运算符是“自右向左”结合的。

例如:

若a=1,b=3,c=5,d=7,那么:

a>b?

a:

c>d?

c:

d;

相当于a>b?

a:

(c>d?

c:

d);该语句执行后,表达式值为7。

(4)条件表达式不能取代一般的if语句,只有if语句中内嵌语句为赋值语句且赋予同一变量时才能取代。

例如:

if(x>y)printf("%d",a)

elseprintf("%d",b);

不能用一个条件表达式替代,但可用以下语句代替:

printf("%d",x>y?

a:

b);

(5)el、e2、e3三个表达式类型可以不同,当e2、e3类型不同时自动进行类型转换。

例如:

x>y?

1.2:

2

若x>y表达式值为1.2,否则为2.0(整型→实型)。

课堂小结:

If语句,条件运算符。

编号:

GXJG/JX-JL-12(08)保存期限:

三年

教案审批表

C语言程序设计

第三章分支程序设计

3.2多分支语句

3.3分支程序设计实例

审批签字

授课时数

2

授课方法

多媒体讲授

授课时间

授课班级

12电子

教学目的

知识目标:

掌握switch语句格式及使用,掌握分支程序设计方法。

能力目标:

熟练分支程序设计。

情感目标:

培养学生的逻辑思维,提高学生分析问题解决问题的能力。

教学重点

和难点

重点:

switch语句的格式及作用,分支程序设计方法。

难点:

switch语句的执行过程。

复习提问

If语句怎么执行?

教具

多媒体课件

课外作业

教学内容、方法和过程

附记

一、组织教学:

点名。

二、前课复习:

if语句。

三、新课导入:

结合实际问题,讲解多分支语句的必要性。

四、新课讲解:

见附页

五、总结回顾:

见附页

课题名称:

3.2多分支语句

3.3分支程序设计实例

教学目标:

(1)知识目标:

掌握switch语句格式及使用,掌握分支程序设计方法;

(2)能力目标:

熟练分支程序设计;

(3)情感目标:

培养学生的逻辑思维,提高学生分析问题解决问题的能力。

教学分析与准备:

1.教学重点

switch语句的格式及作用,分支程序设计方法。

2.教学难点

switch语句的执行过程。

3.教学策略

通过对比,结合具体实例分析加深学生对switch语句的认识,通过实际操作进一步熟悉switch语句的使用。

4.课时安排

2课时(45分钟×2)

5.教学环境

多媒体教室

学习过程:

3.2Switch语句

if语句只有两个分支供选择,当有多个分支时应该使用嵌套if语句,但嵌套层次一多时,程序结构复杂,阅读和修改比较困难,C语句中提供多分支选择语句switch语句来解决多分支选择问题。

日常生活中,往往会遇到“分类”问题,例如学生成绩分类(90分及以上为'A'等,80~89分为'B'等,70~79分为'C'等,……)、人口统计分类(按年龄分为老年、中年、青年、少年,儿童……)、工资统计分类、银行存款分类等。

这些问题可用switch语句来解决。

switch语句的一般形式为:

switch(表达式)

{case常量1:

语句系列1;break;

case常量2:

语句系列2;break;

case常量3:

语句系列3;break;

default:

语句系列n+1;

}

switch语句执行流程是:

先计算“表达式”的值,然后顺序地与后面case子句中列出的各个常量相比较,若表达式值等于常量i则执行相应的“语句序列i”,再执行break语句跳出switch子句,若“表达式”值与case子句后所有常量都不相等,且有default子句,那么执行“语句序列n+1,如果没有default子句,则直接跳出switch语句。

使用switch语句应注意以下问题:

(1)switch语句和if语句不同,它只能判断一种逻辑关系,即表达式值是否等于指定的常量,而if语句可以计算并判断各种表达式。

(2)case子句后的常量可以是整型、字符型、枚举型数据或者是整型表达式,但不允许是变量,即允许是与switch后表达式类型一致的常量。

(3)同一个switch中case后的常量不能相同,但在相互嵌套的不同层次switch之间允许有相同的常量。

(4)default子句可以省略。

(5)case和defaulf后的“语句序列”允许由多个语句构成并且不必(也可)用花括号括起

来。

(6)case及defaulf语句出现的次序是任意的,可以变换位置,并不影响switch功能。

(7)多个case可共用一组执行语句,例如:

case'A':

case'B':

case'C':

prinf(">60\n");break;

当表达式值为'A'、'B'或'C'时都执行printf语句。

(8)switch语句中break语句作用是重要的,它保证语句序列执行结束后跳出switch语句,否则会执行下一个语句序列,当然最后一个语句后的break可以省略。

例如:

switch(grade)

{case'A':

printf"90-100\n"};

case'B':

printf("80-89\n");

case'C':

printf("70-89\n");

case'D':

printf("60—69\n");

case'E':

printf("<60\n");

default:

printf("error!

!

\n");

}

当grade='C'时,执行此switch语句,将输出:

70-79

60-69

<60

error!

!

因此在每个case后都应该用break跳出switch语句。

goto语句

goto语句是无条件语句,转向带有标号的语句行去执行,所谓标号同变量一样,用标识符来表示,只是其后加有冒号(:

)而已,标号加到goto语句转去执行的语句前面。

goto语句一般形式是:

goto标号;

使用goto语句应该注意三个问题:

(1)goto语句中有标号的必须是本函数段内已存在的合法标号。

(2)不能从switch或循环体外面转移到循环体或switch语句中。

(3)goto语句仅在函数内有效,不能在不同函数之间使用goto语句。

例如:

用if及goto语句计算

main()

{inti,sum=0;

i=1;

loop:

if(i<=100)

{sum=sum+i;i++;gotoloop;}

printf("sum=%d",sum)

}

运行结果:

sum=5050。

 

3.4分支程序设计实例

例3-5给出一个不多于3位的正整数,要求:

(1)求出它是几位数;

(2)

(2)分别打印每一位数字;

(3)(3)按逆序输出该数(例如原数为421,输出为124)。

分析:

假定3位数n=n3n2n1,其中i(i=1~3)为n中相应数位,即

n=n3×102+n2×101+n1×100

本题关键是如何从n中把ni分解出来,可以用整除的方法来解决此问题。

例如:

n3=n/100,n2=n/100-n3*10…,获得各个ni后,n又可作为输入数据的位数标志(n=1~3)。

程序:

main()

{intn,n3,n2,n1;

printf("pleaseinputn:

");

scanf("%d",&n);

n3=n/100;

n2=n/10-n3*10;

n1=n%10;

n=3;

if(n3==0)n=2;

if((n3==0)&&(n2==0))n=1;

printf("\nThisnumberis%ddigits\n",n);

printf("Thisnumber’sdigitsare;\n");

switch(n)

{case3:

pintf("%d,%d,%d",n3,n2,n2);break;

case2:

printf("%d,%d",n2,n1);break;

casel:

printf("%d",n1);

}

printf("\n\nThisoppositeordernumberis:

\n”);

printf("%d\n",n1*100+n2*10+n3);

}

运行情况:

pleaseinputn:

248↙

Thisnumberis3digits

Thisnumber'sdigitsare:

2,4,8

Thisoppositeordernumberis842

 

例3-6已知银行存款利率如下(年利率):

 

要求:

输入存款本金和期限,求到期时能得到的利息和本金总计。

分析:

活期存款利息公式是:

利息=本金×活期年利率×存款年限。

定期存款利息公式是:

利息=本金×存款年限×定期年利率。

计算出利息后再与本金相加为本利总计,我的可以定义本金为meney,年利率为rate,存取年限为year,本利总计为total。

既可以用嵌套的if语句,也可用switch语句来完成上述功能。

程序1:

#include〈stdio.h〉

main()

{floatyear,money,rate,totol;

printf("Inputmoney&year=?

\n");

scanf("%f,%f,&money,&year);

if(year>=5)

rate=0.0541;

elseif(year>=3)

rate=0.0433;

elseif(year>=1)

rate=0.0392;

elseif(year>=0)

rate=0.023;

else

rate=0;

total=money+money*rate*year;

printf("Total=%.2f\n",total);

}

说明:

为简化问题,认为超过年限部分的利息按照原年限计息而不是按活期计息。

程序2:

#include〈stdio.h〉

main()

{floatyear,money,rate,total;

printf("Inputmoney&year=?

\n");

scanf("%f,%f",&money,&year);

if(year<=0)

rate=0;

elseswith((int)year)

{case4:

case3:

rate=0.0433;break;

case2:

case1:

rate=0.0392;break;

case0:

rate=0.023;break;

default:

rate=0.0541;

}

total=money+money*rate*year;

printf(”Total=%.2f\n",total);

说明:

(int)year强制把实型转变为整型,当(int)year大于等于5时,均按5年计算利率,程序中要用default实现。

例3-7输入两个整数及一个字符操作符+、-、*、/分别对两数进行相应运算。

分析:

根据输入的字符ch为'+'、'='、'*'、'/'时,分别计算,因此可以采用:

switch语句。

程序:

main()

{inta,b;

charch;

printf("输人整数a和b及操作符ch:

\n");

scanf("%d,%d,%c",&a,&b,&ch);

switch(ch)

{case'+':

printf("%d+%d=%d\n",a,b,a+b);

break;

case'-':

prinf("%d-%d=%d\n",a,b,a-b);

break;

case'*':

printf("%d*%d=%d\n",a,b,a*b);

break;

case'/':

printf("%d/%d=%f\n",a,b,a/b);

break:

}

课堂小节:

多分枝语句,分支结构程序设计。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1