目录

  • 1 第一章  C语言概述
    • 1.1 第一节  C语言的产生和发展
    • 1.2 第二节  C语言的特点
    • 1.3 第三节  两个简单的C程序
    • 1.4 第四节  C程序的上机步骤
    • 1.5 第五节  Dev-C++介绍
    • 1.6 第六节  VC2010学习版介绍
    • 1.7 第七节  宏定义和文件包含
    • 1.8 本章小结
    • 1.9 本章单元测试
  • 2 第二章  基本数据类型与简单程序设计
    • 2.1 第一节  C语言的基本数据类型
    • 2.2 第二节  常量
    • 2.3 第三节  变量
    • 2.4 第四节  赋值语句
    • 2.5 第五节  数据输出
    • 2.6 第六节 数据输入
    • 2.7 第七节  运算符
    • 2.8 第八节  常用的数学函数
    • 2.9 第九节  顺序结构程序设计
    • 2.10 本章小结
    • 2.11 本章单元测试
  • 3 第三章  分支结构程序设计
    • 3.1 第一节  关系表达式和逻辑表达式
    • 3.2 第二节  if单分支语句
    • 3.3 第四节  if双分支语句
    • 3.4 第五节  if多分支语句
    • 3.5 第六节  case多分支语句
    • 3.6 第七节  分支结构程序设计实例
    • 3.7 本章小结
    • 3.8 本章单元测试
    • 3.9 书中本章习题答案
  • 4 第四章  循环结构程序设计
    • 4.1 第一节  为什么需要循环控制
    • 4.2 第一节  while循环
    • 4.3 第二节  do ... while循环
    • 4.4 第三节  for循环
    • 4.5 第四节  多重循环
    • 4.6 第五节  break语句和continue语句
    • 4.7 第六节  循环结构程序设计实例
    • 4.8 本章小结
    • 4.9 书中本章习题答案
  • 5 第五章 数组
    • 5.1 第一节  一维数组的定义和使用
    • 5.2 第二节  二维数组的定义和使用
    • 5.3 第三节  字符数组的定义和使用
    • 5.4 第四节  数组的应用举例
  • 6 第六章  函数
    • 6.1 第一节  函数的定义
    • 6.2 第二节  函数的调用
    • 6.3 第三节 数组作为函数参数
    • 6.4 第四节  变量的作用域
    • 6.5 第五节 变量的存储类别
    • 6.6 第六节 函数应用实例
  • 7 第七章 结构体和共用体
    • 7.1 第一节  概述
    • 7.2 第二节  定义结构体变量的方法
    • 7.3 第三节 结构体变量的引用
    • 7.4 第四节 结构体数组
    • 7.5 第五节 共用体
    • 7.6 第六节  结构体和共用体应用实例
  • 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 第五节  文件应用实例
  • 10 附录
    • 10.1 附录A  基本字符ASCII码表(0~127)
    • 10.2 附录B  运算符优先级表
    • 10.3 附录C 常用C库函数表
    • 10.4 附录D  编译常见错误提示
    • 10.5 附录E  常见C语言英语单词
    • 10.6 附录F  如何从十进制转换为二进制
    • 10.7 附录G  如何把二进制数转化为十进制数
    • 10.8 附录H  什么是编译器
    • 10.9 附录I  与编译器相关的几个知识点
第一节  while循环
  • 1 文字讲解
  • 2 视频讲解
  • 3 拓展资料

一、while循环语句的有关知识

1、while语句的一般形式

  1. while( 表达式 )

  2. {

  3.      语句序列;

  4. }

说明:①表达式是循环条件,语句序列为循环体。

二、while语句的执行过程

   

说明:

它的执行过程如图4-1所示。

① 首先计算“表达式”的值,如果非0,循环条件为真,则进入第②步,开始一次循环周期;如果为假,则进入第③步。

② 执行“{  }”内的“语句序列”,这些“语句序列“称为“循环体”,循环体执行完后,返回第①步,开始下一轮的循环条件测试。

③ 结束循环,执行 while 循环后面的语句。

while 语句中的表达式与 if 语句一样,通常是一个关系表达式或逻辑表达式,但从理论上讲,可以为任何类型的表达式。循环体中的语句既可以是简单语句,也可以是复合语句

注意:

① 循环必须在有限的次数内结束,否则会出现“死循环”,在程序中应避免出现死循环。

② while循环执行的特点是先判断条件,后执行循环体,因此,循环次数可能为0

三、while循环语句例题讲解

例4-1  编程求1+2+3+4+5

