算法竞赛入门经典(第2版)第1部分 -- 第1章

1-1  圆柱体的表面积

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

int main(){
	const double pi = acos(-1.0); 
    //const 声明常量,后期无法改变pi的值

	double r,h,s1,s2,s;
	scanf("%lf%lf",&r,&h);
	s1 = pi*r*r;
	s2 = 2*r*pi*h;
	s = s1*2.0+s2;
	printf("%.3f\n",s);
	return 0;
}

acos(  )反余弦函数

1-2  三位数反转

#include <stdio.h>

int main(){
	
	int num = 0;

	scanf("%d",&num);

	printf("%d%d%d",num%10,num%100/10,num/100);
	return 0;
}

反转的过程中个位有可能是0。当个位为0时,有两种输出结果,要不就直接输出,要不就去掉零。以上为不去掉0直接输出,以下为去掉0,输出为两位数

#include <stdio.h>

int main(){
	
	int num = 0;
	int n;
	scanf("%d",&num);
	n = num%10*100+num%100/10*10+num/100;
    printf("%d",n);
	return 0;
}

1.5.2数据类型的输与输入

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

int main(){
	printf("5个1相乘(int)%d\n",11111*11111);
	printf("6个1相乘(int)%d\n",111111*111111);
	printf("9个1相乘(int)%d\n",111111111*111111111);
	printf("\n");
	
	printf("5个1相乘(long long)%lld\n",11111*11111LL);
	printf("6个1相乘(long long)%lld\n",111111*111111LL);	
	printf("9个1相乘(long long)%lld\n",111111111*111111111LL);
	printf("\n");
	
	printf("5个1相乘(float)%f\n",11111*11111.0);
	printf("6个1相乘(float)%f\n",111111*111111.0);	
	printf("9个1相乘(float)%f\n",111111111*11111111.0);
	printf("9个1相乘(double)%lf\n",111111111*11111111.0);
	printf("9个1相乘(long double)%llf\n",111111111*11111111.0);
	printf("\n");
	
	printf("sqrt(-10)(int)%d\n",sqrt(-10));
	printf("sqrt(-10)(long long)%lld\n",sqrt(-10LL));
	printf("sqrt(-10)(float)%f\n",sqrt(-10));
	printf("sqrt(-10)(double)%lf\n",sqrt(-10));
	printf("sqrt(-10)(long double)%llf\n",sqrt(-10));
	printf("sqrt(-10)(char)%c\n",sqrt(-10));
	printf("\n");
	
	//注释部分:系统不会报错但程序执行不了,影响下面程序运行 
	//printf("1.0/0.0(int)%d\n",1/0);
	//系统不会报错 
	//printf("1.0/0.0(long long)%d\n",1/0LL);
	printf("1.0/0.0(float)%f\n",1.0/0.0);
	printf("1.0/0.0(double)%lf\n",1.0/0.0);
	printf("1.0/0.0(long double)%llf\n",1.0/0.0);
	printf("1.0/0.0(char)%c\n",1.0/0.0);
	printf("\n");
	
	
	
	return 0;
}​

1.5 输出%d

#include <stdio.h>

int main(){
	//int a,b;
	//scanf("%d%d",&a,&b);
	printf("%%d");
	return 0;
}​

1.5.3 正弦和余弦

        计算正弦值和余弦值在C语言中先要引用<math.h>头文件,这个头文件中可以使用sin()/cos()/M_PI等。

        计算正弦和余弦值时需要先将角度转换成弧度。

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

int main(){
	//n为角度 
	int a1 = 45;
	int a2 = 90;
	//角度换成弧度
	double h1 = a1/180.0*M_PI;
	double h2 = a2/180.0*M_PI;
	
	printf("%f\n",sin(h1));
	printf("%f\n",sin(h2));
	
	return 0;
} 

1.5.3--问题 int和double的最大值和最小值

        分别引入<limits.h>和<float.h>头文件,中的INT_MAX/INT_MIN  、DBL_MAX/DBL_MINL来验证。验证过程中需要用到科学计数法。

#include <stdio.h>
#include <limits.h>
//用来启动检测int型数据的最大值和最小值 
#include <float.h>
//用来启动检测float型数据的最大值和最小值 

int main(){
	
	printf("int的最小值:%d\n",INT_MIN);
	printf("int的最大值:%d\n",INT_MAX);
	
	
	double num = 123456.7890123456789; // 19 位有效数字
    printf("输入的 double 数字为: %lf\n", num); // 打印 20 位有效数字

    // 将 double 数字转换成科学计数法的形式,并打印出来
    printf("科学计数法表示: %.20e\n", num);
    
    
    //printf("double的最小值:%.17g\n",DBL_MIN);
	//printf("double的最大值:%.4g\n",DBL_MAX);
	
	printf("double类型的最大正值:%.14g\n", DBL_MAX);
    printf("double类型的最小正值:%.14g\n", DBL_MIN);
    
	return 0;
}

结果:

int的最小值:-2147483648
int的最大值:2147483647
//10位数
输入的 double 数字为: 123456.789012
num = 123456.78901234567
科学计数法表示: 1.23456789012345670000e+005
double类型的最大正值:1.7976931348623e+308
double类型的最小正值:2.2250738585072e-308
//double的精确值由系统和编辑器决定

0<大数部分<1;

小数部分:

  • "E":与 "e" 相同,表示指数。例如,"3.14E+2" 与 "3.14e+2" 是等价的,都表示 3.14×102=3143.14×102=314。
  • "p":用于二进制科学计数法,表示指数。例如,"0.123p+5" 表示 0.123×250.123×25。

第一章小结

        取得pi(3.1415……)这个值可以用M_PI,也可以用double acos(-1.0)。使用这两方法的前提是引用<math.h>头文件。

        一个值中数字的位置问题可以考虑用字符的形式进行排列,也可以用数学思维进行计算得到数字排列。

        如果给出一个角度需要先求弧度才能计算正弦、余弦。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值