蓝桥杯准备训练(lesson5 ,c++)

news2024/12/26 22:39:21

单目操作符与第 2 章 C/C++输⼊输出(上)

  • 8. 单⽬操作符
    • 8.1 ++和--
      • 8.1.1 前置++ 和 后置++
      • 8.1.2 前置-- 和 后置--
    • 8.2 + 和 -
  • 第 2 章 C/C++输⼊输出(上)
  • 1. getchar 和 putchar
    • 1.1 getchar()
    • 1.2 putchar()
  • 2. scanf 和 printf
    • 2.1 printf
      • 2.1.1 基本⽤法
      • 2.1.2 占位符
      • 2.1.3 格式化输出
        • 2.1.3.1 限定宽度
        • 2.1.3.2 限定⼩数位数

8. 单⽬操作符

前⾯介绍的操作符都是双⽬操作符,即有2个操作数。除此之外还有⼀些操作符只有⼀个操作数,被称为单⽬操作符。如 ++、–、+(正)、-(负) 就是单⽬操作符。

8.1 ++和–

++ 是⼀种⾃增的操作符,⼜分为前置 ++ 和后置 ++ , – 是⼀种⾃减的操作符,也分为前置 –
和后置 –
请⼀定要注意:
• 前置 ++ 或者 后置 ++ ,都是让操作数⾃增1的
• 前置 – 或者 后置 – ,都是让操作数⾃减1的

8.1.1 前置++ 和 后置++

//案例1
int x = 10;
int a = ++x;//++的操作数是x,是放在x的前⾯的,就是前置++
cout << x << " " << a << endl;
//案例2
int x = 10;
int a = x++;//++的操作数是x,是放在x的后⾯的,就是后置++
cout << x << " " <<  a << endl;

⼩技巧:
前置++: 先+1,后使⽤
后置++:先使⽤,后+1

8.1.2 前置-- 和 后置–

//案例1
int y = 10;
int b = --y;//--的操作数是y,是放在y的前⾯的,就是前置--
cout << y << " " <<  b << endl;
//案例2
int y = 10;
int b = y--;//--的操作数是y,是放在y的后⾯的,就是后置--
cout << y << " " << b << endl;

⼩技巧:
前置 --: 先 - 1,后使⽤
后置 --:先使⽤,后 - 1

8.2 + 和 -

这⾥的 + 是正号, - 是负号,都是单⽬操作符。
运算符 + 对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。

int a = +10; //等价于  int a = 10;

运算符 - ⽤来改变⼀个值的正负号,负数的前⾯加上 - 就会得到正数,正数的前⾯加上 - 会得到负

int a = 10;
int b = -a;
int c = -10;
cout << b << c << endl;//这⾥的b和c都是-10
int a = -10;
int b = -a;
cout << b << endl;//这⾥的b是10

第 2 章 C/C++输⼊输出(上)

1. getchar 和 putchar

getchar() 和 putchar() 是属于 C 语⾔的库函数,C++是兼容 C 语⾔的,所以 C++ 中只要正确包
含头⽂件也可以正常使⽤这两个函数。

1.1 getchar()

函数原型如下:
int getchar ( void );

getchar() 函数返回⽤⼾从键盘输⼊的⼀个字符,使⽤时不带有任何参数。
程序运⾏到这个命令就会暂停,等待⽤⼾从键盘输⼊,等同于使⽤ cin 或 scanf() ⽅法读取⼀个字
符。
它的原型定义在头⽂件 。

#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
	int ch;
	ch = getchar();
	cout << ch << endl;
	cout << (char)ch << endl;
	return 0;
}

getchar() 不会忽略起⾸的空⽩字符,总是返回当前读取的第⼀个字符,⽆论是否为空格。
如果读取失败,返回常量 EOF ,由于 EOF 通常是 -1 ,所以返回值的类型要设为 int ,⽽不是
char 。
如何让 getchar() 函数读取失败,返回 -1 呢?其实需要在输⼊字符之前,直接按 Ctrl+z 就可
以。

#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
	int ch;
	ch = getchar();
	cout << ch << endl;
	return 0;
}

在这里插入图片描述
getchar() 通常和 putchar() 是⼀对⼉,配合使⽤的。

1.2 putchar()

int putchar( int character );

putchar() 函数将它的参数字符输出到屏幕,它的原型定义在头⽂件 。

#include <cstdio>
int main()
{
	int ch = 0;
	ch = getchar();
	putchar(ch);
	return 0;
}

操作成功时, putchar() 返回输出的字符,否则返回常量 EOF 。

⼩提⽰:
这⾥⼤家先学会这两个函数的使⽤,在后期算法课的模块,会学到快速读写,到时候就会⽤
到这两个函数。

2. scanf 和 printf

