当前位置: 首页 > news >正文

C-study(五).2

逻辑运算符

连接两个完整的关系表达式。
&& 逻辑与,ab都为真时,a&&b的值真,其余时候假。
|| 逻辑或,ab都为假时,a||b的值假,其余时候真。
! 逻辑非、只需要一个运算对象,a真,!a假,a真,!a假。

逻辑表达式求值顺序:从左往右

&&和II 都是序列点,到&&或||之前副作用都会生效

一旦发现有使整个表达式为假的因素,会立即停止求值
第一个条件不成立时 && 之后的语句都直接跳过

#include <ctype.h>   //为isspace ()函数提供原型
#include <stdbool.h> //为bool、 true、 false提供定义
#define PERIOD '.'
#define STOP '|'         // 标记输入结束/*if(range>=90 &&range<=100) //不可以用90<=range<=100(ch != '"' | | ch != '\'') // 使用 || 两个条件有一个为真时为真,都为假时为假if (!(ch != '"')) // 使用 ! 条件为假时为真,为真时为假6 > 2 && 3 == 3 为真。 !(6 > 2 && 3 == 3) 为假。a>b&&b>c||b>d 相当于 ((a>b)&&(b>c))||(b>d)if(num!=0&&12/num==2)//&& 第一个表达式为假(num==0)时,会直接跳过后面的表达式,所以不会出现 除以0的情况x != 0 && 20 / x < 5只有在x是非零时才会对第2个表达式求值。while(x++<10&&x+y<20) //&&是序列点,可以保证在x+y的时候已经完成了自增操作*/char ch;int charcount = 0;while ((ch = getchar()) != PERIOD) // 读字符并检查是不是.{if (ch != '"' && ch != '\'') // &&:两个条件都为真时为真,不是"和'时记数charcount++;}printf("There are %d non-quote characters.\n", charcount);char c;              // 读入字符char prev;           // 读入的前一个字符long n_chars = 0L;   // 字符数int n_lines = 0;     // 行数int n_words = 0;     // 单词数int p_lines = 0;     // 不完整的行数bool inword = false; // 如果c在单词中,inword 等于trueprintf("Enter text to be analyzed (| to terminate) : \n");prev = '\n';                    // 用于识别完整的行while ((c = getchar()) != STOP) // getchar便于统计字符 读到|结束循环{n_chars++; // 统计字符if (c == '\n')n_lines++; // 统计行if (!isspace(c) && !inword) // 不是空格,不在单词内,则在单词开头标记inword,相当于inword==false{inword = true; // 开始一个新的单词n_words++;     // 统计单词}if (isspace(c) && inword) // 是空格,在单词内,说明一个单词结束,标记inword为false不在单词内inword = false;       // 打到单词的末尾prev = c; // 保存字符的值}if (prev != '\n')p_lines = 1; // 不完整的一行printf("characters = %ld,words = %d,lines = %d,", n_chars, n_words, n_lines);printf("partial lines = %d\n", p_lines);

条件运算符 ?:

唯一的三元运算符,每个运算对象都是一个表达式
expression1 ? expression2 :expression3

expression1为真(非0),表达式的值为expression2,否则为expression3

if else语句的便捷方式

#define COVERAGE 350        // 每罐油漆可刷的面积(单位:平方英尺)
//max=(a>b)?a:b; 取最大值
//(5>3)?1:2的值为 1。
//(3>5)?1:2的值为 2。int sq_feet;int cans;printf("Enter number of square feet to be painted : \n");while (scanf("%d", &sq_feet) == 1){cans = sq_feet / COVERAGE;                   // int除法会被截断cans += ((sq_feet % COVERAGE == 0)) ? 0 : 1; // 取余等于0说明刚刚好,不等于0说明多一桶printf("You need %d %s of paint . \n", cans, cans == 1 ? "can" : "cans"); // 如果值是1则打印can,否则打印cansprintf("Enter next value (q to quit) : \n");}

按位运算符

~ :按位取反,一元运算符。
& :按位与运算符
| :按位或运算符
^ :按位异或运算符
<<:左移运算符,num<<n,num左移n位(*2n)。左边丢掉右边补0。
>> :右移运算符,num>>n,num右移n位(/2n)。右边丢掉左边补0。
在这里插入图片描述

int x = 2;   // 010
int y = 3;   // 011
// x & y = 2;   // 010
// y << x = 12; // 1100

其他运算符

