内容正文:
第5章
循环结构设计
大家好,今天我讲的主题是利用Bresenham算法画圆。目前我们使用的很多图形处理软件都提供有专门的画圆工具,通常我们的操作方法是按下鼠标左键拖动,松开即得到一个圆形,那么图形软件到底是如何实现这一功能的呢?为了弄清楚这个问题我们首先来了解一下显示器的成像原理。无论是CRT显示器还是LCD显示器,显像部分都分布有很多被称为像素的像素点,我们把一台显示器能够显示的总像素数称为其分辨率,当我们画一个圆的时候,其实就是通过程序将经过圆上的像素点置为圆的颜色,其他地方显示为背景色。
1
2
(1)goto语句和if语句构成的循环结构。
(2)while语句构成的循环结构。
(3)do-while语句构成的循环结构。
(4)for语句构成的循环结构。
循环结构
循环结构又称重复结构,是按照一定的条件重复执行某段语句的程序控制结构。
3
while语句
一般形式为:
while(表达式)
{
循环体
}
循环体
表达式
真
假
while语句用来构造“当型”循环,多用于解决循环次数事先不确定的问题。
【例5.1】编程实现1+2+3+…+100。
i=1
当i<=100
sum=sum+I
i=i+1
i<=100
假
真
sum=sum+i
i=i+1
i=1
# include "stdio.h"
main()
{
int i,sum=0;
i=1;
while(i<=100)
{
sum+=i;
i++;
}
printf("%d
",sum);
}
循环的初始值
循环的条件
循环变量的增量
具有唯一真值的表达式
循环体
5
【例5.2】一个简单的印数程序。
# include "stdio.h"
main()
{
int number=0;
while(number<=1)
{
number++;
printf("%d
",number);
}
}
number
0
1
1
2
2
6
# include "stdio.h"
main()
{ int number=0;
while(number++<=1)
printf("*%d
",number);
printf("**%d
",number);
}
【例5.3】 第二个印数程序
number
0
1
2
*1
0
1
*2
2
3
**3
循环体的构成不一样
有一个延时效应
while(number<=1)
{
number++;
printf("%d
",number);
}
while(number<=1)
{
number++;
printf("%d
",number);
}
【例1】 输入一行字符,按字母、数字和其它分成三类,分别统计各类字符的数目(换行符'
'不在统计范围内)。
字母的条件:
c>='a'&&c<= 'z'
c>= 'A'&&c<= 'Z'
||
数字的条件:
c>='0'&&c<= '9'
while(ch!='
')
{
}
if(ch>='A'&&ch<='Z'||ch<='a'&&ch<='z')
z++;
else
if(ch>='0'&&ch<='9')
s++;
else q++;
scanf("%c",&ch);
char ch;
scanf("%c",&ch);
int z=s=q=0;
8
【例2】输入一正文,统计正文包含的行数,
字数和字符数。
分析:
字符数:
对每个输入的字符(不包含EOF)进行计数
行数:
以'
'为结束标志的一串字符,
字数:
假定识别符为空格字符' ' 、换行字符'
'或制表字符' \t '
对'
'计数
标志
如果c是空格字符' ' 、换行字符'
'或制表字符' \t ' ,
则将标志符置为0,表示c字符不在字中
否则,如果标志符为0(表示c是字的第一个字符)则将字数加1,并修改标志为1(表示当前字符c是一个字中的字符)。
please input n:
while((c=getchar())!=EOF)
{
++nc;
if(c=='
')
++nl;
if(c==' '||c=='