表达式和语句

本文参考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.mzph.cn/news/721954.shtml

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

相关文章

click house 数据库的intDiv函数计算原理

select intDiv(500000,50); --10000 select intDiv(500001,50); --10000 select intDiv(500050,50); --10001 Java代码实现 public static int intDiv(int a, int b) {if (b ! 0) {return a / b;} else {throw new ArithmeticException("Division by zero is not allowe…

Java学习笔记003——类成员的访问修饰符

在Java语言中&#xff0c;类成员的访问修饰符用于定义类成员的可见性&#xff0c;即哪些其他类可以访问这些成员。类成员包括字段&#xff08;变量&#xff09;、方法和构造器。Java提供了四种访问修饰符来控制成员的访问权限&#xff1a; public&#xff1a;公共的。任何类都可…

摘要, 加密, 数字签名, 数字证书以及加密通信简要介绍

如今 HTTPS 已几乎完全取代 HTTP, 大部分的网络通信也都有使用加密层, 那么对于非对称加密以及数字证书的学习也就不可避免了. 摘要 摘要是一个很简单的概念, 可以类比人类的指纹. 摘要是由数据计算而来的, 当数据变更的时候, 它的摘要也随之变更. 对比现实就是, 只要是不同的…

软件测试零基础新手入门必看

软件测试&#xff1a;使用技术手段验证软件是否满足使用需求 目的&#xff1a;减少缺陷&#xff0c;保证质量 一、测试主流技能&#xff1a; 1.功能测试 测试主要验证程序的功能是否满足需求 2.自动化测试 使用工具或代码代替手工&#xff0c;对项目进行测试 3.接口测试 …

Golang 开发实战day02 - Print Formatting

Golang 教程02 - Print&#xff0c;Formatting Strings Go语言提供了丰富的格式化字符串功能&#xff0c;用于将数据格式化为特定格式的字符串。本课程将详细介绍Go语言中Print和Formatting Strings的用法&#xff0c;并提供代码示例供大家参考。 Print 类型及使用 1.Print …

QEMU设备直通pass through的地址映射转换

[内核:HVA]->[QEMU:HVA]的mmap地址映射 $ sudo cat /proc/2047239/maps | grep -i vfio address perms offset dev inode pathname 7f4b5444a000-7f4b5445a000 rw-s 9da50000 00:0e 13037 anon_inode:[vfi…

C++中的静态成员变量和静态成员函数

一、静态成员变量 静态成员变量使用static修饰的成员变量。静态成员变量不属于某一个对象&#xff0c;而是属于整个类&#xff0c;因此静态成员变量不能设置缺省值&#xff0c;因为缺省值是给予初始化列表用于初始化对象的。 静态成员变量需要再类内声明&#xff0c;类外定义…

计算机网络 网络原理之Http

目录 1 前言2 什么是http的一次交互&#xff1f;3 理解“协议”二字4 认识URL4.1 简介4.2 URL的编码和解码(urlencode和urldecode) 5 抓包工具 fiddler6 http和https的区别7 http 头8 HTTP 状态码9 常见的 Http 服务器 1 前言 为什么要了解Http原理呢&#xff1f;因为http原理…

前端知识学习之proxy代理对象

前端proxy代理对象 1.学习背景 学习vue3过程中&#xff0c;发现vue3相比于vue2的最大优势在于&#xff0c;尤雨溪大佬在vue3中使用proxy 代理对象&#xff0c;vue2中使用的双向绑定Object.defineProperty&#xff0c;这两者有什么区别 2.Object.defineProperty 使用方法&am…

ECMAScript语法

什么是ECMAScript ECMAScript 是一种由 ECMA国际&#xff08;前身为欧洲计算机制造商协会&#xff09;通过 ECMA-262 标准化的脚本程序设计语言。 ECMAScript 是一种可以在宿主环境中执行计算并能操作可计算对象的基于对象的程序设计语言。ECMAScript 最先被设计成一种 Web 脚…

java使用mapper操作mysql

上半部分搭建springboot 简单使用数据库查询 添加链接描述 在impl接口实现操作 如 package com.service.impl; import com.dao.UserMapper; import com.pojo.User; import com.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import…

基于SSM SpringBoot vue个人博客网站

基于SSM SpringBoot vue个人博客网站 系统功能 首页 图片轮播 博客文章 搜索 登录注册 论坛 留言板 个人中心 我的收藏 后台管理 登录 个人中心 博客分类管理 博客文章管理 论坛管理 系统管理 管理员管理 注册用户管理 开发环境和技术 开发语言&#xff1a;Java 使用框架:…

实战经验分享:如何优化即时通讯应用的性能?

在当今移动互联网时代&#xff0c;即时通讯应用如雨后春笋般涌现&#xff0c;用户对即时通讯应用的性能和体验要求也越来越高。作为即时通讯开发领域的专家&#xff0c;我将分享一些优化即时通讯应用性能的实战经验&#xff0c;帮助开发者提升应用质量和用户满意度。 1. 优化网…

【Leetcode每日一刷】贪心算法| 45.跳跃游戏 II

1、45.跳跃游戏 II &#x1f984;解题思路&#xff1a; 这题还是比【55.跳跃游戏】难一些的。第一个版本只是说&#xff0c;求跳跃的范围&#xff0c;覆盖到了终点即可。这题则是&#xff0c;能保证覆盖范围到达终点&#xff0c;求的是最少跳几次&#xff0c;跳到终点。 这题…

289页初中级前端题助你拿下Offer,终局之战

HTML、CSS、JS三大部分都起什么作用&#xff1f; HTML内容层&#xff0c;它的作用是表示一个HTML标签在页面里是个什么角色&#xff1b;CSS样式层&#xff0c;它的作用是表示一块内容以什么样的样式&#xff08;字体、大小、颜色、宽高等&#xff09;显示&#xff1b;JS行为层…

Redis缓存【重点】

参考链接 https://xiaolincoding.com/redis/cluster/cache_problem.html#%E7%BC%93%E5%AD%98%E9%9B%AA%E5%B4%A9 目录 缓存雪崩大量数据同时过期Redis 故障宕机 缓存击穿第一种方案&#xff0c;非法请求的限制第二种方案&#xff0c;缓存空值或者默认值第三种方案&#xff0c;使…

01、MongoDB -- 下载、安装、配置文件等配置 及 副本集配置

目录 MongoDB -- 下载、安装、配置 及 副本集配置启动命令启动 mongodb 的服务器&#xff08;单机和副本集&#xff09;启动单机模式的 mongodb 服务器启动副本集的 3 个副本节点&#xff08;mongodb 服务器&#xff09; 启动 mongodb 的客户端 MongoDB 下载MongoDB 安装1、解压…

App自动化测试笔记(一):搭建环境

一、三个环境 1、android模拟器&#xff1a;模拟安卓手机 2、androidSDK:android SDK给你提供开发测试所必须android API类库 3、java&#xff1a;android底层是c、c语言&#xff0c;应用层是java语言 二、java环境搭建 java安装 安装jdk-8u151-windows-x64.exe 配置环境变量…

JAVA的学习日记DAY1

JAVA的学习日记&#xff08;2024.3.1&#xff09;&#xff08;b站韩顺平老师课程学习笔记版&#xff09; ps:捡起忘光光的Java语言 Sublime //1. public是公有&#xff0c;class是类 //2. public class Hello表示Hello是一个类&#xff0c;是一个public公有的类 //3. Hello{…

MySQL-索引:聚集索引、覆盖索引、组合索引、前缀索引、唯一索引(附带例子解释)

MySQL-索引&#xff1a;聚集索引、覆盖索引、组合索引、前缀索引、唯一索引&#xff08;附带例子解释&#xff09; 1、聚集索引2、覆盖索引3、组合索引4、前缀索引5、唯一索引6、再深入理解覆盖索引7、拓展 1、聚集索引 在数据库中&#xff0c;聚集索引决定了表数据行的物理存…