sizeof运算符和size_t类型

sizeof:返回运算对象的字节大小,一元运算符
返回size_t类型的值,是语言定义的标准类型
%zd 或者%u %lu

// 使用C99新增的%zd转换说明--如果编译器不支持%zd, 请将其改成%u或%lu
int n = 0;
size_t intsize;// sizeof返回值,是无符号整型(的typedef别名),相当于 typedef unsigned int size_t
intsize = sizeof(int);//运算对象可以是类型或具体数据对象,是类型时必须加()
printf("n = %d,n has %zd bytes; all ints have %zd bytes. \n",n, sizeof n, intsize);//是具体对象()可以省略

() 强制类型转换运算符

(目标类型)

mice = 1.6+1.7;//3.3->3 先计算,在转换
mice = (int)1.6+(int)1.7;//先转换1+1

强制转换超出范围时依然会出错
显示选择合适的类型,强制类型转换指明转换类型,避免出现不正确的自动转换

逗号运算符 ,

性质:
保证从左往右求值,
是一个序列点,逗号左侧的副作用会在执行逗号右侧之前发生

逗号表达式的值是右侧项的值

const int FIRST_OZ = 46; // 2013邮资
const int NEXT_OZ = 20;  // 2013邮资
int ounces, cost;
printf(" ounces   cost\n");
/*
* 初始化表达式的逗号是两个值都可进行初始化
* 更新表达式的初始化可使两个值每次迭代都变化
* 
* x=(y=3,(z= ++y +2)+5)先给y赋3,y++为4,4+2为6赋给z,6+5赋给x
* i=5,500;相当于i=5;500;
* i=(5,500);相当于i=500;
*/
for (ounces = 1, cost = FIRST_OZ; ounces <= 16; ounces++, cost += NEXT_OZ)printf("%5d $%4.2f\n", ounces, cost / 100.0);

类型转换

在语句和表达式中应使用类型相同的变量和常量

基本转换规则

1、升级
unsigned和signed的char和short会被自动转换为int
如果short和int的大小相同,unsigned short 比int大时会自动转换为unsigned int
float会自动转换为double

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

3、级别从高到低:
long double
double
float
unsigned long long
long long
unsigned long
long
unsigned int(当long=int,unsigned int >long)
int
当long和int大小相同时,unsigned int比long级别高

4、赋值时计算的最终结果会被转换成被赋值变量的类型,包括升级和降级

5、函数参数传递,char和short被转换为int,float被转换为double,函数原型会覆盖升级

降级可能会导致放不下整个数字
整型转换为无符号整型,额外的位被忽略,eg:目标类型是8位无符号整型,原始值求256模

char ch;
int i;
float fl;
fl = i = ch = 'C';
/*
1字节的ASCII存储在ch中
转换为ASCII中C对应的整数67,四字节存储在i中
67转换为浮点数存储在fl中
*/
printf("ch=%c,i=%d,fl=%2.2f\n", ch, i, fl);
ch = ch + 1;       /*转换成整数67+1,结果是4字节整数68然后截断1字节存在ch*/
i = fl + 2 * ch;   /*ch转换为4字节整数68,乘以2,转换为浮点数和fl相加,转换为int存储在i*/
fl = 2.0 * ch + i; /*ch转换为浮点数,乘以2,把i转换为浮点数,相加存在fl*/
printf("ch=%c,i=%d,fl=%2.2f\n", ch, i, fl);
ch = 1107; /*超出范围取256模*/
printf("Now ch = %c\n", ch);
ch = 80.89; /*截断*/
printf("Now ch = %c\n", ch);

带参函数