算法分析:

         可以看成等差数列求和,公差d=1

         下标i:  1,2,3,4,5, …,  n, …      

          项:    1,2,3,4,5,…,an, …     

                       公差d=1,a0=0, a1=1, 

                         递推公式:   

                         通项公式: an=n

                      初始化是 a0或a1开始             

         关键点:每次计算方法一样,重复项。

           和Sn:   1,3,6,10,15, …,Sn, 

                      S0=0, S1=S0+a1=a1

                      递推公式:      

                      通项公式:   Sn=n*(n+1)/2

                      初始化是从 S0 或 S1 开始   

                     关键点:每次计算方法一样,重复项。

            初始值:

            S初始值:对于累加和,S应初始化为0,对于累乘积,S应初始化为1.

             变量分析:由于下标与数据项完全一样,可以用变量 i 同时表示下标和数据项。变量 s 可以表示和 Sn 。特别注意,在某一时间,计算好当前项,对于前一项数据不需要保存,故可以使用 s=s+i 。

流程图:

    

源程序:

  1. #include  <stdio.h>

  2. main( )

  3. {    int  sum, i;

  4.     sum = 0;     // 注意:此处sum表示S0

  5.     i = 1;           // 注意:此处i表示第一项a1与序号1

  6.     while( i<=5 )

  7.     {     sum = sum + i;     // 表示累加当前项

  8.           i = i+1;                 // 表示产生下一项

  9.     }

  10.      printf("1+2+3+4+5=%d\n", sum);  //输出和

  11. }

运行结果如图4-2所示。

        

程序测试分析:

期望结果为15,运行结果为15,相符,表示程序正确。

运行过程如表4-1所示。

表4-1  例4-1的运行过程
变量名sumi循环条件(i<=5)
初始状态01
第一轮循环后0+1=12
第二轮循环后1+2=33
第三轮循环后3+3=64
第四轮循环后6+4=105
第五轮循环后10+5=156假(结束循环)

一个循环结构通常包含下面3个部分:

循环变量赋初值(如while语句前的语句“i=1;”)。

循环条件(如“i<=5”)。

循环变量值的调整(如“i=i+1;”)。调整循环变量的值可以让循环条件在某个时候变为假,从而结束循环。

当循环体只有一条语句时,“{  }”可以省略


四、while循环语句练习

思考题1:  计算1+2+3+4+5,请将下面的程序补充完整。

  1. #include  <stdio.h>

  2. main( )

  3. {    int  sum, i;

  4.     sum =            1                   ;   

  5.     i =       1              ;   

  6.     while( i<=5 )

  7.     {     

  8.           i = i+1;                 // 表示产生下一项

  9.           sum = sum + i;     // 表示累加当前项         

  10.     }

  11.      printf("1+2+3+4+5=%d\n", sum);  //输出和

  12. }



    上面程序为什么不对?上面只加 2+3+4+5+6

    特别注意事项:对于此类程序,需要考虑 a1 是否加进来或多加了一次,

最后一项是否加进来,最后一项的后一项是否加进来,也就是多加、少加、重复加数据项的问题。


思考题2    请编写程序,计算1+5+9+13+17+21

源程序参考如下:

  1. #include  <stdio.h>

  2. main(  )

  3. {  

  4.     int  i, a, s, d;

  5.     d = 4;      //表示公差 

  6.     a = 1;      // 表示a1 

  7.     s = 1;      // 表示S1

  8.     i = 1;      // 表示下标1 

  9.     while( i < 6 )

  10.     {

  11.         a = a + d;      //产生下一项  

  12.     s = s + a;      //累加下一项 

  13.         i = i + 1;       //产生下一个标号 

  14.         printf("%d\n",i);     //打印下标 

  15.     }

  16.     printf("1+5+9+13+17+21=%d", s);

  17. }

 

思考题3    请编写程序,计算1+4+7+10+13+16

源程序参考如下1:

  1. #include  <stdio.h>

  2. main(  )

  3. {  

  4.     int  i, a, s;

  5.     a = 1;      // 表示a1 

  6.     s = 1;      // 表示S1

  7.     i = 1;      // 表示下标1 

  8.     while( i < 6 )

  9.     {

  10.            a =      a + 3           ;//产生下一项

  11.     s = s + a;      //累加下一项 

  12.          i = i + 1;       //产生下一个标号 

  13.          printf("%d\n",i);     //打印下标 

  14.     }

  15.     printf("1+4+7+10+13+16=%d", s);

  16. }


#include  <stdio.h>

main(  )

{  

    int  i, s;

    s = 2;      // 表示S1

    i = 1;      // 表示下标1 

    while( i < 6 )

    {         //通项公式    an=1+(n-1)*3

    i = i + 1;       //产生下一个标号 

    s = s +  i*(i+1)      ;      //累加下一项 ,应用通项公式。

    // i = i + 1;       //产生下一个标号 

    printf("%d,%d\n",i,s);     //打印下标 

    }

    printf("1+4+7+10+13+16=%d", s);


}




   1*1+2*2+3*3+4*4+5*5


   1*2+2*3+3*4+4*5+5*6