C语言学习笔记-流程控制

流程控制

C 语言的程序是顺序执行,即先执行前面的语句,再执行后面的语句。对于C语言来说,一般来说,只有顺序、选择、循环三种执行方式。

if语句

if语句用于条件判断,满足条件时,就执行。

if (expression) statement

上面式子中,表达式expression为真(值不为0)时,就执行statement语句。

在C语言中,真的定义比较广泛,可以是1,可以是2,也可以是其他非零的正整数。

if后面的判断条件expression外面必须有圆括号,否则会报错。语句体部分statement可以是一个语句,也可以是放在大括号里面的复合语句。

在之前语句的博文中我们曾经学习过,有些循环语句后面只能跟随一条语句执行,在这里我们便认识了这种语句的运行方式。

下面是一个例子

if(x==1)	printf("hehe");

上面示例中,当变量x为10时,就会输出hehe。对于只有一个语句的语句体,语句部分通常另起一行。

if(x==1)	
	printf("hehe");

这里注意代码的缩进,一个良好的缩进习惯会大大减少编程出错的可能行。

如果有多条语句,就需要把他们放在打括号里,使其变成一个代码块。例如

if (flag == 1)
{
	count++;
	printf("%d ", i);
}

这里笔者建议,只要是可用可不用大括号的语句,一律采用大括号形式,防止因粗心不注意产生的错误

if语句可以带有else分支,指定条件不成立时(表达式expression的值为0),所要执行的代码。

if(a>b)
{
	printf("a>b");
}else{
	printf("a<b);
}

如果else的语句部分多于一行,同样可以把它们放在大括号里面
else可以与另一个if语句连用,构成多重判断

if (num % 3 == 0)
{
	printf("余数是0\n");
}
else if (num % 3 == 1)
{
	printf("余数是1\n");
}
else
{
	printf("余数是2\n");
}

如果有多个if和else,可以记住这样一条规则,else总是跟最接近的if匹配。

三元运算符 ?:

C 语言有一个三元表达式?:,可以用作if…else的简写形式

<expression1> ? <expression2> : <expression3>

这个操作符的含义是,表达式expression1如果为true(非0值),就执行expression2,否则执行expression3。

switch语句

switch 语句是一种特殊形式的 if…else 结构,用于判断条件有多个结果的情况。它把多重的else if改成更易用、可读性更好的形式。

switch (expression) 
{
  case value1: statement
  case value2: statement
  default: statement
}

上面代码中,根据表达式expression不同的值,执行相应的case分支。如果找不到对应的值,就执行default分支。
下面是一个例子;

int main()
{
	int num = 0;
	int n = 1;
	scanf("%f", &num);
	switch (num % 3)
	{
	case 0:
		printf("余数是0\n");
		break;
	case 1:
		printf("余数是1\n");
		break;
	case 2:
		printf("余数是2\n");
		break;
	}
	return 0;
}

上面示例中,根据变量 num%3 不同的值,会执行不同的case分支。如果等于0,执行case 0的部分;如果等于1,执行case 1的部分;否则,执行default的部分。default表示处理以上所有case都不匹配的情况。

每个case语句体的结尾,都应该有一个break语句,作用是跳出整个switch结构,不再往下执行。如果缺少break,就会导致继续执行下一个case或default分支。
case后面的语句体,不用放在大括号里面,这也是为什么需要break的原因。

default分支用来处理前面的 case 都不匹配的情况,最好放在所有 case 的后面,这样就不用写break语句。这个分支是可选的,如果没有该分支,遇到所有的 case 都不匹配的情况,就会直接跳出整个 switch 代码块。

switch判断条件的值一定!一定!一定!是个整数!

while 语句

while语句用于循环结构,满足条件时,不断执行循环体。

while (expression)
  statement

上面代码中,如果表达式expression为非零值(表示真),就会执行statement语句,然后再次判断expression是否为零;如果expression为零(表示伪)就跳出循环,不再执行循环体。
如果循环体有多个语句,就需要使用大括号将这些语句组合在一起。

while (expression)
{
  statement;
  statement;
}

下面是一个例子

int main()
{
	int i = 1;

	while (i <= 10)
	{
		printf("%d ", i);
		i++;
	}

	return 0;
}

上面代码中,循环体会执行10次,每次将i增加1,直到等于10才退出循环。

只要条件为真,while会产生无限循环。下面是一种常见的无限循环的写法。

do…while

do…while结构是while的变体,它会先执行一次循环体,然后再判断是否满足条件。如果满足的话,就继续执行循环体,否则跳出循环。

可以简记为:先执行,后判断

上面代码中,不管条件expression是否成立,循环体statement至少会执行一次。每次statement执行完毕,就会判断一次expression,决定是否结束循环。
如果循环部分有多条语句,就需要放在大括号里面。

i = 10;

do {
  printf("i is %d\n", i);
  i++;
} while (i < 10);

printf("All done!\n");

上面例子中,变量i并不满足小于10的条件,但是循环体还是会执行一次。

for语句

for语句是最常用的循环结构,通常用于精确控制循环次数

for (initialization; continuation; action)
  statement;

上面代码中,for语句的条件部分(即圆括号里面的部分)有三个表达式。

  • initialization:初始化表达式,用于初始化循环变量,只执行一次。
  • continuation:判断表达式,只要为true,就会不断执行循环体。
  • action:循环变量处理表达式,每轮循环结束后执行,使得循环变量发生变化。

可以简记为:初始值,循环的条件 循环的变化

循环体部分的statement可以是一条语句,也可以是放在大括号里面的复合语句。
for的三个表达式都不是必需的,甚至可以全部省略,这会形成无限循环

break语句

break语句有两种用法。一种是与switch语句配套使用,用来中断某个分支的执行,这种用法前面已经介绍过了。另一种用法是在循环体内部跳出循环,不再进行后面的循环了。

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

break命令只能跳出循环体和switch结构,不能跳出if结构

continue 语句

continue语句用于在循环体内部终止本轮循环,进入下一轮循环。只要遇到continue语句,循环体内部后面的语句就不执行了,回到循环体的头部,开始执行下一轮循环。

for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    printf("%d, %d\n", i, j);
    continue;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值