表达式和语句

本文参考C Primer Plus进行C语言学习

文章目录

  • 表达式
  • 语句
    • 副作用和序列点
  • 复合语句(块)
  • 类型转换

1.表达式

        表达式由运算符和运算对象组成。下面是一些表达式:

        4

        -6

         4+21

        a*(b+c/d)/20

        q=5*2

        x=++q%3

        q>3

每个表达式都有一个值

2.语句

        在C语言中,语句都以分号结尾。因此,

legs=4

只是一个表达式,而下面代码为语句:

legs=4;

#include<stdio.h>
int main()
{
	int count,sum;
	count=0;
	sum=0;
	while(count++<20)
		sum=sum+count;
		printf("sum=%d\n",sum);
	return 0;
}

该例中的while循环只有一条语句,不需要用花括号括起来。多条语句需要用花括号括起来。

副作用和序列点 

副作用是对数据对象或文件的修改。例如,语句:

states=50;

它的副作用是将变量的值设置为50.

序列点是程序执行的点,在该点上,所有的副作用都在进入下一步之前发生。在C语言中,语句的分号标记了一个序列点。意思是,在一个语句中,赋值运算符、递增运算符、递减运算符对运算对象做的改变必须在程序执行下一条语句之前完成。

序列点有助于分析后缀递增何时发生。例如:

while(guests++<10)

printf("%d \n",guests);

在此,C语言初学者认为,“先使用它,再递增它”的意思是,在printf()语句中先使用guests,再递增他。但是,guests++<10是一个完整的表达式,因为它是while循环的测试条件,所以该表达式的结束就是一个序列点。因此,C保证了在程序转至执行printf()之前发生副作用(即,递增guest)。同时,使用后缀形式保证了guests在完成与10的比较后才递增。

可作参考:

3.复合语句(块) 

        复合语句是用花括号括起来的一条或多条语句。

/*程序段1*/

index=0;

while(index++<10)

        sam=10*index+2;

printf("sam=%d\n",sam);

/*程序段2*/

index=0;

while(index++<10)

{

        sam=10*index+2;

        printf("sam=%d\n",sam);

}

        1中。循环结束后,printf()函数只会被调用一次。

        2中,每执行一次循环,printf()函数就被调用一次。

4.类型转换 

转换规则:

        1.由于都是从较小类型转换为较大类型,所以这些转换被称为升级。

        2.涉及两种类型的运算,两个值会被分别转换为两种类型的更高级别。

        3.类型的级别从高到低依次是long double、double、float、unsignedlong  long、long long、unsignes long、long、unsigned int、int。之所以没有char和short因为它们被升级为int或unsigned int。

#include<stdio.h>
int main()
{
	char ch;
	int i;
	float fl;
	
	fl=i=ch='C';	//9
	printf("ch=%c,i=%d,fl=%2.2f\n",ch,i,fl);	//10
	ch=ch+1;		//11
	i=fl+2*ch;		//12
	fl=2.0*ch+i;		//13
	printf("ch=%c,i=%d,fl=%2.2f\n",ch,i,fl);	//14
	ch=1107;	//15
	printf("Now ch=%c\n",ch);		//16
	ch=80.89;			//17
	printf("Now ch=%c\n",ch);	//18
	return 0;
}

  • 9和10行:字符'C'被作为1字节的ASCⅡ值储存在ch中。 整数变量i接受由'C'转换的整数,即按4字节存储67。fl由67转换67.00。

  • 11和14行:字符'C'被转换为67。然后加1。计算结果为4字节的68。68被解释成'D'的ASCⅡ码。

  • 第12行和第14行:ch 的值被转换成4字节的整数(68),然后2乘以ch。为了和fl相加,乘积整数(136)被转换成浮点数。计算结果(203.00f)被转换成int类型,并储存在i中。

  • 第13行和第 14行:ch 的值('D',或68)被转换成浮点数,然后2乘以ch。为了做加法,i的值(203)被转换为浮点类型。计算结果(339.00)被储存在fl中。

  • 第15行和第16行:演示了类型降级的示例。把ch 设置为一个超出其类型范围的值,忽略额外的位后,最终ch的值是字符s的ASCII码。或者,更确切地说,ch的值是1107265,即83。

  • 第17行和第18行:演示了另一个类型降级的示例。把ch 设置为一个浮点数,发生截断后,ch的值是字符P的ASCII码。


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于带时间窗口的电动汽车路由问题的精英对立学习的多群PSO(2022)

