C语言程序设计项目式教程:选择结构程序设计_第1页
C语言程序设计项目式教程:选择结构程序设计_第2页
C语言程序设计项目式教程:选择结构程序设计_第3页
C语言程序设计项目式教程:选择结构程序设计_第4页
C语言程序设计项目式教程:选择结构程序设计_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

选择结构程序设计第一讲if选择语句-单分支if语句C语言程序设计任务驱动式教程if选择语句多分支switch语句选择结构综合应用目录问题导入【问题】什么是选择结构?导航仪对公路上的汽车进行导航的过程中,要以“目的地”为条件选择相应的路线进行导航,这就是选择结构。问题导入用什么语句可以实现,下面这样的分支结构呢?if选择语句if选择语句——单分支if语句任务一(1)函数格式

if(表达式){语句组;}重要提示:面临的选择是要么执行,要么跳过。

“语句组”是一条独立的语句,“{}”可以省略;“语句组”为多条语句的复合语句,“{}”不能省略。此处不需要;语句后面;不能少请注意if选择语句——单分支if语句任务一

关于表达式

请注意(2)执行流程注:不局限于关系表达式,也可以是数值表达式,表达式的值为非0时,即为真。

示例1if(5+3)

……if(x>=85)

……if(x>0&&x<6)

……算术表达式关系表达式逻辑表达式if选择语句——单分支if语句的应用任务一根据天气情况,判断是否打伞去上学。请注意

应用1#include<stdio.h>intmain(){

charr;

scanf(“%c”,&r);

if(r==‘y’||r<=‘Y’)printf(“带好伞,去上学。”);

printf(“去上学。”);return0;}判断是否打伞去上学的表达式为:r==‘y’||r<=‘Y’if选择语句——单分支if语句的应用任务一输入一字母,无论该字母是大写还是小写,均以小写形式输出。

应用2if选择语句——单分支if语句的应用任务一输入一字母,无论该字母是大写还是小写,均以小写形式输出。请注意

应用2#include<stdio.h>intmain(){

charch;

ch=getchar();if(ch>=‘A’&&ch<=‘Z’)

ch=ch+32;

putchar(ch);

putchar(‘\n’);return0;}判断大写字母的表达式为:

ch>=‘A’&&ch<=‘Z’if选择语句——单分支if语句的应用任务一计算两个数的最大值——单分支if语句实现请注意

应用3开始输入a和ba>b?a<=b?输出max结束max=amax=b开始输入a和ba>b?a<=b?输出max结束max=amax=b是是否否if选择语句——单分支if语句的应用任务一计算两个数的最大值——单分支if语句实现请注意

应用3#include<stdio.h>intmain(){

inta,b,max;

printf("请输入a,b的值:\n");

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

if(a>b)max=a;

if(a<=b)max=b;printf("输出结果为:max=%d.\n",max);return0;}技能实训改写应用3的程序:输入两个整数,然后将这两个整数按照从大到小的顺序输出。——单分支if语句实现。参照下面的结果编写程序。练一练技能实训任务一#include<stdio.h>voidmain(){inta,b,t;printf("请输入a,b的值:");scanf("%d%d",&a,&b);

if(a<b){t=a;a=b;b=t;}printf("输出结果为:a=%d,b=%d.",a,b);}学习总结答一答任务一学习总结(1)if后面的表达式必须用圆括号括起来。(2)if后面的表达式可以为关系表达式、逻辑表达式、算术表达式等。例如:if(a>=1&&a<=10)printf("x=%d,y=%d",x,3*x-1);if(1)printf("OK!"); /*条件永远为真*/if(!a)printf("inputerror!");(3)表达式中一定要区分赋值运算符“=”和关系运算符“==”。例如,if(x==3)判断x的值是否等于3,而if(x=3)则是把3赋值给x,所以表达式的值为3(非0),即为真。感谢观看!选择结构程序设计第二讲if选择语句-双分支结构C语言程序设计任务驱动式教程if选择语句多分支switch语句选择结构综合应用目录问题导入小李,你的出租车如何计费?起步价7元(<=2公里),2公里以上部分每公里2元。if……else……

