分支和循环

文章目录


前言

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。

提示:以下是本篇文章正文内容,下面案例可供参考

一、分支结构

分支结构可以粗略地理解为分叉选择,一旦满足某个条件就执行某个特定行为,拿生活中的例子:有个人有100元,如果他把这100给你,就可以去购物;要是没给,就回家。而在c语言中,我们可以使用if,switch来实现分支结构.

1.if语句

1.1,if

if语句的语法形式如下:

1 if(表达式)
2    语句

 表达式成立(C语言中,1表示真),则语句执行,表达式不成立(0为假),则语句不执行。如果表达式不为0,则为真,语句执行。

例子:输入一个整数,判断是否为3的倍数

1 #include<stdio.h>
2 int main()
3 {
4     int num=0;
5     scanf("%d",&num);
6     if(num%3==0)
7     printf("%d是3的倍数",num)
8     return 0;
9 }

1.2,else

else语句是在if或else if等前面表达式都不满足的情况下,则els内部语句执行。

1 if(表达式)
2    语句1
3 else
4    语句2

例子:输入商品价格和拥有金额,判断找零的金额大小

1 #include<stdio.h>
2 int  main()
3 {
4 	printf("请输入金额");
5 	int price = 0;
6 	int mill = 0;
7 	scanf("%d %d", &price, &mill);
8 	if (price<= mill)
9       printf("找您%d元", mill-price);
10 	else
11 		printf("你的余额不足");
12 	return 0;
13 }

1.3,分支中包含多条语句

默认在 if 和 else 语句中默认都只控制⼀条语句,在上面例子中可以发现,当拥有金额mill大于商品价格price时,执行if 语句输出找零的金额;当金额小于商品价格时,执行else语句,printf("你的余额不足")。如果在else语句后面添加printf("谢谢惠顾"),例子如下:
1 #include<stdio.h>
2 int  main()
3 {
4 	printf("请输入金额");
5 	int price = 0;
6 	int mill = 0;
7 	scanf("%d %d", &price, &mill);
8 	if (price<= mill)
9       printf("找您%d元", mill-price);
10 	else
11 		printf("你的余额不足");
12      printf("谢谢惠顾");
13 	return 0;
14 }

金额充足时,输出结果:

金额不足时,输出结果:

观察结果可以发现,无论金额是否充足,都会打印"谢谢惠顾",这一点可验证if和else默认控制语句数。

1.4,if嵌套

嵌套从字面可以理解为:一层套一层,类似于俄罗斯套娃;先从第一个条件语句判定,如果成立执行语句;如果不成立,则对另外的else if继续判断,知道条件成立,至此构成多重判断。初步理解嵌套后,开始实践理解下,比如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:

1 #include <stdio.h>
2 int main()
3 {
4  int num = 0;
5  scanf("%d", &num);
6  if(num == 0)
7      printf("输⼊的数字是0\n");
8  else if(num > 0) //这⾥的if 相当于嵌套在els语句中,形成了嵌套结构
9      printf("输⼊的数字是正数\n");
10 else
11     printf("输⼊的数字是负数\n");
12 return 0;
13 }

2.switch语句

2.1.switch

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式。再拿分支结构中的给钱例子,陌生人给你100元,你可以把这100元分成不同的若干份,去购买不同的商品,同时也可以一分不花存起来。而你所决定花费的金额可以作为switch的参数,不同的参数可以执行不同的语句,下面就用switch打印星期几的例子:

1 #include <stdio.h>
2 int main()
3 {
4  int day = 0;
5  scanf("%d", &day);
6  switch(day)
7 {
8  case 1:
9     printf("星期⼀\n");
10    break;
11  case 2:
12    printf("星期⼆\n");
13    break;
14 case 3:
15    printf("星期三\n");
16    break; 
17  case 4:
18    printf("星期四\n");
19    break; 
20  case 5:
21    printf("星期五\n");
22    break;
23  case 6:
24    printf("星期六\n");
25    break;
26  case 7:
27    printf("星期天\n"); 
28    break;
29  }
30  return 0;
31 }


 

2.2.switch中的break

前⾯的代码中,如果我们去掉case语句中的break,会出现什么情况呢?

1 #include <stdio.h>
2 int main()
3 {
4  int day = 0;
5  scanf("%d", &day);
6  switch(day)
7 {
8  case 1:
9     printf("星期⼀\n");
10  case 2:
11    printf("星期⼆\n");
12 case 3:
13    printf("星期三\n");
14  case 4:
15    printf("星期四\n");
16  case 5:
17    printf("星期五\n");
18 case 6:
19    printf("星期六\n");
20 case 7:
21    printf("星期天\n"); 
22  }
23  return 0;
24 }

