STD高级语言程序设计第十天(也是最后一天啦!!!满分答案,附赠本人程序的解析及坑点标识)

7-1 然后是几点 (15 分)

有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。

读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。

输入格式:

输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。

输出格式:

输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

输入样例:

1120 110

结尾无空行

输出样例:

1310

结尾无空行

鸣谢燕山大学穆运峰老师、用户任钰补充数据!

#include<stdio.h>
int main()
{
    //存储起始时间,流逝分钟数
    int a,b;
    
    //接收起始时间和流逝分钟数
    scanf("%d %d",&a,&b);
    
    //分别存储起始时间的小时和分钟数
    int h=0,m=0;
    
    //计算小时数
    //例a=1523,计算后h=15
    h=a/100;
    
    //计算分钟数
    m=a-h*100;
    
    //计算并存储流逝时间的小时数和分钟数
    int ym=b%60,yh=b/60;
    
    //起始时间的分钟数加上流逝时间的分钟数
    m+=ym;
    
    //如果m>60,小时数加一,并将分钟数变成合法的分钟数
    if(m>=60)
    {
        yh++;
        m-=60;
    }
    
    //如果m<60,小时数减一,并将分钟数变成合法的分钟数
    else if(m<0)
    {
        yh--;
        m+=60;
    }
    
    //起始时间的小时数加上流逝时间的小时数
    h+=yh;
    
    //题干说明起始时间和终止时间为同一天,这个判断不需要加
    /*if(h>=24)
        h-=24;*/
    
    //打印,小时数不用加上前导0,分钟数要加上前导0,
    printf("%d%02d\n",h,m);
    
    return 0;
}

 7-2 计算指数 (10 分)

真的没骗你,这道才是简单题 —— 对任意给定的不超过 10 的正整数 n,要求你输出 2n。不难吧?

输入格式:

输入在一行中给出一个不超过 10 的正整数 n。

输出格式:

在一行中按照格式 2^n = 计算结果 输出 2n 的值。

输入样例:

5

结尾无空行

输出样例:

2^5 = 32

结尾无空行

 

#include<stdio.h>
#include<math.h>
int main()
{
    //接收并存储幂
    int a;
    scanf("%d",&a);
    
    //存储2的a次幂
    int b=pow(2,a);
    
    //打印
    printf("2^%d = %d",a,b);
    
    return 0;
}

 7-3 求赤道上两点的球面距离 (10 分)

已知地球的赤道半径为6378.137千米,并已知东半球赤道上两点的经度(单位为度),编写程序计算这两点之间的球面距离是多少千米。要求所有的实数使用double类型,圆周率的近似值取3.141592653589793。 提示:赤道上两点之间的球面距离,就是赤道上两点之间劣弧的长度。

输入格式:

在一行中输入两个代表经度的非负实数,以空格分隔。

输出格式:

输出球面距离的值,保留3位小数,最后换行。

输入样例:

63.2 136.9

结尾无空行

输出样例:

8204.246

结尾无空行

#include<stdio.h>
#include<math.h>
int main()
{
    //接收并存储经度
    double a,b;
    scanf("%lf %lf",&a,&b);
    
    //存储两个经度差的绝对值
    double c=fabs(a-b);
    
    //存储半径和圆周率
    double r=6378.137,p=3.141592653589793;
    
    //存储劣弧长度即赤道上两点距离
    double d=r*(p*c/180);
    
    //打印
    printf("%.3lf\n",d);
    
    return 0;
}

 7-4 整数算术运算 (10 分)

本题要求编写程序,计算并输出2个正整数的和、差、积、商与余数。题目保证输入和输出全部在整型范围内。

输入格式:

输入在一行中给出2个正整数A和B。

输出格式:

在5行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商与余数。

输入样例:

5 3

结尾无空行

输出样例:

在这里给出相应的输出。例如:

5 + 3 = 8
5 - 3 = 2
5 * 3 = 15
5 / 3 = 1
5 % 3 = 2

结尾无空行

 

#include<stdio.h>
int main()
{
    //接收并存储两个数
    int a,b;
    scanf("%d %d",&a,&b);
    
    //打印
    printf("%d + %d = %d\n",a,b,a+b);
    printf("%d - %d = %d\n",a,b,a-b);
    printf("%d * %d = %d\n",a,b,a*b);
    printf("%d / %d = %d\n",a,b,a/b);
    
    //多加一个百分号,使百分号原意输出
    printf("%d %% %d = %d\n",a,b,a%b);
    
    return 0;
}

 7-5 容斥原理求阴影部分面积 (10 分)

容斥原理是一种重要的组合数学方法,可以让你求解任意大小的集合,或者计算复合事件的概率。它可以描述为要计算几个集合并集的大小,我们要先将所有单个集合的大小计算出来,然后减去所有两个集合相交的部分,再加回所有三个集合相交的部分,再减去所有四个集合相交的部分,依此类推,一直计算到所有集合相交的部分。

5.png

 

6.png

如上图所示, 若已知集合A,B,那么|A∪B| = |A| + |B |- |A∩B|; 若已知集合A,B,C,那么|A∪B∪C| = |A| + |B| + |C| - |A∩B| - |B∩C| - |C∩A| + |A∩B∩C|。现已知矩形ABCD,以AB为半径作扇形交AD的延长线于F,以CB为半径作扇形交CD于F,如下图所示,已知矩形的长宽分别为X,Y求阴影部分的面积。

7.png

注:1.扇形的面积公式:S = nπr^2 / 360 = Lr / 2(其中n为扇形圆心角度数,r为扇形半径,L为弧长,π = 3.1415926) 2.矩形的面积公式:S = ab(其中a,b分别为长,宽)

输入格式:

输入在一行中给出两个不超过100的正实数X和Y,并且保证X >= Y >= 1。

输出格式:

在一行中输出阴影部分的面积,结果保留两位小数。

输入样例:

在这里给出一组输入。例如:

6 5

结尾无空行

输出样例:

在这里给出相应的输出。例如:

17.91

结尾无空行

#include<stdio.h>
int main()
{
    //存储并接收长和宽
    double a,b;
    scanf("%lf %lf",&a,&b);
    
    //存储圆周率
    double p=3.1415926;
    
    /*
        其实这道题不用看题目中的集合什么的
        看了其实更不会,就把这道题看成一个简单的求面积问题
        其实面积就是大的四分之一圆面积减去长方形上面空白的面积
        而长方形上面空白的面积就是长方形的面积减去下方小四分之一圆的面积
        所以这道题的答案就出来了
    */
    
    //存储长方形面积
    double sc=a*b;
    
    //存储大四分之一圆面积
    double sd=p*a*a/4;
    
    //存储小四分之一圆面积
    double sx=p*b*b/4;
    
    //存储长方形上方空白面积
    double ss=sc-sx;
    
    //存储阴影面积
    double sq=sd-ss;
    
    //打印
    printf("%.2lf\n",sq);
    
    return 0;
}

 总体来说,今天的题目明白意思了很简单,不过多赘述!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力敲代码啊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值