分析设x代表行驶的公里数,m代表费用7+2(x-2)7m=如何实现双分支结构呢?

出租车计费问题

if选择语句-双分支结构任务二请注意(1)语法格式(2)执行流程

if(表达式)

{语句组1;}else

{语句组2;}重要提示:面临的选择是在两个不同的操作中,选择其中的一个来执行。

If之后的小括号中必须有表达式,else之后不能有表达式。If…else…表达是是两种情况,实现两个分支。if选择语句-双分支结构任务二

关于表达式

请注意

示例1if(6)

……else……if(x<60)

……else……if(x<0||x>100)

……else……算术表达式关系表达式逻辑表达式写出输出x,y中较大数的语句。if(x>y)

printf(“%d\n”,x);elseprintf(“%d\n”,y);if选择语句-双分支结构的应用任务二出租车计费:起步价7元(<=2公里),2公里以上部分每公里2元。

应用1

分析设x代表行驶的公里数,m代表费用7+2(x-2)(x>2)7(x<=2)m=if选择语句-双分支结构的应用任务二出租车计费:起步价7元(<=2公里),2公里以上部分每公里2元。

应用1#include<stdio.h>intmain(){

floatx,m;

scanf(“%f”,&x);

if(x<=2)

m=7;

else

m=7+2*(x-2);printf(“%5.1f元。\n”,m);return0;}if选择语句-双分支结构的应用任务二

应用2输入一个正整数,判断该数是偶数,还是奇数。#include<stdio.h>voidmain(){

intx;printf("请输入一个正整数:");scanf("%d",&x);

if(x%2==0)printf("正整数%d是偶数。\n",x);

elseprintf("正整数%d是奇数。\n",x);}if选择语句——单分支if语句的应用任务一计算两个数的最大值——双分支if-else语句实现请注意

应用3开始输入a和ba>b?输出max结束max=amax=b开始输入a和ba>b?a<=b?输出max结束max=amax=b是是否否if选择语句——单分支if语句的应用任务一计算两个数的最大值——双分支if-else语句实现请注意

应用3#include<stdio.h>intmain(){inta,b,max;printf("请输入a,b的值:\n");scanf("%d%d",&a,&b);if(a>b)max=a;elsemax=b;printf("输出结果为:max=%d.\n",max); return0;}if(a>b)max=a;

if(a<=b)max=b;

if(a>b)max=a;

elsemax=b;if选择语句——单分支if语句的应用任务一计算两个数的最大值——双分支if-else语句实现请注意

应用3#include<stdio.h>intmain(){inta,b,max;printf("请输入a,b的值:\n");scanf("%d%d",&a,&b);if(a>b)max=a;elsemax=b;printf("输出结果为:max=%d.\n",max); return0;}表达式1?表达式2:表达式3max=a>b?a:bif选择语句——单分支if语句的应用任务一计算两个数的最大值——双分支if-else语句实现请注意

应用3#include<stdio.h>intmain(){inta,b,max;printf("请输入a,b的值:\n");scanf("%d%d",&a,&b);if(a>b)max=a;elsemax=b;printf("输出结果为:max=%d.\n",max); return0;}表达式1?表达式2:表达式3printf("输出结果为:max=%d.\n",

a>b?a:b);技能实训以下程序用于判断输入的字符是否为字母,补充完整,然后将程序改写成仅一对if-else的形式。练一练技能实训任务二charch;ch=getchar();

if(

)printf("%c是字母。",ch);

else

if(

)

printf("%c是字母。",ch);else

