• C Primer Plus学习笔记(五)- C控制语句:循环


    伪代码的概念:

    伪代码是一种用简单的句子表示程序思路的方法,它与计算机语言的形式相对应。伪代码有助于设计程序的逻辑。确定程序的逻辑无误之后,再把伪代码翻译成实际的编程代码。使用伪代码的好处之一是,可以把注意力集中在程序的组织和逻辑上,不用在设计程序时还要分心如何用编程语言来表达自己的想法

    while语句

    while 循环的通用形式:

    while (expression)

      statement

    statement 部分可以是以分号结尾的简单语句,也可以是用花括号括起来的复合语句

    expression部分都使用关系表达式。如果 expression 为真(非零),执行 statement 部分一次,然后再次判断 expression。在 expression 为假(0)之前,循环的判断和执行一直重复进行。每一次循环都被称为一次迭代。

    while 循环有一点很重要:在构建 while 循环时,必须让测试表达式的值有所变化,表达式最终要为假

    while 循环是使用入口条件的有条件循环。满足测试表达式描述的条件才能进入循环体

    用关系运算符和表达式比较大小

    <       小于

    <=     小于等于

    ==     等于

    >       大于

    >=     大于等于

    !=      不等于

    关系运算符还可用于比较字符,比较的是机器字符码(ASCII),不能用关系运算符比较字符串

    比较浮点数时,尽量只使用 < 和 >,因为浮点数的四舍五入会导致在逻辑上应该相等的两个数却不相等

    真值:

    C语言中,所有的非零值都视为真,只有0被视为假

    简单的关系表达式由关系运算符及其运算对象组成。如果关系为真,关系表达式的值为1;如果关系为假,关系表达式的值为0

    _Bool类型:

    在编程中,表示真或假的变量称为布尔变量,_Bool 是 C 语言中布尔变量的类型名

    _Bool 类型的变量只能储存1(真)或0(假),如果把其他非零数值赋给_Bool 类型的变量,该变量会被设置为1

    优先级和关系运算符:

    关系运算符的优先级比算术运算符(包括+和-)低,比赋值运算符高

    x > y + 2 和 x > (y + 2)相同;x = y > 2 和 x = (y > 2)相同

    x_bigger = x > y 和 x_bigger = (x > y)相同

    关系运算符之间有两种不同的优先级:

    高优先级组:<<=   >>=

    低优先级组:==     !=

    ex != wye == zee 和 (ex != wye) == zee相同,首先C判断 ex 和 wye 是否相等,然后用得出的值1或0再与 zee 比较

    不确定循环和计数循环:

    一些 while 循环是不确定循环。不确定循环就是指在测试表达式为假之前,预先不知道要执行多少次循环

    还有一类是计数循环,这类循环在执行循环之前就知道要重复执行多少次

    创建一个重复执行固定次数的循环涉及3个行为:

    1.必须初始化计数器

    2.计数器与有限的值作比较

    3.每次循环时递增计数器

    for循环

    for 循环把上面3个行为组合在一起

    for 循环的形式:

    for (initialize; test; update)

      statement

    initialize 表达式在执行 for 语句之前只执行一次;然后对 test 表达式求值,如果表达式为真,执行循环一次;接着对 update 表达式求值,并再次检查 test 表达式

    #include <stdio.h>
    
    int main(void)
    {
    	const int num = 22;
    	int count;
    
    	for (count = 1; count <= num; count++)
    		printf("Hello World!
    ");
    
    	return 0;
    }
    

    运行结果

    关键字 for 后面的圆括号中有3个表达式,分别用两个分号隔开

    第1个表达式是初始化,只会在 for 循环开始时执行一次;第2个表达式是测试条件,在执行循环前对表达式求值,如果表达式为假,则结束循环;第3个表达式执行更新,在每次循环结束时求值

    也可以用字符代替数字计数

    可以省略一个或多个表达式,但是不能省略分号,只要在循环中包含能结束循环的语句即可

    #include <stdio.h>
    
    int main(void)
    {
    	const int num = 22;
    	int count;
    
    	for (count = 1; count <= num; )
    	{
    		printf("Hello World!
    ");
    		count++;
    	}
    
    	return 0;
    }
    

    运行结果

    如果忽略第2个表达式会被视为真

    第1个表达式不一定是给变量赋初值,也可以是使用printf()。在执行循环的其他部分之前,只对第1个表达式求值一次或执行一次

    int main(void)
    {
    	const int num = 22;
    	int count = 1;
    
    	for (printf("Hello C
    "); count <= num; count++)
    		printf("Hello World!
    ");
    
    	return 0;
    }
    

    运行结果

    其他赋值运算符:+=、-=、*=、/=、%=

    其他赋值运算符都用于更新变量

    a += 1  与  a = a + 1 相同
    a -= 1  与  a = a - 1 相同
    a *= 1  与  a = a * 1 相同
    a /= 1  与  a = a / 1 相同
    a %= 1  与  a = 1 % 1 相同
    

    逗号运算符:

    逗号运算符扩展了 for 循环的灵活性,以便在循环头中包含更多的表达式

    逗号表达式保证了被它分隔的表达式从左往右求值,逗号是一个序列点

    a = 12,22;
    //相当于下面的代码
    a = 12;
    22;
    

    a = 12 是逗号左侧的子表达式,22 是右侧的子表达式。整个逗号表达式的值是逗号右侧表达式的值,而且左侧的赋值表达式把 12 赋给变量 a

    任何表达式后面加上一个分号就成了表达式语句

    a = (12,22);
    

    a 的值是逗号右侧子表达式的值,即22

    逗号也可用作分隔符

    char ch, date;
    
    printf("%d %d
    ", a, b);
    

    逗号运算符把两个表达式连接成一个表达式,并保证最左边的表达式最先求值

    整个逗号表达式的值是逗号右侧表达式的值

    出口循环:do while

    while 循环和 for 循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容

    C 语言还有出口条件循环,即在循环的每次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次,这种循环被称为 do while 循环

    do while 循环的通用形式:

    do

      statement

    while (expression);

    statement 可以是一条简单语句或复合语句,在 expression 为假或0之前,重复执行 statement 部分

    do while 循环在执行完循环体后才执行测试条件,所以至少执行循环体一次,do while 循环适用于那些至少要迭代一次的循环

    #include <stdio.h>
    
    int main(void)
    {
    	int count = 1;
    
    	do
    	{
    		printf("Current count is %d
    ", count);
    		count++;
    	}while(count <= 10);
    	printf("Run End
    ");
    	
    	return 0;
    }
    

    运行结果

    嵌套循环

    嵌套循环指在一个循环里包含另一个循环

    #include <stdio.h>
    #define ROWS 6
    #define CHARS 10
    
    int main(void)
    {
    	int row;
    	char ch;
    
    	for (row = 0; row < ROWS; row++)  //外层循环
    	{
    		for (ch = 'A'; ch < ('A' + CHARS); ch++)   //内层循环
    			printf("%c", ch);
    		printf("
    ");
    	}
    
    	return 0;
    }
    

    运行结果

  • 相关阅读:
    文件操作
    苹果越狱
    猫的期幻之旅-20130114
    js传url中文参数乱码问题
    JS三元
    SQL同列合并
    数据库引擎介绍innodb和myisam
    数据库优化
    gleez 下分页功能优化
    kohana安装总结
  • 原文地址:https://www.cnblogs.com/sch01ar/p/8922979.html
Copyright © 2020-2023  润新知