今天教大家写的计算器很简单,是刚入坑的萌新,看的之后,也能写的。
废话不多说,给大家看一看效果先:
计算器
大家看完效果感觉还可以的话,可以继续学下去,毕竟是得萌新学的,所以说代码挺简单的,并且非常详细,保证看了就会。
老套路了,先分步骤
1.定义头文件
2.定义主函数
3.定义需要的值
4.定义计算函数
5.定义第1次的计算
6.定义之后几次是否计算的判定函数
7.定义之后几次的判定
8.打印最后的结果
9.完整代码
这里我们需要定义一个头文件,老熟人了,想必大家都会吧。
#include//定义stdio.h头文件
其实我感觉这两步都可以省略了。
int mian()//主函数不用讲了吧?
{
return 0;
}
这里我们需要定义第1个计算数与第2个计算数,和我们的判决数与运算符号。
{
float one_sum,//定义第1个计算数-用float类型可以打印小数
two_sum;//定义第2个计算数-用float类型可以打印小数
short shi_fou;//定义判定数-判定数不需要小数,可以用int类型,但是用short,省空间
char yun_suan_fu;//定义运算符号-运算符号是字符,所以说需要用char类型
}
这个函数需要传进两个运算数,与一个运算字符,用switch()函数来判定加减乘除,顺便别人不小心打错的话, 可以报个错,保留上一次的值。
(float) 强制转换类型以防报错。
注意,有return,就不需要
break了。
float JiSuan(const float one_sum, const float two_sum,const char yun_suan_fu)//定义计算函数
{
switch(yun_suan_fu)//写switch()函数用来判定运算符号
{
case'+'://加
return (float)(one_sum + two_sum);//返回第1个计算数加第2个计算数的值
case'-'://减
return (float)(one_sum - two_sum);//返回第1个计算数减第2个计算数的值
case'*'://乘
return (float)(one_sum * two_sum);//返回第1个计算数乘第2个计算数的值
case'/'://除
return (float)(one_sum / two_sum);//返回第1个计算数除第2个计算数的值
}
printf("计算错误,结果自动为上一次的运算成果\n");//有人闲的蛋疼,乱打别的东西,所以报个提示
return one_sum;//返回报错后的值-上一次的结果
}
这名是我们第1次运算的过程,用printf()函数告诉用户该干什么?,用scanf_s()函数用来赋值, 用getchar()函数给运算符号赋值。
用if()函数,在第1次运算的时候,给第1个计算数赋值,后面就通过第1次的运算结果,与第2个计算数运算。
{
printf("欢迎打开计算器\n"); //让用户知道登了什么软件
for (int i = 1;; i++)//一个死循环
{
if (i == 1)//第1次进入开始
{
printf("请输入您的第一个数:");//打印提示与输入第1个计算数的地方
scanf_s("%f", &one_sum);//给第1个计算数赋值
}
printf("请输入您的运算符:");//打印提示与输入运算符号的地方
setbuf(stdin, NULL);//清空缓存区-防止下面的赋值赋到回车
yun_suan_fu = getchar(); //给运算符号赋值
printf("请输入您的第二个数:");//打印提示与输入第2个计算数的地方
setbuf(stdin, NULL);//清空缓存区-防止下面的赋值赋到回车
scanf_s("%f", &two_sum);//给第2个计算数赋值
one_sum = JiSuan(one_sum, two_sum, yun_suan_fu);//把第1个计算数与第2个计算数计算的结果放到第1个计算数里
printf("这次的运算成果是%.2f(会自动四舍五入至小数点后两位)\n", one_sum);//打印每一次的运算成果-%.2f-四舍五入至小数点后两位-四舍五入为了美观
}
首先先声明几句话,然后再让用户选择,然后再传过来就OK了。传进去的i,纯属为了让用户知道计算次数,好让用户知道计算到第几次了,贴心的一批。
short ShiFou(const int i)//定义判定数-声明判定条件函数
{
short shi_fou;//定义判定数-判定数不需要小数,可以用int类型,但是用short,省空间-因为是局部变量,出去就会被销毁,所以不用担心冲突
printf("是否继续计算?\n");//打印是否继续
printf("结束请输0,");//打印-判定条件
printf("继续请输1,");//打印-判定条件
printf("重来请输2\n");//打印-判定条件-加回车-为了美观
printf("%d.请输入:",i);//打印提示与判定数的地方
setbuf(stdin, NULL);//清空缓存区-防止下面的赋值赋到回车
scanf_s("%hd", &shi_fou);//给判定数赋值
return shi_fou;//返回判定数
}
利用函数的返回值,作判定,等于1是继续,但继续的话不需要任何东西,于是在最后找茬上加个条件不等于1,就可以完美的不出bug。
{
else//第1次以后判定想不想继续计算-利用判定数判定条件
{
shi_fou = ShiFou(i);//储存判定数
if (shi_fou == 0)//等于0时,终止
break;//离开这个循环-用于退出
else if (shi_fou == 2)//不等于0,但等于2时,重新开始
{
i = 0;//重置循环,与下面的跳过本次循环连起来一起用,跳过之后他会自加1,所以设置为0不是1
continue;//跳过本次循环-本次循环下面的代码都不会运作
}
else if(shi_fou != 1)//不等于0,不等于2,不等于1时,那他就是故意找茬了,可以用打印函数打印一句,说他闲的话。
{
printf("他奶奶地,找茬是不是?\n"); //说他闲的话
break;//离开这个循环-用于退出
}
}
}
最后肯定得给用户一个明确的结果。然后就完成了,是不是很简单?
{
printf("最终的运算成果是%.2f(会自动四舍五入至小数点后两位)\n", one_sum);//打印最终的运算成果-%.2f-四舍五入至小数点后两位-四舍五入为了美观
}
应该也只有我会把这么简单的代码讲解这么详细,易懂了,制作不易,求三连。
#include//定义stdio.h头文件
float JiSuan(const float one_sum, const float two_sum,const char yun_suan_fu)//定义计算函数
{
switch (yun_suan_fu)//写switch()函数用来判定运算符号
{
case'+'://加
return (float)(one_sum + two_sum);//返回第1个计算数加第2个计算数的值
case'-'://减
return (float)(one_sum - two_sum);//返回第1个计算数减第2个计算数的值
case'*'://乘
return (float)(one_sum * two_sum);//返回第1个计算数乘第2个计算数的值
case'/'://除
return (float)(one_sum / two_sum);//返回第1个计算数除第2个计算数的值
}
printf("计算错误,结果自动为上一次的运算成果\n");//有人闲的蛋疼,乱打别的东西,所以报个提示
return one_sum;//返回报错后的值-上一次的结果
}
short ShiFou(const int i)//定义判定数-声明判定条件函数
{
short shi_fou;//定义判定数-判定数不需要小数,可以用int类型,但是用short,省空间-因为是局部变量,出去就会被销毁,所以不用担心冲突
printf("是否继续计算?\n");//打印是否继续
printf("结束请输0,");//打印-判定条件
printf("继续请输1,");//打印-判定条件
printf("重来请输2\n");//打印-判定条件-加回车-为了美观
printf("%d.请输入:",i);//打印提示与判定数的地方
setbuf(stdin, NULL);//清空缓存区-防止下面的赋值赋到回车
scanf_s("%hd", &shi_fou);//给判定数赋值
return shi_fou;//返回判定数
}
int main()//主函数不用讲了吧?
{
float one_sum,//定义第1个计算数-用float类型可以打印小数
two_sum;//定义第2个计算数-用float类型可以打印小数
short shi_fou;//定义判定数-判定数不需要小数,可以用int类型,但是用short,省空间
char yun_suan_fu;//定义运算符号-运算符号是字符,所以说需要用char类型
printf("欢迎打开计算器\n"); //让用户知道登了什么软件
for (int i = 1;; i++)//一个死循环
{
if (i == 1)//第1次进入开始
{
printf("请输入您的第一个数:");//打印提示与输入第1个计算数的地方
scanf_s("%f", &one_sum);//给第1个计算数赋值
}
else//第1次以后判定想不想继续计算-利用判定数判定条件
{
shi_fou = ShiFou(i);//储存判定数
if (shi_fou == 0)//等于0时,终止
break;//离开这个循环-用于退出
else if (shi_fou == 2)//不等于0,但等于2时,重新开始
{
i = 0;//重置循环,与下面的跳过本次循环连起来一起用,跳过之后他会自加1,所以设置为0不是1
continue;//跳过本次循环-本次循环下面的代码都不会运作
}
else if(shi_fou != 1)//不等于0,不等于2,不等于1时,那他就是故意找茬了,可以用打印函数打印一句,说他闲的话。
{
printf("他奶奶地,找茬是不是?\n"); //说他闲的话
break;//离开这个循环-用于退出
}
}
printf("请输入您的运算符:");//打印提示与输入运算符号的地方
setbuf(stdin, NULL);//清空缓存区-防止下面的赋值赋到回车
yun_suan_fu = getchar(); //给运算符号赋值
printf("请输入您的第二个数:");//打印提示与输入第2个计算数的地方
setbuf(stdin, NULL);//清空缓存区-防止下面的赋值赋到回车
scanf_s("%f", &two_sum);//给第2个计算数赋值
one_sum = JiSuan(one_sum, two_sum, yun_suan_fu);//把第1个计算数与第2个计算数计算的结果放到第1个计算数里
printf("这次的运算成果是%.2f(会自动四舍五入至小数点后两位)\n", one_sum);//打印每一次的运算成果-%.2f-四舍五入至小数点后两位-四舍五入为了美观
}
printf("最终的运算成果是%.2f(会自动四舍五入至小数点后两位)\n", one_sum);//打印最终的运算成果-%.2f-四舍五入至小数点后两位-四舍五入为了美观
return 0;
}