printf("%c不是字母。",ch);技能实训2.一个三角形的三边分别用a,b,c表示,输入三个边长a、b、c,判断该三角形是否为等腰三角形。练一练技能实训任务二#include<stdio.h>voidmain(){inta,b,c;printf("请输入三角形三边长:");scanf("%d%d%d",&a,&b,&c);if(a==b||b==c||a==c)printf("该三角形是等腰三角形.\n");elseprintf("该三角形不是等腰三角形.\n");}学习总结答一答任务二学习总结【问题1】if语句的双分支语法结构?【问题2】if-else语句是一个整体,属于同一个语句。需要注意的是,else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。感谢观看!选择结构程序设计第三讲if选择语句-多分支结构C语言程序设计任务驱动式教程if选择语句多分支switch语句选择结构综合应用目录问题导入if…else…if如何实现多分支结构呢?编程计算y的值求y=-1(x<0)0(x=0)1(x>0)if选择语句---多分支if-else-if语句任务三if-else-if语句,其一般形式如下:if(表达式1) 语句1elseif(表达式2) 语句2elseif(表达式3) 语句3…elseif(表达式n) 语句nelse 语句n+1编程时常常需要判定一系列的条件,一旦其中某一个条件为真就立刻停止。(1)语法格式if选择语句---多分支if-else-if语句形式任务三执行过程是:程序先判断表达式1的值,当其结果为“真”时,则执行语句1;否则判断表达式2的值,当其值为“真”时,则执行语句2;否则判断表达式3的值,当其值为“真”时,则执行语句3;否则接着进行判断,依此类推,直到找到结果为“真”的表达式,并执行与之相关的语句。如果经过判断,所有的表达式都为“假”,那么就执行最后一个else之后的语句。(2)执行流程if选择语句-多分支if-else-if语句形式任务三

应用1

#include<stdio.h>main(){intx,y;scanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);}输入:3输出:x=3,y=1输入:-4输出:x=-4,y=-1输入:0输出:x=0,y=0求y=-1(x<0)0(x=0)1(x>0)if选择语句-多分支if-else-if语句形式任务三

应用2体型判断:根据“体指数”,对体型进行划分:体指数t=体重w/(身高h)2

(w单位为千克,h单位为米)。当t<18时,为低体重;当t介于18和25之间时,为正常体重;当t介于25和27之间时,为超重体重;当t≥27时,为肥胖。编程从键盘输入体重w和身高h,根据给定公式计算体指数t,然后判断体型属于何种类型,并输出结果。问题分析本问题属于多分支选择结构,可以用if语句的第3种形式来表示。

问题:体型判断问题

if选择语句-多分支if-else-if语句形式任务三

应用2#include<stdio.h>intmain(){ doubleh,w,t; printf("请输入体重(千克),身高(米):");//在输入语句前加一条输入提示

scanf("%lf%lf",&w,&h); //输入双精度浮点型变量的值要用格式控制%lf t=w/(h*h); if(t<18)

printf(“t=%5.2f,体型为低体重\n”,t); //%5.2f表示输出的数据宽度为5位,小数占2位

elseif(t>=18&&t<25)

printf("t=%5.2f,体型为正常体重\n",t); elseif(t>=25&&t<27)

printf("t=%5.2f,体型为超重体重\n",t); else

printf("t=%5.2f,体型为肥胖体重\n",t); return0; }

问题:体型判断问题

技能实训1.编程:现有一分段函数,输入任意一个x值,输出对应的y值。练一练技能实训任务三y=x+3(x>3)x(x=3)x-3(x<3)技能实训1.编程:现有一分段函数,输入任意一个x值,输出对应的y值。练一练技能实训任务三y=x+3(x>3)x(x=3)x-3(x<3)#include“stdio.h”main(){intx,y;printf(“\n请输入x的值:”);

scanf(“%d”,&x);if(x<3)y=x+3;elseif(x==3)y=x;elsey=x-3;printf(“x=%d,y=%d”,x,y);}

