1.mfc������Դ��
2.VS2012怎么利用MFC制作简单的计c计计算器?
mfc������Դ��
算法已经这么明确了
程序还是要自己写啊
基于一种算法,语言实现相差不是算器算器很大
自己试试把
计算器程序~~~
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
#define stacksize
//---字符栈的基本操作----------------------------------
typedef char datatype1;
typedef struct //定义字符栈,用数组表示
{
datatype1 data[stacksize];
int top;
} seqstack1;
void initstack1(seqstack1 *s)//置空栈
{
s->top = -1;
}
int stackempty1(seqstack1 *s)//判栈空
{
return s->top == -1;
}
int stackfull1(seqstack1 *s)//判栈满
{
return s->top == stacksize-1;
}
void push1(seqstack1 *s,源码 char x)//进栈
{
if(stackfull1(s)) return ;
++s->top;
s->data[s->top] =x;
}
char pop1(seqstack1 *s)//退栈
{
if(stackempty1(s)) return NULL;
s->top--;
return s->data[s->top+1];
}
char stacktop1(seqstack1 *s)//访问栈顶元素
{
if(stackempty1(s)) return NULL;
return s->data[s->top];
}
//---整数栈的基本操作----------------------
typedef double datatype2;
typedef struct//定义数栈,用数组表示
{
datatype2 data[stacksize];
int top;
}seqstack2;
void initstack2(seqstack2 *s)//置空栈
{
s->top = -1;
}
int stackempty2(seqstack2 *s)//判栈空
{
return s->top == -1;
}
int stackfull2(seqstack2 *s)//判栈满
{
return s->top == stacksize-1;
}
void push2(seqstack2 *s,代码 double x)//进栈
{
if(stackfull2(s)) return ;
++s->top;
s->data[s->top] =x;
}
double pop2(seqstack2 *s)//退栈
{
if(stackempty2(s)) return NULL;
s->top--;
return s->data[s->top+1];
}
double stacktop2(seqstack2 *s)//访问栈顶元素
{
if(stackempty2(s)) return NULL;
return s->data[s->top];
}
char proceed(char a,char b)//判断运算符的优先级,a为栈内运算符,计c计b为栈外运算符
{
int i,算器算器商云客源码j;
char c1[6]={ '#','(','+','*','^',')'},c2[6]={ '#',')','+','*','^','('};
if(a=='-')a='+';
if(b=='-')b='+';
if(a=='/')a='*';
if(b=='/')b='*';
for(i=0;i<6;i++)if(c1[i]==a)break;
for(j=0;j<6;j++)if(c2[j]==b)break;
if((i==0&&j==1)||(i==1&&j==0)||(i==5&&j==5))
return 'x';
else if(i==j&&(i==0||i==1))
return '=';
else if(i<j)return '<';
else return '>';
}
double transform(char *s,int *i)//字符型数据转化为双精度型数据
{
int j=0,n;
double a[],sum1=0,sum2=0;
for(;isdigit(s[*i]);(*i)++)
a[j++]=s[*i]-'0';
n=j;
for(j=0;j<n;j++)
sum1=(sum1+a[j])*;
sum1=sum1/;
if(s[(*i)]=='.')
{
*i=*i+1;
for(j=0;isdigit(s[*i]);(*i)++)
a[j++]=s[*i]-'0';
for(j=j-1;j>=0;j--)
sum2=(sum2+a[j])/;
}
return sum1+sum2;
}
double operate(double a,char r,double b)//运算函数
{
switch(r)
{
case'+':return a+b;break;
case'-':return a-b;break;
case'*':return a*b;break;
case'/':return a/b;break;
case'^':return pow(a,b);break;
default:printf("error");
};
}
double evalexpres(char *s)//求表达式值的函数
{
char ch,r;
int i=0;
double a,b,num;
seqstack1 *stack1;
seqstack2 *stack2;
stack1=(seqstack1*)malloc(sizeof(seqstack1));//创建字符栈
stack2=(seqstack2*)malloc(sizeof(seqstack2));//创建数栈
initstack1(stack1);
push1(stack1,'#');
initstack2(stack2);
ch=s[i];
while(ch!='#'||stacktop1(stack1)!='#')//扫描表达式
{
if(isdigit(ch))//如果是‘0’~‘9’,转换为整形,进数栈
{
num=transform(s,源码&i);
push2(stack2,num);
ch=s[i];
}
else
{
switch (proceed(stacktop1(stack1),ch))
{
case'<'://栈内符号优先级低,栈外符号进栈
push1(stack1,代码ch);
ch=s[++i];
break;
case'='://脱括号并接收下一个字符。
pop1(stack1);
ch=s[++i];
break;
case'>'://退栈并将运算结果入数栈。计c计
r=pop1(stack1);
b=pop2(stack2);
a=pop2(stack2);
printf("计算步骤:\n%.3f%c%.3f=%.3f\n",算器算器a,r,b,operate(a,r,b));//输出运算步骤
push2(stack2,operate(a,r,b));
break;
case'x': printf("原表达式%s有误,请检查:\n",s);break;
}//switch
}//else
}//while
return stacktop2(stack2);
}
main()
{
double num;
char s[stacksize];
printf("\t\t\t| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|\n");
printf("\t\t\t|^_^这是我的计算器^_^|\n");
printf("\t\t\t|____________________|\n");
printf("\t\t支持加,减,源码乘,代码除,计c计指数及括号运算.\n");
printf("\t\t数据可以为双精度类型的算器算器任意数\n");
printf("\t\t请输入表达式,并以#结束:\n");
scanf("%s",源码s);
while(s[strlen(s)-1]!='#')
{
printf("输入有误!请重新输入:\n");
scanf("%s",s);
}
num=evalexpres(s);
printf("%s=%.3f\n",s,num);
getchar();
}
面积的就太简单了
只写核心
#include<stdio.h>
#include<math.h>
main()
{
float l,s;
float a,b,c;
scanf("%f,%f,%f",&a,&b,&c);
l=(a+b+c)/2;
s=sqrt(l*(l-a)*(l-b)*(l-c));
printf("%.3f",s);
}
VS怎么利用MFC制作简单的计算器?
用MFC来制作一个简单的计算器,来加深对MFC学习的人员统计小程序源码理解,这个计算器是建立在对话框的基础上,下面来简单介绍下如何制作属于你自己的计算器。1、首先,点击VS,启动VS软件,然后建立如下图所示的应用程序,在图的源码中的顶部图片下面输入项目名
2、建立基于对话框的标准程序,如下图所示,其余设置采用系统设置,点击完成
3、如下图,软件会生成下面的对话框,还有相应的库,代码,溯源码燕窝饮品分销资源文件等
4、对上面的对话框进行编辑,如下图中所示,最后编辑的样子如下,其中1,5,6是Edit 控件,2,源码里面有大括号7是静态控件,3是buttion,4是取消按钮改了个名字,将各个控件按下图排好,并改好名字,其余部分采用软件默认
5、对1,5,7控件添加变量,对控件右击,选择如下
6、如下图变量添加向导,1选择Value,2选择Double (方便计算小数)3,是变量名,我们选择a,相同的方式,对上图中的1,5,7分别添加变量,分别为工a,b,sum
7、添加完后在对话框上双击计算按钮,就会生成相应的消息映射,进入如下代码中,见下图
8、在这个函数中添加下面代码,UpdataDate()函数中参数true表示从控件变量中获取数值,false相反sum=a+b,就是我们先在控件中添加的三个变量,此处所做的计算器只是用来做个加法
9、添加完上述代码后,编译成功如下所示
、ctrl+f5运行如下图
、输入数值进行加法计算,你可以进行其它的相关扩展,比如减法,乘法等,都是相同的方法