英文&#xff1a;Multi-swarm PSO based on Elite Opposite Learning on Electric Vehicle Routing Problem with Time Window 摘要&#xff1a; 带时间窗口的电动汽车路由问题&#xff08;EVRPTW&#xff09;是交通领域的一个新问题&#xff0c;用传统的精确求解方法很难解决…

vue3.0源码解析之数据代理Proxy

前言 多年前刚转前端的时候&#xff0c;对频繁的拼接页面元素深恶痛绝&#xff0c;当时是通过封装字符串模版来处理页面的。之后又陆续发现&#xff0c;数据变化后需要频繁的修改dom节点来操作页面&#xff0c;便不得不自己写很多更新的代码&#xff0c;直到出现了vue和react、…

【排序】详解堆排序

一、思想 堆排序是一种基于比较的排序算法&#xff0c;且使用了堆的数据结构来辅助进行排序。其思想是利用堆的特性&#xff0c;即在每个节点都保证是最大&#xff08;大顶堆&#xff09;或者最小&#xff08;小顶堆&#xff09;的关键码。具体原理和步骤如下&#xff1a; 构…

基于SpringBoot的论坛系统(附项目源码+论文)

摘要 如今的时代&#xff0c;是有史以来最好的时代&#xff0c;随着计算机的发展到现在的移动终端的发展&#xff0c;国内目前信息技术已经在世界上遥遥领先&#xff0c;让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这样的解决方法&#xf…

最值得入手的五款骨传导耳机,六大专业的选购技巧

亲爱的小伙伴们&#xff0c;你们是否曾因长时间戴着耳机而感到耳朵不适&#xff0c;比如耳朵闷痛、发痒&#xff0c;甚至出现异味&#xff1f;现在有一种耳机可以帮你解决这些问题&#xff0c;它就是骨传导耳机。这种耳机的设计避免了传统入耳式耳机可能带来的堵塞感和细菌滋生…

【prompt五】CoCoOP:Conditional Prompt Learning for Vision-Language Models

motivation 随着像CLIP这样强大的预训练视觉语言模型的兴起,研究如何使这些模型适应下游数据集变得至关重要。最近提出的一种名为上下文优化(CoOp)的方法将提示学习(nlp的最新趋势)的概念引入视觉领域,以适应预训练的视觉语言模型。具体来说,CoOp将提示中的上下文单词转换为…

Golang 程序启动原理详解

一.编译 go源代码首先要通过 go build 编译为可执行文件,然后去机器上直接执行的&#xff0c;在 linux 平台上为 ELF 格式的可执行文件&#xff0c;linux 能直接执行这个文件,而编译阶段会经过编译器、汇编器、链接器三个过程最终生成可执行文件 编译器&#xff1a;*.go 源码通…

数字逻辑与计算机组成

冯诺依曼计算机 计算机结构 计算机特点 1.采用二进制 2.程序存储 2.由五大部件组成计算机系统&#xff1a;运算器、存储器、控制器、输入设备和输出设备 计算机硬件系统的层次 中央处理器&#xff08;CPU&#xff09;&#xff1a;运算器 控制器 计算机主机&#xff1a;…

【韩国留学】四大生活技能 学起来!柯桥留学中介韩语学习

如何高效拿学分 在韩国大学&#xff0c;学分是评价学生学习成果的重要标准。要想高效拿学分&#xff0c;首先要制定合理的学习计划。明确每学期需要修的课程&#xff0c;并提前预习&#xff0c;了解课程重点和难点。 其次&#xff0c;要积极参与课堂讨论&#xff0c;这不仅能提…

社科院与杜兰大学金融管理硕士——让我们的读研梦想,与春天一同醒来

