运算符及表达式+基本语句和函数使用的详细讲解

运算符及表达式

运算符及表达式

在C语言中,运算符是用于执行特定操作的符号,而表达式则是由运算符和操作数组成的式子。

1) 运算符
运算符的目数
  • 单目运算符:只需要一个操作数,如 !(逻辑非)、++(自增)、--(自减)、&(取地址)等。
  • 双目运算符:需要两个操作数,如 +(加法)、-(减法)、*(乘法)、/(除法)、%(取余)等。
  • 三目运算符(条件运算符):需要三个操作数,如 ? :
运算符的优先级与结合性

运算符的优先级决定了表达式中运算的顺序,而结合性则决定了当多个相同优先级的运算符出现时,如何确定运算顺序。例如,乘法(*)和除法(/)的优先级高于加法和减法,而乘法和除法从左到右结合。

赋值运算符与赋值表达式
  • 赋值运算符=,用于将右侧的值赋给左侧的变量。
  • 赋值表达式:如 a = b + c;,这是一个赋值表达式,其值就是赋值操作的结果(即 b + c 的值)。
算术运算符及算术表达式
  • 算术运算符+-*/%
  • 算术表达式:由算术运算符和操作数组成的表达式,如 a + b * c
自增(++)、自减(–)运算符及表达式
  • 自增运算符++,用于将变量的值加1。
  • 自减运算符--,用于将变量的值减1。
  • 前置与后置++a(先加后使用)和 a++(先使用后加)的区别。
关系运算符及关系表达式
  • 关系运算符>>=<<===!=
  • 关系表达式:用于比较两个操作数的大小或是否相等,结果是一个布尔值(真或假)。
逻辑运算符及逻辑表达式
  • 逻辑运算符!(逻辑非)、&&(逻辑与)、||(逻辑或)。
  • 逻辑表达式:用于组合多个关系表达式,并返回一个布尔值。
逗号运算符与逗号表达式
  • 逗号运算符,,用于将多个表达式组合成一个表达式。
  • 逗号表达式的操作数求值顺序:从左到右依次求值,整个逗号表达式的值是最后一个操作数的值。
2) C语言中合法的表达式,表达式的求值
  • 合法的表达式:符合C语言语法规则的表达式都是合法的。
  • 表达式的求值:根据运算符的优先级和结合性,以及操作数的值,计算表达式的值。
3) 表达式的数据类型,及表达式运算中操作数类型的自动转换与强制类型转换
  • 表达式的数据类型:取决于运算符和操作数的类型。例如,a + b 的类型通常是 ab 类型的公共类型(或更宽的类型)。
  • 自动类型转换(也称为隐式类型转换):当操作数的类型不同时,编译器会尝试将它们转换为公共类型。例如,在 int a = 3.5; 中,3.5 会被自动转换为 int 类型。
  • 强制类型转换(也称为显式类型转换):使用类型转换运算符 () 来强制将一个类型的值转换为另一个类型。例如,(float)aa 的值转换为 float 类型。在进行强制类型转换时,可能会丢失精度或发生其他不可预见的行为,因此应谨慎使用。

基本语句和函数使用的详细讲解

1. 顺序结构语句

  • 表达式语句:最简单的语句,用于执行赋值、函数调用等操作。
  • 空语句:仅包含一个分号的语句,不执行任何操作。
  • 复合语句:用花括号括起来的一组语句,可以视为一个单独的语句块。
代码案例:
#include <stdio.h>int main() {int a = 5;       // 表达式语句printf("%d\n", a); // 表达式语句(函数调用);               // 空语句{               // 复合语句开始int b = 10;printf("b = %d\n", b);}               // 复合语句结束return 0;
}

2. 选择结构语句

  • if 语句:如果条件为真,则执行一段代码。
  • if…else 语句:如果条件为真,执行一段代码,否则执行另一段代码。
  • if…else…if 语句:多个条件判断,根据满足的条件执行相应的代码块。
  • switch 语句:根据表达式的值,选择执行多个代码块中的一个。
代码案例:
#include <stdio.h>int main() {int number = 2;if (number == 1) {printf("Number is 1\n");} else if (number == 2) {printf("Number is 2\n");} else {printf("Number is not 1 or 2\n");}int day = 3;switch (day) {case 1:printf("Monday\n");break;case 2:printf("Tuesday\n");break;case 3:printf("Wednesday\n");break;default:printf("Other day\n");}return 0;
}

3. if嵌套

if语句内部可以嵌套另一个if语句,用于处理更复杂的条件逻辑。

代码案例:
#include <stdio.h>int main() {int a = 5;int b = 10;if (a > 2) {if (b > 8) {printf("Both conditions are true\n");} else {printf("Only first condition is true\n");}} else {printf("None of the conditions are true\n");}return 0;
}

4. 循环结构语句

  • while 循环:当条件为真时,重复执行一段代码。
  • do…while 循环:至少执行一次代码块,然后检查条件,如果条件为真,则重复执行。
  • for 循环:一种更紧凑的循环结构,通常用于已知循环次数的情况。
