【玩转C语言】第四讲--->操作符与循环语句

2024-06-10 12:52

本文主要是介绍【玩转C语言】第四讲--->操作符与循环语句,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 🔥博客主页🔥:【 坊钰_CSDN博客 】

欢迎各位点赞👍评论✍收藏⭐

引言:

大家好,我是坊钰,为了让大家深入了解C语言,我开创了【玩转C语言系列】,将为大家介绍C语言相关知识,另外,还会不定时更新【C语言训练题库】,想学好C语言的宝子们,一定要收藏起来,一起努力吧!

点赞!收藏!以防以后找不到了!!!

目录

1. if 语句

1.1 语法形式

1.2 else 语句

1.3 分支中包含多条语句

1.4 嵌套if 语句

1.5 else 语句悬空问题

2. 关系操作符

3. 条件操作符

4. 逻辑操作符 && || !

4.1 取反操作符 !

4.2 与运算符 &&

4.3 或运算符 ||

 4.4 闰年的判断

 5. switch 语句

5.1 switch 计算除以3后的余数

5.2 switch 中的 break 语句

5.3 switch 语句中的 default 语句

5.4 case 和 default 的顺序问题

6. while 循环

6,1 语法结构

6.2 while 循环实践

7. for 循环

7.1 for 循环语法形式

7.2 for 循环执行流程

​编辑 7.3 for 循环的实践

8. do-while 循环

8.1 语法形式

8.2 执行流程

8.3 循环实践

9. 小结


1. if 语句

1.1 语法形式

if 语句的语法形式如下:

if (表达式)语句;

表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行

C语言中,0 表示为假,非 0 表示为真

例:

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

1.2 else 语句

如果上述不为奇数,为偶数,那就要用到 else 语句了

if else 语句语法形式

if (表达式)语句1;
else 语句2;

 若表达式为真,执行语句1 ,若表达式为假,执行语句2;

上述判断奇数的代码可以优化一下

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

1.3 分支中包含多条语句

看下面的代码,猜猜输出的是什么?

#include <stdio.h>
int main()
{int a = 10;if (a > 5)printf("haha");printf("hhhh");return 0;
}

答案是输出 haha;

因为,if 语句后只能执行一条语句,如果想要两条都执行,那要加上大括号 例:

#include <stdio.h>
int main()
{int a = 10;if (a > 5){printf("haha");printf("hhhh");}return 0;
}

这样就打印两条语句了

1.4 嵌套if 语句

if 里面也可以嵌套if 语句

#include <stdio.h>
int main()
{int n = 10;if (n>0){if (n>5){printf("haha");}else{printf("hehe");}}else{printf("hello");}return 0;
}

1.5 else 语句悬空问题

如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配

#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1)if(b == 2)printf("hehe\n");elseprintf("haha\n");return 0;
}

猜猜运行结果是啥?

结果是什么都不打印,这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近 的 if 匹配

如果我们希望else确实和第⼀个if匹配,可以这样修改代码 

#include <stdio.h>
int main()
{int a = 0;int b = 2;if (a == 1){if (b == 2)printf("hehe\n");}elseprintf("haha\n");return 0;
}

只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更高

2. 关系操作符

C语言主要的关系操作符有下面6个

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

关系操作符通常返回 0 或 1 ,表示真假

比如: (20>10) ----> 返回 1 ,(10>20) ---> 返回 0 

注意: 相等运算符(==) 和 赋值运算符(=) 两个不一样 

另⼀个需要避免的错误是:多个关系运算符不能连用

要表达 1 < 2 < 3 时的用法:

//错误用法1 < 2 < 3//正确用法1 < 2 && 2 < 3

3. 条件操作符

条件操作符也叫三目操作符,需要接受三个操作数的

exp1 ? exp2 : exp3

条件操作符的计算逻辑是:

  1. 如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果
  2. 如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果

例:求两个数中的最大值

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

4. 逻辑操作符 && || !

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

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

4.1 取反操作符 !

如果 a 为真的,那 !a 就是假的,反之 a 为假的,那 !a 就是真的

4.2 与运算符 &&

(exsp 1) && (exsp 2) && (exsp 3)

 注意:如果 exsp 1 为假( 0 ),那后面两个 exsp 2 和 exsp 3 都不计算了

            如果exsp 1 为真,则依次往下计算

4.3 或运算符 ||

(exsp 1) || (exsp 2) || (exsp 3)

注意:如果 exsp 1 为真( 1 ),那后面两个 exsp 2 和 exsp 3 都不计算了

            如果exsp 1 为假,则依次往下计算

 4.4 闰年的判断

输闰年判断的规则:

  1. 能被4整除并且不能被100整除是闰年
  2. 能被400整除是闰年
#include <stdio.h>//代码1 
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;
}//代码2 
int main()
{int year = 0;scanf("%d", &year);if((year%4==0 && year%100!=0) || (year%400==0))printf("是闰年\n");return 0;
}

 5. switch 语句

除了 if 语句外,C语言还提供了 switch 语句来实现分支结构

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

switch (expression) 
{case value1: statementcase value2: statementdefault: statement
}
  • switch 后的 expression 必须是整型表达式 
  • case 后的值,必须是整形常量表达式

5.1 switch 计算除以3后的余数

练习:输入任意⼀个整数值,计算除3之后的余数 

#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;
}
  •  case 和后边的数字之间必须有空格
  • 每⼀个 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个switch语句

5.2 switch 中的 break 语句

我们如果把上述代码中的break全都去掉,看看结果

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

所以在 switch 语句中 break 语句是非常重要的,能实现真正的分支效果。 当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了 

5.3 switch 语句中的 default 语句

#include <stdio.h>
int main()
{int n = 0;scanf("%d", &n);switch (n){case 0:printf("输入数为 0\n");case 1:printf("输入数为 1\n");case 2:printf("输入数为 2\n");default :printf("输入错误,请重新输入\n");}return 0;
}

5.4 case 和 default 的顺序问题

在 switch 语句中 case 子句和 default 子句有要求顺序吗? default 只能放在最后吗?

其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实 际需求的就可以。 不过我们通常是把 default 子句放在最后处理的

6. while 循环

6,1 语法结构

while(表达式){语句;
}

6.2 while 循环实践

例:打印 1~10 数字

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

7. for 循环

7.1 for 循环语法形式

for(表达式1; 表达式2; 表达式3){语句;}
  • 表达式1 用于循环变量的初始化
  • 表达式2 用于循环结束条件的判断
  • 表达式3 用于循环变量的调整 

7.2 for 循环执行流程

 7.3 for 循环的实践

练习:在屏幕上打印1~10的值

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

8. do-while 循环

8.1 语法形式

do语句;
while(表达式)

8.2 执行流程

8.3 循环实践

在屏幕上打印1~10的值 

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

9. 小结

 以上就是关于【玩转C语言】第四讲的内容了,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持! 

这篇关于【玩转C语言】第四讲--->操作符与循环语句的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048220

相关文章

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

JAVA中while循环的使用与注意事项

《JAVA中while循环的使用与注意事项》:本文主要介绍while循环在编程中的应用,包括其基本结构、语句示例、适用场景以及注意事项,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录while循环1. 什么是while循环2. while循环的语句3.while循环的适用场景以及优势4. 注意

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验