首页 > 其他分享 >信息学奥赛初赛天天练-17-阅读理解-浮点数精准输出与海伦公式的巧妙应用

信息学奥赛初赛天天练-17-阅读理解-浮点数精准输出与海伦公式的巧妙应用

时间:2024-06-01 11:32:12浏览次数:12  
标签:std 输出 cout double 浮点数 sqrt 初赛 奥赛

PDF文档公众号回复关键字:20240531
在这里插入图片描述
1 2023 CSP-J 阅读程序1

阅读程序(程序输入不超过数组成字符串定义的范围:判断题正确填√,错误填×;除特殊说明外,判断题1.5分,选择题3分,共计40分)

源代码

#include<iostream>
#include<cmath>
using namespace std;

double f(double a,double b,double c){
    double s=(a+b+c)/2;
    return sqrt(s*(s-a)*(s-b)*(s-c));
}

int main(){
    cout.flags(ios::fixed);
    cout.precision(4);
   
    int a,b,c;
    cin>>a>>b>>c;
    cout<<f(a,b,c)<<endl;
    return 0;
}

假设输入的所有数都为不超过1000的正整数,完成下面的判断题和单选题:

判断题

16 (2分)当输入为“2 2 2”时,输出为“1.7321”( )

17 (2分)将第7行中的"(s-b)* (s-c)“改为”(s-c)*(s-b)"不会影响程序运行的结果( )

18 (2分)程序总是输出四位小数( )

答案 T

单选题

19 (3分)当输入为“3 4 5”时,输出为( )

A “6.0000” B “12.0000” C “24.0000” D “30.0000”

20(3分)当输入为“5 12 13”时,输出为( )

A “24.0000” B “30.0000” C “60.0000” D “120.0000”

2 相关知识点

1) 浮点数输出

C++ cout 浮点数输出

在C++中,使用std::cout输出浮点数时,默认情况下,浮点数会以六位有效数字的形式打印。

如果需要更改浮点数的输出格式,可以使用iomanip库中的一些函数,如std::fixedstd::setprecision

std::fixed用于强制以固定点表示法(小数点表示法)输出浮点数。

std::setprecision用于设置小数点后的精度,它接收一个参数表示精度的位数。

示例1 -默认输出-位数不固定

#include<bits/stdc++.h>
using namespace std;
/*
  cout直接输出浮点数,系统会选择合适的位数 
*/ 
int main() {
    double d1=31.41;
    cout<<d1<<endl;//输出2位 
	double d2=31.256; 
	cout<<d2<<endl;//输出3位
	double d3=31.2561; 
	cout<<d3<<endl;//输出4位
	double d4=31.25616; 
	cout<<d4<<endl;//输出4位,舍去1位 ,具体小数后位数和整数部分也有关系
    return 0;
}

示例2 - 固定点表示 -fixed-固定小数点位数

#include<bits/stdc++.h>
using namespace std;
/*
  cout直接输出浮点数,输出固定小数位数
  fixed 用于强制以固定点表示法(小数点表示法)输出浮点数
  setprecision(2) 指定小数点后保留2位 
*/ 
int main(){
	double num = 3.14159265;
	cout<<num<<endl;//输出默认精度 3.14159
	cout<<fixed<<setprecision(2)<<num<<endl;//指定固定输出2位小数 
	cout<<fixed<<setprecision(4)<<num<<endl;//指定固定输出4位小数 
	cout<<fixed<<setprecision(6)<<num<<endl;//指定固定输出6位小数 
	return 0;
}

2) 海伦公式

海伦公式古希腊数学家海伦建立的用三角形三边的长度求面积的公式

三角形3边长分别为 a,b,c

半周长 p=(a+b+c)/2

三角形面积 S=sqrt(p * (p-a) * (p-b) * (p-c))

3 思路分析

假设输入的所有数都为不超过1000的正整数,完成下面的判断题和单选题:

判断题

16 (2分)当输入为“2 2 2”时,输出为“1.7321”( )

答案 T

分析

海伦公式计算三角形面积

半周长 p=(2+2+2)/2=3

面积 S=sqrt((3 * (3-2) * (3-2) * (3-2)))=sqrt(3)=1.7321

17 (2分)将第7行中的"(s-b)* (s-c)“改为”(s-c)*(s-b)"不会影响程序运行的结果( )

答案 T

分析

乘法交换律,结果不变

18 (2分)程序总是输出四位小数( )

答案 T

分析

固定点输出法,设置输出保留4为小数,所以程序总是输出4位小数

