当前位置:首页 » 《我的小黑屋》 » 正文

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

2 人参与  2024年05月24日 12:22  分类 : 《我的小黑屋》  评论

点击全文阅读


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

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


C语言入门

三、分支和循环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语句

三、分支和循环

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);elseprintf("%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的前边,这里我们不赘述了,用到的地方比较少


下篇再见~

在这里插入图片描述


点击全文阅读


本文链接:http://zhangshiyu.com/post/112811.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1