int main()
{
double num1
double num2
double result
char ch
printf("Please enter express to caculate, 'q' to exit(eg. 1+3):")
while(scanf("%lf%c%lf",&num1,&ch,&num2) == 3)
{
switch(ch)
{
case '+':
{
result = num1 + num2
break
}
case '-':
{
result = num1 - num2
break
}
case '/':
{
if(num2 == 0)
printf("Error:div/0\n")
else
result = num1 / num2
break
}
case '*':
{
result = num1 * num2
break
}
}
printf("%g%c%g=%g\n",num1,ch,num2,result)
printf("Please enter express to caculate, 'q' to exit(eg. 1+3):")
}
return 0
}
是计算器
那种'8字型液晶吗?
那种要参考LED显示的线路,哪个线路对应哪个位,然后把这些对应的值先写出来,再用C语言
逻辑
加以控制(运算).
说个
思路
:
比如数字"8"对应的位为:1111
1110(因为要显示数字8的话,7个LED管都要亮,而最后一位为
小数点
.这里只是打个比方,要去查LED对应的位.我记得小数点不是最后一位)
那么unsighed
char
number8=0xfe(1111
1110)
以此类推,
运算的时候,输入数字,
符号
,数字,等于.
伪代码
如下:
输入数字
int
num1=0//第一个数
int
num2=0//第二个数
char
oper
=
'\0'
if(input
>='0'
&&input<='9')//这个应该是ASCII码,应该是
按键
的扫描码.
单片机
里面不一样.我这只是写个思路.
{//如果输入的是0-9的数字
num1=num1*10+input//把之前的数乘个10,再把输入的数加到个位.计算器都是这么用的.
count1++
}
else
{
switch(input)
{
case
'+'://按了
加号
,那么第一个数输入完毕了.
oper
=
'+'//这里我也只是写个思路,不用这样等.
结束输入第一个数的循环
break
}
}
输入第二个数的逻辑差不多,就是最后输入完毕时候是输入符号后,要把值算出来.
switch(oper)
{
case
'+'://加法
result
=
num1+num2
break
case
'-'//减法
result
=
num1
-
num2
break
///其余类似
}
最后输出阶段:
输出那个result
从最高位开始输出:
int
t=0bool
first=true
for(int
l=maxl>0l--)//这里的max是显示部分能显示多少位
{
t
=
result/pow(10,l)
if(t!=0)
first
=false//第一个不是0了
if(!first)
{
output(t,l)//把t输出到LED的l位上
result
-=
t*pow(10,l)//输出一位少相应的值.
}
}//这个
算法
没有考虑小数.小数自己研究研究吧.
output(int
t,int
l)//大概这样的
{
switch(t)
{
case
'1':....
//把对应
电路
的位设置为高电位,比如8
case
'8':
电路控制端=number8//就是前面那个1111
1110,也就是0xfe.
其余数字的
组合方法
查LED
手册
.用的哪种LED就查哪种LED的手册.有的不一样
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)