02- 输入、输出及运算符(C语言)

news2024/11/16 3:28:48

一  输入、输出

1.1 输出函数

printf 函数是一个可变参数函数,参数的个数不定:int printf(const char *format, ...)

printf("%d\n", x);
printf("%d %d\n", x, y);

1.2 输入函数

1.2.1 scanf函数:int scanf(const char *format, ...)

scanf 函数从标准输入读取输入,并根据提供的 format 来浏览输入

1.2.2 getchar函数:int getchar(void)

int getchar(void) 函数从屏幕读取下一个可用的字符,并把它返回为一个整数:

#include <stdio.h>

int main(){
    //输入数值
    int x = 2;
    printf("please upload a number\n");
    //scanf("%d:", &x);
    printf("%d\n", x);

    //输入字符,只能一次捕获一个字符
    char y='d';
    //scanf("%c\n", &y);
    printf("y: %c\n", y);

    //连续输入多个值
    int a=2, b=8;
    char c='l';
    scanf("%d %d %c", &a, &b, &c);
    printf("a:%d and b:%d and c:%c\n", a, b, c);

    //getchar 继续输入字符
    getchar();  //获取下一个可用字符

    char d='k';
    scanf("%c", &d);
    printf("upload d data:%c", d);

    return 0;
}

二 运算符和表达式

2.1 运算符和表达式的概念

1 运算符是一种告诉编译器执行 特定的数学或逻辑操作的符号,C 语言内置了丰富的运算符,并提供了以下类型的运算符:

2 表达式就是通过运算符将运算对象(操作数)连接起来的式子,就叫表达式。 

a+b, x=a+2, x=y>z, x++

3、运算符也叫做 操作符,根据运算符操作的运算对象的个数可以将运算符分为以下几种

  • 单目运算符:只需要一个操作数
  • 双目运算符:需要两个操作数
  • 三目运算符:需要三个操作数

4、运算符的优先级

  • ! > 算术运算符 > 关系运算符 > && > || > 条件运算符 > 赋值运算符 > 逗号运算符

5、运算符的结合性

运算符的结合性运算符在执行表达式时运算符和左右操作数结合的顺序,运算符的结合性分为:

  • 单目运算符:根据操作数在左还是右分为左结合右结合
  • 双/三目运算符:从左至右或者从右至左

2.2 算术运算符

1、C语言内置的算术运算符有如下几种:

2、注意: % 取模 (取余) 运算符的两个操作数 只能为整数
3、注意:前自增/前自减先计算后引用,后自增/后自减先引用后计算 

2.3 赋值运算符

C语言内置赋值运算符有如下几种:

注意: “=”不是相等的意思,而是赋值
专业术语:数据对象、左值、右值

  • 赋值表达式语句的目的是把值存储到内存上.用于存储值的数据存储区域统称为数据对象。
  • “左值"(lvalue)指用于标识一个特定的数据对象的名字或表达式
    • 左值具有两个特性:
      • 1. 可修改性,又称为可修改左值
      • 2. 是数据对象的标识符,应具有标识符的特性
      • 3. 左值不能为常量
    • 注意:左值不能为常量
  • "右值"(rvalue)指的是能赋给可修改的左值的量 
×+100
y = 200
y = X
y = X+200
//从上面几个表达式我们可以看出:右值可以是常量可以是变量,也可以是任何可以产生一个值的表
//达式(当然任何表达式最终都有一个最终的值)
c + 1 = 10 //是错误的

2.4 关系运算符

关系运算符用于比较两个数值中间的关系,所以也叫做 比较运算符

C语言内置了如下关系运算符:

注意:赋值运算符"="和关系运算符“==”的区别 

2.5 逻辑运算符

2.5.1 逻辑运算符导入

  • 我们回顾一下,在学习关系运算符的时候关系运算表达式的 结果只有0和1。为什么判断两个数值某个关系是否成立时要用0/1来表示呢?
  • 计算机通过两个逻辑来表示两个数值之间的关系:
    • 逻辑真(关系成立):非0
    • 逻辑假(关系不成立):0
  • 在调试程序时,C语言为了形象地表达某两个值之间的关系,就用计算机中最简单的两个值0和1来描述,什么意思呢?如果你在调试程序时输出结果为0,则表示你所判断的关系是不成立的,反之则表示成立!
  • 注意:1 是“真”,但是“真”不是1,你学会了吗? ^_^

2.5.2 逻辑运算符的使用

1、在实际应用中,我们经常需要结合多个逻辑来判断某个条件是否成立

2、在C语言中如果需要结合多个逻辑组成表达式,应该使用C语言内置的逻辑运算符:

3、判断学生的成绩是否为良好在C语言中应该使用如下表达式:

x>=60 && x<=70

4、情人节快到了,你问你女朋友∶亲爱的想要个什么礼物啊?你女朋友说给我买只口红吧或者买盒面膜也行?为了满足你女朋友的要求你该怎么做呢?

  • 买口红 || 买面膜

5、如果你女朋友口红和面膜都要呢?

  • 买口红 && 买面膜

2.6 位运算符

2.6.1 位运算的基本使用

1. 位运算是指按 二进制 进行的运算。
2. 计算机所有的计算最终都是通过二进制的位运算进行的!
3. 在软件开发过程中,常常需要处理二进制位的问题,例如:

  • 通过单片机、STM32等控制灯光、风扇等
  • 通过子网掩码求IP地址的网络号
  • 通过异或对数据进行加密
  • 通过位运算判断数据的奇偶性(x & 1)

4. C 语言 内置的位运算符 有:

2.6.2 位运算的“骚操作”

1. 左移 实现乘法

  • 左移n位 等价于乘以2的n次方
int x;
x = 2;
x = x << 2;
x = x << 3

2. 右移 实现除法

  • 右移n位等价于 除以2的n次方
int x = 100;
x = x >> 1;
x = x >> 3;

3. 不使用中间变量交换两个整型变量的值

int a = 5, b = 6;
a = a+b;
b = a-b;
a = a-b;

以上代码看似可以实现两个整型变量数值的交换,但是当a,b特别大的时候可能会超出范围。

int a = 5, b = 6;
a = a ^ b;
b = a ^ b;
a = a ^ b;

4. 判断整数的奇偶性

x & 1

5. 位操作进行 高低位交换

a = (a >> 8) | (a << 8);

6. 寄存器的置位

  • 嵌入式系统总是要用户对变量或寄存器(8位)进行位操作。给定一个变量a,将a的第3个bit位置1(bit位最右边的位第0位),其他位的值不变。
a = a | 0x08
  • 将第三个bit位清零,其他位的值保持不变
a = a & (~0x08)

7. 数据的“拆解”

  • 在数据的传输过程中需要对整型数据进行拆解,例如 int x = 0x1m2345678, 我们需要将x分别拆解成0x12 0x34 0x56 0x78进行传输。
x & 0xFF
(x >> 8) & 0xFF
(x >> 16) & 0xFF
(x >> 24) & 0xFF

8. 数据的“组装”

  • 假如我们拿到了被拆解后的数据分别为:0x12 0x34 0x56 0x78, 如果组装成0x12345678呢?
x = 0x12<<24 | 0x34<<16 | 0x56<<8 | 0x78
#include <iostream>

int main() {
    //算术运算符,乘法计算结果
    int x = 11;
    float y = 3.0;
    float z = x * y;
    printf("view data z:%f\n", z);

    //除法计算结果
    int a =10, b=3;
    float c = a/b;    //整型数据相除为整型数据

    float m = 3.0;
    float d = a/m;    //整型数据和浮点数相除为浮点数
    printf("view data c:%f\n", c);
    printf("view data d:%f\n", d);

    //printf("10/0:%f\n", 10/0);   //C语言中不容许除0的操作,会报错
    //printf("10%3.3:%d\n", 10%3.3);  //取模(取余操作)操作只能在整数和整数之间,不然会报错

    //前自增运算符的使用
    a = 2;
    printf("view add front result, ++a:%d\n", ++a);   //自己会增加
    b = ++a;
    printf("view add front result, a:%d, b:%d\n", a, b);  //自己增加然后赋值操作

    //后自增运算符的使用
    a = 2;
    //printf("view add front result, a++:%d\n", a++);   //自己不会增加
    b = a++;
    printf("view add front result, a:%d, b:%d\n", a, b);  //在原值基础上+1赋值

    //算术运算符
    a=2, b= 3+1;
    printf("view a:%d and b: %d\n", a, b);
    printf("view result a==b:%d\n", a==b);  //0
    printf("view result a!=b:%d\n", a!=b);  //1
    printf("view result a>b:%d\n", a>b);    //0
    printf("view result a<b:%d\n", a<b);    //1

    //逻辑运算符
    a = 2;
    printf("a:%d, logic %d\n", a, a>=4);  //C语言不可以使用 1<=a<=5的形式
    //逻辑非
    printf("!a: %d\n", !a);  //0
    //逻辑与
    printf("a&b: %d\n", a<=5 && b<=5);   //1
    //逻辑或, 一个为真就是真
    printf("a||b: %d\n", a<=5 || b<=1);  //1

    //位运算符
    char A = 60;
    char B = 30;
    // 与运算
    printf("A & B: %d\n", A & B);  //28
    //或运算  00为0 , 11为0, 1+任意值为1
    printf("A | B: %d\n", A | B);  //62
    //异或运算 ^, 相同为0, 不同为1
    //0和任意值异或得任意值, 1和任意值异或得任意值取反
    printf("B^A: %d\n", B ^ A);    //34
    //按位取反 ~
    printf("~A:%d\n", ~A);  //-61  
    
    return 0;
}