学习总结答一答任务二学习总结【问题1】if语句的多分支语法结构?【问题2】在应用if-else-if多分支结构时,应注意每个else是和其前面最近的if配对使用的。一般来讲,中间的各个else不能省略,但最后一个else可以省略,这时表示当所有的表达式的值都为假时,执行该选择结构下面的语句。感谢观看!选择结构程序设计第四讲if选择语句-if语句的嵌套C语言程序设计任务驱动式教程if选择语句多分支switch语句选择结构综合应用目录问题导入如果输入的a、b、c值不能构成三角形呢?#include<stdio.h>voidmain(){inta,b,c;printf("请输入三角形三边长:");scanf("%d%d%d",&a,&b,&c);if(a==b||b==c||a==c)printf("该三角形是等腰三角形.\n");elseprintf("该三角形不是等腰三角形.\n");}一个三角形的三边分别用a,b,c表示,输入三个边长a、b、c,判断该三角形是否为等腰三角形。if选择语句-if语句的嵌套任务二(1)语法格式if(expr1)if(expr2)statement1elsestatement2内嵌ifif(expr1)if(expr2)statement1elsestatement3

内嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4内嵌ifif(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4内嵌if内嵌ifif选择语句-if语句的嵌套的应用任务二

应用1修改程序,输入三个边长a、b、c,如果这三个边能构成三角形,判断该三角形是等边三角形、等腰三角形,还是其它三角形。#include<stdio.h>voidmain(){inta,b,c;printf("请输入三角形三边长:");scanf("%d%d%d",&a,&b,&c);if(a>0&&b>0&&c>0&&a+b>c&&b+c>a&&a+c>b)//判断能否构成三角形

{if(a==b&&b==c)

printf("该三角形是等边三角形.\n");

else

if(a==b||b==c||a==c)

printf("该三角形是等腰三角形.\n");

else

printf("该三角形是其它三角形.\n");}else

printf("注意:不能构成合法三角形.\n");if选择语句-if语句的嵌套的应用任务二

应用1修改程序,输入三个边长a、b、c,如果这三个边能构成三角形,判断该三角形是等边三角形、等腰三角形,还是其它三角形。重要提示:

else总是和它前面离它最近的未配对的if相匹配。可以通过“{}”来强制if和else的配对关系。请注意程序运行情况如下(运行4次)请输入a,b,c的值:6,6,6↙

该三角形是等边三角形.请输入a,b,c的值:6,6,8↙

该三角形是等腰三角形.请输入a,b,c的值:6,7,8↙

该三角形是其它三角形.请输入a,b,c的值:2,3,6↙

注意:不能构成合法三角形.if选择语句-if语句的嵌套的应用任务二输入两数并判断其大小关系

应用2#include<stdio.h>voidmain(){intx,y;printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);if(x!=y){if(x>y)printf("X>Y\n");elseprintf("X<Y\n");}elseprintf("X==Y\n");}运行:Enterintegerx,y:12,23

X<Y

Enterintegerx,y:12,6

X>YEnterintegerx,y:12,12

X==Y程序1:if选择语句-if语句的嵌套的应用任务二输入两数并判断其大小关系

应用2运行:Enterintegerx,y:12,23

X<Y

Enterintegerx,y:12,6

X>YEnterintegerx,y:12,12

X==Y程序2:#include<stdio.h>voidmain(){intx,y;printf("Enterintegerx,y:");scanf("%d%d",&x,&y);if(x==y)printf("X==Y\n");else {if(x>y)printf("X>Y\n"); elseprintf("X<Y\n");}}if选择语句-if语句的嵌套的应用任务二

应用3有如下一个函数:

编写一程序,实现输入x值,输出y值。if选择语句-if语句的嵌套的应用任务二

应用3有如下一个函数:

编写一程序,实现输入x值,输出y值。#include<stdio.h>

voidmain(){floatx,y;printf("Pleaseinputx:");scanf("%f",&x);

if(x<1)y=x;

else{if(x<10)

y=2*x-1;else

y=3*x-5;}printf("y=%f\n",y);}if选择语句-if语句的嵌套的应用任务二

应用4编程实现:根据性别sex和身高tall给某数据分类,如果sex为‘F’,当tall>=150时,输出A,否则输出B;若sex不为‘F’,当tall>=172时,输出A,否则输出B。程序的运行结果如图所示。#include"stdio.h"voidmain(){inttall;

charsex;printf("请输入性别和身高:");scanf("%c%d",&sex,&tall);

if

(sex=='F')

{if(tall>=150)printf("\tA\n");

else

printf("\tB\n");}

else

{if(tall>=172)printf("\tA\n");

elseprintf("\tB\n");}}技能实训实现英寸与厘米的换算:设置一个变量flag,用于选择换算的方向,flag的值为1表示英寸换算成厘米,flag的值为2表示厘米换算成英寸。1英寸=2.54*厘米请参照如下运行结果,编写程序。练一练技能实训任务二技能实训任务二程序:实现英寸与厘米的换算#include"stdio.h"voidmain(){floaty,r=2.54;intflag;printf("请输入要换算的数据和换算的方式(1.英寸→厘米,2.厘米→英寸):\n");scanf("%f%d",&y,&flag);if(flag==2||flag==1){if(flag==1)printf("%8.2f英寸=%8.2f厘米\n",y,y*r);elseprintf("%8.2f厘米=%8.2f英寸\n",y,y/r);}else{printf("数据错误!\n");}}学习总结答一答任务二学习总结一个if语句又包含一个或多个if语句称为if语句的嵌套。嵌套if语句使用非常灵活,任何if语句都可以嵌套;被嵌套的if语句本身又可以是一个嵌套的if语句;在多种嵌套的if语句中,else总是与离它最近并且没有配对的if配对。感谢观看!选择结构程序设计第五讲多分支switch语句C语言程序设计任务驱动式教程if选择语句多分支switch语句选择结构综合应用目录问题导入这是一简单计算器,它可实现“+、-、*、/”四项功能。除了if语句还有其他语句可以实现多分支结构吗?if选择语句-