观察运行结果,发现输出总会多出还几个星期。这是为什么呢?

原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。

2.3.switch中的default

default与case类似,但又有区别,它是囊括除列举case的所有情况外的情况。不得已再拿上面给钱的例子,case的条件都是商品的价格,那么当金额远大于100的情况或除已经列举的商品价格外属于default的范畴。将上述打印星期的程序加入default,程序如下:

1 #include <stdio.h>
2 int main()
3 {
4  int day = 0;
5  scanf("%d", &day);
6  switch(day)
7 {
8  case 1:
9     printf("星期⼀\n");
10    break;
11  case 2:
12    printf("星期⼆\n");
13    break;
14 case 3:
15    printf("星期三\n");
16    break; 
17  case 4:
18    printf("星期四\n");
19    break; 
20  case 5:
21    printf("星期五\n");
22    break;
23  case 6:
24    printf("星期六\n");
25    break;
26  case 7:
27    printf("星期天\n"); 
28    break;
29  default:
30    printf("输入错误\n");
31    break;
32  }
33  return 0;
34 }

看到这,你或许有些小疑问,switch语句中case和default的位置顺序是固定的吗? default 只能放在最后吗?
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就可以。不过一般情况下还是把 default ⼦句放在最后处理的。

二.循环结构

循环结构可以理解为绕着操场跑道跑圈,但达到一定条件时(体力不支)就听着跑圈(循环结束)。在c语言中,使⽤ for 、 while 、 do while 来实现循环结构。

3.for语句

3.1.语法形式

for 循环的语法形式如下:

1 for(表达式1;表达式2;表达式3)
2     语句;

表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断
表达式3 用于循环变量的调整

3.2.for循环的流程

⾸先执行 表达式1 初始化循环变量,接下来就是执行 表达式2 的判断部分, 表达式2 的结果如果==0,则循环结束; 表达式2 的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表 达式3 ,调整循环变量,然后再去表达式2 的地方执行判断, 表达式2 的结果是否为0,决定循环是否继续。整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。

3.3.for循环实践

练习:打印1-100的奇数

代码如下:

1 #include <stdio.h>
2
3 int main()
4 {
5 int i = 0;
6 for(i=1; i<=10; i++)
7 {
8 printf("%d ", i);
9 } 
10 return 0;
11 }

运行结果:

4.while语句

C语⾔提供了3种循环语句, while 就是其中⼀种,接下来就介绍一下 while 语句。while 语句的语法结构和 if 语句非常相似。
 

4.1.语法形式

1 while(表达式)
2     语句;//多条语句用大括号


4.2.while循环的过程

⾸先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执行完后再继续判断,是否进行下⼀次判断。

4.3.while循环的实践

练习:打印1-100的数字

代码如下:

1 #include <stdio.h>
2 int main()
3 {
4  int i = 1;
5  while(i<=10)
6  {
7  printf("%d ", i);
8  i = i+1;
9  }
10  return 0;
11 }

5.do-while语句

5.1.do-while语法形式

在循环语句中 do while 语句的使⽤最少,它的语法如下:

1 do
2    语句;
3 while(表达式);

区别:while 和 for 这两种循环都是先判断,条件如果满足就进⼊循环,执行循环语句,如果不满足就跳出循环;而do while 循环则是先直接进⼊循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下⼀次,表达式为假,则不再继续循环。

5.2.do-while循环过程

在 do while 循环中先执行“语句”,执⾏完语句,在去执行“判断表达式”,判断表达式的结果是!=0,则继续循环,执行循环语句;判断表达式的结果==0,则循环结束。所以在 do while 语句中循环体是⾄少执行⼀次的,这是 do while 循环比较特殊的地方。

5.3.do-while循环的实践

实践:输入一个正整数,计算这个正整数是几位数?

1 #include <stdio.h>
2 int main()
3 {
4  int n = 0;
5  scanf("%d", &n);
6  int cnt = 0;
7  do
8  {
9  cnt++;
10  n = n / 10;
11  } while (n);
12  printf("%d\n", cnt);
13  return 0;
14 }
这⾥并非必须使用 do while 语句,但是这个代码就比较适合使用  do while 循环,因为n即使是
0,也是1位数,要统计位数的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值