逻辑符,短路,while,for,do while,break,continue,go to语句

逻辑操作符

  1. 逻辑操作符:&&, ||, !
    ! :逻辑取反运算符(改变单个表达式的真假)。
    && :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
    || :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
  2. 下面是对于!的使用
#include <stdio.h>

int main()
{
	int flag = 4;
	if (flag)
		printf("hehe\n");

	return 0;
}

这里会打印hehe,因为flag是4,所以if (flag)代表的是1

#include <stdio.h>

int main()
{
	int flag = 4;
	if (!flag)
		printf("hehe\n");

	return 0;
}

这里就不会打印,因为if (!flag)为0;
3. 与运算符
在这里插入图片描述
4. 或运算符
在这里插入图片描述

下面是一个关于或的使用
int main()
{
	int month = 0;
	scanf("%d", &month);
	//12 1 2 月是冬季
	if (month == 12 || month == 1 || month == 2)
	{
		printf("冬季\n");
	}
	return 0;
}
  1. 小练习:输⼊⼀个年份year,判断year是否是闰年
    闰年判断的规则:
    能被4整除并且不能被100整除是闰年
    能被400整除是闰年
    可以满足一个要求就可以了
int main()
{
	int year = 0;
	scanf("%d", &year);
	if ((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0))
	{
		printf("yes\n");
	}

	return 0;
}

6.短路

C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
如代码:
if(month >= 3 && month <= 5)
表达式中&& 的左操作数是 month >= 3 ,右操作数是 month <= 5 ,当左操作数 month >= 3 的结果是0的时候,及时不判断 month <= 5 ,整个表达式的结果也是0(不是春季)。
所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。

对于 || 操作符是怎么样呢?
if(month == 12 || month==1 || month == 2)
如果month == 12,则不⽤再判断month是否等于1或者2,整个表达式的结果也是1(是冬季)。
所以, || 操作符的左操作数的结果不为0时,就⽆需执⾏右操作数。

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。

  1. swich语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。
switch 语句是⼀种特殊形式的 if…else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式。

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

上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,就执⾏ default 分⽀。
注意:switch 后的 expression 必须是整型表达式
case 后的值,必须是整形常量表达式

  1. 下面是if语句和switch语句的对⽐
    练习:输⼊任意⼀个整数值,计算除3之后的余数
if语句是
#include <stdio.h>
int main()
{
 int n = 0;
 scanf("%d", &n);
 if(n%3 == 0)
 printf("整除,余数为0\n");
 else if(n%3 == 1)
 printf("余数是1\n");
 else
 printf("余数是2\n");
 return 0

用switch语句时

#include <stdio.h>
int main()
{
 int n = 0;
 scanf("%d", &n);
 switch(n%3)
 {
 case 0:
 printf("整除,余数为0\n"); 
 break;
 case 1:
 printf("余数是1\n"); 
 break;
 case 2:
 printf("余数是2\n"); 
 break;
 }
 return 0;
}

写switch语句时注意
case后有一个空格,并且case以 : 结束
只可以int整形
注意break弹出要写
case要常量
switch语句要switch(n%3)判断时是准确的值即,而不是范围,才可用switch
9. 关于switch的举例
输⼊1-5,输出的是“⼯作⽇”; 输⼊6-7,输出 “休息日”

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	default:
		printf("输入错误,请输入1~7的数字\n");
		break;
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	
	}
	return 0;

这里许多case没有break是可以的,根据实际需求来的;
10. default是当case没有匹配到可以用到的,像上面那个代码输入8就是就是case匹配不到的情况,可以在最后case后面加一个default来说明输入的数不是1~8的情况
default也可以放在最前面

while语句

下面两个程序一个是for一个是while,区分两者的不同

int main()
{
	for (1)
	{
		printf("hehe\n");
	}

	return 0;
}

这里最后输出的是hehe,只打印一次

int main()
{
	while (1)
	{
		printf("hehe\n");
	}

	return 0;
}

这里最后是while的死循环
hehe
hehe
hehe

下面是while的循环流程
在这里插入图片描述
例子:输⼊⼀个正的整数,逆序打印这个整数的每⼀位
例如:
输⼊:1234,输出:4 3 2 1
输⼊:521,输出:1 2 5

分析:要满足逆序就是不断循环下面

在这里插入图片描述


#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	while (n)
	{
		printf("%d",n%10);//这一步就是取余数即最后一个数
		n = n / 10;
	}

	return 0;
}

for循环

  1. for(表达式1; 表达式2; 表达式3)
    表达式1 ⽤于循环变量的初始化
    表达式2 ⽤于循环结束条件的判断
    表达式3 ⽤于循环变量的调整
    在这里插入图片描述
for循环在屏幕上打印1~10的值
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}

	return 0;
}

在这里插入图片描述
练习:计算1~100之间3的倍数的数字之和

int main()
{
	int i = 0;
	int sum = 0;
	for (i = 1; i <= 100; i++)
	{
		//判断i是否是3的倍数
		if (i % 3 == 0)
		{
			sum += i;
		}
	}
	printf("sum = %d\n", sum);

	return 0;
}

do while循环

do
语句;
while(表达式);

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

do while循环流程图
在这里插入图片描述
在屏幕上打印1~10的值

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

	return 0;
}

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

int main()
{
	int n = 0;
	scanf("%d", &n);
	int cnt = 0;
	//1234
	do
	{
		n = n / 10;
		cnt++;        //4 cnt =cnt+1;  //cnt+=1;
	} while (n);
	printf("%d\n", cnt);
	return 0;
}

break和continue

break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执⾏。
continue 的作⽤是跳过本次循环 continue 后边的代码,直接再从判断语句开始,在 for 循环和 while 循环中有所差异的。

下面是两者的区别

(while循环和break)




int main()
{
	int i = 1;

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

break在i=5是直接跳出循环了,最后输出1,2,3,4

int main()
{
	int i = 1;

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

	return 0;
}


continue在i=5时直接有弹到判断语句while (i <= 10)了,然后一直重复,所以最后输出1,2,3,4然后进入死循环

for循环和break (与while没有差别)

for循环与continue

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;

		printf("%d ", i);
	}

	return 0;
}

最后打印1,2,3,4,6,7,8,9,10,不打印5
因为相比于while循环,i++放到了前面了

do while循环与break和continue的关系与while与其的关系相似

C语言支持循环的嵌套

找出100~200之间的素数,并打印在屏幕上。
注:素数⼜称质数,只能被1和本⾝整除的数字。

int main()
{
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		//判断i是否是素数
		//使用2~i-1之间的数字去试除i
		//如果i被整除了,i就不是素数
		//如果2~i-1之间的没有数字可以整除i,i就是素数
		int j = 0;
		int flag = 1;//假设i是素数
		for (j = 2; j <= i-1; j++)
		{
			if (i % j == 0)
			{
				flag = 0;//如果有满足条件i % j == 0的i,那么输出flag=0,否则直到break弹出
				break;
			}
		}
		if (flag == 1)//flag==1代表的是素数
		{
			count++;
			printf("%d ", i);
		}
	}

	printf("\ncount = %d\n", count);
	return 0;
}

go to语句

供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数内跳转到设置好的标号处。

int main()
{
	printf("hehe\n");
goto end;
	printf("haha\n");
end:
	printf("跳过haha的打印,直接来到这里\n");
	return 0;
}

最终输出:hehe
跳过haha的打印,直接来到这里
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南子北游

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值