05-C控制语句:循环

C语言应该提供3种程序流:执行语句序列、如果满足某些条件就重复执行语句序列、通过测试选择哪一个语句序列。

0x00 while循环

//summing.c --根据用户键入的整数求和

#include <stdio.h>

int main(void)

{
long number;
long sum = 0L; //初始化为0
int status;

printf(“Please enter an integer to be summed ”\
“(q to quit): ”);
status = scanf(“%ld”, &status);

while(1 == status)
{
    sum += num;
    printf(“Please enter next integer to be summed ”\
    “(q to quit): ”);
}
printf(“Those integers sum to %ld.\n”, sum);
return 0;
}

==运算符是C的相等运算符,该表达式判断status是否等于1。通过scanf返回的项数来判断是否取值成功,while循环当判断条件不成立会输出总和。伪代码,用简单的句子表示程序思路的方法。

  • while循环的通用形式, while(expression) statement。statement可以是简单语句分号结尾,也可以是花括号括起来的复合语句。expression部分使用关系表达式,条件结果不为0(成真)之前,一直执行statement语句,每次执行称为迭代。如果没有break语句,终止while循环是在条件判断不成立的时候才终止。while在第一次入口条件判断处如果不成立,不会执行循环体。
  • while在语句构成上是一条单独的语句,执行到分号结束,可以用;代表空语句,最好单独占一行。

0x01 关系表达式

while循环经常依赖测试表达式作比较,这样的表达式被称为关系表达式,出现在关系表达式中间的运算符叫做关系运算符

通过关系表达式时候成立返回真或假,分别可以用1和0或者true和false代替。不能用关系表达式比较字符串。比较浮点数使用math.h头文件中的fabs()函数比较,该函数返回一个浮点值的绝对值。

  • 其他真值,非0为真值,根据测试的条件来执行判断语句的话,使用运算符时最好把常量放在左侧
  • 在C语言中,一直使用int类型的变量表达式真/假值。C99专门针对这种类型的变量新增了_Bool类型。表示真或假的变量被称为布尔变量,_Bool是C语言中布尔变量的类型名。只能储存1或0,如果把非零数值赋给_Bool类型的变量,该变量会被设置为1
  • C99提供了stdbool.h头文件,该头文件让bool成为_Bool的别名,而且把true和false分别定义为1和0的符号常量。
  • 关系运算符的优先级比算术运算符低,比赋值运算符高,x > y+2 和 x > (y+2)相同

关系运算符高优先级组:<、<=、>、>=,低优先级组:==、!=,结合律也是从左 往右

0x02不确定循环和计数循环

for循环把初始化、测试和更新组合在一处

关键字for后面的圆括号中有3个表达式,分别用两个分号隔开,第1个表达式是初始化,只会在for循环开始时执行一次。第2个表达式是测试条件,在执行循环之前对表达式求值,如果表达式为假,循环结束,第3个表达式执行更新,在每次循环结束时求值。完整的for语句还包括后面的简单语句或符合语句,for圆括号中的表达式也叫做控制表达式,它们都是完整表达式,每个表达式的副作用都发生在对下一个表达式求值之前。

0x03其他赋值运算符

  • “+=”、“-=”、”*=”、”/=”、”%=”,都先计算左边那个再赋值,并非一定要使用这些组合形式的赋值运算符,它们让代码更紧凑,而且与一般形式相比,组合形式的赋值运算符生成的机器码更高效
  • “,”逗号运算符扩展了for循环的灵活性,以便在循环头中包含更多的表达式。保证了被它分隔的表达式从左往右求值,是一个序列点,逗号左侧项的所有副作用都在执行逗号右侧项之前发生。也可以作分隔符
  • “do while”,出口条件循环(exit-condition loop),即在循环的每次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次

0x04 如何选择循环

确定需要入口条件循环还是出口条件循环,通常使用入口条件循环用得比较多,因为一般原则是在执行循环之前测试条件比较好;测试放在循环的开头,程序的可读性更高。当循环涉及初始化和更新变量时,用for循环比较合适,而在其它情况下用while循环更好。

0x05 嵌套循环

指在一个循环内包含另一个循环,嵌套循环常用于按行和列显示数据

第一次执行外层,进入内层循环执行完再开始第二次外层循环

0x06 数组简介

数组是按顺序储存的一些系列类型相同的值,如10个char类型的字符或15个int类型的值。整个数组有一个数组名,通过整数下标访问数组中单独的项或元素。C编译器不会检查数组的下标时候正确,如果下标不存在,会导致数据被放置在已被其他数据占用的地方,可能会破坏程序的结果甚至导致程序异常中断,数组的类型可以时任意数据类型。char类型数组如果包含‘\0’,在‘\0’字符前可以表示一串字符串。数组元素依次储存在内存中相邻的位置。

0 条评论
发表一条评论