C语言_分支与循环

C语言是结构化的程序设计语言,结构指的是顺序结构、选择(分支)结构、循环结构
顺序结构顾名思义指的是程序按照代码的书写顺序,从上到下,从左到右依次执行。而选择结构、循环结构需要进行进一步深入了解,且听我娓娓道来。

1.常用操作符

1.1关系操作符

C语言中用来比较的表达式,叫做“关系表达式”,里面需要用到的运算符就称“关系运算符”,主要有以下6个。

  • > 大于运算符
  • < 小于运算符
  • >= 大于等于运算符
  • <= 小于等于运算符
  • == 相等运算符
  • != 不相等运算符

假设现有变量 a 和变量 b , 拿相等运算符 == 来说,有关系表达式 a == b ,其余5个也是同理,这里就不一一列举了。
关系表达式通常返回 01 ,表示真假。(C语言中,0 表示假,所有非零值表示真

1.2 条件操作符

条件操作符又叫三目操作符,需要接受三个操作数,形式如下:

exp1 ? exp2 : exp3

条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是 exp2 的结果;如果 exp1 为假,exp3 计算,计算的结果是 exp3 的结果。
条件操作符的应用场景如下:
例 1:

#include <stdio.h>
int main()
{
 	int a = 0;
 	int b = 0;
 	scanf("%d", &a);
 	if (a > 5)
 	b = 3;
	else
  	b = -3;
	printf("%d\n", b);
	return 0;
}

将以上代码用条件操作符来表示,有如下代码:

#include<stdio.h>
int main()
{
 	int a = 0;
 	int b = 0;
 	scanf("%d", &a);
 	b = a > 5 ? 3 :-3;
 	printf("%d\n", b);
 	return 0;
}

例 2:
实现找两个数中最大值。

#include <stdio.h>
int main()
{
 	int a = 0;
 	int b = 0;
 	scanf("%d %d", &a, &b);
 	int m = a>b ? a : b;
 	printf("%d\n", m);
 	return 0;
}

1.3 逻辑操作符

逻辑运算符提供逻辑判断功能,用来构建更复杂的表达式,主要以下三个运算符。

  • ! 逻辑取反运算符,就是非的意思(改变单个表达式真假)
  • && 逻辑与运算符,就是并且的意思(两侧的表达式为真,则为真,否则为假)
  • || 逻辑或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)

1.4 注意问题

  • 注意 === 的区别,== 是左边等于右边的意思,而 = 是将右边的值赋值给左边的意思
  • 多个关系运算符不宜连用,原因如下:
    假设有三个变量 ijk,可以有表达式:

i < j < k

上方示例中,连续使用了两个小于运算符,这是合法表达式,并不会报错,但是通常达不到想要的效果,无法判断 j 的大小是否在 ik 之间。由于关系操作符是从左到右计算的,所以执行的是下方的表达式:

( i < j ) < k

上方表达式中,i < j 的返回的值是 01 ,所以接下来是 01j 进行比较,与表达式原本的意思大相径庭,若想使表达式达到理想的效果,即判断 j 的大小是否在 ik 之间,我们可以这样写:

i < j && j < k

2. 分支结构

2.1 if···else 语句

2.1.1 单分支 if 语句

if 语句的语法形式如下:

if(表达式)
语句

表达式为真,则语句执行,表达式为假,则语句不执行。
例:输入一个整数,判断是否为奇数

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

这个例子主要是想判断是否是奇数,是的话就输出奇数,不是则不输出。

2.1.2 双分支 if···else 语句

如果我们想要让代码输出的效果达到非此即彼,这个时候就需要用到 if···else 语句了,
语法形式如下:

if(表达式){
语句1
}
else{
语句2
}

例:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数。

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

2.1.3 多分支 if···else if···else 语句

若想让代码输出实现的效果多样化,我们可以选择 if···else if···else 语句,代码形式如下:

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

例:
科目三,输⼊车速v
如果车速v<30,输出“车速太低”;
如果车速v=30,输出“车速刚好”;
如果车速v>30,输出“车速太高”。

#include <stdio.h>
int main(){
	int v = 0;
	scanf("%d",&v);
	if(v<30)
		printf("车速太低")else if(v=30)
		printf("车速刚好");
	else
		printf("车速太高");
	return 0;
}

多分支语句也称嵌套 if 语句,上述代码也可以写成:

#include<stdio.h>
int main(){
	int v = 0;
	scanf("%d",&v);
	if(v<30){
		printf("车速太低")}
	else{
		if(v=30){
			printf("车速刚好");
		}
		else{
			printf("车速太高");
		}
	}
	return 0;
}

