5.1 为什么需要循环控制

用于处理需要进行重复的操作。

5.2 用while语句实现循环

语法结构:

while(表达式) 语句

语句就是循环体:可以是单条语句,也可以是复合语句
表达式被称为循环条件表达式:表达式的值为非0(真)时就执行循环体语句
特点:先判断,在执行。

注意:

  1. 循环体如果是多个语句,应该用花括号括起来,作为复合语句的出现。
  2. 必须给i和sum赋初始值,否则值是随机的。
  3. 循环体中应有使循环趋向于结束的语句。

5.3 用do….while语句实现循环

语法结构

do
    语句
while(表达式);
特点:先执行一次循环体,然后判断条件是否成立。条件成立,再执行循环体。

一般情况下,while和do/while处理同一问题时,若二者的循环体部分一样,name结果也一样。

5.4 用for语句实现循环

可以完全代替while语句,for语句更为灵活。

语法结构:

for(表达式1;表达式2;表达式3)

​ 语句

3个边大师的主要作用:

表达式1:设置初始条件,只执行一次,可以为零个,一个或多个变量设置初值

表达式2:循环条件表达式,循环的判断。

表达式3:作为循环的调整,例如使循环变量增值,它是执行完循环体后才进行的

for语句的执行过程如下:

  1. 执行表达式1
  2. 执行表达式2,表达式值为真,则执行循环体,然后执行第3步,为假,则结束循环转到第5步。
  3. 执行表达式3.
  4. 执行第2步
  5. 结束循环

可以在for语句外设置表达式1

可以在for语句循环体内设置表达式3

不写表达式2,判断条件为真 即非0

注意:

  • C99支持在 表达式1里进行变量定义赋值,C89支持赋值,不支持定义

  • 表示式2只要不是值为非0任何表达式 就执行循环体

5.5 循环的嵌套

想想Java就行了

循环嵌套的方式.png

5.6 几种循环的比较

  1. 3种循环都可以用来处理同一问题,一般情况下他们可以相互代替。

  2. while和do/while循环中,只在while后面括号内指定循环条件,为了能使循环能正常结束,循环体内包含驱使循环结束的语句。

    for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体语句放在表达式3中。因此for语句的功能更强。

  3. while和do/while,循环变量初始化的操作应在while和do/while语句之前完成。

  4. 3种循环语句都可以用break跳出循环,continue语句结束本次循环

5.7 改变循环执行状态

5.7.1 用break语句提前终止循环

作用是使流程跳出循环体之外,接着执行循环体下面的语句。

5.7.2 用continue提前结束本次循环

作用:有时不希望终止整个循环的操作,而只希望提前结束本次循环,接着执行下次循环。

5.7.3 break和continue的区别

continue:结束本次循环

break:终止整个循环的执行

continue的练习题.png

# include <stdio.h>
int main ()
{
    int i,j;
    for(i=1;i<5;i++)
    {
        for(j=1;j<=i*5;j++)
        {
            if(j%i!=0)
                continue;
            printf("%d\t",j);    
        }
        printf("\n");
    }
    return 0;
}

5.8 循环程序举例

getchar()函数:不会直接读取用户输入字符,用户输入的字符输入后,会存入到缓冲区。后续可以接着用getchar()调用,直到缓冲区中没有字符。

说明:

  • 当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符,getchar函数的返回值是用户输入的第一个字符的ASCII码。

  • 如出错返回-1,且将用户输入的字符回显到屏幕,如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。

  • 也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。

# include <stdio.h>
int main()
{
/*
转换字符串(字母)
*/ 

    char c;
    c=getchar();
    while(c!='\n')
    {
        if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){
            if((c>='w'&&c<='z')||(c>='W'&&c<='Z'))
                c-=22;
            else
                c+=4;
        }
        printf("%c",c);
        c=getchar();//从缓冲区中读取剩余的字符 
     } 
     printf("\n");
    return 0;
}