求用C程序编写一个桌面计算器,在TC下运行。。。。。。

BINZHOUYAN 2010-09-09 11:17:41
新接触C语言,看到一个课题,在TC下编写并运行一个桌面计算器,当然,计算器界面不能少。。。。。
请大家帮帮忙吧,给点方法。。。。。。
...全文
456 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobo364 2010-09-10
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

int _my_add(int,int);
int _my_sub(int,int);
int _my_mul(int,int);
int _my_div(int,int);
int _my_mod(int,int);
unsigned long (*_my_function(void))[2];

int main(void)
{
int number_one;
int number_two;
int number_control;
int result;
unsigned long (*temp_buffer)[2];
temp_buffer = _my_function();
while(1)
{
printf("这是一个简单的计算器,主要有下面的功能!\n");
printf(" 1:加\n 2:减\n 3:乘\n 4:除\n 5:求模\n");
printf("请输入第一操作数 第二操作数 相关运算\n");
scanf("%d %d %d",&number_one,&number_two,&number_control);
if(((number_control == 4) && (!(number_two | 0x0)))|| number_control > 5)
{
printf("input is err\n");
continue;
}
result = ((int (*) (int,int))(*(*(temp_buffer + number_control - 1) + 0)))(number_one,number_two);
printf("\n%d %c %d = %d\n\n",number_one,*(*(temp_buffer + number_control - 1) + 1),number_two,result);

}
return 0;
}



unsigned long (*_my_function(void))[2]
{
unsigned long (*function_buffer)[2];
function_buffer = (unsigned long(*)[2])malloc(5);
*(*(function_buffer + 0) + 0) = (unsigned long) _my_add;
*(*(function_buffer + 0) + 1) = '+';
*(*(function_buffer + 1) + 0) = (unsigned long) _my_sub;
*(*(function_buffer + 1) + 1) = '-';
*(*(function_buffer + 2) + 0) = (unsigned long) _my_mul;
*(*(function_buffer + 2) + 1) = '*';
*(*(function_buffer + 3) + 0) = (unsigned long) _my_div;
*(*(function_buffer + 3) + 1) = '/';
*(*(function_buffer + 4) + 0) = (unsigned long) _my_mod;
*(*(function_buffer + 4) + 1) = '%';
return function_buffer;
}



int _my_add(int number_one,int number_two)
{
return number_one + number_two;
}



int _my_sub(int number_one,int number_two)
{
return number_one - number_two;
}



int _my_mul(int number_one,int number_two)
{
return number_one * number_two;
}



int _my_div(int number_one,int number_two)
{
return number_one / number_two;
}



int _my_mod(int number_one,int number_two)
{
return number_one % number_two;
}
jixingzhong 2010-09-10
  • 打赏
  • 举报
回复
TC代码-计算器:
http://hi.baidu.com/fuxiaodefeng/blog/item/ff6db863ae188e640c33fac2.html
csucdl 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 myerel 的回复:]

TC下编写。那只能是控制台程序了吧
来一个傻瓜点的
C/C++ code

