如图,有一块玉米地,位于一条东西向公路的北侧,南北向公路的东侧。第一个顶点距离南北路750米,东西路550米;第二个顶点距离南北路850米,东西路50米;第三个顶点距离南北路50米,东西路250;第四个顶点距离南北路150米,东西路450米。该块地种植玉米,收获的总产量为120吨,求玉米每亩产量为多少千克?要求编写程序求解该问题。
编程要求:
程序中至少要有两个函数,函数的功能如下:
(1)编写函数计算两点之间的距离,从而算术图中四边形的四个边的长度以及一个对角线的长的;
(2)根据海伦公式编写一个计算三角向面积的函数;
说明
1平方米=0.0015亩
输入格式:
一行中输入8个实数,每个数之间用空格隔开。从左到右每两个一组,每组表示一个点的横坐标和纵坐标。
输出格式:
输出一个实数,表示玉米的亩产量。输出保留2位小数。
输入样例:
750 550 850 50 50 250 150 450
输出样例:
326.53
#include
#include
double d(double x1,double y1,double x2,double y2)
{
double d;
d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return d;
}
double area(double L1,double L2,double L3)
{
double p,area;
p=0.5*(L1+L2+L3);
area=sqrt(p*(p-L1)*(p-L2)*(p-L3));
return area;
}
int main()
{
double xA,yA,xB,yB,xC,yC,xD,yD;
double AB,AD,BD,CD,BC;
double area1,area2,sum=0,Ssum;
scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&xA,&yA,&xB,&yB,&xC,&yC,&xD,&yD);
AB=d(xA,yA,xB,yB);
AD=d(xA,yA,xD,yD);
BD=d(xB,yB,xD,yD);
CD=d(xC,yC,xD,yD);
BC=d(xB,yB,xC,yC);
//printf("%f %f %f %f %f \n",AB,AD,BD,CD,BC);
area1=area(AB,AD,BD);
area2=area(BD,CD,BC);
//printf("%f %f\n",area1,area2);
sum=area1+area2;
Ssum=sum*0.0015;
printf("%.2f",120000/Ssum);
return 0;
}
素数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。本题要求编写程序,判断从键盘输入的数是否素数。如果是素数,输出XX is prime number.的信息,输出XX is not prime number.的信息。
编写程序要求:
编写一个函数IsPrime()来判断素数。如果是素数,函数的返回值就是该数,否则函数的返回值为0.
输入格式:
在一行中输入一个非负整数.
输出格式:
在一行输出XX is prime number. 或者 XX is not prime number.的信息。
输入样例1:
5
输出样例1:
5 is prime number.
输入样例2:
121
输出样例2:
121 is not prime number.
#include
#include
int isPrime(int number)
{
int i;
if(number==1) return 0;
else
for(i=2;i<sqrt(number);i++)
if(!(number%i)) return 0;
return number;
}
int main()
{
int n;
scanf("%d",&n);
if(isPrime(n)) printf("%d is prime number.",n);
else printf("%d is not prime number.",n);
return 0;
}
本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。
输入格式:
输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 …给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。
输出格式:
输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。
输入样例1:
5
2/5 4/15 1/30 -2/60 8/3
输出样例1:
3 1/3
输入样例2:
2
4/3 2/3
输出样例2:
2
输入样例3:
3
1/3 -1/6 1/8
输出样例3:
7/24
#include
#include
#include
int gcd(int q,int b)
{
int r;
r=q%b;
while(r)
{
q=b;
b=r;
r=q%b;
}
return b;
}
int main()
{
int N,i,m;
long long int sum1=0,sum=1;
scanf("%d\n",&N);
int a,b;
for(i=0;i<N;i++)
{
scanf("%d/%d",&a,&b);
sum1*=b;
sum1+=a*sum;
sum*=b;
m=gcd(sum1,sum);
sum1/=m;
sum/=m;
}
//printf("%d %d\n",sum1,sum);
if(sum1%sum==0) printf("%lld",sum1/sum);
else if(sum1&&(sum1<sum)) printf("%lld/%lld",sum1,sum);
else printf("%lld %lld/%lld",sum1/sum,sum1%sum,sum);
return 0;
}
计算A/B的商和余数,其中被除数A是不超过1000位的非负整数,除数B是一个不超过int类型取范围的任意非负整数。要求你输出商Q和余数R。
输入格式:
输入在一行中依次给出 A 和 B,中间以空格分隔。
输入样例:
1234567891234567893 23
输出样例:
53676864836285560 13
#include
#include
#include
int main()
{
char a[1001];//被除数
int b[1001];//存商
int B,i=0,R=0,n,k=0;
scanf("%s",a);
scanf("%d",&B);
n=strlen(a);
while(a[i]=='0'&&i<n)//被除数前边可能以零开头,计零个数
i++;
for(;i<n;i++)
{
R=R*10+(a[i]-'0');
b[k++]=R/B;
R%=B;
}
if(k==1) printf("%d %d",b[0],R);//如果是商是一位数,直接输出
else
{
i=0;
while(b[i]==0&&i<k)
i++;
for(;i<k;i++)
printf("%d",b[i]);
printf(" %d",R);
}
return 0;
}
郑大佬提供的参考答案,嘤嘤嘤
#include
#include
#include
int main()
{
char a[1001]={
'\0'};//被除数
int B,i=0,r=0,k=0,sign=0,flag=0;
scanf("%s %d",a,&B);
while(a[i]=='0'&&i<strlen(a))
i++;
for(;i<strlen(a);i++)
{
r=r*10+(a[i]-'0');
if(r<B&&sign==1)
{
printf("0");
flag=1;
}
if(r>=B)
{
printf("%d",r/B);
r%=B;
sign=1;
flag=1;
}
}
if(flag) printf(" %d",r);
else printf("0 %d",r);
return 0;
}