文章目录
1两点距离(保留两位小数、平方、开方)
①次方pow(a,b),a的b次方
②开方sqrt(a),根号a
③保留两位小数,可以用printf("%.2f",number),也可以cout<<fixed<<setprecision(2)<<number;还可以用cout<<double(int(number*100))/100
第一种printf("%.2f")是最稳定的,可以跳到第六题四舍五入,在99.999这个数据时,后两种方法的结果都不对
④注意,printf里的换行是\n,比如printf("%.2f\n",number)
#include<iostream>
using namespace std;
#include <bits/stdc++.h>
int main()
{
double x1, y1, x2, y2;
while (cin >> x1 >> y1 >> x2 >> y2)
printf("%.2f\n", sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2)));
//或者:
//cout <<fixed<< setprecision(2)<< sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2))<<endl;
return 0;
}
2.三角函数(定义pi,#define pi 3.1415926)
ps:不要总是忘记最后面加个换行
#include<iostream>
using namespace std;
#include <bits/stdc++.h>
#define PI 3.1415926
int main()
{
double angle;
while (cin >> angle)
{
angle = angle * PI / 180;
printf("Sum=%.2f\n", sin(angle) + cos(angle) + tan(angle) + 1 / tan(angle) + 1 / sin(angle) + 1 / cos(angle));
}
return 0;
}
3.指数计算(pow(a,b))
主要考到了pow(a,b),a的b次方
保留小数点后位数cout<<fixed<<setprecision(位数)<<number;
#include<iostream>
using namespace std;
#include <bits/stdc++.h>
int main()
{
double x, y, a, b, ans;
while (cin >> x >> y)
{
if (x < 0)
cout << "NO" << endl;
else
{
ans = pow(x, y);
cout << int(ans) <<' '<< fixed<<setprecision(6)<<ans - int(ans)<<endl;
}
}
return 0;
}
4.三角形面积(s=absin©/2,c如果是角度需*pi/180)
巩固了一下上面的知识而已,没有新的
#include<iostream>
using namespace std;
#include <bits/stdc++.h>
#define pi 3.1415926
int main()
{
double a, b, c;
while (cin >> a >> b >> c)
cout << fixed << setprecision(2) << a * b*sin(c*pi / 180) / 2 << endl;
return 0;
}
5.求误差(绝对值abs(x),e的指数,exp(x))
1.绝对值函数abs()
2.e的n次方exp(n)
#include<iostream>
using namespace std;
#include <bits/stdc++.h>
int main()
{
double x;
while (cin >> x)
cout << fixed << setprecision(6) << abs(exp(x)-(1+x))<<endl;
return 0;
}
6.四舍五入(保留小数位数)
ps:第一题说到的三种方法,只有这种是对的。double(int(*100))/100这个方法99.999结果是100不对,fixed<<setprecision(2)会溢出,比如99.999的结果是100.01
#include<iostream>
using namespace std;
#include <bits/stdc++.h>
int main()
{
double x;
while (cin >> x)
{
x *= 1000;
if (int(x) % 10 >= 5)
printf("%.2f\n", double(int(x / 10 + 1)) / 100);
else
printf("%.2f\n", double(int(x / 10)) / 100);
}
return 0;
}
7.输出奇异符号(字符串中含有引号或斜杠时需转义)
当遇到\时需转义,应写成\
当遇到"时需转义,应写成"
扫描二维码关注公众号,回复:
12366399 查看本文章
#include<iostream>
using namespace std;
#include <bits/stdc++.h>
int main()
{
cout << "!@#$~%^&*()_+|\\=-\"\":";
return 0;
}
8.十六进制转十进制(哈希表)
#include<iostream>
using namespace std;
#include <bits/stdc++.h>
#include <unordered_map>
int main()
{
unordered_map<char, int>hash = {
{
'0',0},
{
'1',1},
{
'2',2},
{
'3',3},
{
'4',4},
{
'5',5},
{
'6',6},
{
'7',7},
{
'8',8},
{
'9',9},
{
'a',10},
{
'b',11},
{
'c',12},
{
'd',13},
{
'e',14},
{
'f',15}
};
string s;
while (cin >> s)
{
int L = s.size();
int ans=0;
for (int i =0; i <L ; i++)
ans += hash[s[i]]*pow(16,L-i-1);
cout << ans << endl;
}
return 0;
}
ps:其实C语言自带的%x,%d就能直接转了,%x用来scanf输入十六进制,%d用来printf输出十进制
9.十进制正负数转八进制十六进制(%dx,八%0,十六%x)
ps:由于负数输出的是补码,显示不正常,所以负数先把它转成正数,再用%o,%x输出八进制十六进制,然后最后才在数的前面加负号
负数和正数必须分开讨论!
#include<iostream>
using namespace std;
#include <bits/stdc++.h>
int main()
{
int x;
while (cin >> x)
{
if(x>=0)
printf("%d = %o(8) = %x(16)\n", x, x, x);
else
printf("%d = -%o(8) = -%x(16)\n", x, -x, -x);
}
return 0;
}
10按序求表达式和(找规律、仔细看题)
ps:题目里有说案例之间要空一行,别漏看题了
#include<iostream>
using namespace std;
#include <bits/stdc++.h>
#include <unordered_map>
int main()
{
int x;
while (cin >> x)
{
cout << "When x=" << x << ":" << endl;
cout << "a=" << 3 + x<<endl;
cout << "a=" << 6 + x << endl;
cout << "a=20" << endl;
cout << "a=3" << endl;
cout << "a=18" << endl<<endl;
}
return 0;
}
以上十题的内存及耗时