#include <stdio.h>
int main()
{
char op = '!';
int x = 0,y = 0;
while(op != 'x')
{
printf("输入算式后回车如:1+2(输入xxx退出): \n")……
[/Quote]

估计楼主想要的是一个图形模式下的计算器
BINZHOUYAN 2010-09-10
  • 打赏
  • 举报
回复
确实是求一个图形模式下的计算器,多谢各位相助,这里有一个自己写的程序,大家看看,能不能帮忙解释一下其中主要代码的意思。。。。。。感激不尽啊!
#include<stdio.h>
#include<conio.h>
#include<bios.h>
#include<stdlib.h>
#include<math.h>
#define left 0x4b00
#define right 0x4d00
#define down 0x5000
#define up 0x4800
#define enter 0x1c0d

int key,c=1;
char js[20]="";
int count=0;
struct point
{
int x;
int y;
}nowpoint,point2;

void Init();
void Run();
void Gotoab(int t);
void OnEnter();
void Calc();
int Isf();

void main()
{
Init();
Run();}

void Init()
{
int i;
window(1,1,44,11);
clrscr();
window(1,1,28,1);
switch(c)
{
case 1:textbackground(BLUE);break;
case 2:textbackground(GREEN);break;
case 3:textbackground(LIGHTGRAY);break;
}
textcolor(YELLOW);
clrscr();
printf("This is a simple calculator!");
window(1,2,28,10);
textbackground(BLACK);
textcolor(WHITE);
printf("%c",218);
for (i=1;i<27;i++) printf("%c",196);
printf("%c",191);
for (i=2;i<=7;i++)
{
gotoxy(1,i);
printf("%c",179);
gotoxy(28,i);
printf("%c",179);
}
gotoxy(1,8);
printf("%c",192);
for(i=1;i<27;i++) printf("%c",196);
printf("%c",217);
gotoxy(1,3);printf("%c",195);
gotoxy(2,3);
for(i=1;i<27;i++) printf("%c",196);
printf("%c",180);

gotoxy(3,4);
printf(" 1 2 3 + -");
gotoxy(3,5);
printf(" 4 5 6 * /");
gotoxy(3,6);
printf(" 7 8 9 = \x1b");
gotoxy(3,7);
printf(" 0 . End");
gotoxy(5,4);nowpoint.x=5;nowpoint.y=4;point2.x=2;point2.y=2;
}

void Run()
{
while (1)
{
key=bioskey(0);
switch (key)
{
case up:Gotoab(1);break;
case down:Gotoab(2);break;
case left:Gotoab(3);break;
case right:Gotoab(4);break;
case enter:OnEnter();break;
case 0x11b:gotoxy(25,7);nowpoint.x=25;nowpoint.y=7;break;
default:break;
}
}
}

void Gotoab(int t)
{
switch (t)
{
case 1:nowpoint.y -=1;break;
case 2:nowpoint.y +=1;break;
case 3:nowpoint.x -=4;break;
case 4:nowpoint.x +=4;break;
}
switch(nowpoint.y)
{
case 3:nowpoint.y=7;break;
case 8:nowpoint.y=4;break;
}
switch(nowpoint.x)
{
case 1:nowpoint.x=25;break;
case 29:nowpoint.x=5;break;
case 17:if (t==3) nowpoint.x=13;else nowpoint.x=21;break;
}
if (nowpoint.y==7)
if (nowpoint.x==13 || nowpoint.x==21)
if (t==1) nowpoint.y-=1;
else if (t==2) nowpoint.y=4;
else if (t==3) nowpoint.x=9;
else if (t==4) nowpoint.x=25;
gotoxy(nowpoint.x,nowpoint.y);
}

void OnEnter()
{
int i;
if (nowpoint.x==25&&nowpoint.y==7) exit(0);
if (count>=20&&(nowpoint.x!=25||nowpoint.y!=6)&&(nowpoint.y!=6||nowpoint.x!=21)) return;
gotoxy(point2.x,point2.y);
if (nowpoint.x<14&&nowpoint.y<7)
{
i=(nowpoint.y-4)*3+(nowpoint.x/4);
printf("%d",i);
js[count]=i+48;
count++;
}
else if(nowpoint.x<14){if (nowpoint.x==5) {printf("0");js[count]='0';count++;} else {printf(".");js[count]='.';count++;}}
else if(nowpoint.y==4){if (nowpoint.x==21) {if (Isf()){printf("+");js[count]='+';count++;}else point2.x--;} else {if (Isf()){printf("-");js[count]='-';count++;}else point2.x--;}}
else if(nowpoint.y==5){if (nowpoint.x==21) {if (Isf()){printf("*");js[count]='*';count++;}else point2.x--;} else {if (Isf()){printf("/");js[count]='/';count++;}else point2.x--;}}
else if(nowpoint.x==25){if (count!=0) {point2.x--;gotoxy(point2.x,point2.y);printf(" ");js[count-1]=0;count--;point2.x--;}else point2.x--;}else {printf("=");Calc();}
point2.x++;
gotoxy(nowpoint.x,nowpoint.y);
}

void Calc()
{
int i,j,f,fh,xs;
double a1,a2,s;
a1=a2=0;
if (count==0) return ;
if (js[count-1]<'0'&&js[count-1]!=46) printf("Error!");
else if (Isf()) printf("%s",js);
else {
for(i=0;i<count;i++)
if (js[i]<'0'&&js[i]!=46) j=i;
fh=1;xs=-1;
if (j!=0)
for (i=0;i<j;i++)
{ if (js[i]=='.') fh=0;
else if (fh==1) a1=a1*10+js[i]-48;
else if (fh==0) {a1=a1+(js[i]-48)*pow(10,xs);xs--;}
}
fh=1;xs=-1;
for (i=j+1;i<count;i++)
{ if (js[i]=='.') fh=0;
else if (fh==1) a2=a2*10+js[i]-48;
else if (fh==0) {a2=a2+(js[i]-48)*pow(10,xs);xs--;}
}
switch(js[j])
{
case '+':s=a1+a2;break;
case '-':s=a1-a2;break;
case '*':s=a1*a2;break;
case '/':s=a1*1.0/a2;break;
}
printf("%.2lf",s);
}
c++;if (c>3) c=1;
bioskey(0);
Init();
point2.x=2;point2.y=2;nowpoint.x=5;nowpoint.y=4;
gotoxy(point2.x,point2.y);printf(" ");
gotoxy(nowpoint.x,nowpoint.y);
for (i=0;i<=19;i++) js[i]=0;
count=0;
}

int Isf()
{
int i,b;
b=1;
for (i=0;i<=count-1;i++)
if (js[i]=='+'||js[i]=='-'||js[i]=='*'||js[i]=='/') b=0;
return b;
}
xkxxzw 2010-09-10
  • 打赏
  • 举报
回复
逆波兰
myerel 2010-09-10
  • 打赏
  • 举报
回复
TC下编写。那只能是控制台程序了吧
来一个傻瓜点的

#include <stdio.h>
int main()
{
char op = '!';
int x = 0,y = 0;
while(op != 'x')
{
printf("输入算式后回车如:1+2(输入xxx退出): \n");
scanf("%d %c %d",&x,&op,&y);
if(op == '+')
{
printf("结果 = %d \n",x+y);
}
else if(op == '-')
{
printf("结果 = %d \n",x-y);
}
else if(op == '*')
{
printf("结果 = %d \n",x*y);
}
else if(op == '/')
{
printf("结果 = %d \n",x/y);
}
else if(op != '!')
{
return 0;
}
}
return 1;
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