随着春天的到来&#xff0c;万物复苏&#xff0c;生机盎然。在这个充满希望的季节里&#xff0c;你的读研梦想觉醒了吗&#xff1f;社科院与杜兰大学金融管理硕士项目为你提供梦想的种子&#xff0c;它将在你心中生根发芽&#xff0c;助你在学术殿堂里收获丰硕的果实。 中国社会…

第七个程序:两个字符串连接后计算长度

实验步骤; 第一步&#xff1a;新建项目 第二步&#xff1a;程序编写 第三步&#xff1a;运行结果 Labview一共7个字节&#xff0c;长度为7&#xff0c;一个字母一个字节 汉字为2个字节&#xff0c;图一为4&#xff0c;图二为8 所以结果分别为11和15 视频教学&#xff1a; 字…

javaWebssh题库管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh题库管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Mye…

U410866 统计分数

本题为本人原创&#xff0c;请勿抄袭。 难度&#xff1a;普及- 题目背景 为了统计学生们的分数和排名&#xff0c;老师们翻来覆去睡不着觉。请你为老师编写一个这样的程序。 题目描述 这是一题将结构体和排序结合在一起的题。 输入格式 输入&#xff1a; 第一行&…

javascript操作BOM的方法

目录 1.window.alert() 2.window.confirm() 3.window.prompt() 4.window.location() 5.window.navigator() 6.window.screen() 7.window.history() 8.window.setTimeout() 和 window.clearTimeout() 9.window.setInterval() 和 window.clearInterval() BOM&#xff08…

Unity 轮转图, 惯性, 自动回正, 点击选择

简单的实现 2D 以及 3D 的轮转图, 类似于 Web 中无限循环的轮播图那样. 文中所有代码均已同步至 github.com/SlimeNull/UnityTests 3D 轮转图: Assets/Scripts/Scenes/CarouselTestScene/Carousel.cs2D 轮转图: Assets/Scripts/Scenes/CarouselTestScene/UICarousel.cs 主要逻…

【学习记录】C++面向对象高级编程【更新中】

C面向对象高级编程 1 inline-内联函数1.1 什么是内联函数&#xff1f;1.2 为什么需要内联函数&#xff1f; 2 构造函数2.1 构造函数是什么&#xff1f;2.2 为什么需要构造函数&#xff1f;2.3 ctor(构造函数)可以有很多个-overloading重载2.4 ctors放在private区-Singleton 3 参…

Anthropic发布最强大模型Claude 3,实力碾压GPT-4和Gemini!

前言 2024年3月4日&#xff0c;Anthropic 发布了Claude 3新版系列模型&#xff0c;含Haiku、Sonnet 和 Opus三个版本。其中最强大的模型在各种基准测试中均优于OpenAI的GPT-4和Google的 Gemini 1.0 Ultra&#xff0c;已成为大模型领域的新巨头。 大家如果对AI感兴趣&#xff0c…

TensorRT入门:trtexec开发辅助工具的使用

文章目录 一、trtexec简介二、trtexec使用1.trtexec常用参数1. 构建阶段2. 运行阶段 2.基本使用方法1. trtexec最基本的使用方法&#xff0c;读取onnx模型并通过trtexec测试推理性能。2. trtexec解析ONNX文件&#xff0c;使用优化选择构建TensorRT引擎并保存至.plan文件补充&am…

力扣--动态规划64.最小路径和

思路分析&#xff1a; 基本思路&#xff1a; 本算法采用动态规划的思想&#xff0c;通过构建一个额外的二维矢量 dp 来存储每个位置的最小路径和。最终目标是求得右下角位置的最小路径和&#xff0c;即整个网格的最小路径和。 初始化&#xff1a; 初始化矢量的行数和列数&…

使用awk和正则表达式过滤文本或字符串 - 详细指南和示例

当我们在 Linux 中运行某些命令来读取或编辑字符串或文件中的文本时&#xff0c;我们经常尝试将输出过滤到感兴趣的特定部分。这就是使用正则表达式派上用场的地方。 什么是正则表达式&#xff1f; 正则表达式可以定义为表示多个字符序列的字符串。关于正则表达式最重要的事情之…