scanf() 和 printf() 是属于C语⾔的库函数,C++是兼容 C 语⾔的,所以 C++ 中只要正确包含头
⽂件也可以正常使⽤这两个函数。⽽且这两个函数在算法竞赛题⽬中使⽤的⾮常频繁,尤其是在输出
格式控制中,所以接下来我们这⾥认真学习⼀下。

2.1 printf

printf() 函数原型如下:
int printf ( const char * format, … );

2.1.1 基本⽤法

printf() 的作⽤是将参数⽂本输出到屏幕。
它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。

#include <cstdio>
int main()
{
	printf("Hello World");
	return 0;
}

上⾯命令会在屏幕上输出⼀⾏⽂字“Hello World”。
printf() 不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换
⾏。
为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符 \n 。

如果⽂本内部有换⾏,也是通过插⼊换⾏符来实现,如下⽅代码:

#include <cstdio>
int main()
{
	printf("Hello\nWorld\n");
	printf("Hello\n");
	printf("World\n");
	return 0;
}

2.1.2 占位符

printf() 可以在输出⽂本中指定占位符。
所谓 “占位符”,就是这个位置可以⽤其他值代⼊。

#include <cstdio>
// 输出 There are 3 apples
int main()
{
printf("There are %d apples\n", 3);
return 0;
}

上⾯⽰例中, There are %d apples\n 是输出⽂本,⾥⾯的 %d 就是占位符,表⽰这个位置要
⽤其他值来替换。占位符的第⼀个字符⼀律为百分号 % ,第⼆个字符表⽰占位符的类型, %d 表⽰这
⾥代⼊的值必须是⼀个整数。
printf() 的第⼆个参数就是替换占位符的值,上⾯的例⼦是整数 3 替换 %d 。执⾏后的输出结果
就是 There are 3 apples 。
常⽤的占位符除了 %d ,还有 %s 表⽰代⼊的是字符串。

#include <cstdio>
int main()
{
	printf("%s will come tonight\n", "zhangsan");
	return 0;
}

上⾯⽰例中, %s 表⽰代⼊的是⼀个字符串,所以 printf() 的第⼆个参数就必须是字符串,这个例
⼦是 zhangsan 。执⾏后的输出就是 zhangsan will come tonight 。

输出⽂本⾥⾯可以使⽤多个占位符。

#include <cstdio>
int main()
{
	printf("%s says it is %d o'clock\n", "lisi", 21);
	return 0;
 }

上⾯⽰例中,输出⽂本 %s says it is %d o’clock 有两个占位符,第⼀个是字符串占位
符 %s ,第⼆个是整数占位符 %d ,分别对应 printf() 的第⼆个参数( lisi )和第三个参数
( 21 )。执⾏后的输出就是 lisi says it is 21 o’clock 。
printf() 参数与占位符是⼀⼀对应关系,如果有 n 个占位符, printf() 的参数就应该有 n +
1 个。如果参数个数少于对应的占位符, printf() 可能会输出内存中的任意值。
占位符列举:
printf() 的占位符有许多种类,与数据类型相对应。
下⾯列出常⽤的占位符,⽅便查找,具体含义在后⾯章节介绍。

占位符
介绍
%d ⼗进制整数。
%lld ⼗进制 long long int 类型。
%f ⼩数(包含float类型和double类型)。
%Lf long double 类型浮点数。
%c 字符。
%s 字符串。
%a ⼗六进制浮点数,字⺟输出为⼩写。
%A ⼗六进制浮点数,字⺟输出为⼤写。
%e 使⽤科学计数法的浮点数,指数部分的e为⼩写。
%E 使⽤科学计数法的浮点数,指数部分的E为⼤写。
%i 整数,基本等同于%d。
%g 6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的e为⼩写。
%G 等同于%g,唯⼀的区别是指数部分的E为⼤写。
%hd ⼗进制 short int 类型。
%ho ⼋进制 short int 类型。
%hx ⼗六进制 short int 类型。
%hu unsigned short int 类型。
%ld ⼗进制 long int 类型。
%lo ⼋进制 long int 类型。
%lx ⼗六进制 long int 类型。
%lu unsigned long int 类型。
%llo ⼋进制 long long int 类型。
%llx ⼗六进制 long long int 类型。
%llu unsigned long long int 类型。
%Le 科学计数法表⽰的 long double 类型浮点数。
%n 已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
%o ⼋进制整数。
%p 指针。
%u ⽆符号整数(unsigned int)。
%x ⼗六进制整数。
%zd size_t类型。
%% 输出⼀个百分号。

2.1.3 格式化输出

printf() 可以定制占位符的输出格式。

2.1.3.1 限定宽度

printf() 允许限定占位符的最⼩宽度。

#include <cstdio>
int main()
{
	printf("%5d\n", 123); // 输出为 "  123"
	return 0;
}