void pound(int n); // ANSI函数原型声明,表明该函数接受一个 int 类型的参数 ,且没有返回值const int S_PER_M = 60;         // 1分钟的秒数
const int S_PER_H = 3600;       // 1小时的秒数
const double M_PER_K = 0.62137; // 1公里的英里数int times = 5;char ch = '!'; // ASCII码是33float f = 6.0f;pound(times); // int 类型的参数,把实参5传递给函数,把5赋值给形参,即把times的值拷贝给函数中的新变量npound(ch);    // 和pound((int)ch);相同,根据函数声明自动转换pound(f);     // 和pound((int)f);相同,如果函数声明没提供参数类型,则不会转换,只会自动升级为double,使用时错误double distk, distm; // 跑过的距离(分别以公里和英里为单位 )double rate;         // 平均速度(以英里/小时为单位)int min, sec;        // 跑步用时(以分钟和秒为单位 )int time;            // 跑步用时(以秒为单位)double mtime;        // 跑1英里需要的时间,以秒为单位int mmin,msec;       // 跑1英里需要的时间,以分钟和秒为单位printf("This program converts your time for a metric race\n");printf("to a time for running a mile and to your average\n");printf("speed in miles per hour.\n");printf("Please enter, in kilometers, the distance run, \n");scanf("%lf", &distk); // %lf 表示读取一个 double 类型的值printf("Next enter the time in minutes and seconds,\n");printf("Begin by entering the minutes.\n");scanf("%d", &min);printf("Now enter the seconds,\n");scanf("%d", &sec);time = S_PER_M * min + sec;    // 把时间转换成秒distm = M_PER_K * distk;       // 把公里转换成英里rate = distm / time * S_PER_H; // 英里/秒X秒/小时=英里/小时mtime = (double)time / distm;  // 时间/距离 =跑1英里所用的时间mmin = (int)mtime / S_PER_M;   // 求出分钟数msec = (int)mtime % S_PER_M;   // 求出剩余的秒数printf("You ran %1.2f km (%1.2f miles) in %d min,%d sec.\n", distk, distm, min, sec);printf("That pace corresponds to running a mile in %d min,", mmin);printf("%d sec.\nYour average speed was %1.2f mph,\n", msec, rate);void pound(int n)
/*ANSI 风格函数头
返回值类型 函数名(返回值类型 形参名) ,不需要参数或返回值时用void,
括号内就包括形参变量的声明,形参的变量名是函数私有的,不会和其他处相同名称发生冲突
实际函数调用传递的值为实参*/
{ while (n-- > 0)printf("#");printf("\n");
}

相关文章:

C-study(五).2

逻辑运算符 连接两个完整的关系表达式。 && 逻辑与&#xff0c;ab都为真时&#xff0c;a&&b的值真&#xff0c;其余时候假。 || 逻辑或&#xff0c;ab都为假时&#xff0c;a||b的值假&#xff0c;其余时候真。 ! 逻辑非、只需要一个运算对象&#xff0c;a真&a…...

使用Ultralytics YOLO进行模型验证

使用Ultralytics YOLO进行模型验证 使用Ultralytics YOLO进行模型验证简介为什么使用Ultralytics YOLO进行验证?验证模式的主要功能使用示例YOLO模型验证参数使用参数进行验证的示例使用Ultralytics YOLO进行模型验证 简介 验证是机器学习管道中的关键步骤,可以评估训练模型…...

MICCAI 2023 List of Papers

MICCAI 2023 - Accepted Papers, Reviews, Author Feedback List of Papers https://conferences.miccai.org/2023/papers/ • 3D Arterial Segmentation via Single 2D Projections and Depth Supervision in Contrast-Enhanced CT Images • 3D Dental Mesh Segmentation U…...

压缩文件的解析方式

一、解压缩zip格式 步骤&#xff1a; 1.根据压缩文件原始路径(字符串),创建源文件对象(File对象) 2.创建根目录对象&#xff0c;传入源文件的根目录 3.判断根目录,是否已经存在 ①如果存在&#xff0c;则删除&#xff1b; ②如果不存在&#xff0c;则创建根目录。 4.可以用Zip…...

rocket mq保证消息幂等性

在互联网应用中&#xff0c;尤其在网络不稳定的情况下&#xff0c;消息队列 RocketMO 的消息有可能会出现重复&#xff0c;这个重复简单可以概括为以下情况: 1、发送时消息重复 当一条消息已被成功发送到服务端并完成持久化&#xff0c;此时出现了网络闪断或者客户端宕机&…...

Elasticsearch基本操作

文章目录 1.1 索引库操作1.1.1 创建索引库 :1.1.2 删除索引库 :1.1.3 判断索引库是否存在 1.2 文档操作1.2.1 新增文档1.2.2 查询文档1.2.3 删除文档1.2.4 修改文档1.2.5 批量导入文档 1.3 RestClient查询1.3.1 普通查询1.3.2 复合条件查询1.3.3 分页排序查询1.3.4 高亮分页查询…...

设计模式探索:责任链模式

