版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章〓分支结构3.1〓知识要点回顾顺序结构的程序虽然能解决计算、输出等问题,但不能进行判断再选择。对于要先进行判断再选择的问题就要使用分支结构。本章主要掌握的知识要点:(1)if语句的三种形式。(2)if语句的嵌套。(3)switch语句。3.1.1〓if语句的三种形式用if语句可以构成分支结构。它根据给定的条件进行判断,以决定执行某个分支程序段。C语言的if语句有三种基本形式。1.If…else语句if(表达式) {〓复合语句1}else{〓复合语句2}其语义是:如果表达式的值为真,则执行复合语句1,否则执行复合语句2。其执行过程如图3-1所示。图3-1〓程序执行过程说明:(1)if和else是C语言的关键字。if后面的括号是必不可少的,但else后面不能加表达式,else(表达式)这种写法是错误的。(2)if(表达式)中的表达式通常是逻辑表达式或关系表达式,也可以是其他表达式,如赋值表达式等,甚至也可以是一个变量。例如,if(a=5)和if(b)都是允许的。if(a=5)中表达式的值(5)永远非0,所以其后的语句总是执行的。当然这种情况在程序中不一定会出现,但在语法上是合法的。if(b)等价于if(b!=0)表示只有当b的值不是零时,才能执行后面的语句。注意区别if(x==0)和if(x=0)。if(x==0)中表达式是进行比较,其值要么是1(x是0),要么是0(x不是0)。if(x=0)中表达式是进行赋值,其值为0。(3)else不是一条独立的语句,它只是语句的一部分。在程序中else必须与if配对,共同组成一条if…else语句。(4)复合语句中如是有多个语句花括号不能省,要注意的是在}之后不能加分号;若只有一条语句可省略花括号。2.省略else的if语句if(表达式){〓复合语句}其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程如图3-2所示。图3-2〓程序流程当条件较多时,可以用多个省略了else的if语句,格式如下:if(表达式1){〓复合语句1}if(表达式2){〓复合语句2}……if(表达式n){〓复合语句n}此处不管if表达式是真还是假,都会判断下一个if表达式。如果是真就执行复合语句,然后判断下一个if表达式;如果是假,直接判断下一个if表达式。n个if语句要判断n次。3.增加elseif语句前两种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:if(表达式1){复合语句1}elseif(表达式2){复合语句2}……elseif(表达式m){复合语句m}else{复合语句n}其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句,然后跳到整个if语句之外继续执行程序;如果所有的表达式均为假,则执行语句n,然后继续执行后续程序。即只要找到一个表达式的值为非0,就结束判断。3.1.2〓if语句的嵌套当if语句中的执行语句又是if语句时,即构成了if语句嵌套的情形。其一般形式可表示如下:1.在if子句中嵌套if(表达式1)〓if(表达式2)〓〓{复合语句1}〓else〓〓{复合语句2}else〓{复合语句3}2.在else子句中嵌套if(表达式1)〓{复合语句1}else〓if(表达式2)〓〓{复合语句2}〓else〓〓{复合语句3}说明:在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。为了避免这种二义性,C语言规定,else总是与它前面最近的if配对。3.1.3〓switch语句switch语句实际上是if-else语句的变形。在某些情况下,使用switch语句要比if语句更简洁、易读。switch语句的一般形式为:switch(表达式){〓case常量表达式1:语句1;break;〓case常量表达式2:语句2;break;〓……〓case常量表达式n:语句n;break;〓default:语句n+1;break;}其语义是:计算switch(表达式) 中表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如果表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。要注意的是,如果程序执行的过程中遇见break语句,则跳出整个switch语句。说明:(1)switch(表达式) 中表达式的值一般为整型、字符型、枚举型。(2)关键字case与常量表达式之间一定要有空格。(3)每个case后的常量表达式的值不能相同,否则会出现错误。(4)在case后允许有多个语句,可以不用{}括起来。(5)各个case和default的出现的次序无关,default可以出现在任何位置。(6)必要时case语句标号后的语句可以省略不写。default子句也可以省略。(7)使用break语句跳出switch语句体。3.1.4〓常见错误举例1.在关系表达式中误用=表示==C语言中用两个连续的赋值符表示“相等”关系运算符。如果将=当作==,通常不会有语法错误,但却隐含着不易发现的逻辑错误。正确错误if(a==b)printf("a和b相等");if(a=b)printf("a和b相等");2.if语句后多了分号(;)仔细比较下面两个程序段,左边的程序段只有一条语句,而右边的程序段却包含两条C语句,一条是if语句,另一条是赋值语句,并且if语句中的程序段是条空语句。正确错误if(a>b)〓max=a;……if(a>b);//分号代表空语句〓max=a;//独立于语句的赋值语句……3.case子句后面的程序段中漏掉了break仔细比较下面两段程序,左边的程序正常,右边的程序异常,因为case子句的后面漏掉了break。正确错误ch=getchar();switch(ch){〓case'Y':printf("Yes\n");break;〓case'N':printf("No\n");break;……}ch=getchar();switch(ch){〓case'Y':printf("Yes\n");//漏掉了break〓case'N':printf("No\n");//漏掉了break……}4.复合语句漏掉了{}将下面左边的程序写成右边的形式,将犯逻辑错误。正确错误if(a>b){〓t=a;〓a=b;〓b=t;}//交换a和b两个数if(a>b)〓t=a;//是if的子句〓a=b;//独立于if语句的赋值语句〓b=t;5.表达式中()不配对,复合语句中的{}不配对下面的程序段中,左边是正确的,右边的有语法错误。正确错误if(a<c||(a>b&&b>c))if(a<c||(a>b&&b>c)//少了一个“)”对于程序员来说,养成一些必要的编程习惯对避免上述错误是有帮助的:当遇到判断两个数是否相等的关系表达式时,将常量或表达式写在==的左边是一个好习惯。如下面的程序中,左边的程序要比右边的程序更不易范逻辑错误。因为像左边那样写的程序,如果将==误输入为=了,编译器会报错。if(3==a)〓a=0;else〓a++;if(a==3)〓a=0;else〓a++;if(b+3==a)〓a=b;else〓a++;if(a==b+3)〓a=b;else〓a++;在书写if语句以及下一章介绍的while语句、do-while语句和for语句时,即使程序段中只有一条语句,也要将这条语句用{}括起来。这样做不但程序阅读起来逻辑鲜明,而且当需要向程序段增加语句时,也不用担心漏掉{}而造成程序出现错误。要输入符号对,在使用if语句、while语句、do-while语句和for语句时,需要输入大量的()、{}符号对,先输入符号对,再在其中插入内容,将会有效避免()、{}不配对的问题。从书写清晰,便于阅读、理解、维护的角度出发,在书写程序时应遵循以下规则:①一个说明或一个语句占一行。②用{}括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对齐,并单独占一行。③低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰,增加程序的可读性。
3.2〓实训内容实验一〓验证性实验一、实验目的(1)验证教材中典型例题。(2)理解和掌握分支结构程序设计的方法。(3)理解和掌握if语句的三种基本形式执行的流程。(4)掌握switch语句的使用方法。(5)掌握if语句嵌套。二、实验设备和仪器(1)IBMPC或兼容计算机。(2)Windows9x/2000/XP操作系统。(3)VisualC++6.0。三、实验内容(一)调试程序11.实验要求用户输入一个小写字母,如输入a,则显示b,输入b则显c,以此类推,输入z则显示a。2.程序代码prog1.c#include<stdio.h>main(){〓charch;〓scanf("%c",&ch);〓if(ch>='a'&&ch<='y')〓〓ch=ch+1;〓else〓〓ch='a';〓printf("%c\n",ch);}3.实验步骤步骤一:在D盘的根目录中创建一个以你的学号命名的文件夹,如D:\200710003。步骤二:打开“MicrosoftVisualC++”软件,新建prog1.c文件,并输入程序代码,如图3-3所示。图3-3〓新建文件并输入程序代码步骤三:选择“编译”菜单命令对程序进行编译,如图3-4所示。图3-4〓编译程序步骤四:若有错误需要重新检查;若编译没有错误,可以执行程序。此时,输入字符a,输出结果如图3-5所示。图3-5〓程序运行结果1按任意键关闭当前窗口。再次输入字符z,输出结果如图3-6所示。图3-6〓程序运行结果2按任意键关闭当前窗口,保存后关闭prog1.c文件。(二)调试程序21.实验要求从键盘输入x的值,根据下面表达式,计算并输出y的值。x2(x<0)y=0(x=0)2x(x>0)2.程序代码prog2.c(注意:源代码中//后面的内容是注释,学生不需要写)#include<stdio.h>main(){〓floatx,y;〓scanf("%f",&x);〓if(x<0)〓〓y=x*x;〓elseif(x==0)//注意表达式x==0,而不是x=0〓〓y=0;〓else〓〓y=2*x;//注意是2*x,而不是2x〓printf("y=%f",y);}3.实验步骤步骤一:打开“MicrosoftVisualC++”软件,新建prog2.c文件,并输入程序代码,如图3-7所示。图3-7〓新建文件并输入程序代码步骤二:选择“编译”菜单命令对程序进行编译,如图3-8所示。图3-8〓编译程序步骤三:若编译有错误需要重新检查;若编译没有错误,可以执行程序。此时,输入实数-2.5,输出结果如图3-9所示。图3-9〓程序运行结果1步骤四:按任意键关闭当前窗口。再次输入0,输出结果如图3-10所示。图3-10〓程序运行结果2步骤五:按任意键关闭当前窗口。再次输入3,输出结果如图3-11所示。图3-11〓程序运行结果3按任意键关闭当前窗口,保存后关闭prog2.c文件。(三)调试程序31.实验要求用switch语句实现按考试成绩的等级,输出百分制成绩。等级与百分制之间的关系如表3-1所示。表3-1〓等级与百分制的关系等级百分制A90-100B80-89C60-79D<602.程序代prog3.c#include<stdio.h>main(){〓chargrade;〓scanf("%c",&ch);〓switch(grade)〓{ 〓〓case'A':printf("85~100");break;//case和'A'之间应键入一个空格〓〓case'B':printf("70~84");break;〓〓case'C':printf("60~69");break;〓〓case'D':printf("<60");break;〓〓default:printf("error");〓}}3.实验步骤步骤一:打开“MicrosoftVisualC++”软件,新建prog3.c文件,并输入程序代码,如图3-12所示。图3-12〓新建文件并输入程序代码步骤二:选择“编译”菜单命令对程序进行编译,如图3-13所示。图3-13〓编译程序步骤三:若编译有错误需要重新检查;若编译没有错误,可以执行程序。此时,输入大写字母A,输出结果如图3-14所示。图3-14〓程序运行结果1步骤四:按任意键关闭当前窗口。再次输入大写字母E,输出结果如图3-15所示。图3-15〓程序运行结果2按任意键关闭当前窗口,保存后关闭pro3.c文件。四、实验报告要求(1)写出程序一的实验原理与考查知识点。(2)写出程序二的实验原理与考查知识点。(3)写出程序三的实验原理与考查知识点。
实验二〓启发性实验一、实验目的(1)掌握程序设计与调试的方法。(2)掌握分支结构程序填空的方法。(3)掌握分支结构程序改错技巧。(4)掌握分支结构程序编程能力。二、实验设备和仪器(1)IBMPC或兼容计算机。(2)Windows9x/2000/XP操作系统。(3)VisualC++6.0。三、实验内容1.填空题从键盘输入一个数,判别它是否能被3整除。若能被3整除,打印YES;不能被3整除,则打印NO。运行结果如下:inputn:9<CR>(从键盘输入9,<CR>代表Enter键)n=9,YES!或者:inputn:8<CR>(从键盘输入8,<CR>代表Enter键)n=8,NO!请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:程序中//是对问题的提示。不得增行或删行,也不得更改程序的结构!程序如下:#include<stdio.h>main(){〓intn;〓printf("inputn:\n");〓scanf("%d",_1_);//为变量赋值.〓if(_2_)//判断n能否被3整除〓〓printf("n=%d,YES
!\n",n);〓_3_//其他情况〓printf("n=%d,NO
!\n",n);}2.改错题从键盘上输入一个字符,判断输入的字符是数字、字母,还是其他。运行结果如下:pleaseinput:(printf输出提示信息)8<CR>(从键盘输入8,<CR>代表Enter键)8isanumber或者:pleaseinput:(printf输出提示信息)A<CR>(从键盘输入A,<CR>代表Enter键)Aisacapital或者:pleaseinput:(printf输出提示信息)#<CR>(从键盘输入#,<CR>代表Enter键)#isother请改正程序中的错误,使程序能输出正确的结果。注意:程序中//是对问题的提示。不得增行或删行,也不得更改程序的结构!程序如下:#include<stdio.h>main(){〓charc;〓printf("pleaseinput:\n");〓scanf("%c",&c);〓if(c>=0&&c<=9)//判断c是否为数字字符〓〓printf("\n%cisanumber\n",c);〓if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))//判断c是否为字母字符〓〓printf("\n%cisacapital\n",c);〓else〓〓printf("\n%cisother\n",c);}3.编程题输入三个数作为三角形的边长(a,b,c),判断是否能构成一个三角形(两边之和大于第三边,两边之差小与第三边),若能构成三角形输出YES,若不能构成三角形则输出NO。程序如下:#include<stdio.h>main(){〓inta,b,c;〓printf("pleaseinputa,b,c:\n");〓scanf("%d,%d,%d",&a,&b,&c);〓/*将下面的代码补充完整*/}
实验三〓启发性实验一、实验目的(1)进一步掌握C程序的编辑、编译、连接和运行的过程。(2)熟悉分支结构的程序设计方法。(3)熟练使用switch语句的使用。二、实验设备和仪器(1)IBMPC或兼容计算机。(2)Windows9x/2000/XP操作系统。(3)VisualC++6.0。三、实验内容1.填空题以下程序计算某年某月有几天。其中判别闰年的条件是:能被4整除但不能被100整除的年是闰年,能被400整除的年也是闰年。运行结果如下:year,month:(printf输出提示信息)200912<CR>(从键盘输入2009空格12,<CR>代表Enter键)thelengthof2009.12is31或者:year,month:(printf输出提示信息)20082<CR>(从键盘输入2008空格2,<CR>代表Enter键)thelengthof2008.2is29请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:程序中//是对问题的提示。不得增行或删行,也不得更改程序的结构!程序如下: #include<stdio.h>main(){〓intyy,mm,len;〓printf("year,month:\n");〓scanf("%d%d",&yy,&mm);〓switch(mm)〓{〓〓case1:〓〓case3:〓〓case5:〓〓case7:〓〓case8:〓〓case10:〓〓case12:_1_;break;//1,3,5,7,8,10月份的天数〓〓case4:〓〓case6:〓〓case9:〓〓case11:len=30;break;〓〓case2:〓〓〓if(yy%4==0&&yy%100!=0||yy%400==0)〓〓〓〓_2_;//闰年2月份的天数〓〓〓else〓〓〓〓_3_;//不是闰年2月份的天数〓〓〓break;〓〓default:printf("inputerror");break;〓}〓printf("thelengthof%d.%dis%d\n",yy,mm,len);}2.改错题从键盘输入一字符,如果为Y打印“Yes”,为N打印“No”,其他字符,打印“Error”。运行结果如下:请输入字符:(printf输出提示信息)Y<CR>(从键盘输入Y,<CR>代表Enter键)Yes或者:请输入字符:(printf输出提示信息)N<CR>(从键盘输入N,<CR>代表Enter键)No或者:请输入字符:(printf输出提示信息)W<CR>(从键盘输入W,<CR>代表Enter键)Error请改正程序中的四处错误,使程序能输出正确的结果。注意:程序中//是对问题的提示。不得增行或删行,也不得更改程序的结构!程序如下:#include<stdio.h>main(){〓charch;〓printf("请输入字符:\n");〓ch=getchar();〓switch(ch)〓{〓〓caseY:printf("Yes\n");//如果输入的是字符Y,打印“Yes”〓〓caseN:printf("No\n");//如果输入的是字符N,打印“No”〓〓default:printf("Error\n");〓}}3.编程题已知银行整存整取不同期限的年息利率分别为:1.98%期限一年2.15%期限二年年息利率 2.25%期限三年2.45%期限五年2.65%期限八年编程输入存钱的本金和期限,求到期时从银行到的利息与本金合计。部分源代码已经给出。程序如下:#include<stdio.h>#include<math.h>main(){〓intn;//n为存款期限〓doublem,d,t;//m为本金,d为利率,t为利息与本金的合计〓printf("请输入本金和存款期限:\n");〓scanf("%f%d",&m,&n);〓/*将下面的代码补充完整*/〓printf("本息合计为=%f\n",t);}
实验四〓设计性实验一、实验目的(1)进一步掌握C程序的编辑、编译、连接和运行的过程。(2)熟练使用C的各种表达式。(3)熟悉分支结构的程序设计
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024苏州二手房买卖合同协议范本:房屋交易保障及售后服务协议3篇
- 2025年度厂区绿化养护与生态景观提升合同3篇
- 2025年度360借条合同多(信用评级合作版)3篇
- 2025年度油气田废弃井修复打井合同范本4篇
- 2025年度文化创意产业出资协议合同模板3篇
- 2024美团外卖配送配送员配送区域合作伙伴服务标准合同3篇
- 2024网络安全风险评估及防护服务合同
- 2025年度图书档案库房智能化储藏系统合同4篇
- 2025年度智能车场租赁服务合同(新能源汽车版)4篇
- 2025年度电磁兼容性实验室设备采购合同2篇
- 《C语言从入门到精通》培训教程课件
- 2023年中国半导体行业薪酬及股权激励白皮书
- 2024年Minitab全面培训教程
- 社区电动车棚新(扩)建及修建充电车棚施工方案(纯方案-)
- 项目推进与成果交付情况总结与评估
- 铁路项目征地拆迁工作体会课件
- 医院死亡报告年终分析报告
- 建设用地报批服务投标方案(技术方案)
- 工会工作人年度考核个人总结
- 上海民办杨浦实验学校初一新生分班(摸底)语文考试模拟试卷(10套试卷带答案解析)
- 机器人论文3000字范文
评论
0/150
提交评论