还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
第章选择结构程序设计4第一单元学习指南本章教学目标
1.学会用关系表达式、逻辑表达式和扩展逻辑量表示条件掌握基本if语句和嵌套if语句的功能;了解switch语句的功能限制
2.学会用if语句编写双分支选择程序,学会用if语句或switch语句编写多分支选择程序,并能上机调试运行学习方法建议
1.仔细阅读本章示例程序,正确理解每条语句的功能;着手编写一般难度的选择结构程序2,上机调试运行本章示例程序,并调试运行自己编写的程序
3.对于语法错误,可以采取与前面相同的应对措施着重检查if子句与else子句有没有用花括号括起来
4.对于逻辑错误,着重检查条件的表示是否正确,if(表达式)之后有没有多余的分号测试数据要覆盖选择结构的每一个分支以及逻辑表达式条件中的每一种组合例如,对于条件x〉=0y=10,要对x=0和y=10的值分别为假和假、假和真、真和假、真和真共四种条件组合进行测试if xy max=x;else if x=ymax=y;
7.if子句与else子句缺少花括号if子句与else子句只能是单条语句,若有多条语句,则必须用花括号括起来,从而构成一条复合语句例如:if abt=a;a=b;b=t;是错误的,正确的写法应该是if ab}{t=a;a=b;b=t;/*三条赋值语句作为一个整体,要么都执行,要么都跳过*/又例如if abmax=a;nprintf max=%d\n max;relsemax=b;n nprintf max=%d\n max;r也是错误的,正确的写法应该是if abmax=a;n nprintfmax=%d\n,max;else{max=b;nprintfmax=%d\n,max;也可以写为if abmax=a;elsemax=b;nprintfmax=%d\n,max;
8.switch语句中case之后误加条件switch语句中,case之后只能是常量或常量表达式,而不能是变量或包含变量的表达式例如char ch;switchch,case ch==+:c=a+b;break;case ch==,-f:c=a-b;break;是错误的,正确的写法应该是char ch;switchch case:c=a+b;break;case:c=a-b;break;}
9.switch语句中case之后缺少空格switch语句中case与其后的常量或常量表达式之间必须有空格例如:char ch;switchch case+:c=a+b;break;case*-1:c=a-b;break;是错误的,正确的写法应该是char ch;switchch case:c=a+b;break;case1-1:c=a-b;break;在定位出错位置时,仍然可以采用输出中间变量或中间表达式值的方法
5.记录总结在调试程序的过程中发现的错误以及改正的方法随着这些直接经验的不断积累,你的编程能力将会得到逐步提高第二单元重点与难点解析
1.如何表示“X属于0〜10的闭区间”?【解析】“x属于0〜10的闭区间”也就是0〈二x〈=10,其实这是一个复合条件,即x〉=0并且x=10o故在C语言中应该使用关系运算符及逻辑运算符联合来表示,即x=0x〈=
102.如何避免误用赋值运算符表示相等?【解析】赋值号是用来给变量赋值用的,左边必须是变量名称;等号是用来比较两个数是否相等的,左边可以是变量或者常量为了防止不小心把赋值号当做等号,建议使用等号时把常量放在左边,如果有常量的话,当然认真仔细是最保险的,如下例所示【示例】如果变量a的值为99,则给变量b赋值为99,否则赋值为0【程序源代码如下】ttinclude stdio.h intmainvoid{int a=9,b;if99==a〃把常量放在了左边,好习惯b=99;elseb=0;printf z,a=%d,b=%d\n,z,a,b;return0;【程序运行结果如下】a=9,b=0【分析如下】因为程序中在第4行的if语句中不小心把等号写成了赋值号,所以变量a在此处被重新赋值为99,在C语言中当做真处理,所以执行后边的语句b=99如果把第4行中的if语句中的条件写成if99=a,程序编译时便会报错,所以这样就减少了出错的几率
3.如何进行两个实型数的相等比较?【解析】由于实型数在计算机中的表示方法的特殊性和实型数的精度问题,在C语言中比较两个实型数相等时不要直接比较,而是采用取两数之差的绝对值与一个很小的数比较的方法,具体参考如下程序【程序功能】输入一个实型数,如果等于
1.2345则输出“相等!”,否则输出“不相等!【程序源代码如下】#include stdio.httinclude math.hint mainvoid{float x;printf“请输入一个实数\n;scanf〃%f〃,x;if fabsx-
1.2345=le-6//这样比较printf相等!;elseprintf不相等!;return0;}【程序运行结果如下】请输入一个实数
1.2345相等!【说明】le-6即
0.000001,还可以更小
4.if子句和else子句什么时候该用花括号括起来?【解析】如果if子句和else子句是多条语句的话,就需要用花括号括起来否则会导致语法错误或者结果不正确【示例】输入两个整数,按由大到小的顺序排序并输出【程序源代码如下】ttinclude stdio.hint mainvoid{int a,b,t;printf〃请输入两个整数用空格分隔\n〃;scanf〃%d%d〃,a,b;if ab{t=a;〃第7行,请注意花括号a=b;b=t;printf〃由大到小的排列的两个数是%d%d\n〃,a,b;return0;【程序运行结果如下】请输入两个整数用空格分隔19由大到小的排列的两个数是91【说明】程序的第7至9行如果不加花括号的话,那么条件只对第7行起作用,第8,第9两行不管条件是否为真都要执行,比如条件为假时,变量t就成了没有赋过值的变量,显然结果就不对了
5.如果在if条件后不小心加了个分号会怎样?【解析】单独的一个分号在C语言中看作是一个空语句如果在if条件后不小心加了个分号,那么当条件为真时就执行空语句,原来的if子句就变成了不管条件是否为真都执行的语句,尽管编译时没有错误,但结果一般也不对了,原因同上一问题【示例】不论变量a的值为什么,变量b的值始终为100【程序源代码如下】^include stdio.h intmainvoid{int a=10,b=200,t;ifa==100;〃条件为真时执行空语句b=100;〃不管条件是否为真都执行printf/za=%d,b=%d\n〃,a,b;return0;【程序运行结果如下】a=10,b=
1006.在switch语句结构中,break语句是必须的吗?什么时候该用?【解析】switch结构中break语句不是必须的如果执行完case标号之后的语句后需要跳出switch结构,那么此时需要加break语句,反之不用加【示例】判断输入的数是
1、
2、3中的哪一个,分别输出相应结果【程序源代码如下】#include stdio.h intmain void{int x;printf请输入一个整数1,2,3\n〃;scanf〃%d〃,x;switchx{case l:printf〃输入的数是1!\n,z;break;〃第7行case2:printf输入的数是:2!\nz,;break;case3:printf〃输入的数是3!\n,z;break;default:printf〃输入的数不符合要求哦!\n〃;return0;【程序运行结果如下】请输入一个整数(1,2,3)1输入的数是1!【说明】如果把第7及后面两行行后的break语句去掉,那程序的输出就成这样了请输入一个整数(1,2,3)1输入的数是1!输入的数是2!输入的数是3!输入的数不符合要求哦!运行结果显然不对,因为没有break语句,所以要一直继续往下执行,直到最后
7.switch结构中default语句是必须的吗?什么时候该用?【解析】switch结构中default语句不是必须的像问题7中,对于变量x的取值除了前面的几种外,如果还有其他的n种情况,这种情况加上default是比较合适的,否则可以不加
8.switch结构中case后面必须是常量表达式吗?如果不便于构造常量表达式怎么办?【解析】switch结构中case后面必须是常量表达式如果不便于构造常量表达式,那么可以选择使用if语句
9.switch语句和if语句有什么区别?什么时候适合使用switch语句?【解析】两者都可以实现选择结构,区别在于if语句可以实现任何选择结构,switch语句适合于多分支的情况,而且当条件表达式的值是常量时
10.switch语句可以与if语句混合使用吗?【解析】可以在switch结构中的case语句后可以根据情况使用if语句,如下例所示【程序功能】编写一个程序输入所在学院和性别,然后输出相关信息【程序源代码如下】#include stdio.h intmain(void){int xy,xb;printf(〃请输入你所在学院(厂计算机,2-电气,3-体育)\n〃);scanf(〃%d〃,xy);printf(〃请输入你的性别(0-男,1-女)\n〃);scanf(〃%d〃,xb);switch(xy){case1:if(xb==0)printf(〃你是来自计算机学院的帅男生!\n〃);else printf(〃你是来自计算机学院的漂亮女生!\n〃);break;case2:if(xb==0)printf(〃你是来自电气学院的帅男生!\n〃);else printf(〃你是来自电气学院的漂亮女生!\n,z);break;case3:if(xb==O)printf(〃你是来自计体育学院的帅男生!\n〃);else printf(“你是来自体育学院的漂亮女生!\n〃);}return0;)【程序运行结果如下】请输入你所在学院(1-计算机,2-电气,3-体育)1请输入你的性别(0-男,1-女)1你是来自计算机学院的漂亮女生!
11.在嵌套的if语句中如何确定else该与哪个if配对?【解析】else总是与其前边最近的、同一层次且尚未配对的if配对,如下程序所示【程序功能】编写一个程序输入一个字符,然后判断它属于大写字母、小写字母、数字字符、空格还是其他字符并输出相关信息【程序源代码如下】^include stdio.hint main(void){char ch;printf(〃请输入一个字符(字母、数字、空格、其他)\n〃);ch=getchar();if(ch=Ach〈二Z)〃第6行printf(您输入的字符%c是一个大写字母!\n”,ch);else〃第8行if(ch〉=ach=,z)〃第9行printf(〃您输入的字符猊是一个小写字母!\n〃,ch);else〃第11行if(ch〉=Och=9)〃第12行printf(〃您输入的字符枇是一个数字字符!\n〃,ch);else〃第14行if(ch=)〃第15行printf(〃您输入的字符%c是一个空格字符!\n〃,ch);else〃第17行printf(〃您输入的字符%c是一个其他字符!\n〃,ch);return0;)【程序运行结果如下】请输入一个字符(字母、数字、空格、其他)a您输入的字符a是一个小写字母!【提示】请注意程序中第17行的else与第15行的if配对,第14行的else与第12行的if配对,第11行的else与第9行的if配对,第8行的else与第6行的if配对
12.什么时候用平行if语句?【解析】当几种条件是平行的情况时适合使用平行if语句,如第11个问题的程序用平行if语句表示如下【程序源代码如下】#include stdio.h intmainvoid{char ch;printf(〃请输入一个字符(字母、数字、空格、其他)\n〃);ch=getchar();ifch=Ach〈二Zprintf〃您输入的字符猊是一个大写字母!\n〃,ch;if ch=a,ch=,zprintf您输入的字符猊是一个小写字母!\n〃,ch;ifch=0,ch=9,printf〃您输入的字符%c是一个数字字符!\n〃,ch;ifch==,printf〃您输入的字符%c是一个空格字符!\n〃,ch;if!ch=Ach=,Z!ch=ach=,z!ch=Och=,9ch!二printf(〃您输入的字符%c是一个其他字符!\n〃,ch);return0;【程序运行结果如下】请输入一个字符(字母、数字、空格、其他)$您输入的字符$是一个其他字符!【提示】其实任何一个选择结构的程序都可以使用平行if语句来实现,只不过有时候可能书写麻烦一些,比如第11题的程序和本题程序相比,使用平行if书写最后一个if语句中的条件就比较麻烦一些
13.平行的if结构与嵌套的if结构有什么区别?【解析】两者都能够实现简单或者复杂的选择结构,所谓区别在于因为思维逻辑的不同,从而造成书写形式的不同平行的if结构中所有的if语句地位都是平等的,程序执行时相互之间没有制约嵌套if结构中else后面的语句是否执行受前面if语句后的条件的制约,只有等条件为假时才执行else后的语句,请参考前面第11和第12两程序进行理解第三单元典型错误解析
1.if语句中条件缺少圆括号if语句中条件要用圆括号括起来例如:if x0y=l;是错误的,正确的写法应该是if x0y=l;
2.if语句中条件之后多余分号if表达式只是if语句的一部分,而不是一条完整的语句,故不能加分号若加上分号,则会将分号空语句看作是if子句例如:;if x0;y=x是错误的,正确的写法应该是;if x0y=x
3.if语句条件中等号误用赋值号C语言中表示相等必须用“==,单个则表示赋值♦例如:if x=0y=0;是错误的,正确的写法应该是ifx==0;y=0因为ifx=o中的条件总是假先赋值后判断卜
4.if语句中复合条件误用单一条件C语言中表示复合条件时,必须使用逻辑表达式例如:;if0x10y=x是错误的,正确的写法应该是;ifx0x10y=x因为不管x取何值,表达式0x10的结果总是为lo
5.if语句中误用逗号表示复合条件C语言中表示两个条件同时成立时,应使用逻辑与运算符连接,而不能用逗号连接例如if ab,ac max=a;是错误的,正确的写法应该是if abacmax=a;
6.else之后误加条件因为else是对if条件的否定,故else之后不能直接写条件;但else if之后则可以写条件例如:ifxy max=x;elsex=ymax=y;是错误的,正确的写法应该是if xymax=x;elsemax=y;也可以写为。
个人认证
优秀文档
获得点赞 0