谁给个C语言课程设计计算器的源程序和完整的实验报告啊???谢谢啦!~~~

如题所述

[email protected]我也是要这个 有人回答的话 分享一下 谢谢了
我有下载的 但是呵呵 学计算机的 不是很明白 先�%D
void main(void)
{
uchar i,j=0;//循环用数
P1=0x00;//数码管显示数值清除
P2=0x00;
while(1)//主循环
{
key=kbscan();//读取键值到key
dlms();//延时1ms
if(key>=10&&key==0&&key<=9)//按键0-9,读取数值,显示second
{
if(op==0)
{
if(second<100000)
{
second=second*10+key;
}
disp=second;
display(disp);
key=16;
if(preop==55)//等号结束后,输入新数字,则清操作符记忆为初始
{
preop=20;
}
}
dlms();
}
if(key==14) //key = 14时,按下的是C/ON键
{
disp=0;
display(disp);
P2=0x20;
P1=0x3f;
first=0; //清0,回复初始状态
second=0;
op=0;
result=0;
preop=20;
key=16;
}
if(key==15) //KEY = 15时,按下的是=键
{
op=key;
yunsuan();
dlms();
display(disp);
second=0;
op=0;
preop=55;//表示清除操作符记忆
key=16;
}
for(i=0;i<2000;i++){};
}
}

//////////四则运算////////
void yunsuan(void)
{
if(op!=0)
switch(preop)
{
case 10://加法
result=first+second;
first=result;
disp=result;
preop=op;
op=0;
second=0;
break;
case 11://减法
result=first-second;
first=result;
disp=result;
preop=op;
op=0;
second=0;
break;
case 12://乘法
result=first*second;
first=result;
disp=result;
preop=op;
op=0;

op=0;
result=0;
preop=20;
key=16;
}
if(key==15) //KEY = 15时,按下的是=键
{
op=key;
yunsuan();
dlms();
display(disp);
second=0;
op=0;
preop=55;//表示清除操作符记忆
key=16;
}
for(i=0;i<2000;i++){};
}
}

//////////四则运算////////
void yunsuan(void)
{
if(op!=0)
switch(preop)
{
case 10://加法
result=first+second;
first=result;
disp=result;
preop=op;
op=0;
second=0;
break;
case 11://减法
result=first-second;
first=result;
disp=result;
preop=op;
op=0;
second=0;
break;
case 12://乘法
result=first*second;
first=result;
disp=result;
preop=op;
op=0;
second=0;
break;
case 13://除法
result=first/second;
first=result;
disp=result;
preop=op;
op=0;
second=0;
break;
case 20://初次运行执行这里,即没有操作符记忆时
preop=op;
first=second;
second=0;
op=0;
break;
default://其他,清按键输入数字
preop=op;
second=0;
op=0;
break;
}
}

/////////延时程序/////////
void dlms(void)
{
uchar i;
for(i=0;i<250;i++){}
}

///////键盘扫描程序////////
uchar kbscan(void)
{
uchar sccode,recode,a,n;// sccode , recode
P3=0xf0;
if((P3&0xf0)!=0xf0)// True = 有键按下
{
dlms();
if((P3&0xf0)!=0xf0)// True = 按键通过防抖动
{
sccode=0xfe;// 1111 1110 初始值
while((sccode&0x10)!=0)//循环判断按键的行
{
P3=sccode;// p3重写数,判断行
if((P3&0xf0)!=0xf0)
{
recode=P3&0xf0;//记录p3高4位,行
sccode=sccode&0x0f;//低4位,列
a=sccode+recode;//取行列和
if(a==0xde)n=0; //键码对应的数值 ,0-9
if(a==0xed)n=1;
if(a==0xdd)n=2;
if(a==0xbd)n=3;
if(a==0xeb)n=4;
if(a==0xdb)n=5;
if(a==0xbb)n=6;
if(a==0xe7)n=7;
if(a==0xd7)n=8;
if(a==0xb7)n=9;
if(a==0x7e)n=10; //键码对应的操作符 +,-,*,/,
if(a==0x7d)n=11;
if(a==0x7b)n=12;
if(a==0x77)n=13;
if(a==0xee)n=14;
if(a==0xbe)n=15;
return(n);
}
else if (sccode<=10||k<-99999) //十万位超出,或者数值过小超出范围,则显示错误
{
P2=0x01;
r=0x01;
P1=0x79;
r=(r<<1);
P2=r;
P1=0X3f;
r=(r<<1);
P2=r;
P1=0X3f;
r=(r<<1);
P2=r;
P1=0X3f;
r=(r<<1);
P2=r;
P1=0x06;
}
else if(k==-99999)//数值小于零,最高位显示负号
{
P1=0x00;
P2=0xff;
P2=0x01;
P1=0x40;
P2=0x20;
k=-k;
while(k>0)
{
buf2=k%10;
P1=zixing[buf2];
for(i=0;i>1;)//循环选择高一位数字
P2=r;
P1=0x00;//清除数字
}
}
else
{
P1=0x00;
P2=0xff;
P2=0x20;
while(k>0)//由个位开始显示数值
{
buf2=k%10;//获得最低位数字
P1=zixing[buf2];//获得数字字符编码
for(i=0;i>1;)
P2=r;
P1=0x00;
}
}
}
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-21
我估计实验的话,要求的应该是有限位的四则计算器吧。
#include<stdio.h>
void main()
{
int a,b;
char c;
scanf("%d%c%d",&a,&c,&b);
switch(c)
{
case '+': printf("%d+%d=%d",a,b,a+b);
break;
case '-': printf("%d-%d=%d",a,b,a-b);
break;
case '*': printf("%d*%d=%d",a,b,a*b);
break;
case '/': printf("%d/%d=%d",a,b,a/b);
break;
}
}
无限位的就比较复杂了,估计你们也不要求,实验报告就自己做吧,不要太懒了。
相似回答