表达式和语句

本文参考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';	//9printf("ch=%c,i=%d,fl=%2.2f\n",ch,i,fl);	//10ch=ch+1;		//11i=fl+2*ch;		//12fl=2.0*ch+i;		//13printf("ch=%c,i=%d,fl=%2.2f\n",ch,i,fl);	//14ch=1107;	//15printf("Now ch=%c\n",ch);		//16ch=80.89;			//17printf("Now ch=%c\n",ch);	//18return 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码。


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

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

相关文章

【Lattice FPGA 开发】IP核的调用

本文介绍Diamond开发软件进行IP核调用与对应官方文档查找方法。 文章目录 1. IP核的调用1.1 IPexpress调用IP核1.2 Clarity Designer调用IP核 2. IP核相关文档查找2.1 方法一2.2 方法二2.3 方法三 3 问题 1. IP核的调用 Diamond软件中&#xff0c;根据所选目标FPGA器件型号的…

rabbitmq4

独占队列&#xff1a;我们的队列只能被当前通道所绑定&#xff0c;不能被其他的连接所绑定&#xff0c;如果有其他的通道或连接再使用此队列的话&#xff0c;会直接报错&#xff0c;一般设置为false&#xff1a; autoDelete&#xff1a;消费者在消费完队列&#xff0c;并且彻底…

vue-路由跳转和路由传参!!!

需求&#xff1a;在修改商品时&#xff0c;会进行页面跳转&#xff0c;通过点击修改按钮进行页面跳转。这时我们需要将商品的id携带过去 一、首先我们在查询页面实现路由跳转并携带参数。 1.1、修改按钮 <el-button type"primary" size"small" click&qu…

万物皆可模块化分解

引言 为何要模块化&#xff0c;这里的主体是人&#xff0c;客体是事物。当事物很小时&#xff0c;人可以很轻松的解决&#xff1b;但是当事物远大于人能处理的范围时&#xff0c;我们就可以考虑对它进行模块化分解。模块化是一种解决复杂问题的方式&#xff0c;放之四海而皆可…

LVS负载均衡集群+NAT部署

一. LVS集群相关知识 1. 集群和分布式 系统性能扩展方式&#xff1a; Scale UP&#xff1a;垂直扩展&#xff0c;向上扩展,增强&#xff0c;性能更强的计算机运行同样的服务 升级单机的硬件设备 Scale Out&#xff1a;水平扩展&#xff0c;向外扩展,增加设备&#xff0c;并行…

【windows下,串口问题+无法连接+统一解决思路:打开串口失败!!!,或者其它错误。请选择正确得串口或者串口被占用 >>>问题解决与记录】

【windows下&#xff0c;串口问题&#xff1a;打开串口失败&#xff01;&#xff01;&#xff01;&#xff0c;或者其它错误。请选择正确得串口或者串口被占用 >>>问题解决与记录】 1、前言2、环境说明3、问题说明4、自我尝试解决方式&#xff08;1&#xff09;尝试插…

【数据结构】用队列实现栈

下面是一些思路分析和代码分享&#xff0c;有需要借鉴即可。 1.问题描述 我想用队列来实现栈的功能&#xff0c;具体而言是用两个队列做底层做出栈的功能来。 有人可能会疑问会不会多次一举&#xff0c;这里仅作练习&#xff0c;为了更加进一步了解栈/队列的性质 2.思路分析 …

UE4 Niagara 关卡3.4官方案例解析

Texture sampling is only supported on the GPU at the moment.(纹理采样目前仅在GPU上受支持) 效果&#xff1a;textures can be referenced within GPU particle systems。this demo maps a texture to a grid of particles&#xff08;纹理可以在GPU粒子系统中被引用这个演…

【书生·浦语大模型实战营】第5节 课后作业

LMDeploy 的量化和部署 0. 课程链接1. 课后作业1.1 基础作业1.2 进阶作业&#xff08;可选做&#xff09; 0. 课程链接 链接&#xff1a;https://github.com/InternLM/tutorial/blob/main/lmdeploy/lmdeploy.md 1. 课后作业 1.1 基础作业 使用 LMDeploy 以本地对话、网页Gra…

开展庆2024年“三八”国际妇女节系列纪念活动怎样向媒体投稿?

为了向媒体投稿,庆祝2024年“三八”国际妇女节系列纪念活动,你可以遵循以下步骤: 策划与准备: 确定纪念活动的主题和目标,例如提升女性权益、表彰女性成就、促进性别平等。 策划一系列活动,如研讨会、表彰仪式、展览、讲座等,确保内容丰富多样。 准备相关的背景资料、活动介…

解决物理机装不上VMnet1和VMnet8的虚拟网卡问题

问题描述&#xff1a; 博主在使用虚拟机时&#xff0c;发现物理机的ping命令连接不上虚拟机&#xff0c;导致xshell软件也连接不上&#xff0c;最后发现问题是更改适配器设置中没有虚拟机的网卡&#xff08;VMnet1和VMnet8&#xff09;&#xff1a; 方法一&#xff1a; 博主搜…

通过Apple Configurator 2导出iOS ipa包

通过Apple Configurator 2导出iOS ipa包 安装Apple Configurator 2 从Mac AppStore安装Apple Configurator 2 下载ipa 准备工作&#xff1a; 1、 电脑已经安装了Apple Configurator 2 2、 手机已经安装了目标软件 3、 Apple 账号已经下载过目标软件 打开后连接设备&#xf…