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

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

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

8. 单⽬操作符

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

8.1 ++和--

++ 是⼀种⾃增的操作符,⼜分为前置 ++ 和后置 ++ , -- 是⼀种⾃减的操作符,也分为前置 --

和后置 --

请⼀定要注意:

• 前置 ++ 或者 后置 ++ ,都是让操作数⾃增1的

• 前置 -- 或者 后置 -- ,都是让操作数⾃减1的

8.1.1 前置++ 和 后置++

cpp 复制代码
//案例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 前置-- 和 后置--

cpp 复制代码
//案例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 + 和 -

这⾥的 + 是正号, - 是负号,都是单⽬操作符。

运算符 + 对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。

cpp 复制代码
int a = +10; //等价于  int a = 10;

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

cpp 复制代码
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() ⽅法读取⼀个字

符。

它的原型定义在头⽂件 。

cpp 复制代码
#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 就可

以。

cpp 复制代码
#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() 函数将它的参数字符输出到屏幕,它的原型定义在头⽂件 。

cpp 复制代码
#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 (格式化),表⽰可以定制输出⽂本的格式。

cpp 复制代码
#include <cstdio>
int main()
{
	printf("Hello World");
	return 0;
}

上⾯命令会在屏幕上输出⼀⾏⽂字"Hello World"。

printf() 不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换

⾏。

为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符 \n 。

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

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

2.1.2 占位符

printf() 可以在输出⽂本中指定占位符。

所谓 "占位符",就是这个位置可以⽤其他值代⼊。

cpp 复制代码
#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 表⽰代⼊的是字符串。

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

上⾯⽰例中, %s 表⽰代⼊的是⼀个字符串,所以 printf() 的第⼆个参数就必须是字符串,这个例

⼦是 zhangsan 。执⾏后的输出就是 zhangsan will come tonight 。

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

cpp 复制代码
#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() 允许限定占位符的最⼩宽度。

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

上⾯⽰例中, %5d 表⽰这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯会添加空格。

输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空

格,可以在占位符的 % 的后⾯插⼊⼀个 - 号。

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

上⾯⽰例中,输出内容 123 的后⾯添加了空格。

对于⼩数,这个限定符会限制所有数字的最⼩显⽰宽度。

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

上⾯⽰例中, %12f 表⽰输出的浮点数最少要占据12位。由于⼩数的默认显⽰精度是⼩数点后6位,

所以 123.45 输出结果的头部会添加2个空格

2.1.3.2 限定⼩数位数

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

成 %.2f 。

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

上⾯⽰例中,如果希望⼩数点后⾯输出3位( 0.500 ),占位符就要写成 %.3f 。

这种写法可以与限定宽度占位符,结合使⽤。

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

上⾯⽰例中, %6.2f 表⽰输出字符串最⼩宽度为6,⼩数位数为2。所以,输出字符串的头部有两个

空格。

最⼩宽度和⼩数位数这两个限定值,都可以⽤ * 代替,通过 printf() 的参数传⼊。

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

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

相关推荐
Android_chunhui33 分钟前
向量检索原理
c++·搜索引擎·全文检索
一行玩python1 小时前
Xerces-C,一个成熟的 C++ XML 解析库!
xml·c语言·开发语言·c++
Octopus20772 小时前
【C++】AVL树
开发语言·c++·笔记·学习
荒古前2 小时前
小发现,如何高级的顺序输出,逆序输出整数的每一位(栈,队列)
数据结构·c++·算法
奶香臭豆腐2 小时前
C++ 泛编程 —— 函数模板(中)
开发语言·c++·学习
蜗牛hb3 小时前
C++是如何工作的?
开发语言·c++
会编程的果子君3 小时前
蓝桥杯软件赛系列---lesson1
职场和发展·蓝桥杯
Rossy Yan3 小时前
【数据结构——查找】顺序查找(头歌实践教学平台习题)【合集】
数据结构·c++·算法·查找
zcrlqq3 小时前
蓝桥杯我来了
蓝桥杯
m0_748240543 小时前
WebView2教程(基于C++)【一】环境初始化
开发语言·c++