1. 什么是责任链模式 责任链模式 (Chain of Responsibility Pattern) 是一种行为型设计模式。定义如下&#xff1a; 避免将一个请求的发送者与接收者耦合在一起&#xff0c;让多个对象都有机会处理请求。将接收请求的对象连接成一条链&#xff0c;并且沿着这条链传递请求&…...

OceanBase 配置项系统变量实现及应用详解(3):新增配置项的方法

本专题的第一篇文章&#xff0c;配置项的定义及使用方法&#xff0c;详细阐述了配置项的基础用法。对于那些对源码抱有浓厚兴趣的同学来说&#xff0c;或许还希望深入了解配置项的实现原理&#xff0c;甚至渴望亲自添加新的配置项&#xff0c;以满足个性化的功能需求。 本文通…...

PCI PTS 硬件安全模块(HSM)模块化安全要求 v5.0

符合条件的 PCI SSC 利益相关者在 30 天的意见征询 (RFC) 期间审查 PCI PTS 硬件安全模块 (HSM) 模块化安全要求 v5.0 草案并提供反馈。 PCI PTS 硬件安全模块(HSM)模块化安全要求 v5.0图 从 7 月 8 日到 8 月 8 日&#xff0c;邀请符合条件的 PCI SSC 利益相关者在 30 天的意见…...

javaweb中的请求与响应--基于postman工具的应用(附带postman的详细安装步骤)

一、前言 后端的第一天感觉难度就上来了&#xff0c;可能是基础太过薄弱了吧。目前看视频已经有点跟不上了&#xff0c;果然15天想要拿下还是太勉强了点。30天还差不多。不知道读者们有没有好好的去学这方面的知识&#xff0c;没有什么是学不会的&#xff0c;关键是坚持。 Po…...

StarRocks下载使用说明和基础操作

简介 StarRocks 是一款高性能分析型数据仓库&#xff0c;使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据&#xff0c;也支持直接分析数据湖上各种格式的数…...

桥接模式案例

桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。桥接模式通过创 建一个桥接接口&#xff0c;将抽象部分和实现部分连接起来&#xff0c;从而实现两者的解耦。下面是一个详细的桥接…...

Spring源码二十二:Bean实例化流程五

上一篇Spring源码二十一&#xff1a;Bean实例化流程四&#xff0c;咱们主要分析里createBeanInstance方法Spring给我们提供给的FactoryMethod方法&#xff0c;举例说明了factoryMethod属性如何使用&#xff0c;同时简单讨论了具体实现逻辑。 这一篇咱们将进入反射实例化Bean&am…...

Unity3D中UI层级改变详解

在Unity3D开发中&#xff0c;UI层级的调整是常见的需求&#xff0c;它直接关系到用户界面(UI)元素的显示顺序。在Unity的UI系统中&#xff0c;主要使用UGUI&#xff08;Unitys Graphical User Interface&#xff09;来实现界面布局和元素展示。本文将详细讲解Unity3D中如何改变…...

centos安装数据库同步工具sqoop并导入数据,导出数据,添加定时任务

目录 1.安装jdk 1.1上传jdk安装包到/opt目录下并解压 1.2解压 1.3配置环境变量 2.安装hadoop 2.1.下载hadoop 2.2.解压hadoop 2.3配置环境变量 3.安装sqoop 3.1下载 3.2解压 3.3下载依赖包并复制到指定位置 3.3.1下载commons-lang-2.6-bin.tar.gz 3.3.2将mysql-c…...

asp .net core 避免请求body数据量过大

方法1&#xff0c; 全局避免 引入包 dotnet add package Microsoft.AspNetCore.Http.Features using Microsoft.AspNetCore.Http.Features;public void ConfigureServices(IServiceCollection services) {services.Configure<FormOptions>(options >{// 设置允许的最…...

搭建discuz论坛(lvs+nginx+http+mysql+nfs)8台服务器

搭建discuz论坛&#xff08;lvsnginxhttpmysqlnfs&#xff09; 一、IP规划 服务名IP地址服务LVS1192.168.100.110keepalivedipvsadmLVS2192.168.100.111keepalivedipvsadmnginx1192.168.100.113nginxnginx2192.168.100.114nginxnfs192.168.100.116nfs-utilweb1192.168.100.11…...

就业平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;企业管理&#xff0c;企业类型管理&#xff0c;留言板管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;招聘信息&#xff0c;简历&#xff0c;我的 …...

hid-ft260驱动学习笔记 5 - ft260_i2c_probe

