当前位置:
文档之家› C语言程序设计第六章循环结构程序设计
C语言程序设计第六章循环结构程序设计
}
不成立
ch!=EOF?
成立
字符计数nc=nc+1
不成立
ch==’\n’?
成立
行计数 nl=nl+1
§6.2 while语句-实例
循环嵌套
在循环体中,又包含有循环语句,构成循环嵌套。
例C3_5107.C:输出下三角形乘法九九表。
123456789
---------------------------------------
if ( n >= 3 )
break;
/* 退出for循环 */
else printf ("\nInput n is error !\n");
}
/* 控制输入正确的N值 */
un = un2 = 1;
/* 设置递推初始值 */
for ( i=3; i<=n; i++) /* 用递推法计算第N项的值 */
putchar ( ch ); ch = getchar( ); } }
开始
ch=读入一个字符
ch!=’a’?
成立
显示ch
不成立
ch=读入下一个字符
结束
§6.2 while语句-实例
例C3_5104.C:对输入的行和字符进行计数。
分析:\n 作为行结束标记的,DOS中有[CTRL+Z]作为文件结束
显示ch
while (ch!=’a’) { putchar( ch );
ch=读入下一个字符
ch = getchar( ); }
结束
§6.2 while语句-实例
#include <stdio.h> main( ) { char ch;
ch = getchar( ); while ( ch!='a') {
C语言中控制循环的语句:
while for do-while
§6.2 while语句
while语句格式 while ( 表达式 ) 语句;
说明:语句可是简单语句,也可是复合语句。 while语句的执行流程
表达式?
成立
执行语句
不成立
循环控制条件 循环体
执行while循环之后的语句
§6.2 while语句-实例
则:第 i 行中一共要输出 i 个乘积
§6.2 while语句-实例
#include <stdio.h>
例C3_5107
main ( )
{ int i=1, j;
/* i:行计数器 j:列计数器 */
while ( i <= 9 )
/* 控制打印表头 */
printf ( "%4d", i++ );
§6.2 while语句-实例
例C3_5103.C:从键盘中读入一系列字符,直到读入字母 a 时 才停止。
分析:由于不知道要读入的字符 数量,只知停止条件是读入字母 a,则只能将循环控制条件设为
开始 ch=读入一个字符
ch!='a'。 程序主体:
ch!=’a’?
成立
不成立
ch = getchar( );
}
}
for语句最常用的形式 for (初值;控制条件;增量) 语句;
§6.3 for语句-实例
例C3_5202.C:用for语句实现打印乘法九九表。
#include <stdio.h>
例C3_5202
main ( )
{ int i, j;
for ( i=1; i<10; i++ )
printf ("%4d",i);
for语句的执行流程
执行表达式1
表达式2?
成立
执行语句
不成立
执行表达式3
执行for循环之后的语句
循环初始条件
循环控制条件
循环体 for语句等价于下列语句:
表达式1; while (表达式2) { 语句;
表达式3; }
§6.3 for语句-实例
例C3_5203.C:求1到10的阶乘。
例C3_5203
标记 #define EOF -1
定义文件结束标记
#include <stdio.h>
main ( )
{ int c, nl=0, nc=0;
nl行计数器,nc字符计数器
while ( ( c = getchar( ) ) != EOF )
{ ++ nc;
进行字符计数
if ( c == '\n' )
}
输出函数printf中使用了“?”操作,含义相当于:
if ( j==i ) printf ("%4d\n", i*j );
else
printf ("%4d", i*j );
for语句的变化形式
§6.3 for语句
for语句中的三个表达式中的任意一个都是可以省略的, 但是分号不能省略。
1.省略表达式2,则: for(表达式1; ;表达式3)
老师:让我们换一个角度来看待这些问题, 以上问题的实质是:将scanf函数重复执行N遍。
学生:对!好象是这么回事...... 老师:我们可以引出一个概念“循环”,简单而言:循
环就是不断反复地执行同一段程序。 学生:这就是我们今天要学的新东西?
§6.1 循环概念 循环
反复执行同一段程序,直到满足一定的 条件后才停止执行该段程序。
1
24
i=6
369 4 8 12 16
j=5
5 10 15 20 25 6 12 18 24 30 36
i*j
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
假设:行号为i
,列号为j
(1<=i<=9)
(1<=j<=i)
2.while (1) { .... } 由于循环的条件表达式恒等于 1, 所以不可能通过循环控制条件来结束循环体的执行,称为“死 循环”。
3.为了保证循环正常运行,应该特别注意: 循环控制条件 控制条件的初始状态(初始值) 循环体内部对控制条件的影响
§6.3 for语句
for语句格式 for (表达式1;表达式2;表达式3) 语句;
{ un1 = un2; un2 = un; un = un1 + un2;
}
printf ("No. %d is %d\n", n, un);
}
例C3_5204.C程序
un = un2 = 1; for (i=3; i<=n; i++) { un1 = un2;
un2 = un; un = un1 + un2; }
就会逐步长大,到了第2个月末就生出一对小兔子。 第3个月大兔子会继续生一对小兔子,而第2个月出生 的小兔子会逐步长大。第4个月时,第1月出生的兔子 继续生育,第2月出生的小兔子也可以生育一对小兔 子了,第3月出生的小兔子则逐步长大……
假设这些草原的兔子非常长寿,可以认为它们不 会死亡。请建立数学模型,计算 第N个月时,草原上 将会有多少对兔子?
递推公式: n! = 1
当 n=1 时
n! = (n-1)! * n
当 n>1 时
#include <stdio.h>
main ( )
{ long int n=1;
int i;
for ( i = 1; i <=10; i++ )
{ n = n * i;
/* 求N! */
printf ( "%2d!=%ld\n", i, n);
输出结果total
total += num
结束
§6.2 while语句-实例
#include <stdio.h>
例C3_5101
main ( )
{ int count,num,total;
/* count:计数器,num:输入的整数 */
count=0; total=0; /* total:存放累加和 */
就形成了一个死循环。
2.省略表达式1和表达式3,则:
for(;表达式2;)
等同于:
while( 表达式 )
据此结论:所有用while语句实现的循环都可以用for语 句实现。
3.表达式1、2、3全省略,则: for ( ; ; )
等同于:
while (1)
§6.3 for语句-实例
例C3_5204.C: 草原上有一对小兔子,它们刚出生后的第1个月
例C3_5101.C 从键盘输入10个整数,求这10个整数之
和。
开始
程序主体
累加器total=0 计数器count=0
while ( count<10 ) {
count++; scanf("%d", &num);
total += num; }
count<10?
成立
不成立
count=count+1 输入num
递推法是程序设计中最常用的方法之一,使用递推法必须有明 确的递推初始值和递推规则(递推公式)。
§6.3 for语句-实例
例C3_5204.C程序
例C3_5204
#include <stdio.h>
main( )
{ int n,i,un1,un2,un;
for ( ; ; )