【技术应用】j馨羹 浅议c语言fo r语句的执行过程及应用问题 李文娟 (定西师范高等专科学校计算机系甘肃定西743000) 摘要: c语言中for语句的运用是c语言程序设计中非常重要但又十分容易出错的环节。深入分析使用for语句时出现的各种错误现象,对正确应用循环结构 很有意义,另外通过对使用f0r语句时所碰到的一些常见问题的分析比较,最后得出for语句的应用范围。 关键词:c语言;for语句;循环体 中图分类号:TP3文献标识码:A文章编号:1 671--7597(2010)0820151--01 c语言作为一种结构化程序设计语言,牵涉顺序、选择和循环三大结 构。对于那些需要重复执行的操作应该采用循环结构,通过while语句、 do-while语句和for语句来完成,在这三种语句中,for语句功能更强大, 使用更广泛,也是初学者最难理解的一种语句。 for语句的一般格式如下: for(表达式l:表达式2;表达式3) 循环体 使用for语句,特别需要强调三点: 第一,for语句的循环体可以是基本语句,也可以复合语句,还可以 是空语句。换句话说,如果循环体中的语句多于一条,一定要用花括号括 起来。 例如,有以下两个程序段: 程序段一: s=l; 此时循环体中设置一条判断循环是否继续的语句:if(i>100),若该 语句为真,就退出循环。 第三,双重for语句的执行过程及应用,是学习程序结构的难点之难 点。下面首先举一例来说明双重for语句的执行过程。如有以下程序段: for(i=l:i<=9;i++) . {for(j=l;j<=9:j++) printf(“%d{%d:%一4d”,i,j,i*j); printf(“\n”); ) 该程序段用来输出九九乘法表,关于双重for语句的执行过程,始终 记住一句话:外层变化慢,内层变化快。因为内层for语句是外层for语句 的循环体,换句话说,当外层循环变量i=l时,内层循环变量j要从1变化到 9,当i=2时,j也要从i变到9,同理当i=3,i=4,i=5,i=6,i=7,i=8直到 i=9时,j的值都依次从l变化到9,最终输出一个九九乘法表。 在实际应用中,经常需要使用双重for语句来实现穷举算法,解决一 些实际问题。比如中国古代数学家张丘建在他的《算经》中提出的著名的 “百钱买百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一,百 钱买百鸡,闯翁,母,雏各几何? 分析该问题可知,最多有2O只鸡翁,33只鸡母,也就是鸡翁数目在 for(i=1;i<5;i++) S=s*i; printf(“%d”,S); 程序段二: s=l; for(i=1;i<lO;i++) {s=s*i; O~2O之间,鸡母数目在O~33之间,对应这两个数值范围内的每一个值, 都有一个对应的鸡雏数目,三个数值的和应该等于100。定义三个变量X, y,z分别表示鸡翁,鸡母和鸡雏的数目,用双重for循环实现如下: (for(x=O;x<=20;x+十) for(y-O;y<=33;y++) (z=100一x-y; if(5*x+3*y+z/3.0==100.0) printf(“cock- ̄d,hen--%d printf(“%d”,s); ) 其中第一个程序段的运行结果为:24第二个程序段的运行结果为: 12624这是因为第二个程序段的循环体中有两条语句,循环每进行一次,就 会产生一个S的值,并输出一次S的值。而在第一个程序段中,循环体只有 一条语句,当i的值增加到5时,退出循环,输出计算所得S的值。 第二,for语句中的三个表达式可以部分省略,也可以全部省略,但 ) 分号不可省略。当省略表达式2时,相当于“无限循环”(循环条件总为 真),即: for(表达式1;;表达式3)循环体 在该程序中,外层循环控制鸡翁数X在0~2O之间变化,内层循环控制 鸡母数Y在0~33之间变化,对于外层循环变量X在O~20之间的每一个值, 内层循环变量Y都要从0变化到33。 在实际应用中,如果需要对问题的所有可能状态一一测试,直到找到 完全等价于: for(表达式1;1:表达式3)循环体 此时循环条件总为真,意味着程序出现了“死循环”,这是初学者的 一满足条件的解或将所有可能的状态都测试过为止,比如在输出九九乘法表 时,需要让行所在的数值从I增加到9,而在每一行中,列的数值都要从1变 化到9,再比如解决 百钱买百鸡问题”时,对于鸡翁数在O~20之间和鸡 母数在O~33之间的每一个值,都要求有一个对应的鸡雏数,就需要使用双 重for语句来实现,这样写出来的程序才更简洁,效率也更高。 个常见错误,应该坚决避免。当出现这种情况时,就需要在for语句的循 环体中设置使循环趋于结束的语句(即循环变量值的改变),以结束循 环。 例如,设计一个程序,计算1~100的累加和。要求用for语句实现, 并且要求省略表达式2。程序段如下: sum=O; 参考文献: [I]谭浩强,c程序设计(第三版)[M].北京:清华大学出版社2005,07. for(i=l::i++) { if(i>100) break; sum+=i; [2]张福祥,c语言程序设计,辽宁大学出版社,2007,02. [3]Andrew Koening.C Traps and Pitfal1 S.北京:人民邮电出版社, 2008,02. 作者简介: 李文娟(1984一),本科,信息与计算科学学士,助教,定西师范高等专 科学校。 )