目录 1. 保存ft260_device到私有数据 2. 初始化I2C设备分配属性 3. 添加I2C适配器 4. 初始化GPIO 5. ft260_i2c_algo 5.1 ft260_functionality 5.2 ft260_i2c_xfer 5.3 ft260_smbus_xfer 6. ft260_i2c_quirks 这个函数是i2c的接口probe函数。 1. 保存ft260_device到私…...

Android上如何使用perfetto分析systrace

Android上如何使用perfetto分析systrace Perfetto 是一个用于性能分析的工具&#xff0c;提供了对 Android 系统内部工作情况的详细视图。它可以用来替代传统的 systrace 工具&#xff0c;提供更加全面的性能分析功能。以下是如何使用 Perfetto 分析 Systrace 数据的详细指南&…...

React Hooks学习笔记

一、usestate的使用方法-初始化state函数 import React, { useState } from "react"; function App() {const [count, setCount] useState(0);return (<div><p>点击{count}次</p><button onClick{() > setCount(count 1)}>点击</bu…...

BGP第二日

上图为今日所用拓扑 &#xff0c;其中R1和R4&#xff0c;R3和R5为EBGP邻居&#xff0c;R1和R3为IBGP邻居&#xff0c;AS200区域做OSPF动态路由 一.BGP建立邻居的六种状态 1.idle 空闲状态&#xff1a;建立邻居最初的状态 2.Connect 连接状态&#xff1a;在…...

rabbitmq集群创建admin用户之后,提示can access virtual hosts是No access状态

问题描述&#xff1a; 因业务需要使用的rabbitmq是3.7.8版本的&#xff0c;rabbitmq在3.3.0之后就允许使用guest账号的权限了&#xff0c;所以需要创建一个administrator标签的用户。 如下操作创建的用户&#xff1a; 创建完成之后就提示如下的报错&#xff1a; 注&#xff1a…...

ARM功耗管理之多核处理器启动

安全之安全(security)博客目录导读 思考&#xff1a;SecureBoot&#xff1f;多核处理器启动流程&#xff1f;PSCI启动方式&#xff1f; 一般嵌入式系统使用的都是对称多处理器&#xff08;Symmetric Multi-Processor, SMP&#xff09;系统&#xff0c;包含了多个cpu, 这几个cp…...

java使用easypoi模版导出word详细步骤

文章目录 第一步、引入pom依赖第二步、新建导出工具类WordUtil第三步、创建模版word4.编写接口代码5.导出结果示例 第一步、引入pom依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><…...

Android 内部保持数据的方式

Android内部保持数据的方式主要有五种&#xff0c;每种方式都有其特定的用途和优点。以下是详细的介绍&#xff1a; SQLite数据库 定义&#xff1a;SQLite是一个轻量级的、跨平台的数据库&#xff0c;所有的信息都存储在单一文件内&#xff0c;占用内存小&#xff0c;并且支持…...

uniapp 表格,动态表头表格封装渲染

1.接口表格数据&#xff1a; {"headers": [{"label": "实例名","name": "v1","order": 1,"hide": false,"dateTypeValue": null},{"label": "所属科室","name&quo…...

beyond Compare连接 openWrt 和 VsCode

连接步骤总结 1. 新建会话 -> 文件夹比较 2.点击浏览文件夹 3.在弹出页面 配置 ftp 3.1&#xff09;选中ftp 配置文件 3.2)选中ssh2 3.3)填写我们需要远端连接的主机信息 先点击连接并浏览 得到下方文件夹 弹出无效登录&#xff0c;说明需要密码 我们返回右键刚刚创建的新 …...

量化机器人能否识别市场机会?

量化机器人的设计和应用是为了通过高级算法和大数据分析&#xff0c;精确地识别和把握市场中的交易机会。这些机器人的能力不仅仅局限于执行预定的交易策略&#xff0c;更包括在复杂和快速变化的市场环境中识别利润机会。 首先&#xff0c;量化机器人能够处理和分析大量的市场…...

香橙派AIpro开发板评测:部署yolov5模型实现图像和视频中物体的识别

OrangePi AIpro 作为业界首款基于昇腾深度研发的AI开发板&#xff0c;自发布以来就引起了我的极大关注。其配备的8/20TOPS澎湃算力&#xff0c;堪称目前开发板市场中的顶尖性能&#xff0c;实在令人垂涎三尺。如此强大的板子&#xff0c;当然要亲自体验一番。今天非常荣幸地拿到…...