C++知识精讲7——scanf函数基本用法及实战运用(外加一点点比赛经验,非常实用)

本文我们来讲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函数使用方法以及实战经验,把知识点带入实战,如有疑问,请在评论区留言,作者看到后,会一一回复的。

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.LAL.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值