算法竞赛入门经典第一章
计算并输出1+2的值
#include<bits/stdc++.h>
using namespace std;
int main(void){
printf("%d\n",1+2);
return 0;
}
实验1:修改程序1-1,输出3-4的结果是−1
实验2:修改程序1-1,输出5*6的结果是30
实验3:修改程序1-1,输出8/4的结果是2
实验4:修改程序1-1,输出8/5的结果是1
计算并输出8/5的值,保留小数点后1位
#include<bits/stdc++.h>
using namespace std;
int main(void){
printf("%.1f\n",8.0/5.0);
return 0;
}
实验5:把%.1f中的数字1改成2,结果如何?结果是1.60。
能猜想出“1”的确切意思吗?占位占位。
如果把小数点和1都删除,%f的含义是什么?以浮点数的形式输出以浮点数的形式输出。
实验6:字符串%.1f不变,把8.0/5.0改成原来的8/5,结果如何?0.0
实验7:字符串%.1f不变,改成原来的%d,8.0/5.0不变,结果如何?−1717986918。
两数交换的方法总结
#include<bits/stdc++.h>
using namespace std;
int main(void){
int a,b;
cin >> a >> b;
swap(a,b);
cout<<a<<" "<<b<<endl;
int c,d;
cin >> c >> d;
c = c^d;
d = c^d;
c = c^d;
cout<<c<<" "<<d<<endl;
int e,f;
cin >> e >> f;
e = e+f;
f = e-f;
e = e-f;
cout<<e<<" "<<f<<endl;
return 0;
}
数据类型
实验A1:表达式11111*11111的值是多少?是123454321。把5个1换成6个1呢?类型溢出,需要改成结果是int类型溢出,需要改成longlong结果是12345654321。换成9个呢?是12345678987654321。
实验A2:把实验A1中的所有数换成浮点数,结果如何?结果不是正确的。
实验A3:表达式sqrt(-10.0)的值是多少?nan。尝试用各种方式输出,在计算的过程中系统会报错吗?不会不会。
实验A4:表达式1.0/0.0,0.0/0.0的值是分别多少?和inf和nan尝试用各种方式输出,在计算的过程中系统会报错吗?不会不会。
实验A5:表达式1/0的值是多少?在计算的过程中会出错吗?,不能做分母Waring,0不能做分母。
输入输出实验
#include<bits/stdc++.h>
using namespace std;
int main(void){
int a,b;
scanf("%d%d",&a,&b);
printf("%d %d\n",a,b);
return 0;
}
实验B1:在同一行中输入12和2,并以空格分隔,是否得到了预期的结果?得到了
实验B2:在不同的两行中输入12和2,是否得到了预期的结果?得到了
实验B3:在实验B1和B2中,在12的前面和2的后面插入大量的空格或水平制表符(TAB),甚至插入一些空行。结果同B1和B2。
实验B4:把2换成字符s,重复实验B1~B3。结果是和和和12和1
习题
平均数
#include<bits/stdc++.h>
using namespace std;
int main(void){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%.3lf\n",(a+b+c)/3.0);
return 0;
}
温度
#include<bits/stdc++.h>
using namespace std;
int main(void){
int f;
scanf("%d",&f);
printf("%.3lf\n",5*(f-32)/9.0);3
return 0;
}
连续和
#include<bits/stdc++.h>
using namespace std;
int main(void){
int n;
cin >> n;
cout<<n*(n+1)/2<<endl;
return 0;
}
正弦和余弦和
/*
C++中cos,sin,asin,acos这些三角函数操作的是弧度,而非角度,
你需要把角度转化为弧度.
弧度=角度*Pi/180;
*/
#include<bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
int main(void){
int n;
cin >> n;
printf("%lf %lf\n",sin(n*pi/180),cos(n*pi/180));
return 0;
}
打折
#include<bits/stdc++.h>
using namespace std;
int main(void){
int n;
cin >> n;
if(n*95>=300) printf("%.2lf\n",n*95*0.85);
else printf("%.2lf\n",n*1.0*95);
return 0;
}
三角形
#include<bits/stdc++.h>
using namespace std;
int main(void){
int a,b,c;
cin >> a >> b >> c;
int sum = a+b+c;
int maxx = max(a,max(b,c));
int minn = min(a,min(b,c));
int second = sum-maxx-minn;
if(sum-maxx>maxx){
if(maxx*maxx==minn*minn+second*second) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}else cout<<"not a triangle"<<endl;
return 0;
}
年份
#include<bits/stdc++.h>
using namespace std;
int main(void){
int n;
cin >> n;
if(n%4==0&&n%100!=0||n%400==0) cout<<"yes"<<endl;
else cout<<"no"<<endl;
return 0;
}
问题
问题1:int型整数的最小值和最大值是多少?到−2147483648到2147483647
问题2:doble型浮点数能精确到多少位小数?
本身值得商榷,double型浮点数实际精度为1516位,即能精确到1516位有效数字。
问题3:double型浮点数最大正数值和最小正数值分别是多少?
−21024到21024,即−1.79∗10308到+1.79∗10308
问题4:逻辑运算符号“&&”、“||”和“!”(表示逻辑非)的相对优先级是怎样的?也就是说,a&&b||c应理解成(a&&b)||c还是a&&(b||c),或者随便怎么理解都可以?
优先级从高到低顺序为!>&&>||
if(a)if(b)x++;else y++的确切含义是什么?这个else应和哪个if配套?有没有办法明确表达出配套方法?
else应该与最近的没有else配对的if进行匹配。