多分支switch语句任务五请注意switch(表达式){case

常量表达式1:[语句序列1;][break;]

case

常量表达式2:[语句序列2;][break;]

……

case

常量表达式n:[语句序列n;][break;]

default:语句序列n+1;}方括号括起来的可省退出当前switch语句整型或字符型整型或字符型,常量值不能重复(1)语法格式if选择语句-多分支switch语句任务五(2)执行流程if选择语句-

多分支switch语句任务五(3)执行流程首先计算switch后面表达式的值,再依次与每一个case后面的常量表达式的值进行比较,若有相等的情况,则以该case为入口,执行相应的语句序列。若相应的语句序列后面有break,则程序跳出switch选择结构,执行switch选择结构后面的语句;若相应的语句序列后面没有break,则执行下一个case后面的语句序列。若所有case后面的常量表达式的值没有与switch后面表达式的值相等的情况,则执行default后面的语句序列。if选择语句-多分支switch语句任务五switch后的“表达式”只能是整形表达式或字符型表达式。

说明2intx=6;

switch(x)charm=‘a’;

switch(m)整形表达式字符型表达式case后的常量表达式只起到标号作用,找到匹配的入口。intx=3;

switch(x-1){case2:……case3:…………}x-1与2相匹配

说明1if选择语句-多分支switch语句任务五

说明3case后有多条语句时,可以省略大括号{}

intx=3;

switch(x-1){case2:y=sqrt(3+z);printf(“%d\n”,y);break;……}多条语句,省略{}

说明4case后无“break;“语句,程序将继续执行。……scanf("%c",&ch);

switch(ch){case‘A’:printf(“成绩>=90\n”);case‘C’:printf(“成绩>=60\n”);……}if选择语句-多分支switch语句任务五

说明5

说明6case后有“break;“语句,程序跳出switch语句。……scanf("%c",&ch);

