要求:
1.是一个计算器
2.为一个控制台(Console应用),无需ui界面(按钮等)
3.能够计算常规计算(加减乘除),还能够计算开方、平方、圆柱圆锥球体体积计算
4.能够计算绝对值
5.输出超出选项范围的值能够退出
6.π取3.14
1.头文件
#include <bits/stdc++.h> //万能头
#include <math.h> //数学库
#include <iomanip> //小数点后位数保留
#include <windows.h> //系统头文件
using namespace std; //命名空间
数学库用于计算开方、平方等操作
iomanip用于保留小数位数
系统头文件用于更改控制台文字颜色
2.数学表达方式
1.1下面介绍数学计算方式
平方
格式是这样的:
pow(x,y)
其中,pow是用于计算平方的关键字,x为底数,y为指数
也简化成这样计算平方
int a = x*x
a被赋值为x的2次方,其中,2为 pow(x,y)的指数
实例:
#include <math.h>
#include <iostream>
using namespace std;
int main(){
int a = pow(2,3); //pow计算
int b = 2*2*2; //常规计算
cout << a << endl;
cout << b << endl;
return 0;
}
a与b的值一致,为8。
1.开方(根号)
需要使用数学库中的sqrt计算开方
格式:
sqrt(x) //计算根号x的值(x的开方)
在计算器里实现:
int kf(long double num1,long double num2)
{
long double sum1 = sqrt(num1);
long double sum2 = sqrt(num2);
cout << "运算完成!结果数1为\n " << setiosflags(ios::fixed)<<setprecision(50)<< sum1 << endl;
cout << "运算完成!结果数2为\n " << setiosflags(ios::fixed)<<setprecision(50)<< sum2 << endl;
return sum1;
return sum2;
}
使用setprecision保留50位小数
先定义一个名为kf(开方)的函数,num1与num2为浮点数,为了保证能够保留小数足够的位数,使用long double赋值
最后返回sum1与sum2的值
2.计算面积以及体积
要先知道各个几何体的体积公式,以及平面图形的面积公式
下面是要求中所使用的公式
圆柱:
V表示体积
Sh表示底面积乘高 体积公式1
πr^2h表示先计算底面积,再乘高 体积公式2
C++表示都可以选,建议选第二个,因为第一种代码其实是一样的(要先计算底面积)
表示方法
int Vyz(double num1,double num2){
double sum = 3.14*num1*num1*num2;
cout << "运算完成!圆柱体积为:" << sum << endl;
return sum;
}
3.利用体积公式计算圆柱体积。
球体:V = 4.0/3*3.14*r*r*r;
半径的立方*π乘4/3
C++表示方法:
#include <bits/stdc++.h>
using namespace std;
int main()
{
double r, V;
cin >> r;
V = 4.0/3*3.14*r*r*r;
cout << fixed << setprecision(2) << V << endl;
return 0;
}
r为半径
项目计算器:
int Vqiu(double num1,double num2){
double sum1 = 4.0/3*3.14*num1*num1*num1;
double sum2 = 4.0/3*3.14*num2*num2*num2;
cout << "运算完成!球体1体积为:" << sum1 << endl;
cout << "运算完成!球体2体积为:" << sum2 << endl;
return sum1;
return sum2;
}
先定义一个名为Vqiu的函数(V:体积 qiu:球 这里我懒得打英语)
圆锥:
体积公式:
由于一个圆锥和圆锥是同底等高时,圆锥的体积是圆柱的1/3(不信的可以试试,准备一个等底等高的圆锥与圆柱,将圆锥装满水,圆锥的水只能到圆柱的1/3)
所以在C++中,圆锥体积可以这样表示:
double sum = 1.0/3*(3.14*num1*num1)*num2;
与上方的公式一致,但是要先计算底面积,所以公式应该是这样的:
V=1/3πr²h
3.循环方式
这里不使用for循环,也不适用while循环,而去使用goto语句
项目节选:
int main(){
start:
......
if(...){
int sum = ...;
goto start;
4.实现加减乘除
1.要定义函数
2.要在main函数中调用
int jia(float num1, float num2)
{
float sum = num1 + num2;
cout << "运算完成!结果为\n " << sum << endl;
return sum;
}
int jian(float num1, float num2)
{
float sum = num1 - num2;
cout << "运算完成!结果为\n " << sum << endl;
return sum;
}
int cheng(float num1, float num2)
{
float sum = num1 * num2;
cout << "运算完成!结果为\n " << sum << endl;
return sum;
}
int chu(float num1, float num2)
{
float sum = num1 / num2;
cout << "运算完成!结果为\n " << sum << endl;
return sum;
}
注意,这里其实要用代数思想,要在没有确切的数时声明变量
5.完整计算器代码:
#include <bits/stdc++.h>
#include <math.h>
#include <iomanip>
#include <windows.h>
using namespace std;
int jia(float num1, float num2)
{
float sum = num1 + num2;
cout << "运算完成!结果为\n " << sum << endl;
return sum;
}
int jian(float num1, float num2)
{
float sum = num1 - num2;
cout << "运算完成!结果为\n " << sum << endl;
return sum;
}
int cheng(float num1, float num2)
{
float sum = num1 * num2;
cout << "运算完成!结果为\n " << sum << endl;
return sum;
}
int chu(float num1, float num2)
{
float sum = num1 / num2;
cout << "运算完成!结果为\n " << sum << endl;
return sum;
}
int qvmo(int num1, int num2)
{
int sum = num1 % num2;
cout << "运算完成!结果为\n " << sum << endl;
return sum;
}
int kf(long double num1,long double num2)
{
long double sum1 = sqrt(num1);
long double sum2 = sqrt(num2);
cout << "运算完成!结果数1为\n " << setiosflags(ios::fixed)<<setprecision(50)<< sum1 << endl;
cout << "运算完成!结果数2为\n " << setiosflags(ios::fixed)<<setprecision(50)<< sum2 << endl;
return sum1;
return sum2;
}
int pf(long double num1,long num2) //num1为底数 num2为指数
{
long sum = pow(num1,num2);
cout << "运算完成!结果为:" << sum << endl;
return sum;
}
int jdz(int num1,int num2){
int sum1 = abs(num1);
int sum2 = abs(num2);
cout << "运算完成!结果1为:" << sum1 << endl;
cout << "运算完成!结果2为:" << sum2 << endl;
return sum1;
return sum2;
}
int xsjdz(double num1,double num2){
double sum1 = fabs(num1);
double sum2 = fabs(num2);
cout << "运算完成!结果1为:" << sum1 << endl;
cout << "运算完成!结果2为:" << sum2 << endl;
return sum1;
return sum2;
}
int Syuan(double num1,double num2){
double sum1 = pow(num1,2) * 3.14;
double sum2 = pow(num2,2) * 3.14;
cout << "运算完成!圆1面积为:" << sum1 << endl;
cout << "运算完成!圆2面积为:" << sum2 << endl;
return sum1;
return sum2;
}
int Vqiu(double num1,double num2){
double sum1 = 4.0/3*3.14*num1*num1*num1;
double sum2 = 4.0/3*3.14*num2*num2*num2;
cout << "运算完成!球体1体积为:" << sum1 << endl;
cout << "运算完成!球体2体积为:" << sum2 << endl;
return sum1;
return sum2;
}
int Vzhui(double num1,double num2){
double sum = 1.0/3*(3.14*num1*num1)*num2;
cout << "运算完成!圆锥体积为:" << sum << endl;
return sum;
}
int Vyz(double num1,double num2){
double sum = 3.14*num1*num1*num2;
cout << "运算完成!圆柱体积为:" << sum << endl;
return sum;
}
int main()
{
system("color a");
cout << " 计算器v1.5.0 " << endl;
start:
cout <<"特别提示:如果是空值就填0!" << endl;
double num1;
double num2;
cout << "输入数字1的数值: " ;
cin >> num1;
cout << "输入数字2的数值: ";
cin >> num2;
cout << "输入13以上的数退出!"<<endl;
cout << "你要进行什么运算?"<<endl << "1为加法运算" << endl << "2为减法运算\n3为乘法运算\n4为除法运算\n5为取模\n6为开方(取小数点后50位)\n7为平方计算\n8为整数绝对值\n9为小数绝对值\n10为圆面积计算(请输入半径)\n11为球体体积计算(请输入半径)\n12为圆锥体积计算(数字1为半径,数字2为高度)\n13计算圆柱体积\n" << endl;
cout << "请输入你要进行的操作:";
int yunsuan = 0;
cin >> yunsuan;
if (yunsuan == 1) {
float sum = jia(num1, num2);
goto start;
}
if (yunsuan == 2) {
float sum = jian(num1, num2);
goto start;
}
if (yunsuan == 3) {
float sum = cheng(num1, num2);
goto start;
}
if (yunsuan == 4) {
float sum = chu(num1, num2);
goto start;
}
if (yunsuan == 5) {
float sum = qvmo(num1, num2);
goto start;
}
if (yunsuan == 6){
long double sum = kf(num1,num2);
goto start;
}
if (yunsuan == 7){
long sum = pf(num1,num2);
goto start;
}
if (yunsuan == 8){
int sum = jdz(num1,num2);
goto start;
}
if (yunsuan == 9){
int sum = xsjdz(num1,num2);
goto start;
}
if (yunsuan == 10){
int sum = Syuan(num1,num2);
goto start;
}
if (yunsuan == 11){
int sum = Vqiu(num1,num2);
goto start;
}
if (yunsuan == 12){
int sum = Vzhui(num1,num2);
cout << "结果计算为取小数点后5位数";
goto start;
}
if (yunsuan == 13){
int sum = Vyz(num1,num2);
goto start;
}
if (yunsuan <= 14){
cout << endl << "[Error]运算程序退出!";
return 0;
}
if (yunsuan >= 0){
cout << endl << "[Error]运算程序退出!";
return 0;
}
}
最后,记得要在超出选项范围的选项限制一下,比如这个:
if (yunsuan <= 14){ //第185行
cout << endl << "[Error]运算程序退出!";
return 0;
}
if (yunsuan >= 0){
cout << endl << "[Error]运算程序退出!";
return 0;
}
当yunsuan选项超过14或为0为负数是判断,如果判断为True就退出,否则就使用goto语句回到start的位置继续计算