算法竞赛入门经典笔记—第一章

程序1-3

#include <stdio.h>
#include <math.h>
int main() {
    //输出宽度为6位右对齐,保留3位小数的浮点数
    printf("%6.3f\n",8.0/5);
	//输出保留两位小数,sqrt()计算平方根,需要包含头文件 math.h
    printf("%.2f", 1+sqrt(3));
    return 0;
}

输出结果:
在这里插入图片描述
不要使用头文件 conio.h, 包括 getch() , clrscr() 等函数。
尽量使用关键字const申明常数。

例题1-1 圆柱体表面积

#include <stdio.h>
#include <math.h>
int main() {
    const double pi = acos(-1);\\使用关键字const申明常数
    double r, h, s1, s2, s;
    scanf("%lf%lf", &r, &h);\\输入使用%lf
    s1 = pi*r*r;
    s2 = 2*pi*r*h;
    s = s1*2 + s2;
    printf("Area = %.3f\n",s);
    \\输出使用%f,而不是%lf,因为在C99标准中,double的输入必须为%lf,输出必须为%f,而C++中都可以用%lf;
    return 0;
}

例1-2 三位数反转

#include <stdio.h>

int main() {
    int n, m;
    scanf("%d",&n);
    m = (n%10)*100 + (n/10%10)*10 + n/100;
    printf("%03d",m);//不足3位用0补齐
    return 0;
}

例1-4 鸡兔同笼
已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目。如果无解,则输出No answer。

#include <stdio.h>

int main() {
    int a, b, n, m;
    scanf("%d%d",&n,&m);
    if((m%2==0)&&(a>=0)&&(b>=0))//c语言采取短路策略,一但能够确定整个表达式的值,就不再继续运算
    {
        a = 2*n - m/2;
        b = n-a;
        printf("%d %d",a,b);
    }
    else
    {
        printf("No answer");
    }
    return 0;
}

数据类型实验
实验A1-A5:

#include <stdio.h>
#include <math.h>
int main() {
    printf("A1\n%d\n",11111*11111);
    printf("%d\n",111111*111111);
    printf("A2\n%f\n",111111.0*111111.0);
    printf("A3\n%.2d\n", 1+sqrt(-10));//输出73896,且与负数具体数值无关
    printf("%.2f\n", 1+sqrt(-10));//输出nan
    printf("A4\n%d\n",1.0/0/0);//输出73896
    printf("%f\n",1.0/0.0);//输出inf
    printf("%d\n",0.0/0.0);//输出73896
    printf("%f\n",0.0/0.0);//输出nan
    printf("A5\n%d\n",1/0);
    printf("%f\n",1/0);
    return 0;
}

输入格式实验

#include <stdio.h>
int main() {
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d %d\n",a,b);
    for(int i=0;i<10;i++)
        printf("%%d\n");//输出10次%d
    return 0;
}

习题1-1 平均数(average)
输入3个整数,输出它们的平均值,保留3位小数。

#include <stdio.h>

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

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

#include<stdio.h>
int main(){
	double c,f;
	scanf("%lf",&f);
	c = 5*(f-32)/9;
	printf("%.3f",c);
	return 0;
}

习题1-3 连续和(sum)
输入正整数n,输出1+2+…+n的值。提示:目标是解决问题,而不是练习编程。

#include <stdio.h>

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

习题1-4 正弦和余弦(sin和cos)
输入正整数n(n<360),输出n度的正弦、余弦函数值。提示:使用数学函数。

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

int main() {
    double const pi = acos(-1.0);
    double sin_n, cos_n, n;
    scanf("%lf",&n);
    n = n/180*pi;
    sin_n = sin(n);
    cos_n = cos(n);
    printf("%f\n%f",sin_n,cos_n);
    return 0;
}

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

#include <stdio.h>

int main() {
    int n;
    double sum;
    scanf("%d",&n);
    if(n<=3){
        sum = n*95.0;
    }
    else{
        sum = n*95*0.85;
    }
    printf("%.2f",sum);
    return 0;
}

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

#include <stdio.h>

int main() {
    int a,b,c,temp;

    scanf("%d%d%d", &a, &b,&c);
    if(a>b){
        temp = a;
        a = b;
        b = temp;
    }
    if(b>c){
        temp = c;
        c = b;
        b = temp;
    }
    if((a*a+b*b)==(c*c))
        printf("yes");
    else if(a+b<c)
        printf("not a triangle");
    else
        printf("no");
    return 0;
}

习题1-7 年份(year)
输入年份,判断是否为闰年。如果是,则输出yes,否则输出no。

#include <stdio.h>

int main() {

    int n,tag = 0;
    scanf("%d",&n);
    if(n%4==0){
        if(n%100==0){
            if(n%400==0)
                tag = 1;
        }
        else
            tag = 1;
    }
    if(tag == 1)
        printf("yes");
    else
        printf("no");
    return 0;
}

问题1:int型整数的最小值和最大值是多少(需要精确值)?
最小:-2147483648
最大:2147483647

#include <stdio.h>

int main() {

    int i = 2147483638,j=1;
    while(j){
        if(j%100000000==0){
            i = i+1;
            printf("%d\n",i);
        }
        j++;
    }
    return 0;
}

在这里插入图片描述
问题2:double型浮点数能精确到多少位小数?或者,这个问题本身值得商榷?
与非0第一位位置有关;

#include <stdio.h>

int main() {

    double i = 1;

    printf("%.30f\n",i/3.0);
    i = i/100;
    printf("%.30f\n",i/3.0);

    return 0;
}

结果:
在这里插入图片描述
问题3:double型浮点数最大正数值和最小正数值分别是多少(不必特别精确)?

#include <stdio.h>

int main() {
    double i = 9007199254740986;
    int j=1;
    while(j){
        if(j%500000000==0){
            i = i+1;
            printf("%f\n",i);
        }
        j++;
    }
    return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值