代码案例:
#include <stdio.h>int main() {int i = 0;// while 循环while (i < 5) {printf("%d ", i);i++;}printf("\n");i = 0;// do...while 循环do {printf("%d ", i);i++;} while (i < 5);printf("\n");// for 循环for (int j = 0; j < 5; j++) {printf("%d ", j);}printf("\n");return 0;
}

5. 循环嵌套(二重循环)

一个循环内部包含另一个循环,通常用于处理二维数组或进行复杂的迭代。

代码案例:
#include <stdio.h>int main() {for (int i = 0; i < 3; i++) { // 外层循环for (int j = 0; j < 3; j++) { // 内层循环printf("(%d, %d) ", i, j);}printf("\n");}return 0;
}

6. 辅助控制语句

continue 语句

continue 语句用于跳过当前循环的剩余部分,直接进入下一次循环。它不会终止循环,而是重新开始下一次迭代。

break 语句

break 语句用于立即终止循环或switch语句。在循环中,break 语句会跳过当前循环的剩余部分,并继续执行循环之后的代码。

代码案例
#include <stdio.h>int main() {int i;// 使用continue语句跳过偶数for (i = 0; i < 10; i++) {if (i % 2 == 0) {continue;}printf("%d ", i);}printf("\n");// 使用break语句在找到5时终止循环for (i = 0; i < 10; i++) {if (i == 5) {break;}printf("%d ", i);}printf("\n");return 0;
}

7. 标准函数的使用

数学函数:math.h
  • fabs():计算浮点数的绝对值。
  • pow():计算一个数的幂。
  • sqrt():计算一个非负数的平方根。
输入输出函数:stdio.h
  • printf():格式化输出函数。
  • scanf():格式化输入函数。
字符串函数:string.h
  • strlen():计算字符串的长度(不包括终止字符’\0’)。
  • strcmp():比较两个字符串。
  • strcpy():复制一个字符串到另一个字符串。
  • strcat():连接两个字符串。
代码案例
#include <stdio.h>
#include <math.h>
#include <string.h>int main() {// 数学函数使用double num = -5.5;double abs_num = fabs(num);double power = pow(2, 3);double sqrt_num = sqrt(9);printf("fabs(%f) = %f\n", num, abs_num);printf("pow(2, 3) = %f\n", power);printf("sqrt(9) = %f\n", sqrt_num);// 字符串函数使用char str1[50] = "Hello, ";char str2[] = "World!";char str3[100];strcpy(str3, str1);strcat(str3, str2);printf("Concatenated string: %s\n", str3);printf("Length of str2: %zu\n", strlen(str2));// 输入输出函数使用int a;printf("Enter an integer: ");scanf("%d", &a);printf("You entered: %d\n", a);return 0;
}

在使用 strlen() 函数时,返回的类型是 size_t(在C语言中是一个无符号整数类型),因此在 printf 中使用
%zu 格式化说明符来输出它。这是C99标准引入的,如果你的编译器不支持C99或更高版本,你可能需要将其转换为 unsigned int 并使用 %u

在这里插入图片描述
在这里插入图片描述

(✪ω✪)Fight!!(o-)
(๑>₃<)۶ 一心向学

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/28479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简易开发一个app

即时设计网站 即时设计 - 可实时协作的专业 UI 设计工具 需要先设计好UI界面 上传到codefun 首次需要安装 自动生成代码 打开hb软件 新建项目 打开创建的项目 删除代码 复制代码过去 下载图片 将图片放到文件夹里 改为这种格式 index.vue 如果不需要uni-app导航栏可以修改 …

项目文件预览

在实际项目开发过程&#xff0c;项目使用数据存在多种形式&#xff0c;“文件”也是一种常见形式&#xff0c;因此&#xff0c;“文件预览”功能变成了常规需求。 kkFileView项目使用流行的spring boot搭建&#xff0c;易上手和部署。万能的文件预览开源项目&#xff0c;基本支…

以太网基础知识(二)—NRZ,PAM4调制技术

1&#xff1a;码元 了解调制技术需要引出“码元”的概念。 一个码元就是一个脉冲信号&#xff0c;即一个最小信号周期内的信号&#xff0c;我们都能够理解&#xff0c;最简单的电路&#xff0c;以高电平代表1&#xff0c;低电平代表0&#xff0c;一个代表1或者0的信号&#x…

分层解耦

三层架构 controller:控制层&#xff0c;接收前端发送的请求&#xff0c;对请求进行处理&#xff0c;并响应数据&#xff0c; service:业务逻辑层&#xff0c;处理具体的业务逻辑。 dao:数据访问层(Data Access Object)(持久层)&#xff0c;负责数据访问操作&#xff0c;包括数…

讨论C++模板

讨论C模板 函数重载和泛型编程模板分类函数模板语法原理函数模板的实例化隐式实例化显示实例化 匹配原则 类模板语法类模板的实例化 C支持了函数重载&#xff0c;通过函数名相同&#xff0c;参数列表不同来构成函数重载&#xff0c;以达到方便程序员调用。但还是没有改变代码大…

KT-H6测距模块标品,测距范围1500m,demo报价1000RMB,批量报价500RMB

