【菜鸟进阶之路】P5706【深基2.例8】再分肥宅水 - 洛谷

一、题目部分

题目描述
现在有 t 毫升肥宅快乐水,要均分给 n 名同学。每名同学需要 2 个杯子。现在想知道每名同学可以获得多少毫升饮料(严格精确到小数点后 3 位),以及一共需要多少个杯子。输入一个实数 t 和一个整数 n,使用空格隔开。输出两个数字表示答案,使用换行隔开。

0≤t≤10000且不超过3位小数,1≤n≤1000

输入格式

输出格式

输入输出样例

输入 #1
500.0 3
输出 #1
166.667
6

二、解题过程

思路
按题目内容输入输出

提交AC答案

#include 
using namespace std;

float t;
int n;
 
int main() 
{
	scanf("%f %d",&t,&n);
	printf("%.3f\n",t/n);
	printf("%d",n*2);
	return 0;
}

三、小结

(1)scanf的基本用法

scanf 语句的意思是:
从键盘上输入字符 123,然后%d将这三个字符转化成十进制数 123,最后通过“取地址 i”找到变量 i 的地址,再将数字 123 放到以变量 i 的地址为地址的变量中,即变量 i 中,所以最终的输出结果就是i=123。

scanf类型说明符

类型 输入
%a、%A 读入一个浮点值(仅 C99 有效)。(float*)
%c 单个字符:读取下一个字符。如果指定了一个不为 1 的宽度 width,函数会读取 width 个字符,并通过参数传递,把它们存储在数组中连续位置。在末尾不会追加空字符。(char*)
%d 十进制整数:数字前面的 + 或 - 号是可选的。
%e、%E、%f、%F、%g、%G 浮点数:包含了一个小数点、一个可选的前置符号 + 或 -、一个可选的后置字符 e 或 E,以及一个十进制数字。实例:-732.103 和 7.12e4
%i 读入十进制、八进制、十六进制整数
%o 八进制整数
%s 字符串。这将读取连续字符,直到遇到一个空格字符(空格字符可以是空白、换行和制表符)。
%u 无符号十进制整数
%x、%X 十六进制整数
%p 读入一个指针
%[ ] 扫描字符集合
%% 读%符号。

※ 注意:
①参数的个数应与 % 标签的个数相同;
② \n 换行符;
③理解清空输入缓冲区的概念。

※小小结:
· 在 scanf 的“输入参数”中,别忘记变量前面的取地址符&;
· scanf 中双引号内,除了“输入控制符”外什么都不要写;
· “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应;
· “输入控制符”的类型和变量所定义的类型一定要一致。对于从键盘输入的数据的类型,数据是用户输入的,程序员是无法决定的,在写程序时要考虑容错处理;
· 使用 scanf 之前先用 printf 提示输入。

参考链接
C语言scanf函数用法完全攻略
C 库函数 - scanf()

(2)double和float的区别(学了又忘,没认真区分过)

float : 单精度浮点数
double : 双精度浮点数

两者的主要区别如下:

a)在内存中占有的字节数不同

float在机内存占4个字节
double在机内存占8个字节

b)有效数字位数不同

float有效数字8位
double有效数字16位

c)数值取值范围

float的表示范围:-3.40E+38~3.40E+38
double表示范围:-1.79E+308~-1.79E+308

d)在程序中处理速度不同

一般来说,CPU处理float的速度比处理double快

※ 如果不声明,默认小数为double类型,所以如果要用float的话,必须进行强转
例如:float a=1.3; 会编译报错,正确的写法 float a = (float)1.3;或者float a = 1.3f(f或F都可以不区分大小写)

※注意:float是8位有效数字,第7位数字会四舍五入

参考链接
基本数据类型float和double的区别

(所以感觉这题最好还是用double吧,用float用得不好)

(3)保留小数输出的方法

=> 以保留三位小数输出为例

a)很基本 但不太常用

cin>>n;
cout<<setiosflags(ios::fixed)<<setprecision(3);
cout<n<<endl;

b)比较好用的一种方法(C语言)

cin>>n;
printf("%.3f",n);

c)同 a)

cout<<setprecision(3)<<setiosflags(ios::fixed);
cout<<n<<endl;

d)比较普适的一种方法(C++)

cout<fixed<<setprecision(3)<<n<<endl;

参考链接
scanf 、pritnf与保留小数输出

你可能感兴趣的:(算法学习)