c语言循环结构.ppt
《c语言循环结构.ppt》由会员分享,可在线阅读,更多相关《c语言循环结构.ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2C语言的重复语句用于设置循环。循环是重复执行其他语句的一种语句,循环中重复执行的语句就是循环体 C语句中,每个循环都有一个控制表达式。每次执行循环体时都要对控制表达式进行计算。 如果表达式为真,也就是不为零,那么继续执行循环。3C 提供三种循环语句: while语句:用于判定控制表达式在循环体执行之前的循环。 do语句:用于判定控制表达式在循环体执行之后的循环。 for语句:对于自增或自减计数变量的循环十分方便。 4使用while语句是最简单、最基本的设置循环方法。 While语句格式如下:while ( 表达式表达式) 语句语句表达式即为控制表达式;语句则是循环体。 5while语句示例:
2、while (i n) /* 控制表达式控制表达式 */ i = i * 2; /* 循环体循环体 */执行while语句时,首先计算控制表达式的值。如果值不为零(真),那么执行循环体,接着再次判定表达式。这个过程持续进行直到最终控制表达式的值变为零。6while语句示例:计算大于或等于数n的最小的2次幂:i = 1;while (i n) i = i * 2;设n为10时,下面跟踪显示了while语句执行情况:i = 1;i现在值为1.i n成立吗?是,继续。i = i * 2;i现在为2.i n成立吗?是,继续。i = i * 2;i现在为4。i n成立吗?是,继续。i = i * 2;i
3、现在为8。i n成立吗?是,继续。i = i * 2;i现在为16。i 0) printf(T minus %d and countingn, i); i-;即使没有严格要求的时候,一些程序员始终使用大括号括住循环体:while (i 0) printf(T minus %d and countingn, i); i-;整个过程持续到显示信息为整个过程持续到显示信息为“T minus 1 and counting”。9关于while语句的一些讨论: 在while循环终止时,控制表达式的值为假。因此,当通过表达式i 0控制循环终止时,i必须是小于或等于0的。 可能根本不执行while循环体。因为
4、控制表达式是在循环体执行之前进行判定。 while语句常常可以有多重写法。更加简明的递减计数循环如下:while (i 0) printf(T minus %d and countingn, i-);10如果控制表达式的值始终是非零值的话,while语句将无法终止。C语句程序员有时故意用非零常量作为控制表达式来构造无限循环:while (1) 除非循环体含有跳出循环控制的语句(break, goto, return)或调用了导致程序终止的函数,否则上述这种形式的while语句将永远执行下去。11程序square.c用一个while语句显示平方值表格。用户指定平方值表格的行数:This prog
5、ram prints a table of squares.Enter number of entries in table: 5 1 1 2 4 3 9 4 16 5 2512square.c /* Prints a table of squares using a while statement */ #include int main(void) int i, n; printf(This program prints a table of squares.n); printf(Enter number of entries in table: ); scanf(%d, &n); i =
6、 1; while (i = n) printf(%10d%10dn, i, i * i); i+; return 0;13程序sum.c 对用户输入的整数数列求和:This program sums a series of integers.Enter integers (0 to terminate): 8 23 71 5 0The sum is: 107程序需要使用循环,循环采用scanf函数读取用户输入数,然后再把这个数加到运算的总和中。14sum.c /* Sums a series of numbers */ #include int main(void) int n, sum =
7、 0; printf(This program sums a series of integers.n); printf(Enter integers (0 to terminate): ); scanf(%d, &n); while (n != 0) sum += n; scanf(%d, &n); printf(The sum is: %dn, sum); return 0;运行结果:运行结果:505050501001nn1001nn(1)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现.(2)在循环体中应有使循环趋向于结束的语句。 运行结果:运行结果:50505050
8、17do语句的一般格式如下:do 语句语句 while ( 表达式表达式 ) ;执行do语句时,先执行循环体,再计算控制表达式的值。如果表达式的值非零,那么再次执行循环体,然后再次计算表达式的值。18使用do语句重写前面的“倒数计数”程序:i = 10;do printf(T minus %d and countingn, i); -i; while (i 0);do语句和while语句没有本质的区别。唯一的不同在于do语句的循环体至少会被执行一次。19最好对所有的do语句都使用大括号包括循环体,因为没有大括号的do语句很容易被误认为是while语句:do printf(T minus %d
9、and countingn, i-);while (i 0);粗心的读者可能会把单词while误认为是while语句的开始。while(i=100)while(i=100)运行结果:运行结果:505050501001nn运行结果:运行结果:505050501001nn22程序numdigits.c 计算用户输入的整数的位数:Enter a nonnegative integer: 60The number has 2 digit(s).方法是将将用户输入的整数反复除以10,直到结果变为0,除的次数就是用户输入整数的位数。do语句比while语句更适合,因为每个整数,即便是0都至少有一位数字。2
10、3numdigits.c /* Calculates the number of digits in an integer */ #include int main(void) int digits = 0, n; printf(Enter a nonnegative integer: ); scanf(%d, &n); do n /= 10; digits+; while (n 0); printf(The number has %d digit(s).n, digits); return 0;24for语句适合应用在使用“计数”变量的循环中,然而它也灵活用于许多其他类型的循环中。for语句
11、的一般格式如下:for ( 表达式1; 表达式2; 表达式3 ) 语句表达式1、表达式2和表达式3全都是表达式。示例:for (i = 10; i 0; i-) printf(T minus %d and countingn, i);25for语句的执行流程for(表达式1;表达式2;表达式3) 语句;26for语句和while语句关系紧密。 除了极少数情况,for循环总可以等价替换为while循环:表达式表达式1;while ( 表达式表达式2 ) 语句语句 表达式表达式3;表达式1是在循环开始执行前,只执行一次的初始化步骤。27表达式2控制用于控制循环的终止(循环持续执行,只要表达式2的值
12、非零)。表达式3是在每次循环的最后被执行的一个操作。按照这种模式,上面的for循环可以改写为如下的while循环:i = 10;while (i 0) printf(T minus %d and countingn, i); i-;28研究等价的while语句有助于更好地理解for语句。例如,假设把先前for循环示例中的i-替换为-i:for (i = 10; i 0; -i) printf(T minus %d and countingn, i);等价的while循环显示上述的替换对循环没有任何影响:i = 10;while (i 0) printf(T minus %d and count
13、ingn, i); -i;29由于for语句中的第一和第三表达式都是以语句的方式执行的,所以它们的值互不相关它们有用仅仅是因为有副作用。 所以,这两个表达式常常是赋值表达式或自增/自减表达式。30for语句对于“向上加”(变量自增)或“向下减”(变量自减)的循环来说是最好的选择。对于向上加或向下减共有n次的情况,for语句经常会采用下列形式中的一种。从从0向上加到向上加到n1:for (i = 0; i n; i+) 从从1向上加到向上加到n:for (i = 1; i = 0; i-) 从从n向下减到向下减到1:for (i = n; i 0; i-) 31常见语句错误: 在控制表达式中用
14、(反之亦然)。“向上加”使用或或=运算符。 在控制表达式中使用=代替, , 或=。 编写的控制表达式用i=n代替i 0; -i) printf(T minus %d and countingn, i);如果省略第三个表达式,那么循环体需确保第二个表达式的值最终会变为假:for (i = 10; i 0;) printf(T minus %d and countingn, i-);33当第一和第三表达式都省略时,for循环与while循环没有任何区别:for (; i 0;) printf(T minus %d and countingn, i-);等价于while (i 0) printf(T
15、 minus %d and countingn, i-);while语句的形式更清楚,因此更可取。34如果省略第二个表达式,那么它默认为真,因此for语句不会终止(除非以某种其他形式停止)。 例如:某些程序员用下列的for语句建立无限循环:for (;) 35C99中,for语句的第一个表达式能被替换为一个声明(定义)。 这个特性允许程序员在for循环中定义变量:for (int i = 0; i n; i+) 这样,变量i不需要在for循环前定义。 36在for语句中定义的变量不能在循环体外访问,即在循环外不可见):for (int i = 0; i n; i+) printf(%d, i)
16、; /* legal; i is visible inside loop */ printf(%d, i); /* WRONG */37让for语句定义自己的循环控制变量通常是个好的做法,方便且让程序易于理解。 当然,如果程序需要在循环结束后访问这样的变量,那么就需要采用for语句常规的方式。for语句可以定义多个相同类型的变量:for (int i = 0, j = 0; i n; i+ +) 38有时,for语句可能需要多个初始表达式,或在每次循环时一次对几个变量进行自增(减)操作。可以在for语句的第一和第三表达式中使用逗号表达式实现这些想法。逗号表达式具有如下形式:表达式1, 表达式2
17、这里表达式1和表达式2可以是任意两个表达式。 39逗号表达式的计算分两步实现: 第一,计算表达式1并丢弃计算结果。 第二,计算表达式2并将计算结果作为整个逗号表达式的结果。计算表达式1始终是有意义的。当计算逗号表达式+i, i + j, i先自增,然后计算i + j 假设,变量i和j的值分别为1和5,那么上面逗号表达式的值为7,而i的值将自增为2。40逗号运算符是左结合性的,所以编译器把下列表达式:i = 1, j = 2, k = i + j解释为:(i = 1), (j = 2), (k = (i + j)即左边的操作先于右边的执行,这样表达式i = 1, j = 2, 和k = i +
18、j 将从左到右执行。41逗号运算符允许将两个或多个表达式黏贴成一个表达式。在后面章节中我们会看到某些定义将从逗号运算符中受益。for语句是唯一除上述之外还可以发现逗号运算符的地方。 例如:for (sum = 0, i = 1; i = N; i+) sum += i;利用附加的逗号运算符,for语句可以初始化两个及以上的变量。42程序square.c(Section 6.1)可以通过将while循环转化为for循环的方式进行改进:43square2.c /* Prints a table of squares using a for statement */ #include int mai
19、n(void) int i, n; printf(This program prints a table of squares.n); printf(Enter number of entries in table: ); scanf(%d, &n); for (i = 1; i = n; i+) printf(%10d%10dn, i, i * i); return 0;44C语言对控制循环行为的三个表达式没有加任何限制。 虽然这些表达式通常对同一个变量进行初始化、判定和更新,但是不要求它们之间以任何方式进行相互关联。程序square3.c 等价于square2.c,但是包含一个for语句,
20、它初始化一个变量(square), 判定另一个变量(i), 并对第三个变量(odd)进行自增操作。 for语句这种极大的灵活性有时是十分有用的,但是原始的程序无疑更加清晰。45square3.c /* Prints a table of squares using an odd method */ #include int main(void) int i, n, odd, square; printf(This program prints a table of squares.n); printf(Enter number of entries in table: ); scanf(%d,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 循环 结构
限制150内