上⾯⽰例中, %5d 表⽰这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯会添加空格。
输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空
格,可以在占位符的 % 的后⾯插⼊⼀个 - 号。

#include <cstdio>
int main()
{
	printf("%-5d\n", 123); // 输出为 "123  "
	return 0;
}

上⾯⽰例中,输出内容 123 的后⾯添加了空格。
对于⼩数,这个限定符会限制所有数字的最⼩显⽰宽度。

#include <cstdio>
// 输出 "  123.450000"
int main()
{
	printf("%12f\n", 123.45);
	return 0;
}

上⾯⽰例中, %12f 表⽰输出的浮点数最少要占据12位。由于⼩数的默认显⽰精度是⼩数点后6位,
所以 123.45 输出结果的头部会添加2个空格

2.1.3.2 限定⼩数位数

输出⼩数时,有时希望限定⼩数的位数。举例来说,希望⼩数点后⾯只保留两位,占位符可以写
成 %.2f 。

#include <cstdio>
// 输出 Number is 0.50
int main()
{
	printf("Number is %.2f\n", 0.5);
	return 0;
}

上⾯⽰例中,如果希望⼩数点后⾯输出3位( 0.500 ),占位符就要写成 %.3f 。
这种写法可以与限定宽度占位符,结合使⽤。

#include <cstdio>
// 输出为 "  0.50"
int main()
{
	printf("%6.2f\n", 0.5);
	return 0;
}

上⾯⽰例中, %6.2f 表⽰输出字符串最⼩宽度为6,⼩数位数为2。所以,输出字符串的头部有两个
空格。
最⼩宽度和⼩数位数这两个限定值,都可以⽤ * 代替,通过 printf() 的参数传⼊。

#include <cstdio>
int main()
{
	printf("%*.*f\n", 6, 2, 0.5);
	return 0;
}
// 等同于printf("%6.2f\n", 0.5);

上⾯⽰例中, %*.*f 的两个星号通过 printf() 的两个参数 6 和 2 传⼊。

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

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

相关文章

Linux系统挂载exfat格式U盘教程,触觉智能RK3562开发板演示

本文介绍Linux系统&#xff08;Ubuntu/Debian通用&#xff09;挂载exfat格式U盘的方法&#xff0c;触觉智能RK3562开发板演示&#xff0c;搭载4核A53处理器&#xff0c;主频高达2.0GHz&#xff1b;内置独立1Tops算力NPU&#xff0c;可应用于物联网网关、平板电脑、智能家居、教…

LeetCode 0935.骑士拨号器:动态规划(DP)

【LetMeFly】935.骑士拨号器&#xff1a;动态规划(DP) 力扣题目链接&#xff1a;https://leetcode.cn/problems/knight-dialer/ 象棋骑士有一个独特的移动方式&#xff0c;它可以垂直移动两个方格&#xff0c;水平移动一个方格&#xff0c;或者水平移动两个方格&#xff0c;垂…

No.4 笔记 探索网络安全:揭开Web世界的隐秘防线

在这个数字时代&#xff0c;网络安全无处不在。了解Web安全的基本知识&#xff0c;不仅能保护我们自己&#xff0c;也能帮助我们在技术上更进一步。让我们一起深入探索Web安全的世界&#xff0c;掌握那些必备的安全知识&#xff01; 1. 客户端与WEB应用安全 前端漏洞&#xff1…

PHP使用local-proxy的一种思路! | 架构师之路(19)

《架构师之路&#xff1a;架构设计中的100个知识点》 19.脚本语言使用长连接的一种思路 脚本类语言&#xff0c;例如PHP&#xff0c;不能像C/Java那样能搞服务常驻内存&#xff0c;不能搞长连接&#xff1f; 为什么脚本语言要搞长连接&#xff1f; 脚本类语言每次访问后端数据库…

【51单片机】程序实验1112.外部中断-定时器中断

主要参考学习资料&#xff1a;B站【普中官方】51单片机手把手教学视频 前置知识&#xff1a;C语言 单片机套装&#xff1a;普中STC51单片机开发板A4标准版套餐7 码字不易&#xff0c;求点赞收藏加关注(•ω•̥) 有问题欢迎评论区讨论~ 目录 程序实验11&12.外部中断-定时器…

驱动---1.DAC8552实现三角波输出

最近开始进行新项目的研发&#xff0c;考虑用DAC做一个前级输出&#xff0c;选择了DAC8552这个器件的一个模块&#xff0c;用了野火的指南者做主控&#xff0c;芯片是STM32F103VET6&#xff0c;主频是72MHz。 一、器件手册重要信息提取 1.DAC8552具有十六位的分辨率、双通道输…

虚幻引擎生存建造系统

