内容正文:
<<C语言程序设计>> 课程
第5章 循环结构程序设计
Page 1
<<C语言程序设计>>
主要内容
1、循环的本质
2、三种循环结构语句(重点)
while语句
do-while语句
for语句
3 循环结构控制语句
break语句
continue语句
4 综合应用案例
Page 1
<<C语言程序设计>>
已知三边长,求三角形面积?
问题引入
每次计算完毕,程序会退出,再次计算需要重新运行程序
根据指定的条件重复执行一条或多条语句,这就是循环结构。
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
Page 1
<<C语言程序设计>>
5.1 循环的本质
printf("************
");
printf("************
");
printf("************
");
printf("************
");
printf("************
");
printf("************
");
printf("************
");
printf("************
");
printf("************
");
printf("************
");
for(int i=1;i<=8;i++)
printf(“************
);
某些相同的代码,不必重复书写,利用循环结构即可达到自动重复执行的目的,这样提高了程序编写的效率,减少了源代码的存储空间,这就是循环的本质。
等价
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
Page 1
<<C语言程序设计>>
5.1 循环的本质
for(int i=1;i<=8;i++)
printf(“************
);
循环结构三要素:
1、循环从什么时候开始,即“循环变量初值”。
2、满足什么条件要循环,即“循环控制条件表达式”。
3、每次循环要做什么,即“反复执行的语句”,简称为“循环体”。
1
2
3
Page 1
<<C语言程序设计>>
5.1 三种循环结构语句
while循环的一般形式
while(表达式)
{循环体;}
while(i<5)
{printf(" %d,", i);
i ++ ; }
表达式为真?
while循环执行过程
执行循环体
真
退 出
假
循环前:
i=1
i
第一次
循环次数
i<5
1
1,
第二次
2
2,
第三次
3
3,
第四次
4
4,
退出循环:
i=5
Page 1
<<C语言程序设计>>
5.1 三种循环结构语句
while循环的一般形式
while(表达式)
{循环体;}
当表达式为真(表达式为非0)时,执行while语句中的语句。其特点是:先判断表达式,后执行语句。while循环称为当型循环。
注意:
(1) 循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。
(2) 在循环体中应有使循环趋向于结束的语句。
Page 1
<<C语言程序设计>>
例5-1
编程序,计算 s=1+2+3+……+100
(1) 如何得到加数?
i:
while(i<=100)
{ s=s+i;
i ++ ;}
i=1;
(2) 如何实现累加?
s为被加数,循环一次加一个
初始:s=0
i=1:
s+i
s
s=s+i;
i=2:
i=100:
……
1、2、……100
s=0;
s+=i;
s+i
s
s+i
s
void main ( )
{ int i,s;
i=1;
s=0;
while(i<=100)
{ s+=i;
i++; }
}
1
1+2
1+2+...+100
i=3:
s
s+i
1+2+3
printf(" s=%d ",s);
Page 1
<<C语言程序设计>>
【随堂练习5-1】
利用while语句计算自然数序列1,2,3,…,n的和,n的值在程序执行时输入。
void main()
{ int i,s;
i=1;
s=0;
while(i<=100)
{ s+=i;
i++; }
printf("sum=%d",s);
}
5.2 三种循环结构语句
Page 1
<<C语言程序设计>>
#include <stdio.h>
void main( )
{
int i,n,s;
i=1;
s=0;
printf("请输入n的值:");
scanf("%d",&n);
while(i<=n)
{ s+=i;
i++; }
printf("sum=%d",s);
}
参考代码
5.2 三种循环结构语句
Page 1
<<C语言程序设计>>
5.2 三种循环结构语句
do-while循环的一般形式
do
{循环体;}
while(表达式) ;
while(i<5);
{printf("%d," , i);
i ++ ; }
表达式为真?
循环执行过程
执行循环体
真
退 出
假
void main( )
{ int i;
i=1;
}
循环前:
i=1
i
第一次
循环次数
1
1,
第二次
2
2,
第三次
3
3,
第四次
4
4,
退出循环:
i=5
do
Page 1
<<C语言程序设计>>
例5-3
编程序,计算 s=1+2+3+……+100
#include "stdio.h"
void main( )
{int i=1,sum=0;
do
{ sum=sum+i;
i++;
}while (i<=100);
printf("sum=%d",sum);
}
Page 1
<<C语言程序设计>>
【随堂练习5-2】
利用do-while语句计算1+1/2+1/3+…+1/n。
5.2 三种循环结构语句
Page 1
<<C语言程序设计>>
#include <stdio.h>
void main( )
{ int i,n;
float s;
i=1;
s=0;
printf("请输入n的值:");
scanf("%d",&n);
do
{ s+=1.0/i;
i++; }
while(i<=n);
printf("sum=%f",s);
}
参考代码
5.2 三种循环结构语句
Page 1
<<C语言程序设计>>
5.2 三种循环结构语句
for循环的一般形式
for(表达式1;表达式2;表达式3)
{循环体;}
printf(“*”);
表达式2为真?
for循环执行过程
计算表达式1
真
退 出
假
void main( )
{ int i;
}
for (i=0;i<10;i++)
执行循环体
计算表达式3
Page 1
<<C语言程序设计>>
5.2 三种循环结构语句
for循环的一般形式
for(表达式1;表达式2;表达式3)
{循环体;}
printf(“*”);
for (k=0;k<10;k++)
最普通的情况:表达式1是给循环变量赋初值,表达式2是循环变量的关系型表达式,表达式3是循环变量的自加自减,使循环趋结束。
for (k=10;k>=1;k--)
printf(“%d”,k);
Page 1
<<C语言程序设计>>
例5-4
编程序,计算 s=1+2+3+……+100
#include "stdio.h"
void main( )
{ int i,sum=0;
for(i=1;i<=100;i++)
sum=sum+i;
printf("sum=%d
",sum);
}
Page 1
<<C语言程序设计>>
for(表达式1;表达式2;表达式3)
{循环体;}
(1) for语句中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。
(2) 如果表达式2省略,此时表达式2始终为真,循环无终止地进行下去。
(3) 表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束。
(4) 可以省略表达式1和表达式3,只有表达式2,即只给循环条件。
for(i=1;i<=100;i++)
sum=sum+i;
说明:
Page 1
<<C语言程序设计>>
例5-5
编程序,计算 s=1+2+3+……+100
#include <stdio.h>
void main( )
{ int s=0,i;
i=1; //表达式1移至for语句之前
for( ;i<=10; )
{ s=s+i;
i++; //表达式3移至循环体末尾
}
printf("s=%d",s);
}
i=1;
while(i<=10)
{ s+=i;
i++;
}
Page 1
<<C语言程序设计>>
例 编程计算n的阶乘。
n!=12 3 ……(n-1)n
思路:
类似于累加求和,每一次循环乘上一个数字,求和将和初始化为0,这里应把积初始化为?
随堂练习
Page 1
<<C语言程序设计>>
n!=12 3 ……(n-1)n
#include "stdio.h"
void main( )
{ int n,i,p;
scanf("%d",&n);
p=1;
for(i=1;i<=n;i++)
p= p* i;
printf("%d",p);
}
Page 1
<<C语言程序设计>>
5.3 循环结构控制语句
break语句 :结束循环
break语句可以使流程跳出switch结构,继续执行switch语句下面的语句。break语句还可以用于跳出循环。
break作用使流程从循环体内跳出循环体,即提前结束循环。break语句只能用于循环语句和switch语句内,不能单独使用或用于其他语句中。
while(表达式1)
{
……
if(表达式2) break;
……
}
Page 1
<<C语言程序设计>>
5.3 循环结构控制语句
continue语句 :结束本次循环 ,即跳过本次循环下面尚未执行的语句,接着进行下一次循环。
for(int k=1;k<=50;k++)
if(k%3==0&&k%5==0)
{
printf("%d
",k);
printf("*******
");
}
读程序写结果
continue;
break;
Page 1
<<C语言程序设计>>
例5-6
编程序,输入若干字符,对输入的英文字母原样输出,其他字符不输出,直到输入回车键结束。
Page 1
<<C语言程序设计>>
#include <stdio.h>
void main( )
{ char ch;
while(1)
{ ch=getchar();
if(ch=='
')
break;
else if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
putchar(ch);
}
}
参考代码
Page 1
<<C语言程序设计>>
5.4 循环的嵌套
一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。 while循环、do-while循环和for循环可以互相嵌套。
while( )
{┆
while( )
{…}
}
while( )
{┆
do
{…}while( );
┆}
for(;;)
{┆
for(;;)
{…}
}
Page 1
<<C语言程序设计>>
5.4 循环的嵌套
#include <stdio.h>
void main( )
{int i,j;
for (i=1; i<=9; i++)
{
for (j=1; j<=i;j++)
printf("%d*%d=%d ",i,j,i*j);
printf("
");
}
}
读程序写结果
Page 1
<<C语言程序设计>>
5.5 综合应用案例
例5-8
输入一行字符,分别统计其中英文字符、数字字符和其他字符的个数。
分析
1、 输入一行字符,字符的个数未定,可以用回车键作为输入结束的条件。
2、三个整型变量char_num、int_num、other_num作为英文字符、数字字符和其他字符的计数器。
3、定义一个字符型变量ch保存从键盘输入的字符,当输入一个字符后判断该字符的类型,对相应的计数器加1。
Page 1
<<C语言程序设计>>
#include<stdio.h>
void main()
{
char ch;
int char_num=0,int_num=0,other_num=0;
while((ch=getchar())!=‘
’) //回车键结束输入
{
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')
char_num++;
else if(ch>='0'&&ch<='9')
int_num++;
else
other_num++;
}
printf("字母%d个;
数字%d个;
其它字符%d个.
",char_num,int_num,other_num);
}
参考代码
Page 1
<<C语言程序设计>>
5.5 综合应用案例
例5-9
自幂数是指一个 n 位整数,它的每个位上的数字的 n 次幂之和等于它本身。当n为4时,自幂数称为玫瑰花数,试编程输出1000~9999范围内所有的玫瑰花数。(如1643 )。
分析
1、 4位数中逐一查找。
2、分别取出个、十、白、千位,计算判断
Page 1
<<C语言程序设计>>
#include <stdio.h>
void main()
{int i,n,a,b,c,d;
for(i=1000;i<=9999;i++)
{ n=i;
a=n%10;
b=n/10%10;
c=n/100%10;
d=n/1000;
if(a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d==n)
printf("%6d",n);
}
}
参考代码
Page 1
<<C语言程序设计>>
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
5元 3元 1元
5.5 综合应用案例
Page 1
<<C语言程序设计>>
#include "stdio.h"
main( )
{int a,b,c ; /*a是公鸡数,b是母鸡数,c是小鸡数*/
printf("cock,hen,chick
");
for(a=0;a<=20;a++)
for(b=0;b<=33;b++)
for(c=0;c<=99;c++)
if( a+b+c==100 && 5*a+3*b+c/3.0==100)
printf(" %d , %d , %d
",a,b,c);
}
参考代码
Page 1
<<C语言程序设计>>
#include "stdio.h"
void main( )
{int a,b,c ; /*a是公鸡数,b是母鸡数,c是小鸡数*/
printf("cock,hen,chick
");
for(a=0;a<=20;a++)
for(b=0;b<=33;b++)
{ c=100-a-b;
if(5*a+3*b+c/3.0==100)
printf(" %d , %d , %d
",a,b,c);
}
}
参考代码
Page 1
<<C语言程序设计>>
课程小结:我们学习了什么?
循环结构本质
三种循环结构
while( )
do while( )
for()
循环控制语句
break
continue
Page 1
<<C语言程序设计>>
<<C语言程序设计>>
Page 1
<<C语言程序设计>>
$$