本文我们来讲C++知识精讲的第7篇,scanf函数基本用法及实战运用,此专栏会讲许多,各种各样的类型,如果喜欢此专栏请订阅持续关注,感谢大家的支持。接下来,进入今天的知识精讲。
scanf函数用来干什么?
scanf是格式化输入,我觉得可以理解为cin的加强版
scanf使用的头文件
#include<bits/stdc++.h>
#include<iostream>
scanf的用法
scanf("输入控制符",&输入参数),输入的参数就是变量,&这个符号是一个位运算,意思为取该变量的地址。这里给大家整理一下位运算(题外话):
位运算符 | 作用 | 运算规则 |
---|---|---|
& | 位与 | 两个位都为1时,结果才为1。 |
| | 位或 | 两个位都为0时,结果才为0。 |
^ | 异或 | 两个位相同为0,相异为1。 |
~ | 取反 | 0变1,1变0。 |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0。 |
>> | 右移 | 各二进位全部右移若干位,对无符号数,高位补0,有符号数,右移补1。 |
控制符就是这个变量的类型了,这里也给大家整理一下:
控制符 | 说明 |
---|---|
%d | 输入一个十进制整数 |
%i | 输入一个整数,可以是十进制或 带前缀0的八进制整数 或 带前缀0x的十六进制整数 |
%o | 以八进制形式输入一个整数(带不带前缀都行) |
%x | 以十六进制 (带不带前缀都行) |
%u | 输入一个无符号十进制整数 |
%c | 输入一个字符 |
%s | 输入一个字符串 |
%f | 输入单精度实数,小数或指数形式输入 |
%lf | 输入双精度实数 |
%p | 输入一个指针(地址) |
scanf与cin的区别
前面说了,个人感觉scanf是cin的加强版,加强在哪里呢
1.时间问题:cin的编译时间是scanf的3倍左右。
2.转义字符:cin会把\n不当作换行,反之scanf可以
但是,cin也有好处,就是方便,这里分享一个比赛经验,比赛时一般题用cin即可,更快。
实战带入知识点(附带比赛小经验,非常值得一看):
实战导入:
读取一个带有两个小数位的浮点数,这代表货币价值。
在此之后,将该值分解为多种钞票与硬币的和,每种面值的钞票和硬币使用数量不限,要求使用的钞票和硬币的数量尽可能少。
钞票的面值是 100,50,20,10,5,2100,50,20,10,5,2。
硬币的面值是 1,0.50,0.25,0.10,0.05和 0.01。
输入格式
输入一个浮点数 N。
输出格式
参照输出样例,输出每种面值的钞票和硬币的需求数量。
数据范围
0≤N≤1000000.00
输入
576.73
输出
NOTAS:
5 nota(s) de R$ 100.00
1 nota(s) de R$ 50.00
1 nota(s) de R$ 20.00
0 nota(s) de R$ 10.00
1 nota(s) de R$ 5.00
0 nota(s) de R$ 2.00
MOEDAS:
1 moeda(s) de R$ 1.00
1 moeda(s) de R$ 0.50
0 moeda(s) de R$ 0.25
2 moeda(s) de R$ 0.10
0 moeda(s) de R$ 0.05
3 moeda(s) de R$ 0.01
算法分析:
既然要钞票和硬币数量尽量的少,那么就要从面值大的入手,才可以解决掉大面值。以此类推,输出取余即可
实战经验:
这里不要用小数去求的得数,要把输入的小数输入,并且转行成整数,也就是*100,把100.00元都转换成10000元去计算,一定要注意
代码实现:
#include<iostream>
using namespace std;
int main(){
double a;
int n;
scanf("%lf",&a);//运用scanf,控制符为lf。
n=a*100;
printf("NOTAS:\n");
printf("%d nota(s) de R$ 100.00\n",n/10000);n%=10000;//这里要把算后的数进行取余。
printf("%d nota(s) de R$ 50.00\n",n/5000);n%=5000;
printf("%d nota(s) de R$ 20.00\n",n/2000);n%=2000;
printf("%d nota(s) de R$ 10.00\n",n/1000);n%=1000;
printf("%d nota(s) de R$ 5.00\n",n/500);n%=500;
printf("%d nota(s) de R$ 2.00\n",n/200);n%=200;
printf("MOEDAS:\n");
printf("%d moeda(s) de R$ 1.00\n",n/100);n%=100;
printf("%d moeda(s) de R$ 0.50\n",n/50);n%=50;
printf("%d moeda(s) de R$ 0.25\n",n/25);n%=25;
printf("%d moeda(s) de R$ 0.10\n",n/10);n%=10;
printf("%d moeda(s) de R$ 0.05\n",n/5);n%=5;
printf("%d moeda(s) de R$ 0.01\n",n/1);n%=1;
return 0;
}
输出结果:
NOTAS:
5 nota(s) de R$ 100.00
1 nota(s) de R$ 50.00
1 nota(s) de R$ 20.00
0 nota(s) de R$ 10.00
1 nota(s) de R$ 5.00
0 nota(s) de R$ 2.00
MOEDAS:
1 moeda(s) de R$ 1.00
1 moeda(s) de R$ 0.50
0 moeda(s) de R$ 0.25
2 moeda(s) de R$ 0.10
0 moeda(s) de R$ 0.05
3 moeda(s) de R$ 0.01
小结:
这就是scanf函数使用方法以及实战经验,把知识点带入实战,如有疑问,请在评论区留言,作者看到后,会一一回复的。