单选题

19 (3分)当输入为“3 4 5”时,输出为( )

A “6.0000” B “12.0000” C “24.0000” D “30.0000”

答案 A

分析

模拟计算

半周长 p=(3+4+5)/2=6

面积 S=sqrt((6 * (6-3) * (6-4) * (6-5)))=sqrt(36)=6

20(3分)当输入为“5 12 13”时,输出为( )

A “24.0000” B “30.0000” C “60.0000” D “120.0000”

答案 B

分析

模拟计算

半周长 p=(5+12+13)/2=15

面积 S=sqrt((15 * (15-5) * (15-12) * (15-13)))=sqrt(900)=30

标签:std,输出,cout,double,浮点数,sqrt,初赛,奥赛
From: https://blog.csdn.net/ya888g/article/details/139361689

相关文章

  • 整数与浮点数在内存中的存储
    整形数据类型的存储(通常存的是二进制的补码)大端(存储)模式:是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,存储在内存的低地址处。小端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,存储在内存的高地址处。 判断高低地址:int......
  • 高精度+高精度(信息学奥赛1168)
    #include<iostream>#include<cmath>#include<vector>usingnamespacestd;intmain(){stringa,b;cin>>a>>b;boola1=true,b1=true;for(inti=0;i<max(a.size(),b.size());i++){if(i<a.size()......
  • C++ - 比较两个浮点数大小
    简介两个浮点数不能直接使用 ==来确定相等,因为浮点数精度可能导致微小的误差 方法一:使用std::abs()函数来比较两个浮点数的差值是否小于一个非常小的阈值floata=1.5;floatb=2.3;floatepsilon=1e-9;if(std::abs(a-b)<epsilon){cout<<"aiseq......
  • 整数和浮点数在内存中的存储
    前言嗨,我是firdawn,在本章中我们将介绍,整数和浮点数在内存中的存储,以及大小端字节序,下面是本章的思维导图,下面让我们开始今天的学习吧!一,整数在内存中的存储1.1原码,反码,补码的概念我们知道计算机底层储存的其实是0和1组成的二进制序列,当我们储存一个有符号整数时,那它的......
  • ciscn2024初赛部分题目复现
    gdb_debug64位ida反编译,将主要加密部分使用chatgpt写成更容易理解的python形式如下:defencrypt_string(s):v17=[]foriinrange(len(s)):v17.append(ord(s[i])^rand_1[i])ptr=list(range(len(s)))forkinrange(len(s)-1,0,-1):......
  • [CISCN 2022 初赛]online_crt crash漏洞引起的命令执行
    几天没做题了,有点生疏。看题吧。题目标签说是CVE-2022-1292,去看看。意思就是在$fname处构造恶意文件名导致的命令注入,而且前面没有认真过滤,也就是文件名命令执行。看看题目源码:点击查看代码importdatetimeimportjsonimportosimportsocketimportuuidfromcryptogr......
  • 初赛笔记
    第一章计算机基础知识1.计算机的概述计算机发展史第一代真空电子管;第二代晶体管;第三代集成电路;第四代大规模、超大规模集成电路 ;第五代智能计算机系统 第一台计算机1946年美国ENIAC 重要人物冯·诺伊曼 ,”计算机之父“,提出计算机体系结构图灵,"人......
  • 初三奥赛模拟测试5
    前言\(T1~100pts\):最开始没想出来,打了\(T3\)才去打。\(T2~0pts\):代码太难调没打出来。\(T3~0pts\):记忆化打假了,而且\(ans\)初始值忘记为\(0\),且捆绑测试……\(T4~0pts\):无人会。比赛链接。T1特殊字符串用\(f_i\)表示前\(i\)个字符中并以第\(......
  • 初三奥赛模拟测试1
    初三奥赛模拟测试1T1回文暴力\(dp\)是\(n^4\)的。类似传纸条吧无用状态去了就是\(n^3\)的CODE#include<bits/stdc++.h>usingnamespacestd;usingllt=longlong;usingllf=longdouble;usingull=unsignedlonglong;#defineFor(i,a,b,c)for(inti=(a);i<=......
  • 初三奥赛模拟测试5
    初三奥赛模拟测试5点击查看快读快写代码#include<cstdio>usingnamespacestd;//orzlaofudasuan//modifiednamespaceio{ constintSIZE=(1<<21)+1; charibuf[SIZE],*iS,*iT,obuf[SIZE],*oS=obuf,*oT=oS+SIZE-1,c,qu[55];intf,qr; //......