2.7 逗号运算符

1、逗号运算符将两个表达式连接起来

  • 表达式1, 表达式2

2、逗号运算符的结合性是“从左至右”:先计算表达式1,后计算表达式2

a = 3;
b = a*2, a+4;

3、整个表达式最终的值是表达式2的值

2.8 条件运算符

1、条件运算符是通过问号"?"和冒号";"连接的表达式

  • 表达式1 ? 表达式2 : 表达式3

2、执行逻辑

  • 如果表达式1的结果为真,则整个表达式的结果为 表达式2的结果,否则为表达式3的结果

3、实例

  • printf("%d\n", 3>4?3:4);   //取最大值

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

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

相关文章

利用AI点亮副业变现:5个变现实操案例的启示

AI变现副业实操案例 宝宝起名服务AI科技热点号头像壁纸职业头像收徒&#xff1a;萌娃头像定制头像平台挂载 小说推广号流量营销号百家号AI共创计划公众号流量主 知识付费知识星球小报童&#xff1a; 整体思维导图&#xff1a; 在这里先分享五个实操案例: 宝宝起名服务AI科技热…

[MySQL]一文带你学明白数据库控制语言——DCL

前言 嗨咯&#xff0c;小伙伴大家好呀&#xff01;好几天没见了&#xff0c;周末过得怎么样啊&#xff01;之前学过的SQL语句不会都忘了吧。如果忘了的话大家可以看一下前几期的文章。本期要学习的是SQL语句中的数据库控制语句——DCL&#xff0c;学习完毕之后MySQL中的SQL语句…

探索ll-hls低延迟直播协议

HLS全称为HTTP Live Streaming&#xff0c;其中m3u8作为描述协议&#xff0c;指向一系列切片文件。支持多码流与自适应码率&#xff0c;支持广告无缝播放&#xff0c;支持CMAF协议的低延时直播&#xff0c;也支持CDN动态选择。 我们先看下HLS整体架构&#xff0c;由三部分构成…

存储技术3 数据保护: RAID

Why RAID 性能限制了磁盘驱动单独的驱动存在预期的使用寿命 MTBF测量若一个驱动器的MTBF是750 000小时&#xff0c; 阵列中有100个驱动&#xff0c; 阵列的MTBF会变成 750000 / 100 7500小时 RAID用于减缓这个问题RAID特点 增大容量高可用性增强的性能 RAID implementation…

仿微信我的列表功能菜单按钮 我的个人中心页面功能菜单

前端vue自定义仿微信我的列表功能菜单按钮 我的个人中心页面功能菜单, 下载完整代码请访问https://ext.dcloud.net.cn/plugin?id12990 效果图如下: #### 使用方法 使用方法 <!-- leftTitle:标题 icon&#xff1a;左边图标 click&#xff1a;点击事件 --> <ccMe…

【java】IO流

IO流 原理 分类 字节流与字符流 节点流与包装流 Java IO详解&#xff08;五)------包装流 - YSOcean - 博客园 (cnblogs.com)JAVA I/O流 字符流和字节流、节点流和处理流(包装流、过滤流)、缓冲流_过滤流和缓冲流,字节流的关系_X-Dragon烟雨任平生的博客-CSDN博客 字符流 i…

算法模板(4):动态规划(2)

8.树形DP 没有上司的舞会 树上最大独立集问题 Ural 大学有 N N N 名职员&#xff0c;编号为 1 ∼ N 1 \sim N 1∼N。他们的关系就像一棵以校长为根的树&#xff0c;父节点就是子节点的直接上司。每个职员有一个快乐指数&#xff0c;用整数 H i H_i Hi​ 给出&#xff0c;…

顺序查找和折半查找

顺序查找和折半查找 顺序查找 一、算法思想 顺序查找&#xff0c;又叫“线性查找”&#xff0c;通常用于线性表。 算法思想&#xff1a;从头到尾挨个找&#xff08;或者反过来也OK&#xff09; 二、算法实现 结构体定义 typedef struct{ElemType *elem;int TableLen; }SS…

