1.1实验题目(1004)
拉里今年毕业,终于找到了工作。他赚了很多钱,但似乎从来没有足够的。拉里决定,他需要抓住他的财务组合,解决他的融资问题。第一步是弄清楚他的钱到底是怎么回事。拉里有他的银行账户报表,想看看他有多少钱。通过编写程序帮助拉里从过去12个月的每个月结算余额,并计算他的平均账户余额。
2.需求分析
通过编写程序帮助拉里从过去12个月的每个月结算余额,并计算他的平均账户余额。
(1) 输入的形式和输入值的范围:连续输入12个0.2精度double数据,输入范围随意
(2) 输出形式:美元符合 数据 $ x
(3) 程序所达的功能:十二个月期末余额的平均值(平均值)并四舍五入到最近的一分钱
(4) 测试数据:输入100.00489.12 12454.12 1234.10 823.05 109.20 5.27 1542.25 839.18 83.99 1295.011.75 输出 $ 1581.42
3.概要设计
For循环连续入12个数据 并求其平均数输出时 使其保留小数点后两位数
4.用户使用说明
连续输入12个有效数据,回车结束
5.测试结果
6.附录
#include<stdio.h>
voidmain()
{
int i;
double s=0,x;
for(i=0;i<12;i++)
{
scanf("%lf",&x);
s+=x;
}
printf("$%.2lf\n",s/12);
}
2.1实验问题(2546)
你的任务是编写一个程序,它给出了两个圆圈,计算小数点后三位数的精度的交点面积。
1. 需求分析
给出两个圆 判断两圆相交的面积两圆的情况分别有 1 相离和相切 2 内含 3相交 需要给出的数据 并且判断它们的关系 进而求出面积
(1) 输入的形式和输入值的范围:输入6个double型数据 输入一个用空格隔开 输入范围 x,y数据随意 但是r必须大于0
(2) 输出形式:输出一个小数点后三位数的精度的数据
(3) 程序所达到的功能:计算两圆相交的面积
(4) 测试数据:输入 20.0 30.0 15.040.0 30.0 30.0 输出608.366
2. 概要设计
用结构体 定于x y 点 再用一个结构体定义圆和半径 在单行输入文件中有空格分隔的实数x1 y1 r1 x2 y2 r2。它们代表两个圆的中心坐标和半径。 定义一个函数用来求圆心距用来和两圆半径和,差做比较
3. 用户使用说明
连续输入6个数据 按顺序排列表达的意思是 x1 y1 r1 x2 y2r2 代表两个圆的圆心和半径 输入完毕后 回车即可 可以连续输入 除非程序出错
4. 测试结果
5. 附录
#include<iostream>
#include<cstdio>
#include<cmath>
usingnamespace std;
constdouble PI = 3.141592653;
structpoint//点
{
double x,y;
};
structcircle//圆
{
point center;
double r;
};
doubledist(point a,point b)//求圆心距
{
returnsqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
intmain()
{
circle a,b;
while(scanf("%lf%lf%lf%lf%lf%lf",&a.center.x,&a.center.y,&a.r,&b.center.x,&b.center.y,&b.r)!=EOF)
{
double area;
double length=dist(a.center,b.center);
if (length >= a.r + b.r)
area= 0;
else if (length <= fabs(a.r - b.r)) {
double r = a.r < b.r ? a.r : b.r;
area= PI * r * r;
}
else
{
doubled1=2*acos((a.r*a.r+length*length-b.r*b.r)/(2*a.r*length));//求两扇形圆心角
doubled2=2*acos((b.r*b.r+length*length-a.r*a.r)/(2*b.r*length));
doublearea1=a.r*a.r*d1/2-a.r*a.r*sin(d1)/2; //根据圆心角求扇形面积,减去三角形面积,得到相交部分面积
doublearea2=b.r*b.r*d2/2-b.r*b.r*sin(d2)/2;//扇形面积:S=PI*r*r*θ/(2*PI) 三角形面积:S=1/2*a*c*sin(B)
area=area1+area2;
}
printf("%.3lf\n",area);
}
return 0;
}
3.1实验问题
减色是从一组离散的颜色映射到一个较小的颜色。这个问题的解决方案要求你在标准的二十四位RGB颜色空间中执行这样的映射。输入包括16个RGB颜色值的目标集合,以及要映射到目标集合中最接近颜色的任意RGB颜色的集合。对于我们的目的,RGB颜色被定义为有序三元组(R,G,B),其中三元组的每个值是从0到255的整数。两种颜色之间的距离被定义为两个三维之间的欧几里得距离点。也就是说,给定两种颜色(R1,G1,B1)和(R2,G2,B2),它们的距离D由等式
1. 需求分析
主要是比较两个D的大小 D的大小接近则就是答案可以先设定一个最小值然后循环香相减得D 如果D小于最初的最小值则替换直到比较完则得出的答案就是最小值那就可以找到颜色相近的颜色了
(1) 输入的形式和输入值的范围:输入是RGB颜色的列表,每行一种颜色,指定为三个由一个空格分隔的从0到255的整数。前十六种颜色形成剩余颜色将被映射到的目标颜色组。输入由包含三个-1值的行终止。
(2) 输出的形式: (0,0,0) maps to (0,0,0)
(3) 程序所能达到的功:输出来自目标集的颜色和最接近的颜色
(4) 测试数据: 输入
0 0 0
255 255 255
0 0 1
1 1 1
128 0 0
0 128 0
128 128 0
0 0 128
126 168 9
35 86 34
133 41 193
128 0 128
0 128 128
128 128 128
255 0 0
0 1 0
0 0 0
输出:(0,0,0) maps to (0,0,0)
2. 概要设计
列着创造3个数组从上到下 a[0]到a[15]存储16个数据 b,c数组也是用药的道理 然后再定义三个int 数据 与前16个已经储存好的数据 进行比较 首先先定义一个最小值 D 然后输入的数据与前16个数据进行过比较 如果D比min小 则进行交换数据 并且记录那3个数据的下标
3. 用户使用说明
先输入 16行的三个数据 这是用于 16个之后输入的数据进行比较 寻找颜色相近的数据 输入3个 -1 时 程序结束
4. 测试结果
5. 附录
#include<stdio.h>
#include<math.h>
int main()
{
inti,k,R[16],G[16],B[16],a,b,c;
double temp,min;
for(i=0;i<16;i++)scanf("%d%d%d",&R[i],&G[i],&B[i]); //循环连续输入16个颜色 用于对比的颜色组
while(scanf("%d%d%d",&a,&b,&c),(a!=-1)&&(b!=-1)&&(c!=-1))//输入 需要对比的颜色组 输入3个-1时程序结束
{
min=sqrt((a-R[0])*(a-R[0])+(b-G[0])*(b-G[0])+(c-B[0])*(c-B[0]));//设定一个最小值
k=0;
for(i=1;i<16;i++)//寻找D最小的值并且记录好下标
{
temp=sqrt((a-R[i])*(a-R[i])+(b-G[i])*(b-G[i])+(c-B[i])*(c-B[i]));
if(temp<min)
min=temp,k=i;
}
printf("(%d,%d,%d)maps to (%d,%d,%d)\n",a,b,c,R[k],G[k],B[k]);
}
return 0;
}