先做一个建造预览模式&#xff0c;按下按键B后进入建造预览模式 首先创建自定义事件Preview Loop 用射线追踪摆放物体预览位置&#xff0c;并做一个预览材质 增强输入设置按键 每帧判断是否进入建造模式 预览模式制作成功&#xff01; 接着做点击左键放置物品&#xff0…

IP研究 | 大数据洞察黄油小熊的爆火之路

一只来自泰国的小熊在国内红成了顶流。 今年&#xff0c;黄油小熊以烘焙店“打工人”的超萌形象迅速走红&#xff0c;2个月内火遍中国的社交媒体&#xff0c;泰国门店挤满飘洋过海求合影的中国粉丝&#xff0c;根据数说故事全网大数据洞察&#xff0c;黄油小熊2024年度的线上声…

深度学习案例:DenseNet + SE-Net

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 一 回顾DenseNet算法 DenseNet&#xff08;Densely Connected Convolutional Networks&#xff09;是一种深度卷积神经网络架构&#xff0c;提出的核心思想是通过在每一层与前面所有层进行直接连接…

【java学习笔记】Set接口实现类-LinkedHashSet

一、LinkedHashSet的全面说明 &#xff08;就是把数组不同位置的链表当成一个节点然后相连&#xff09;

【大模型系列篇】LLaMA-Factory大模型微调实践 - 从零开始

前一次我们使用了NVIDIA TensorRT-LLM 大模型推理框架对智谱chatglm3-6b模型格式进行了转换和量化压缩&#xff0c;并成功部署了推理服务&#xff0c;有兴趣的同学可以翻阅《NVIDIA TensorRT-LLM 大模型推理框架实践》&#xff0c;今天我们来实践如何通过LLaMA-Factory对大模型…

【C++】LeetCode:LCR 078. 合并 K 个升序链表

题干&#xff1a; 给定一个链表数组&#xff0c;每个链表都已经按升序排列。 请将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 解法&#xff1a;优先队列 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *ne…

数据结构和算法-04二叉树-04

广度优先的实现力扣中常见的二叉树相关问题及基本解决方案 tips&#xff1a; 在解决问题时&#xff0c;先确保问题能解决&#xff0c;再去考虑效率&#xff0c;这是解题的关键&#xff0c;切不可为追求效率而变成了技巧性解答。 广度优先 广度优先(层序遍历)遍历的方式是按层次…

DMA代码部分

第一个程序的接线图 OLED ShowHexNum(2,1,(uint32_t)&ADC1->DR,8); 这样可以看AD的DR寄存器的的地址(固定的)了 可以跑一下然后和手册对比 先查ADC1的地址 再在外设的总表里面, 查一下DR相对于上面地址的偏移量 所以其地址为4001 244C 研究一下外设寄存器的地址是怎么…

spdlog高性能日志系统

spdlog高性能日志系统 spdlog 是一个快速、简单、功能丰富的 C 日志库&#xff0c;专为现代 C 开发设计。它支持多种日志后端&#xff08;如控制台、文件、syslog 等&#xff09;&#xff0c;并提供灵活的格式化和线程安全的日志输出。 1. 特点 极高的性能&#xff1a;大量的编…

FPGA在线升级 -- Multiboot

简介 本章节主要描述关于如何从Golden Image转换到Multiboot Image程序。 升级方案 Golden Image转换到Multiboot Image的方法主要又两种 1、使用ICAPE2 原语&#xff1b; 2、在XDC文件中加入升级约束命令&#xff1b; 以上两种方案都可以实现在线升级&#xff0c;第一种升级…

守护进程化

目录 一、进程组 二、会话 &#xff08;1&#xff09;什么是会话 &#xff08;2&#xff09;如何创建一个会话 三、守护进程 一、进程组 之前我们学习过进程&#xff0c;其实每一个进程除了有一个进程 ID(PID)之外 还属于一个进程组。进程组是一个或者多个进程的集合&…

QML插件扩展

https://note.youdao.com/ynoteshare/index.html?id294f86c78fb006f1b1b78cc430a20d74&typenote&_time1706510764806

RabbitMQ七种工作模式之 RPC通信模式, 发布确认模式

文章目录 六. RPC(RPC通信模式)客户端服务端 七. Publisher Confirms(发布确认模式)1. Publishing Messages Individually(单独确认)2. Publishing Messages in Batches(批量确认)3. Handling Publisher Confirms Asynchronously(异步确认) 六. RPC(RPC通信模式) 客⼾端发送消息…

ArcGIS字符串补零与去零

我们有时候需要 对属性表中字符串的补零与去零操作 我们下面直接视频教学 下面看视频教学 ArcGIS字符串去零与补零 推荐学习 ArcGIS全系列实战视频教程——9个单一课程组合 ArcGIS10.X入门实战视频教程&#xff08;GIS思维&#xff09; ArcGIS之模型构建器&#xff08;Mod…