C语言——分支与循环

#学习记录#

C语言是一个结构化的程序设计语言,这里的结构指的就是顺序结构分支结构循环结构,这三种结构C语言都可以实现。

细想一下,我们生活中的很多事都可以拆分为这三个结构,这三种又可以互相嵌套.今天来介绍怎么使用 if  switch 来实现分支结构,使用 while for 来实现循环结构。

If语句:

 if 的语法如下:

	if (表达式1)  //表达式成立时,执行语句1...
		语句1;

当判断开始时,如果条件表达式满足,比如 5 % 2 == 1 ,就会返回值 非0 (在C语言中非0表示真,0表示假),接下来开始执行语句1...,当条件不满足时,就会返回值 0 ,跳过语句1,结束分支判断。

这种写法适合当结果只有两种时,例如判断奇偶数,判断闰年等等,当结果出现三种及以上时,我们就需要使用 else if else 来扩展我们的判断语句。

int main()
{
	if (表达式1) //表达式成立时,执行语句1...
	{
		语句1;
		....;
	}
	else if (表达式2) //当表达式1不成立,判断表达式2,表达式2成立执行语句2...
	{
		语句2;
		....;
	}
	else  //当表达式1,2都不成立时,执行语句3...
	{
		语句3;
		....;
	}
	return 0;
}

当语句块只有一条语句时可以省略 { } 

悬空else问题:        

int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("123\n");
	else
			printf("456\n");
	return 0;
}

上述代码中很多人会认为,第一个if条件表达式没有满足,跳到下面的 else 输出456,可实际上什么都不会输出。这是因为上述代码的排版,让我们以为 else 是与第一个 if 对齐,实际上 else 是与第二个 if 对应的。这就是悬空else的问题,是由排版不正确引起的,也让我们懂了一个规则:

  •  else 总是跟最近的一个 if 匹配

这个问题也提醒了我们,带上适当的大括号,可以让代码的逻辑更清晰,代码的可读性更高。

Switch语句:

         switch 语句可以当作一种特殊的 if...else 语句,用于判断条件有多个结果的情况,把 else if  变成一种更易用、更好读的形式。

语法如下:

int main()
{
	switch (条件表达式)  //获取条件表达式的值,进入判断
	{
		case (value1)  //当条件表达式的值=value1时,执行语句1
			语句1;
			break;     //退出判断
		case (value2)
			语句2;
			break;
		case (value3)
			语句3;
			break;
		default:     //当上面所有值都不相等时,执行语句4
			语句4;
			break;
	}
	return 0;
}

 switch 结构要注意的比较多:

  1.  switch 后的条件表达式只能是整型表达式;
  2.  value 的值只能是整型常量表达式;
  3.  case 与后面的值中间要加一个空格;
  4. 每一个 case 后要加上一个 break 才会跳出 switch ,否则会按照 case 顺序一直运行下去;
  5.  default case 是没有顺序要求的,只要能满足实际需求即可,通常放在最后。

While循环语句:

下面我们通过一个图和一段代码来理解这个循环语句;

int main()   //使用whlie循环实现输出1-10
{
	int i = 1;  //给变量i赋一个初值
	while (i <= 10)  //whilie(条件表达式)
	{
		printf("%d ", i);  //打印变量i
		i = i + 1;		 //增加i的值,不让程序进入死循环
	}
	return 0;
}

循环需要注意的是参与表达式的变量要有变化,通常在循环语句里执行 i = i + 1 ,这样循环才不会进入死循环。

Do....While语句:

while 语句的区别在与:

while:先判断后执行;

do....while:先执行一次,再判断要不要继续执行;

我们同样通过一段代码一张图来解释;

int main() //输入一个整数,判断这个整数是几位数?
{
	int n=0;  //赋一个初值
	int cnt = 0;	//赋一个初值用来计数
	scanf("%d", &n);   //输入一个数,赋值给常量n
	do
	{
		cnt++;		//让计数的常量+1
		n = n / 10;	 //让输入的数除10
	} while (n);	//当除到结果为0时,退出循环
	printf("这个整数是%d位数", cnt); //打印结果
	return 0;
}

这题并不是一定要用 do...while 循环,只是这个循环比较适合这题

while 循环判断时用了一个很巧妙的点,因为在c语言中是用0和非0来判断真假,当整数除到最后一位时再除结果就变成了0,判断为假退出了循环,其他语言中可能还需要写上一个表达式来进行判断。

For循环:

语法如下:

for(表达式1;表达式2;表达式3)
	语句  //如果要执行更多语句需要加上大括号

表达式1:用于循环变量的初始化( i = 1 )

表达式2:用于循环条件的判断( i <= 10 );

表达式3:用于循环变量的调整( i ++ );

使用for循环实现打印1-10;

int main()
{
	for (int i = 1; i <= 10; i++)
		printf("%d ",i);
	return 0;
}

break和continue语句:

 break continue 这两个关键字可以运用到循环中,帮我们更好的控制循环

 break :永久的中止循环,直接跳出循环

 continue :跳过本次循环后的代码,在for循环和while中略有不同;

下文重点讲 continue ,同样使用打印1-10来介绍:

while:

int main()
{
	int a = 1;
	while(a <= 10)
	{
		if (a == 5)
			continue;
	//当a=5时,不再执行加1的代码,a始终=5,最后变成死循环
		printf("%d ", a);
		a++;
	}
	return 0;
}

for:

for循环的循环条件写在外部,不会轻易受到 continue 影响.

结论:

分支和循环都是经常用到的控制结构,熟悉他们的语法,规范好格式是非常重要的,希望这篇文章对你有帮助,感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值