还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
第章循环结构程序设计5第一单元学习指南本章教学目标
1.掌握while语句、do-while语句和for语句的用法;理解双重循环的执行流程;理解自增、自减运算符与复合赋值运算符及循环辅助语句的功能
2.掌握累加求和、判断素数、穷举法等典型算法
3.学会用while语句、do-while语句和for语句编写一般难度的单重循环与双重循环程序,并能上机调试运行学习方法建议
1.对于++、-运算符,侧重于研究其常规用法,也就是在实际编程中经常出现的用法;避免研究在实际编程中不太可能出现的非常规用法,例如j=i+++i+++i++
2.着重研究能够解决实际问题的常规程序,避免研究那些在实际编程中不太可能出现的、稀奇古怪的非常规程序
3.仔细阅读本章示例程序,正确理解每条语句的功能,尤其是循环的执行流程;着手编写一般难度的循环结构程序
4.在编写程序时,按照从局部到整体、从具体到一般的原则,逐步构造出程序例如,在判即只需要将循环体括起来,而不应包括循环语句的语句头
8.累加或累乘赋值不正确累加或累乘赋值语句中,赋值运算符两端必须有一个相同的变量以此实现累积运算效果例如求10的阶乘程序段如下p=l;for i=l;i=10;i++p=i*i+l;则该程序段不能实现累积运算效果,因为变量P的最终结果为10*10+1=110,显然不是10的阶乘应改为p=l;;for i=l;i=10;i++p=p*i
9.误将双重循环作为单重循环若希望两个循环变量所有的取值组合都能出现,则必须用双重循环,而不能用单重循环例如for i=0,j=0;i2,j3;i++,j++printfn%d,%d\nn,i,j;是错误的因为此时的循环条件是逗号表达式,实际上起作用的条件是j3故输出结果为0,01,12,2可见,并未输出变量i,j所有的取值组合又例如%for i=0,j=0;i2j3;i++,j++printf”d,%d\nn,i,j;也是错误的因为此时循环的条件是逻辑表达式,故输出结果为0,01,1可见,也并未输出变量i,j所有的取值组合故该双重循环应改为fori=0;i2;i++{for j=0;j3;j++(乞,)printf%d,d\n”i,j;此时的输出结果为0,00,10,21,01,11,2可见,此时输出了变量i,j所有的取值组合,符合双重循环的要求断水仙花数时,先实现判断某一个三位正整数是不是水仙花数,然后通过添加循环扩展到判断所有的三位正整数是不是水仙花数
5.上机调试运行本章示例程序,并调试运行自己编写的程序
6.对于语法错误,采取与前面相同的应对措施
7.对于逻辑错误,着重检查循环条件的表示是否正确,尤其是循环的边界条件,例如while(i=li=100),其中的i=l和i=100就是循环的边界条件;检查while(表达式)和for(表达式)之后有没有多余的分号,循环体有没有用花括号括起来;尤其要避免存在死循环在定位出错位置时,可以在循环体中添加临时性的输出语句,用来输出中间变量(或中间表达式)的值,观察这些值是否符合预期
8.记录总结在调试程序的过程中发现的错误以及改正的方法,不断积累编写循环结构程序的直接经验第二单元重点与难点解析
1.除了while语句、do-while语句和for语句之外,还有什么语句可以构造循环吗?利用if语句与got语句相结合,也可以实现循环程序结构,但一般不会采用这种方式
2.循环条件可以是任意类型的表达式吗?不是的循环条件除了可以是关系表达式或逻辑表达式之外,还可以是整型、实型、字符型、枚举型和指针型的表达式而且,只要表达式的值为非0,就看作真;只要表达式的值为0,就看作假
3.循环体只能是单条语句吗?是的,循环体只能是语法意义上的单条语句若循环体超过一条语句,则必须用花括号括起来,从而构成一条复合语句
4.为什么在累加累乘表达式中,累加累乘变量必须同时出现在赋值运算符的两侧?因为累积运算的特点,是累积变量的新值赋值运算符左边的变量是在其原有值赋值运算符右边的相同变量的基础上,通过加上或乘上另一个变量的值而求得的故赋值运算符的右侧必须要引用该变量的原有值
1.1++;与++i;有区别吗?没有区别前自增减与后自增减单独作为一个表达式时,是没有区别的;只有作为另一个表达式的一部分时,才有区别例如,语句i++;与语句++i;是完全等价的,而表达式j=i++与表达式j=++i则完全不同
6.若有inti=3,j;j=++i+++i+++i;,那么变量j的值是多少呢?#include stdio.hint maininti,j;;i=3%printf d\n,j=++i+++i;i=3;printf%d\n产++i+++i+++i;i=3;%printf d\n:j=++i+++i+++i;i=3;%printf d\n\j=++i+++i+++i;return0;当i=3时,在DEV C++
5.11中分别输出表达式j=++i+++i、j=++i+++i+++i、j=++i+++i+++i和j=++i+++i+++i的值,结果分别是
10、
16、16和18而当i=3时,在Visual C++2010中分别输出表达式j=++i+++i、j—++i+++i+++i、j—++i+++i+++i和j=++i+++i+++i的值,结果分别是
1、
18、18和18可见,表达式的求值顺序并没有一个很明显的规则因此,应当尽量避免在同一个表达式中多次对同一个变量进行赋值或自增、自减运算
7.若有inti=3,j;户i+++i+++i++;,那么变量j的值是多少呢?#include stdio.h intmainint ij;i=3;printfH%d\nnj=i+++i++;;i=3printfn%d\nHj=i+++i+++i++;i=3;printfn%d\nHj=i+++i+++i++;i=3;printfn%d\n,\j=i+++i+++i++;return0;}当i=3时,在DEV C++
5.11中分别输出表达式j=i+++i++、j=i+++i+++i++、j=i+++i+++1++和上力+++1+++1++的值,结果分别是
7、
12、12和12而当i=3时,在Visual C++2010中分别输出表达式j=i+++i++、j=i+++i+++i++、j=i+++i+++i++和j=i+++i+++i++的值,结果分别是
6、
9、9和9可见,在不同的编译器中运行时,同一个表达式的求值顺序是不一样的因此,应当尽量避免在同一个表达式中多次对同一个变量进行赋值或自增、自减运算
8.在for语句中,当循环条件缺省时,看作循环条件为真还是为假?循环条件缺省,也就是没有循环条件,相当于循环条件永远满足,即永远为真
9.for循环与while循环可以完全互换吗?是的从功能上来说,for循环与while循环是完全等价的,只是表现形式不同而已
10.do-while循环与while循环可以完全互换吗?不能do-while循环先执行一次循环体然后再判断循环条件是真是假,故只适用于循环体至少执行一次的循环因而do-while循环与while循环不能完全互换
11.什么情况下适于采用while循环或for循环?如果一个循环的循环条件中所引用的变量,在第一次执行循环体之前已完成赋值,那么这个循环就适于采用while循环或for循环结构实现其实,从功能上来说,for循环与while循环是完全等价的只不过for循环更简洁,while循环更直观一般而言,如果循环变量赋初值的表达式、循环条件表达式、递变循环变量值的表达式比较简洁,则适合采用for循环;反之,则适合采用while循环此外,在构成多重循环时,采用for循环的程序结构比采用while循环相对清晰一些
12.什么情况下适于采用do-while循环?一般而言,如果一个循环的循环条件所引用的变量中,某个变量的第一次赋值是在循环体中完成的,那么这个循环就适于采用do-while循环结构实现
13.什么情况下适于采用whilel形式的循环?在构造循环时,对循环条件进行判断的时机是至关重要的一方面,要保证先给循环控制变量赋值、后判断循环条件;另一方面,还要保证先判断循环条件、后进行相应处理当采用其他形式的循环难以满足上述要求时,可以采用whilel形式的循环在这种循环中,其循环条件永远为真,因此从形式上看是一个无限循环不过,可以在它的循环体中借助于有条件的break语句,在合适的时机结束循环,从而变成一个有限循环
14.能不能用break语句从内层循环中直接跳出多层循环?不能break语句只能跳出本层的循环体或switch语句若需要从内层循环中直接跳出多层循环时,可以使用goto语句实现
15.逗号表达式i=3,i++,i+2,i*5的值为什么不是30按照逗号表达式的求值步骤,依次执行i=3与i++,此时i的值为4;再执行i+2,i的值不变,因为并没有对变量i进行赋值;因而最后求得i*5的值为20可见,在逗号表达式中,除了最后一个表达式之外,如果在前面的表达式中没有对变量进行赋值那么这个表达式实际上不起作用第三单元典型错误解析
1.循环体缺少花括号在C语言中,一个循环的循环体只能是语法意义上的单条语句,若有多条语句则必须用花括号括起来,从而构成一条复合语句例如i=0;while i9%,此时的循环体只有这一条语句,故为死循环printf”d,”i;/**/;i++是错误的,应改为i=0;while i9;printf n%d/\i;i++又例如i=0;doprintf H%d/\i;;i++while i9;也是错误的,应改为i=0;do printfn%d,H i;z;i++while i9;
2.while语句中while表达式之后多余分号while表达式只是while语句的一部分,而不是一条完整的语句,故其后不能加分号否则,会导致认为这个分号即空语句就是循环体例如:i=0;此时的循环体是空语句,故为死循环while i9;/**/;printfH%d n,i;i++z是错误的,应改为i=0;while i9{;printf n%d/\i;i++
3.for语句括号中三个表达式之间误用逗号分隔for语句的括号中三个表达式之间要用分号分隔,而不能用逗号分隔例如:%,for i=0,i9i++printf”d,”i;z是错误的,应改为fori=0;i9;i++printf
4.for语句括号中表达式之后多余分号for语句括号中第三个表达式之后不需要分号例如:for i=0;i9;i++;printf是错误的,应改为%,fori=0;i9;i++printf”d,”i;
5.for语句括号之后多余分号在for语句中,for表达式1;表达式2;表达式3只是for语句的一部分,而不是一条完整的语句,故其后不能加分号否则,会导致认为这个分号即空语句就是循环体例如:此时循环体是空语句,但循环能正常结束for i=0;i9;i++;/**/该语句只执行一次printf H%d,n,i;/**/是错误的,应改为fori=0;i9;i++printf H%d,,,,i;
6.for语句中的循环条件不正确for语句中的循环条件,必须与循环变量赋初值及改变循环变量值的表达式相匹配否则,有可能造成死循环例如fori=9;i=0;i++printf n%d/\i;此时为死循环应改为for i=9;i=0;i--printfn%di;z z
7.循环体边界错误当循环体中有多条语句时,必须用花括号将循环体括起来,构成一条复合语句但是不应将循环语句的语句头也包括在内例如i=0;while i9%,printf”d,i;i++;是错误的因为此时的循环体仍然是紧跟在while之后的单条语句printf%d,,i;,故仍是死循环应改为i=0;while i9printf%d\i;z;i++又例如for i=0;i2;i++for j=0;j3;j++printf%d,%d\nn ij;z zprintf”*****\n”;也是错误的应改为for i=0;i2;i++for j=0;j3;j++{printfn%d,%d\nn ij;f zprintf“*****\n”;。
个人认证
优秀文档
获得点赞 0