这样写更容易理解。

2.2 switch 语句

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

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

break 语句:顾名思义“打破”,作用是跳出 switch 语句
break 语句来跳出 switch 语句,以此达到理想分支效果,不然会一直执行下去,直至 switch 语句的结束。
上⾯代码中,根据表达式 expression 不同的值,执行相应的 case 分⽀。如果找不到对应的值,就执行 default 分支。
注:

  • switch 后的 expression 必须是整形表达式
  • case 后的值必须是整形常量表达式
  • case 和后面的数字之间必须有空格
  • 每一个case 语句中的代码执行后,必须加上 break,才可以跳出这个switch 语句
  • switch 语句中 case 语句和 default 语句是没有顺序要求的,不过我们通常把 default 语句放到最后

下面我们举两个例子来感受一下,switch 语句中 break 语句起到的作用:
例1:
输⼊:1 输出:星期⼀
输⼊:2 输出:星期⼆
输⼊:3 输出:星期三
输⼊:4 输出:星期四
输⼊:5 输出:星期五
输⼊:6 输出:星期六
输⼊:7 输出:星期天

#include<stdio.h>
int main()
{
 	int day = 0;
 	scanf("%d", &day);
	switch(day)
	{
		case 1printf("星期⼀\n");
 			break;
 		case 2:
 			printf("星期⼆\n");
			 break;
		case 3:
 			printf("星期三\n");
 			break; 
 		case 4:
 			printf("星期四\n");
 			break; 
 		case 5:
 			printf("星期五\n");
 			break;
 		case 6:
 			printf("星期六\n");
 			break;
 		case 7:
 			printf("星期天\n"); 
 			break;
 	}
 	return 0;
}

例2:
输⼊1~5,输出的是“⼯作⽇”;
输⼊6~7,输出“休息⽇”

#include <stdio.h>
int main()
{
 	int day = 0;
 	scanf("%d", &day);
 	switch(day)
 	{
 		case 1case 2:
 		case 3:
 		case 4:
		case 5:
 			printf("⼯作⽇\n");
 			break;
 		case 6:
 		case 7:
 			printf("休息⽇\n");
			break;
	}
 return 0;
}

3. 循环结构

3.1 while 循环

while语句可以实现循环效果,语法形式如下:

while(表达式)
语句;

若表达式为真,循环执行 while 中的语句,直至表达式为假,循环结束。

例:
在屏幕上打印0~9的值

#include<stdio.h>
int main(){
	int i = 0;
	while(i<10){
		printf("%d",i);
		i = i + 1;
	}
	return 0;
}

3.2 for 循环

for 循环是循环语句中使用最多的语句,语法形式如下:

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

表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断
表达式3 用于循环变量的调整
例:
计算1~100之间3的倍数的数字之和

#include <stdio.h>
int main()
{
 	int i = 0;
	int sum = 0;
	for(i=3; i<=100; i+=3)
 	{
 		sum += i;
 	}
 	printf("%d\n", sum);
 	return 0;
}

3.3 do - while 循环

whilefor 这两种循环都是先判断再执行,而 do - while 循环是先执行一次代码再判断是否要循环。do - while 语句中,代码至少执行一次,代码形式如下:

do
语句;
while(表达式);

例:
输⼊⼀个正整数,计算这个整数是⼏位数?
输⼊:1234 输出:4
输⼊:12 输出:2

#include <stdio.h>
int main()
{
 	int n = 0;
 	scanf("%d", &n);
 	int cnt = 0;
 	do
 	{
 		cnt++;
 		n = n / 10;
 	} while (n);
 	printf("%d\n", cnt);
 	return 0;
}

这⾥并⾮必须使⽤ do - while 语句,但是这个代码就⽐较适合使用 do - while 循环,因为n即使是0,也是1位数,要统计位数的。

4. continue 和 break 语句

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供了 breakcontinue 两个关键字,就是应用到循环中的。

  • break 的作用是永久终止循环,只要 break 被执行,就会跳出 break 所在的整个循环体
  • continue 的作用是跳过本次循环continue 后边的代码

通俗点讲,break 可以跳出一个循环体,而 continue 只能跳出一个循环体中的一次循环。

5. goto 语句

goto 语句可以将程序跳转到同⼀个函数内设置好的标号处。
例:

#include <stdio.h>
int main()
{
 	printf("hello world!!\n");
 	goto next;
 	printf("1");
next://标号
	printf("2")
 	return 0;
}

上方代码输出为:

hello world ! !
2

  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值