switch(ch){case‘A’:printf(“成绩>=90\n”);break;case‘C’:printf(“成绩>=60\n”);break;……}各case语句先后顺序,不影响程序的执行结果。……scanf("%c",&ch);

switch(ch){case‘C’:printf(“成绩>=60\n”);break;

case‘A’:printf(“成绩>=90\n”);break;……}if选择语句-多分支switch语句任务五

说明7多个case语句共用一组语句。……scanf("%d",&month);

switch(month){case1:

case2:case3:printf(“春季\n”);break;……}month与1、2、3相匹配时,都输出“春季”if选择语句-多分支switch语句任务五

应用1利用switch编程,实现“+、-、*、/”简单计算器。switch(表达式)中的“表达式”

如何设计?设char型变量op代表不同的运算,根据op的不同值形成多分支。如:switch(op

)case后的“常量表达式”

如何表示?

常量表达式可用‘+’、‘-’、‘*’、‘/’表示

如:case‘+’:

case‘-’:【提示】if选择语句-多分支switch语句任务五

应用1利用switch编程,实现“+、-、*、/”简单计算器。#include<stdio.h>voidmain(){

floatx,y;

charop;printf("请输入运算式,如:1.6-0.3:");scanf("%f%c%f",&x,&op,&y);

switch(op){case'+':printf("%0.1f+%0.1f=%0.1f\n",x,y,x+y);break;

case'-':printf("%0.1f-%0.1f=%0.1f\n",x,y,x+y);break;

case'*':printf("%0.1f*%0.1f=%0.1f\n",x,y,x+y);break;case'/':printf("%0.1f/%0.1f=%0.1f\n",x,y,x+y);break;

default:printf("error!\n");}}if选择语句-多分支switch语句任务五

应用2根据学生考试成绩score的值判定考试等级。判定标准如下表所示。成绩(score)等级score>=90优秀(A级)80<=score<90良好(B级)70<=score<80中等(C级)60<=score<70及格(D级)score<60不及格(E级)if选择语句-多分支switch语句任务五

应用2根据学生考试成绩score的值判定考试等级。判定标准如下表所示。#include<stdio.h>voidmain(){doublescore;printf("请输入学生成绩:");scanf("%lf",&score);

switch((int)(score/10))//分析switch后面的表达式为什么写成(int)(score/10)?{case10:

case

9:printf("该生的成绩等级为A-优秀.");break;

case

8:printf("该生的成绩等级为B-良好.");break;

case

7:printf("该生的成绩等级为C-中等.");break;

case

6:printf("该生的成绩等级为D-及格.");break;

default:printf("该生的成绩等级为E-不及格.");}}程序运行结果思考:将程序代码中的break去掉,会得到怎样的运行结果,试分析其原因。技能实训利用switch编程,实现从键盘输入1-7之间的数字时,显示对应的星期几的英文单词。当输入数字不在1-7范围内时,输出“error!”练一练技能实训任务五技能实训任务五 switch(x) { case1:printf("Monday\n");break; case2:printf("Tuesday\n");break; case3:printf("Wednesday\n");break; case4:printf("Thursday\n");break; case5:printf("Friday\n");break; case6:printf("Saturday\n");break; case7:printf("Sunday\n");break; }else printf("error!\n");}#include<stdio.h>voidmain(){ intx; printf("inputx:"); scanf("%d",&x); if(x>=1&&x<=7)技能实训任务五#include<stdio.h>voidmain(){ intx; printf("inputx:"); scanf("%d",&x); if(x<1||x>7) printf("error!\n"); else switch(x) { case1:printf("Monday\n");break; case2:printf("Tuesday\n");break; case3:printf("Wednesday\n");break; case4:printf("Thursday\n");break; case5:printf("Friday\n");break; case6:printf("Saturday\n");break; case7:printf("Sunday\n");break; } }技能实训2.请将简单的计算器程序改写为带有菜单设计的计算器。运行结果如下:练一练技能实训任务五技能实训任务五switch(ch) {

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论