循环语句

  • while
while( 循环条件 ) //1 先判断循环条件 如果条件为真 执行循环体语句;否则执行}后面的语句
{    
     //循环体语句 
     dosomething.....  //2 执行完循环体语句之后再次执行 1
}

如果循环体语句只有一条语句,那么循环体语句外面的{ }可以省略。

while ( 没有得到答案 )
    printf("你有男朋友吗?\n");
  • continue

    单词本义继续,表示本轮循环不再执行,下一轮继续。

  • break

    单词本义打破,表示打破(跳出)语句所在的循环。注意如果有多层循环,break语句只能跳出当前这一层循环。

for

//1先执行for循环中的 初始化表达式 然后 执行2

for( 初始化表达式 ;循环条件表达式 ; update-expr) //2 判断循环条件 如果循环条件为真 执行3;否则执行}后面的语句
{
    //循环体语句
    dosomething..... //3 执行完循环体语句之后再次执行 2
}

update-expr 从字面来看叫 更新表达式,用以 表示下一轮循环和本轮循环 有哪些值是需要被更新的。

C99的for改进

C89、C99、C11为何物

美国国家标准协会(ANSI)  
国际电工委员会(IEC)  
国际标准化组织(ISO)

1973年初,C语言的主体完成。Thompson和Ritchie迫不及待地开始用它完全重写了UNIX。此时,编程的乐趣使他们已经完全忘记了那个"Space Travel",一门心思地投入到了UNIX和C语言的开发中。随着UNIX的发展,C语言自身也在不断地完善。直到今天,各种版本的UNIX内核和周边工具仍然使用C语言作为最主要的开发语言,其中还有不少继承Thompson和Ritchie之手的代码。

在开发中,他们还考虑把UNIX移植到其他类型的计算机上使用。C语言强大的移植性(Portability)在此显现。机器语言和汇编语言都不具有移植性,为x86开发的程序,不可能在Alpha,SPARC和ARM等机器上运行。而C语言程序则可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可运行。

1977年,Dennis M.Ritchie发表了不依赖于具体机器系统的C语言编译程序《可移植的C语言编译程序》。

1982年,很多有识之士和美国国家标准协会为了使这个语言健康地发展下去,决定成立C标准委员会,建立C语言的标准。委员会由硬件厂商,编译器及其他软件工具生产商,软件设计师,顾问,学术界人士,C语言作者和应用程序员组成。

1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.159—1989,简称“C89”,不过人们也习惯称其为“ANSI C”。C89在1990年被国际标准组织ISO(International Organization for Standardization)一字不改地采纳,ISO官方给予的名称为:ISO/IEC 9899,所以ISO/IEC9899: 1990也通常被简称为“C90”。

1999年,基于C89做了修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999,简称“C99”。

2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为“C11”。

在C89中for只能写成这样的

int  i = 0;
for( ;i < 1000; ++i)
{
    printf("i = %d\n",i);
}

C99及以后则可以写成这样

for( int i = 0; i < 1000; ++i)
{
    printf("i = %d\n",i);
}

可以看出C99及之后的语法更加简洁。C++语言也支持这两种写法,而且在C++中第二种写法更加常用。

拓展延伸-gcc编译器对c99的支持情况

指定编译器以c99方式编译我们的C代码

  • linux command-gcc

    gcc src.c -std=c99

  • Qt IDE

在Qt项目的pro文件中加上 QMAKE_CFLAGS += -std=c99

  • Microsoft Visual Studio

MSVC是一个C++编译器,因此我们不需要指定即可直接编译部分C99标准的代码。

循环嵌套

演示多个循环循环嵌套时,break的使用。

新增案例:99乘法表

1_1= 1
1_2= 2 2_2= 4
1_3= 3 2_3= 6 3_3= 9
1_4= 4 2_4= 8 3_4=12 4_4=16
1_5= 5 2_5=10 3_5=15 4_5=20 5_5=25
1_6= 6 2_6=12 3_6=18 4_6=24 5_6=30 6_6=36
1_7= 7 2_7=14 3_7=21 4_7=28 5_7=35 6_7=42 7_7=49
1_8= 8 2_8=16 3_8=24 4_8=32 5_8=40 6_8=48 7_8=56 8_8=64
1_9= 9 2_9=18 3_9=27 4_9=36 5_9=45 6_9=54 7_9=63 8_9=72 9*9=81

1.思路
1>
X_X=X
X_X=X X_X=X
X_X=X X_X=X X_X=X
X_X=X X_X=X X_X=X X_X=X
X_X=X X_X=X X_X=X X_X=X X_X=X
X_X=X X_X=X X_X=X X_X=X X_X=X X_X=X
X_X=X X_X=X X_X=X X_X=X X_X=X X_X=X X_X=X
X_X=X X_X=X X_X=X X_X=X X_X=X X_X=X X_X=X X_X=X
X_X=X X_X=X X_X=X X_X=X X_X=X X_X=X X_X=X X_X=X X*X=X

2>

@

@ @

@ @ @

@ @ @ @

@ @ @ @ @

@ @ @ @ @ @

@ @ @ @ @ @ @

@ @ @ @ @ @ @ @

@ @ @ @ @ @ @ @ @

3>
把符号替换成等式。

#include <stdio.h>
int main()
{

    for (int i = 1; i < 10; i++) 
    {
        for (int j = 1; j<i+1; j++) 
        {
//            printf("*");
//            printf("* ");
//     \t 制表符 --- 每次打印会空出4个空格
//            printf("*\t"); 
//            printf("X*X=X\t");
//     打印几行的时候,第二个数恰好是几,而行数是i控制的
//            printf("%d*%d=%d\t",j,i,i*j);
            printf("%d*%d=%2d\t",j,i,i*j);
        }
        printf("\n");
    }

    return 0;
}

while和for循环的区别