while语句的形式:


while循环的特点是:
先判断条件表达式,后执行循环体语句
例题1:求1+2+3+…+100,即
解题思路:
累加问题,需要先后将100个数相加
重复加法运算,用循环实现
后一个数是前一个数加1而得
#include <stdio.h>
int main()
{ int i=1,sum=0;
while (i<=100)
{ sum=sum+i;
i++;
}
printf("sum=%d\n",sum);
return 0;
}

参看上例,完成以下程序编写程序计算求1+3+5+…+99+101的值。
思考:用
……公式求
的近似值,直到发现某一项的绝对值小于10-6 为止。
例题2:求1~10的平方根。
解题思路:
重复执行10次求平方根的操作,要用到循环结构。
通过while语句来实现。
#include <stdio.h>
#include <math.h>
int main( )
{ int num;
num = 1;
printf(“数据\t平方根\n”);
while(num<=10)
{
printf("%2d\t%5.3f\n",num,sqrt(num));
num++;
}
return 0;
}
例题3:求两个数的最大公约数.
解题思路:
两个数求余,如能整除,则除数就是最大公约数
如不能整除,则用除数作为新的被除数,余数作为新的除数,再求余,重复执行,直到余数为0,则当前除数就是最大公约数。
#include <stdio.h>
int main()
{ int m,n,r;
printf("输入两个数:");
scanf("%d,%d",&m,&n);
r=m%n;
while(r!=0)
{ m=n;
n=r;
r=m%n; }
printf("最大公约数为:%d\n",n);
return 0;
}
*EASYX图形编程.while语句编程示例
最常用的一个捕获按键的函数:getch()
用变量保存这个按键:
char c = getch();
然后再做判断即可。
不过程序执行到 getch() 是会阻塞的,直到用户有按键才能继续执行。可游戏中总不能因为等待按键而停止游戏执行吧?所以,要有一个函数,判断是否有用户按键:kbhit()
这个函数返回当前是否有用户按键,如果有,再用 getch() 获取即可,这样是不会阻塞的。
即:
char c;
if(kbhit())
c=getch();
举一个简单的例子,如果有按键,就输出相关按键。否则,输出“.”。每隔 100 毫秒输出一次。按 ESC 退出。
注:ESC 的 ASCII 码是 27。
完整代码如下:
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
voidmain()
{
char c =0;
while(c !=27)
{
if(kbhit())
c =getch();
else
c ='.';
printf("%c", c);
Sleep(100);
}
}
结合上一课的简单动画,就可以做出来靠按键移动的图形了吧,看以下代码,实现 a s 控制圆的左右移动:
#include<graphics.h>
#include<conio.h>
voidmain()
{
initgraph(640,480);
int x =320;
// 画初始图形
setcolor(YELLOW);
setfillstyle(GREEN);
fillcircle(x,240,20);
char c;
while(c !=27)
{
// 获取按键
c =getch();
// 先擦掉上次显示的旧图形
setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(x,240,20);
// 根据输入,计算新的坐标
switch(c)
{
case'a':x-=2;break;
case'd':x+=2;break;
case27:break;
}
// 绘制新的图形
setcolor(YELLOW);
setfillstyle(GREEN);
fillcircle(x,240,20);
// 延时
Sleep(10);
}
closegraph();
}
[作业]
请继续完成这个程序,实现以下功能:
1. 上下的控制;
2. 边界检测;
3. 结合 kbhit 实现惯性移动(即按一下方向键,圆就会一直向这个方向移动)

