《算法竞赛入门经典》上机练习——第一章

习题1-1 平均数(average)

    输入3个整数,输出它们的平均值,保留3位小数。

#include <stdio.h>

int main()
{
    int a,b,c;
    double average;
    
    scanf("%d%d%d",&a,&b,&c);
    average = (a+b+c)/3.0;
    printf("%.3lf\n",average);
    
    return 0;
}

习题1-2 温度(temperature)

    输入华氏温度f,输出对应的摄氏温度c,保留3位小数。提示:c=5(f-32)/9。

#include <stdio.h>

int main()
{
    double f,c;
    
    scanf("%lf",&f);
    c = 5*(f-32)/9;
    printf("%.3lf\n",c);
    
    return 0;
}

习题1-3 连续和(sum)

    输入正整数n,输出1+2+···+n的值。提示:目标是解决问题,而不是练习编程。

分析:1+2+···+n = (1+n)*n/2

#include <stdio.h>

int main()
{
    int n,sum;
    
    scanf("%d",&n);
    sum = (1+n)*n/2;
    printf("%d\n",sum);
    
    return 0;
}

习题1-4 正弦和余弦(sincos)

    输入正整数n(n<360),输出n度的正弦、余弦函数值。提示:使用数学函数。

分析:需将角度换算为弧度。角度180度 对应 弧度1pi

#include <stdio.h>
#include <math.h>

int main()
{
    double n/*角度*/,
	       x/*弧度*/;
	const double pi = 4.0*atan(1.0);
    
    scanf("%lf",&n);
    x = n/180*pi;
    printf("%lf\n",sin(x));
    printf("%lf\n",cos(x));
    
    return 0;
}

习题1-5 距离(distance)

    输入4个浮点数x1,y1,x2,y2,输出平面坐标系中点(x1,y1)到点(x2,y2)的距离。

分析:平面两点间距离:d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))

            sqrt()求算术平方根

#include <stdio.h>
#include <math.h>

int main()
{
    double x1,y1,x2,y2,d;
    
    scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
    d = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
    printf("%lf\n",d);
    
    return 0;
}

习题1-6 偶数(odd)

    输入一个整数,判断它是否为偶数。如果是,则输出“yes”,否则输出“no”。提示:可以用多种方法判断。

分析:除了%2,今天又学到一种新的方法:if(n&1),与1按位与,结果为1则是奇数,为0是偶数

#include <stdio.h>

int main()
{
    int n;
    
    scanf("%d",&n);
    if(n&1) printf("no");/*是奇数*/
    else printf("yes");/*是偶数*/ 
    
    return 0;
}


习题1-7 打折(discount)

    一件衣服95元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金额(单位:元),保留两位小数。

#include <stdio.h>

int main()
{
    int n;
    double money;
    
	scanf("%d",&n);
	money = 95*n;
	if(money>=300)
	    money*=0.85;
	printf("%.2lf\n",money);
	
    return 0;
}

习题1-8 绝对值(abs)

    输入一个浮点数,输出它的绝对值,保留两位小数。

#include <stdio.h>

int main()
{
    double n;
    
	scanf("%lf",&n);
	if(n>0) 
	    printf("%.2lf\n",n);
	else 
	    printf("%.2lf\n",-n);
	
    return 0;
}

习题1-9 三角形(triangle)

    输入三角形三边长度值(均为正整数),判断它是否能为直角三角形的三个边长。如果可以,则输出“yes”,如果不能,则输出“no”。如果根本无法构成三角形,则输出“not a triangle”。

分析:先判断能否构成三角形,再进一步判断能否构成直角三角形。

#include <stdio.h>

int main()
{
    int a,b,c,t;
    
    scanf("%d%d%d",&a,&b,&c);
    if(a>c)
        {t=a;a=c;c=t;}
    if(b>c)
        {t=b;b=c;c=t;}/*这2个if语句确保了c是最长的边*/ 
        
    if(a+b<=c)
        printf("not a triangle\n");
    else
        if(a*a+b*b == c*c)
            printf("yes\n");
        else
            printf("no\n");
    
    return 0;
}

习题1-10 年份(year)

    输入年份,判断是否为闰年。如果是,则输出“yes”,否则输出“no”。提示:简单地判断除以4的余数是不够的。

#include <stdio.h>

int main()
{
    int y;
    
    scanf("%d",&y);
    if(y%4==0 && y%100!=0 || y%400==0)
        printf("yes\n");
    else
        printf("no\n");
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值