C语言分支和循环语句

1. 分支语句

1.1 if语句

1.1.1 if 的使用

if语句的语法形式如下:

if(表达式)
{
  语句;
}

表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。在C语言中,0为假,非0为真。

1.1.2 else 的使用

if...else...语法形式如下:

if(表达式)
{
  语句;
}
else
{
  语句;
}
例子

输入一个整数,判断是否为奇数,如果是则打印是奇数,否则打印是偶数。

#include <stdio.h>
int main()
{
  int num = 0;
  scanf("%d",&num);
  if(num % 2 == 1)
  printf("%d是奇数",num);
  else
  printf("%d是偶数",num);

  return 0;
}

1.1.3 嵌套 if 的使用

在if...else...语句中,else可以与另一个if语句连用,构成多重判断。

例子:输入一个整数,判断输入的整数是0,还是正数或者负数。

#include <stdio.h>
int main()
{
 int num = 0;
 scanf("%d",&num);
 if(num==0)
   printf("输入的数字是0\n");
 else if(num>0)
   printf("输入的数字是正数\n");
 else
   printf("输入的数字是负数\n");

 return 0;
}

1.1.4 悬空else问题

如果有多个if和else语句,可以记住一条规则:else总是跟最接近的if匹配。看如下代码,

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	else
		printf("haha\n");
	return 0;
}

程序的运行结果是什么都不输出

这就是悬空else问题,实际上else是与最接近的if匹配,这样后边的if else语句是嵌套在第一个if语句中的,如果第一个if语句不成立,嵌套if和else就不执行了,最终啥都不打印。

如果代码改成这样就容易理解了

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
      if (b == 2)
			printf("hehe\n");
	  else
	 	    printf("haha\n");
     }
	return 0;
}

 1.2 switch语句

switch语句是一种多路分支语句,可以根据一个变量的值选择执行不同的代码块。基本语法如下:其中,表达式是一个整数表达式,case关键字后的常量是可能的表达式值。当表达式的值等于某个case关键字后的常量时,执行相应的语句块,直到遇到break关键止。如果没有一个case关键字后的常量匹配表达式的值,那么将执行default关键字后的语句块。

switch(表达式)
{
  case 常量1:
    语句1;
    berak;
  case 常量2:
    语句2;
    break;
  default:
    语句3;
    break;
}

1.2.1 break

练习:输入任意一个整数值,计算除3之后的余数

如果去掉break,会出现什么情况?

出现此种情况的原因是在switch语句中使用break才能跳出switch语句,如果某一个case语句后边没有break语句,代码会继续往下执行,有可能执行其他case语句中的代码,直到遇到break语句结束。

1.2.2 default

switch后的表达式中的值无法匹配代码中的case语句的时候,就会执行default语句。练习:

2. 循环语句

2.1 while语句

2.1.1 语法

while语句的基本语法如下:

其中,表达式是一个布尔表达式,只要它的值为真(非零),就会不断执行花括号内的语句。

while(表达式)
{
  语句;
}

练习:在屏幕上打印1-10的值

 2.1.2 while循环中的break和continue

A.break举例

打印了1,2,3,4后,当i等于5的时候,循环到 break 的地⽅终⽌,不再打印,不再循环。   
所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。
B.continue举例

continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏下⼀次循环的判断。当i等于5后,就执行continue,直接跳过continue后边的代码,去循环的判断的地方,因为这里跳过了i=i+1,所以i一直为5,程序陷入死循环。

2.2 do while语句

2.2.1 语法

do while 语句的基本语法如下:

do
{
  语句;
}while(表达式);

与while语句不同,do-while语句至少执行一次花括号内的语句,然后检查表达式的值。只有当表达式的值为真(非零)时,才会再次执行花括号内的语句。

练习:在屏幕上打印1-10的值

2.2.2 do while循环中的break和continue

do.while 语句中的 break continue 的作⽤和 while 循环中⼏乎⼀模⼀样
A.break举例

B.continue举例

2.3 for语句

2.3.1 语法

for语句基本语法如下:

for(初始化;条件;更新)
{
  语句;
}

练习:在屏幕上打印1-10的值

2.3.2 for循环中的break和continue

A.break举例

for 循环中的 break 也是⽤于终⽌循环的,不管循环还需 要循环多少次,只要执⾏到了 break ,循环就彻底终⽌。
B.continue举例

for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。

2.4 while循环和for循环的对比

for循环和while循环在实现循环的过程中都有初始化、判断、调整三个部分,但for循环的三个部分非常集中,便于代码的维护,while循环的三个部分比较分散,所以从形式上for循环更优一些。

2.5 循环的嵌套

练习  
找出100~200之间的素数,并打印在屏幕上。 注:素数⼜称质数,只能被1和本⾝整除的数字
#include <stdio.h>
int main()
{
 int i = 0;
 //循环产⽣100~200的数字
 for(i=100; i<=200; i++)
 {
 //判断i是否为素数
 //循环产⽣2~i-1之间的数字
  int j = 0;
  int flag = 1;//假设i是素数
  for(j=2; j<i; j++)
  {
   if(i % j == 0)
   {
   flag = 0;
   break;
   }
  }
  if(flag == 1)
  printf("%d ", i);
 }
 return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值