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

在这里插入图片描述
个人主页~

C语言零基础纯干货教学(上)


三、分支和循环

1、if语句

(1)if

if(a)
    b;

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

(2)else

if(a)
    b;
else
    c;

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

#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)分支中包含多条语句

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

if(a)
{
    b;
    c;
    d;
}

(4)嵌套if

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

if(a)
    b;
else if(c)
    d;
else
    e;

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

(5)else 悬空原则

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

if(a)
    if(c)
        d;
else
    e;

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

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

2、关系操作符

符号名称
>大于
<小于
==等于
<=小于等于
>=大于等于
!=不等于

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

多个运算符不宜连用

a < b < c;

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

a < b && b < c;

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

3、条件操作符

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

a ? b : c;

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

int main()
{
    int a = 1;
    int b = 2;
    int max = a < b ? b : a;
    return 0;
}

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

4、逻辑操作符

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

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

int a = 0;//a为假
if(!a)//!a为真
{
    b;
}

这样就可以执行b

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

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

(3)逻辑或运算符:||

int a = 0;
if(a = 0 || a = 1 || a = 2)
{
    b;
}

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

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

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

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;
}

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

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)逻辑运算符的特点:短路

a > 1 && a < 5;

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

a = 1 || a = 2 || a = 3;

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

5、switch语句

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

#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的例子:

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是其中一种

while(a)
{
    b;
}

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

(2)执行流程

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

(3)例子

打印1~10

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

在这里插入图片描述

7、for循环

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

(1)基本概念

for(a;b;c)
{
    d;
}

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

(2)执行流程

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

(3)例子

打印1~·10

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

在这里插入图片描述

8、do-while循环

(1)基本概念

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

do
{
    b;
}while(a);

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

(2)执行流程

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

(3)例子

打印1~10的值

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

在这里插入图片描述

9、break和continue语句

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

(1)break

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

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

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苦无,当然飞雷神的距离是有限的,只能传送到同一个函数的某个位置

int main()
{
	printf("火影\n");
	goto next;
	printf("海贼\n");

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

在这里插入图片描述

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


下篇再见~

在这里插入图片描述

  • 114
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 138
    评论
如果你想学习C语言,即使你没有计算机编程的基础,也不必担心。有一些简单的步骤可以帮助你入门。首先,你可以从了解C语言的基础知识开始。有一些介绍C语言基础知识的资料可以帮助你大致了解C语言的特点和用法。接下来,你需要选择一个合适的开发环境来编写和运行C语言程序。一个常见的选择是使用编译器,例如Dev C++或者Visual Studio 2019。然后,你可以尝试编写你的第一个C语言程序。这个程序可以非常简单,比如打印一句话在屏幕上。通过编写和运行这个程序,你可以开始对C语言的语法和结构有一些实际的了解[3]。从这个起点开始,你可以继续学习更多的C语言知识,并挑战更复杂的编程任务。在学习过程,你可以阅读教材、参考文档、查找在线资源或参加编程课程来加深你的理解和技能。记住,坚持实践是学习编程的关键。通过不断地编写和调试程序,你会逐渐掌握C语言的基础,并逐渐提升自己的编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C语言初阶——手把手教零基础/新手入门(万字心得笔记)](https://blog.csdn.net/m0_63312733/article/details/122145605)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 138
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

s_little_monster_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值