目录

  • 1 第一章 C语言简介
    • 1.1 C语言前世今生
    • 1.2 主流开发环境介绍
    • 1.3 第一个小程序解析
    • 1.4 常见编译错误
    • 1.5 章节知识点小结
  • 2 算法基础
    • 2.1 算法-程序的灵魂
    • 2.2 算法的描述-流程图
  • 3 数据类型与运算符
    • 3.1 数据描述
    • 3.2 运算符和表达式1
    • 3.3 运算符和表达式2
    • 3.4 章节知识点小结
  • 4 顺序结构程序设计
    • 4.1 输入和输出
    • 4.2 顺序结构程序设计
    • 4.3 章节知识点小结
  • 5 选择结构程序设计
    • 5.1 关系运算符和关系表达式
    • 5.2 逻辑运算符和逻辑表达式
    • 5.3 if语句
    • 5.4 条件运算符
    • 5.5 switch语句
    • 5.6 章节知识点小结
  • 6 循环结构程序设计
    • 6.1 while循环结构
    • 6.2 do_while循环结构
    • 6.3 for循环结构
    • 6.4 循环的嵌套
    • 6.5 break语句和continue语句
    • 6.6 章节知识点小结
  • 7 数组
    • 7.1 一维数组
    • 7.2 二维数组
    • 7.3 字符数组
    • 7.4 章节知识点小结
  • 8 函数
    • 8.1 子程序设计
    • 8.2 函数定义
    • 8.3 函数的调用
    • 8.4 局部变量和全局变量
    • 8.5 参数传递
    • 8.6 函数递归调用
    • 8.7 章节知识点小结
  • 9 指针
    • 9.1 指针的基本概念
    • 9.2 指针变量的定义及引用
    • 9.3 通过指针引用数组元素
    • 9.4 指向多维数组的指针和指针变量
    • 9.5 用指向数组的指针作函数参数
    • 9.6 指针与字符串
    • 9.7 函数指针和指针函数
    • 9.8 章节知识点小结
  • 10 用户自己建立数据类型
    • 10.1 定义和使用结构体变量
    • 10.2 使用结构体数组
    • 10.3 结构体指针
    • 10.4 章节知识点小结
  • 11 编译预处理
    • 11.1 宏定义预处理
    • 11.2 文件包含预处理
    • 11.3 条件编译预处理
    • 11.4 章节知识点小结
  • 12 文件
    • 12.1 文件的基本知识
    • 12.2 文件的基本操作
    • 12.3 章节知识点小结
while循环结构



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 实现惯性移动(即按一下方向键,圆就会一直向这个方向移动)