前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C语言】C语言零基础纯干货教学(中)

【C语言】C语言零基础纯干货教学(中)

作者头像
s-little-monster
发布2024-06-06 21:02:33
580
发布2024-06-06 21:02:33
举报

三、分支和循环

1、if语句

(1)if
代码语言:javascript
复制
if(a)
    b;

括号内表达式a如果为真,则执行b语句,如果为假,则不执行 C语言中0表示假,非0表示真

(2)else
代码语言:javascript
复制
if(a)
    b;
else
    c;

a如果为真,则执行b语句,如果为假,则执行c语句 else是除了if以外所有情况的集合 举个简单的例子来理解

代码语言:javascript
复制
#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;
}
(3)分支中包含多条语句

多条语句可以用花括号括起来

代码语言:javascript
复制
if(a)
{
    b;
    c;
    d;
}
(4)嵌套if

else 与 if 可以嵌套使用构成else if

代码语言:javascript
复制
if(a)
    b;
else if(c)
    d;
else
    e;

如果满足a的话执行b,满足c的话执行d,都不满足执行e

(5)else 悬空原则

else总会与它最近的if相匹配

代码语言:javascript
复制
if(a)
    if(c)
        d;
else
    e;

当满足a和c时,执行d 满足a不满足c时执行e 不满足a时不执行

这就是else的悬空原则:最近的 if 和 else相匹配 这里if©与else连用,共同嵌套在if(a)语句当中

2、关系操作符

符号

名称

>

大于

<

小于

==

等于

<=

小于等于

>=

大于等于

!=

不等于

这里其实比较值得注意的只有 == 和 != 跟我们平常用的不同,= 在C语言中是赋值的意思,==才是判断相等的意思 != 是不相等的意思,记住即可

多个运算符不宜连用

代码语言:javascript
复制
a < b < c;

关系运算符是从左往右计算,这就会导致a<b如果为真返回值为非0,为假则返回0,若a=2,b=1,c=1,按照数学方法以上表达式是错的,但按照c语言的结构来说,先比较a和b,a<b为假,返回0,此时只要c>0此表达式整个就返回真 所以我们采用以下写法

代码语言:javascript
复制
a < b && b < c;

&&是与的意思,需要两个条件同时成立整个表达式才返回真

3、条件操作符

条件操作符也叫三目操作符,同时接收三个操作数,形式如下:

代码语言:javascript
复制
a ? b : c;

先判断表达式a是否为真,如果为真执行b,如果为假执行c 例子: 比较两个数的大小:

代码语言:javascript
复制
int main()
{
    int a = 1;
    int b = 2;
    int max = a < b ? b : a;
    return 0;
}

意思是如果a<b那么最大值就是b否则就是a

4、逻辑操作符

(1)逻辑取反运算符:!

逻辑取反就是在逻辑上取反 可以把真的变成假的假的变成真的

代码语言:javascript
复制
int a = 0;//a为假
if(!a)//!a为真
{
    b;
}

这样就可以执行b

(2)逻辑与运算符:&&

我们在之前提到的关系操作符里提到,左右两个操作数都要成立

(3)逻辑或运算符:||
代码语言:javascript
复制
int a = 0;
if(a = 0 || a = 1 || a = 2)
{
    b;
}

这里变量a只有取到0或1或2时才执行b,否则不执行

(4)简单例题:判断闰年

相信所有接触过C语言的同学在老师上课或者自学的过程中都会遇到这个问题,这个题目可以帮助我们快速的掌握我们上述的内容 第一种方法,if+else:

代码语言:javascript
复制
int main()
{
    int year = 0;
    scanf("%d", &year);
    if(year%4==0 && year%100!=0)
        printf("是闰年\n");
    else if(year%400==0)
        printf("是闰年\n");
    return 0;
}

第二种方法:逻辑操作符法

代码语言:javascript
复制
int main()
{
    int year = 0;
    scanf("%d", &year);
    if((year%4==0 && year%100!=0) || (year%400==0))
        printf("是闰年\n");
    return 0;
} 

这两种方法本质上是一样的,都是通过两个接口(year%4==0 && year%100!=0)和(year%400 == 0)区别就是符号区别以及算法区别

(5)逻辑运算符的特点:短路
代码语言:javascript
复制
a > 1 && a < 5;

在逻辑与运算符中,短路是指如果条件没有满足左边的式子,那么右边的式子就不会进行判断,如上式,若a值为0,那么右边a<5的条件就不会再去判断了

代码语言:javascript
复制
a = 1 || a = 2 || a = 3;

在逻辑或运算符中,短路是指如果条件满足左边的式子,那么右边的式子就不会再进行判断了

5、switch语句

除了if语句,switch语句也可以实现分支结构 switch语句像是开关,打开某个开关对应某一盏灯

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int max = 0;
	scanf("%d", &max);
	switch (max)//括号内必须是整形表达式
	{
	case 1://case后的值必须是整形常量表达式
		printf("one\n");
		break;
	case 2:
		printf("two\n");
		break;
	case 3:
		printf("three\n");
		break;
		//如果case不是最后一个项,那么都要加break,如果不加case,下面的语句都会进行
	default://default就是除了以上几个例子以外所有情况的集合,switch语句中可以没有default
	//并且default和case没有顺序的要求,default也可以放在前面,但我们通常把default放在最后
		printf("other nums\n");
	}
	return 0;
}

