null第五章 循环结构 共 31 页 第 * 页第五章 循环结构 本章要点:
· 建立循环程序设计的基本概念和逻辑思维
· 掌握循环程序设计的方法大连理工大学循环的基本概念共 31 页 第 * 页什么是循环?
为什么要使用循环?循环的基本概念循环是有规律的重复操作。将复杂问题分解为简单的操作过程,程序只对简单过程描述,这些过程的多次重复就可完成对问题的求解。重复的频繁性决定了循环在程序设计中必不可少!问题2:求学生平均成绩 分数相加后除以课数做99次加法问题分解
循环控制null共 31 页 第 * 页 if--goto 循环
while循环
for循环
do while循环 先判断后循环 先循环后判断 特点:难点: C提供四种循环控制:5.1 if-goto 语句循环 共 31 页 第 * 页5.1 if-goto 语句循环 一般形式: goto 标号;
标号:语句
其中:标号用标识符表示,即由字母、数字和下划线组成,且首字符必须为字母或下划线。不能用整数来作标号。
用途:
1. 与if语句一起构成循环结构。
2. 从循环体中跳到循环体外(一般指最深层)。
3. 改变程序自上而下的执行顺序。
缺点:滥用goto语句,可使程序无规律、可读性差。null共 31 页 第 * 页 main( )
{int i=1,s=0;
L1: if(i<=100)
{ s=s+i;
i++ ;
goto L1;
}
printf(“s=%d\n”,s);
}
假真 求和 s=1+2+······+100运行结果: S=?例1null共 31 页 第 * 页1.while循环语句的形式
while(表达式)语句 先判断条件,后执行语句表达式语句假真2.执行过程注意:
循环体若包含一个以上语句,应该用花括号括起来(使用复合语句)。
循环体内应注意设置修改循环条件的语句。否则循环无法终止。 5.2 while循环语句 null共 31 页 第 * 页说明:
(1)执行while循环语句时,如果表达式的值第一次计算就等于0,则循环体一次也不执行。
(2)发生下列情况之一时,while循环结束执行:
表达式的值为0;
循环体内遇到break语句;
循环体内遇到goto 语句,且与该goto语句配合 使用的标号所指定的语句在本循环体外;
循环体内遇到return语句,此时退出while循环后,执行的
从包含该while语句的函数返回到调用函数。null共 31 页 第 * 页 求main()
{
int i=1,sum=0;
while (i<=100)
{
sum=sum+i;
i++;
}
printf("%d",sum);
}例2null共 31 页 第 * 页 输入一批正数,输入0时表示输入结束,求这些正数的和。main( )
{ int s=0, x;
scanf(“%d”,&x);
while( x!=0 )
{
s=s+x;
scanf(“%d”,&x);
}
printf(“s=%d\n”,s);
}例3null共 31 页 第 * 页已知y=2x3-3x4+6x5-4x+50, 从x=0到x=2, 每隔0.2计算并输出的值,然后输出y 的值最大值和最小值.null共 31 页 第 * 页#include “math.h”
main()
{ double x=0,max,min,y;
y=2*x*x*x-3*x*x*x*x+6*pow(x,5)-4*x+50;
max=min=y;
while(x<=2)
{ y=2*x*x*x-3*x*x*x*x+6*pow(x,5)-4*x+50;
if(y>max) max=y;
if(y
main ( )
{ int k, m, j;
scanf ( “%d”, &m);
for ( k=1; k<=m; k++) /* 控制打印m行 */
{for ( j=1; j<=k; j++) /* 打印一行中的m个*号 */
printf (“* ”);
printf(“\n”) ; }
}整理得到程序如下:例:输出下三角形乘法九九表共 31 页 第 * 页
1 2 3 4 5 6 7 8 9
---------------------------------------
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
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=7
j=5
i*j(1<=i<=9)(1<=j<=i)例:输出下三角形乘法九九表null共 31 页 第 * 页 #include
main ( )
{ int i=1, j;
while (i<=9 ) /* 控制打印表头 */
printf ("%4d",i++);
printf("\n-------------------------------\n");
for (i=1;i<=9;i++)
{ j=1;
while (j<=i )
{ printf (“%4d”, i*j);
j ++;
}
printf ("\n");
}
}打印乘法九九表内循环终值与外循环变量有关null共 31 页 第 * 页main() /*无表头*/
{ int i,j;
for(i=1;i<=9;i++)
{ for(j=1;j<=i;j++)
printf(“%3d”, i*j);
printf(“\n”);
}
}程序运行演示null共 31 页 第 * 页用for语句实现打印乘法九九表。 #include
main ( )
{ int i, j;
for ( i=1; i<=9; i++ )
printf ("%4d",i);
printf ("\n------------------------\n");
for ( i=1; i<=9; i++ )
for ( j=1; j<=i; j++ )
printf ( (j==i) ? "%4d\n":"%4d",i*j);
}输出函数printf中使用了“?”操作,含义相当于:
if ( j==i ) printf ("%4d\n", i*j );
else printf ("%4d", i*j );5.7 break和continue语句共 31 页 第 * 页5.7 break和continue语句1. break 语句
语法: break ;
功能:终止包含该语句的最内层循环。
main( )
{ int n;
for(n=100;n<=200;n++)
{ if(n%3==0)
break ;
printf(“%6d”,n);
}
}2. continue 语句
语法:continue ;
功能:结束循环体的本次执行。
main( )
{ int n;
for(n=100;n<=200;n++)
{ if(n%3==0)
continue ;
printf(“%6d”,n);
}
}该语句只能出现在switch,for, while或do—while语句中。null共 31 页 第 * 页3. 空语句
形式: ;(只由一个分号构成)
功能: 什么也不做。(可出现在程序中任何语句可以出现的地方)
例8:求级数12+22+32+…,前10项之和。
main( )
{ int i, sum;
for(sum=0,i=1;i<=10;sum+=i*i, i++) ;
printf(“sum=%d\n”, sum); }null共 31 页 第 * 页main()
{ int i=1;
while(i-->0)
printf("while=%d\n",i);
printf("%d",i);
}while=0
-1程序运行演示null共 31 页 第 * 页练习:指出下面程序的运行结果。
main()
{
int i=10;
while( i-->0);
printf(“%d\n”,i);
} main()
{
int x=3;
do {printf(“%3d”,x- =2);}
while(!(--x));
} -11 -2null共 31 页 第 * 页例1. 输入一个整数m,判断是否为素数。
若m不能被2—m-1之间的任何一个整数整除,则m即为素数。
算法思想:设k=m-1,用2至m-1依次去除m, 若m能被2—k之中任何一个整数整除,则不必除下去,肯定不是素数,跳出循环,(i<=k)。若所有数都不能被除尽,则循环自然完成。此时i>=k+1.在循环之后判别i的值是否大于或等于k+1,若是,则表明未曾被2—k之间任一整数整除过,因此输出“是素数”。
编程举例null共 31 页 第 * 页程序如下:
main( )
{ int m, i, k;
scanf(“%d”,&m);
k=m-1;
for(i=2; i<=k; i++)
if(m%i= =0) break;
if(i>=k+1) printf(“%d is a prime number\n”, m);
else printf(“%d is not a prime number\n”, m);
}null共 31 页 第 * 页求以下级数和的近似值:
y(x)=x+x3+ x5+ x7+…3*1!5*2!7*3!令x=0.5, 1.0, 2.0, 3.0, 取前10项之和, 分别计算y(x).null共 31 页 第 * 页 main()
{ int i,j; long n; double x,y, m;
j=1; x=0.5;
L: i=1; n=1; m=x*x*x; y=x;
while(i<=9)
{ y=y+m / ((2*(i+1)-1)*n);
m=m*x*x;
n=n*i;
i++; }
printf(“y=%f”,y);
if(x==0.5) x=1.0;
else x=x+1.0;
j++;
if(j<=4) goto L;
}
null共 31 页 第 * 页上机题目:
1. /4≈1-1/3+1/5-1/7+…., 取前10项之和, 求的近似值.
2. e=1+1/1! +1/2! +1/3! + …+ 1/n! +…
求e 的值, 根据输入的n 值, 求前n 项之和.
3. 打印乘法表
4. 上机完不成,下次课交作业,P 72 五(3,4)