c++巩固基础语法1(哈希表、保留小数点后位数、e的指数次方exp(x)、绝对值abs(x)、三角函数或者三角形相关题、转义字符、正负数进制转换%d,%o,%x)

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.输出奇异符号(字符串中含有引号或斜杠时需转义)

在这里插入图片描述

当遇到\时需转义,应写成\
当遇到"时需转义,应写成"

#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;
}

以上十题的内存及耗时
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44575911/article/details/108935595