SpringBoot + Vue 的留守儿童系统的研究与实现

文章目录 1.研究背景2. 技术栈3.系统分析4系统设计5系统的详细设计与实现5.1系统功能模块5.2管理员功能模块 1.研究背景 以往的留守儿童爱心的管理&#xff0c;一般都是纸质文件来管理留守儿童爱心信息&#xff0c;传统的管理方式已经无法满足现代人们的需求&#xff1b;使用留…

变压器差动保护的影响因素和相应的措施

由于变压器一、二次电流、电压大小不同&#xff0c;相位不同&#xff0c;电流互感器特性差异&#xff0c;电源侧有励磁电流&#xff0c;都将造成不平衡电流流过继电器&#xff0c;必须采用相应措施消除不平衡电流的影响。 主要措施 &#xff08;1&#xff09;减小稳态情况下的…

SpringCloud学习笔记(四)RabbitMQ

一、同步通讯的优缺点 时效性较强&#xff0c;可以立即得到结果但是耦合度高&#xff0c;性能和吞吐能力下降有额外的资源消耗 二、异步通讯的优缺点 耦合度低&#xff0c;吞吐量提升故障隔离&#xff0c;流量削峰依赖于Broker的可靠性、安全性和吞吐能力 三、什么是MQ MQ…

物联网Lora模块从入门到精通(七)串口通讯

一、前言 在Lora模块的程序设计中&#xff0c;串口通信一定是一个极其重要且常用的通信方式&#xff0c;借助串口通信&#xff0c;我们不但可以向外传输我们获取的数据&#xff0c;还可以根据外部指令做出相应。 同样的&#xff0c;在例程中&#xff0c;为我们提供了一个名为us…

SSM简易项目实战(基本CRUD操作):速速来学+项目完整源码

前言&#xff1a;又是一年暑期将至&#xff0c;找实习&#xff1f;手里没几个项目恐怕不行&#xff0c;今天给各位带来一个较为简易的Web项目&#xff0c;快来学吧&#xff01; 一、项目简介 1、云借阅图书管理系统 技术栈&#xff1a;&#xff08;SpringSpringMVCMybatisMyS…

【面试必问】Spring核心之控制反转(IOC)

tip&#xff1a;作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 &#x1f495;&#x1f495; 推荐&#xff1a;体系化学习Java&#xff08;Java面试专题&#…

驱动开发:内核封装WFP防火墙入门

WFP框架是微软推出来替代TDIHOOK传输层驱动接口网络通信的方案&#xff0c;其默认被设计为分层结构&#xff0c;该框架分别提供了用户态与内核态相同的AIP函数&#xff0c;在两种模式下均可以开发防火墙产品&#xff0c;以下代码我实现了一个简单的驱动过滤防火墙。 WFP 框架分…

触发器和事件自动化的讲解

触发器和事件自动化 一、触发器 1、触发器的基本概念 触发器是和表相关的一种数据库对象&#xff0c;可以将他看作一种特殊的存储过程&#xff0c;不需要人为调动的存储过程。 关键字&#xff1a;trigger 基本作用&#xff1a;通过对表进行数据的插入、更新或删除等操作来触…

UnityVR--AudioManager--音频管理中心

目录 前言 建立音频配置文件AudioConfig 建立音频管理AudioManager 使用AudioManager播放音效 前言 关于音频组件的简单使用请详见VideoPlayer&AudioSource&#xff0c;不过在一个工程项目中&#xff0c;会有很多的声音文件&#xff0c;播放的时间和条件也不相同&#…

【算法题】2614. 对角线上的质数

题目&#xff1a; 给你一个下标从 0 开始的二维整数数组 nums 。 返回位于 nums 至少一条 对角线 上的最大 质数 。如果任一对角线上均不存在质数&#xff0c;返回 0 。 注意&#xff1a; 如果某个整数大于 1 &#xff0c;且不存在除 1 和自身之外的正整数因子&#xff0c;…

Docker环境下部署Ghost开源内容管理系统

Docker环境下部署Ghost开源内容管理系统 一、Ghost介绍1.1 Ghost简介1.2 Ghost特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Ghost镜像五、部署Ghost开源内容管理系统…

【linux工具备忘录】- tmux

文章目录 安装常用命令会话的进入和退出窗口创建、删除、切换窗口内的子窗口管理(创建/删除/切换)会话的后台托管管理 tmux的配置配置的创建配置重载修改前缀键更多使用说明 tmux的插件管理tpm插件管理器tmux-powerline 一个漂亮的底栏 安装 sudo apt install tmux常用命令 会…