激光测距传感器是一种用于测量距离的模块,通常由传感器和相关电子设备组成,测距模块可以集成到各种设备和系统中,以实现准确的测距和定位功能。KT-H6系列激光测距模块,为自主研发,激光波长905nm的激光器,专为热成像、夜视仪、无人机、安防、瞄具等产品定身打造,其优点是…

基于Matlab停车场车牌识别计时计费管理系统 【W2】

简介 停车场车牌识别计时计费管理系统在现代城市管理中具有重要意义。随着城市化进程的加快和车辆数量的增加&#xff0c;传统的人工管理停车场的方式已经难以满足效率和精确度的要求。因此引入车牌识别技术的自动化管理系统成为一种趋势和解决方案。 背景意义 提升管理效率&a…

元数据、数据元、数据字典、数据模型及元模型的区别详解

在数据管理和分析领域&#xff0c;有许多相似的概念&#xff0c;如元数据、数据元、数据字典、数据模型和元模型。这些概念的定义和应用往往容易混淆。 数据元 数据元是通过一系列属性描述的数据单元&#xff0c;包括定义、标识、表示以及允许值等。这些属性帮助我们理解和使用…

【Java04】引用变量数组初始化的内存机制

引用类型数组指向的元素也是引用。其本质是&#xff1a; 由一个在栈上的引用数组变量指向一块堆内存&#xff1b;这块堆内存里存储的元素是引用&#xff0c;又分别指向其他堆内存。 class Person // Person是一个自定义的类 {public int age;puiblic double height;public vo…

Codeforces Round 953 (Div. 2)(A~D题解)

这次比赛是我最顺利的一次比赛&#xff0c;也是成功在中途打进前1500&#xff0c;写完第三道题的时候也是保持在1600左右&#xff0c;但是后面就啥都不会了&#xff0c;还吃了点罚时&#xff0c;虽说如此也算是看到进步了&#xff0c;D题学长说很简单&#xff0c;但是我当时分析…

爱了爱了,11款超良心App推荐!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/今天&#xff0c;我们向你推荐十款与众不同但又不错的win10软件&#xff0c;它们都有各自的功能和优点&#xff0c;相信你一定会喜欢。 1.图片处…

Git/TortoiseGit ssh client 配置

1. Git ssh client 配置 Git 默认的 ssh client 是 <Git 安装目录>/usr/bin/ssh.exe 修改方法为打开 Git Bash 执行&#xff1a; git config --global core.sshCommand "/C/Program Files/TortoiseGit/bin/TortoiseGitPlink.exe" 注意&#xff1a;如果路径…

​单级高频谐振小放

目录 高频交流等效电路 质量指标 增益 通频带 选择性 高频交流等效电路 质量指标 增益 YL撇是怎么来的。 通频带 选择性

Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

Git管理(Linux版本)

在Linux中我们如何把自己的代码上传到gitee中呢&#xff0c;本期将为大家讲解详细的步骤。 目录 查看Linux环境是否存在git工具 在gitee上创建代码仓库 复制仓库的HTTP路径到Linux中 代码上传 在仓库下创建文件或者将文件移动到仓库下 使用三板斧进行文件的上传 add …

Podman常用命令

Podman 是 Red Hat 的一个开源项目&#xff0c;可以免费下载。它是容器化领域的一个相对较新的人&#xff0c;1.0 版将于 2019 年发布。此后 Podman 取得了长足的进步&#xff0c;其崛起伴随着 Docker 的逐渐衰落&#xff0c;该项目在许多方面创造了我们今天所知的容器世界。 容…

使用 Oracle SQL Developer 导入数据

使用 Oracle SQL Developer 导入数据 1. 导入过程 1. 导入过程 选择要导入数据的表&#xff0c; 然后单击右键&#xff0c;选择"导入数据"&#xff0c; 浏览本地文件&#xff0c;选择正确的工作表&#xff0c; 按默认&#xff0c; 按默认&#xff0c; 根据情况修改&…

2. 机器学习概述

机器学习是对能通过经验自动改进的计算机算法的研究。 ---汤姆. 米切尔 1997 通俗来讲&#xff0c;机器学习就是让计算机从数据中进行自动学习&#xff0c;得到某种知识&#xff08;或规律&#xff09;。在早期的工程领域&#xff0c;机器学习也经常被称为模式识别&#xff08;…

guli商城业务逻辑-基础篇笔记

这里写目录标题 0.1 viscode设置用户代码片段1.实现多级菜单接口1.1 对接前端菜单1.2 对接网关接口解决跨域问题&#xff0c;如果不解决跨域&#xff0c;浏览器还是访问不了api1.3 把商品服务添加网关1.4 修改前端显示分类菜单1.5 给菜单添加删除修改功能1.5.1 删除功能的后端业…

Oracle 入门--前提

目录 1.sqlplus 2.dual是什么&#xff1f; 3.SQL语句的种类 4.Oracle是如何工作的 5.Oracle查看配置文件 6.修改配置文件 7.常用的参数设置 1.sqlplus 管理数据库&#xff1a;启动&#xff0c;关闭&#xff0c;创建&#xff0c;删除对象......查看数据库的运行状态&…