case后是式max可能得结果,如果max为1则打印one,如果max是列举三个数以外的数,则打印other nums 部分case后不加break的例子:

代码语言:javascript
复制
int main()
{
	int max = 0;
	scanf("%d", &max);
	switch (max)
	{
	case 1:
		printf("one\n");
	case 2:
		printf("two\n");
	case 3:
		printf("three\n");
		break;
	default:
		printf("other nums\n");
	}
	return 0;
}

6、while循环

(1)基本概念

C语言提供了三种循环语句,while是其中一种

代码语言:javascript
复制
while(a)
{
    b;
}

while的括号里也是一个条件判断,如果a为真,则执行b,执行完b再判断a,若a还为真(b的执行可能会影响a)继续执行b

(2)执行流程

首先执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断是否进行下一次判断

(3)例子

打印1~10

代码语言:javascript
复制
int i = 0;
while(i <= 10)
{
    printf("%d ",i);
    i++;
}

7、for循环

for循环是三种循环里用的最多的

(1)基本概念
代码语言:javascript
复制
for(a;b;c)
{
    d;
}

a,b,c是三个表达式,d是执行语句,a用于循环变量的初始化,b用于循环结束的条件判断,c用于循环变量的调整

(2)执行流程

首先执行a初始化循环变量,然后执行b的判断部分,如果为真则执行d,如果为假则退出循环 为真执行d后,执行c调整循环变量然后执行b的判断部分,重复以上步骤若干次,直到循环变量被调整到b的判断部分为假退出循环

(3)例子

打印1~·10

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int i = 1;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ",i);
	}
	return 0;
}

8、do-while循环

(1)基本概念

它是三种循环中使用频率最小的一个,但它在某些时候比其他两种更加适合解决问题

代码语言:javascript
复制
do
{
    b;
}while(a);

这种循环的特点就是先执行b再判断a

(2)执行流程

在do-while循环中先执行b,执行完后再去判断a,如果a为真则继续循环,若为假则退出 它至少会执行一次b

(3)例子

打印1~10的值

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int i = 1;
	do
	{
		printf("%d ", i++);//后置++先赋值后加加
	} while (i <= 10);
	return 0;
}

9、break和continue语句

break:它的作用是跳出当前的循环,就是在一个大括号中的循环 continue:它的作用是跳过当前循环的后边所有代码,但不跳出循环,循环继续执行

(1)break
代码语言:javascript
复制
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;
		printf("%d ", i++);
	}
	return 0;
}

我们可以看到在i等于5时break跳出了该次循环,也就是while循环被打破,不再继续printf了 在for循环以及do-while循环中我就不再赘述了,都是跳出当前break所在的循环

(2)continue
代码语言:javascript
复制
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
		printf("%d ", i++);
	}
	return 0;
}

可以看到我们的程序没有执行结束,而是一直闪烁光标,这就是因为在i再循环中等于5时,后续的printf被跳过了,并且最重要的是i++也被跳过了,这会导致i一直等于5,循环继续进行继续continue,导致死机的bug do-while循环与while循环中的continue一致 这里我们再说一下for循环中的continue

代码语言:javascript
复制
int main()
{
	int i = 1;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

for循环和while循环的概念不同,for循环是等到大括号内的内容执行完毕后再进行第三个表达式i++,所以continue只能跳过当i=5时的printf,其他照常打印

10、goto语句

我们知道,在火影忍者这部动漫中有一名角色叫做波风水门,他将千手扉间的飞雷神之术传承并发扬了,这里,飞雷神之术就是一种goto语句,波风水门扔出一枚飞雷神苦无扎到了地上,他想使用飞雷神之术传送到这枚苦无的位置,那就goto苦无,当然飞雷神的距离是有限的,只能传送到同一个函数的某个位置

代码语言:javascript
复制
int main()
{
	printf("火影\n");
	goto next;
	printf("海贼\n");

next:
	printf("鬼灭\n");
	return 0;
}

goto语句最好不要乱用,一般一个函数最多用一个就好了,用多了容易扰乱函数执行流程 next不是必须要写next的,也可以写其他的,比如prev,那么goto后就要跟prev 并且像next一样的标签不用非得写在goto next的后边,也可以写在goto next的前边,这里我们不赘述了,用到的地方比较少

下篇再见

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三、分支和循环
    • 1、if语句
      • (1)if
      • (2)else
      • (3)分支中包含多条语句
      • (4)嵌套if
      • (5)else 悬空原则
    • 2、关系操作符
      • 3、条件操作符
        • 4、逻辑操作符
          • (1)逻辑取反运算符:!
          • (2)逻辑与运算符:&&
          • (3)逻辑或运算符:||
          • (4)简单例题:判断闰年
          • (5)逻辑运算符的特点:短路
        • 5、switch语句
          • 6、while循环
            • (1)基本概念
            • (2)执行流程
            • (3)例子
          • 7、for循环
            • (1)基本概念
            • (2)执行流程
            • (3)例子
          • 8、do-while循环
            • (1)基本概念
            • (2)执行流程
            • (3)例子
          • 9、break和continue语句
            • (1)break
            • (2)continue
          • 10、goto语句
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档