如何编译计算小软件
❶ 如何用c语言编写一个软件
如果要写记分牌 最好使用的工具 visual studio 2010(推荐)微软官网有 可以下载中文版。
如果只用c语言的话, 就要用win32 api编写。
❷ 一个计算器怎么用C语言编译
#include<stdio.h>
int main() {
double num1 = 0; //输入1
double num2 = 0; //输入2
char ch; //操作
double ret = 0; //结果 printf( "输入第一个数:" );
scanf( "%lf", &num1 );
printf( "输入第二个数:" );
scanf( "%lf", &num2 );
printf( "操作[+ - * /]:" );
getchar();
scanf( "%c", &ch ); switch( ch ) {
case '+':
ret = num1 + num2;
break;
case '-':
ret = num1 - num2;
break;
case '*':
ret = num1 * num2;
break;
case '/':
ret = num1 / num2;
break;
default:
break;
}
printf( "结果:%.2lf\n", ret ); return 0;
}
❸ 如何自己编一个小软件(c语言)
其实你最初写的hello
world就是一个小程序,小软件了。只不过作用不大罢了。
你想写一个小软件的话,首先你需要明确自己要做一个什么样的软件,实现什么样的功能,然后计划怎么样实现,分哪些部分哪些模块。小软件的话,可能不需要分模块。没有做过就会感觉困难,做几个就熟悉了
❹ 怎么制作计算公式小软件
用 VC++ 或者 C#做都很 容易的,只需要建立一个 winform程序,然后拖两个输入框,单选框和几个按钮,再加上几行代码就OKOK的了啦
❺ 独立免安装的、双击就运行的、exe格式的可执行小软件是怎么编写出来的
目测VB或者VC/VC++。不知有没有编程经历,或者说对计算机逻辑运算什么的有没有了解,如果之前有过的话应该不难,VB,VC都是面向对象性编程。
至于代码怎么写不是一两句能说清楚的,建议还是去自己查吧,这个是VB,当然VC也差不多,只不过VB用的是BASIC语言,VC用的是C还有VC++用的是C++而已。
❻ 求助:编译一个在固定的公式下进行计算的程序!!
下面的内容用记事本另存为a.vbs,双击运行.
缺少的公式你自己补全
'-------------
Dim a,b ,c,d,e
a=InputBox( "input a:")
b=InputBox( "input b:")
c=InputBox( "input c:")
d=InputBox( "input d:")
f=InputBox( "input f:")
WScript.echo "e=" & (A+B+C+2*D)/5
WScript.echo "x=" & E+(A-B)
❼ 怎么用C++编译一个简单的计算器
我借鉴了别人的某计算器,因为你没有说多简易...我就找了个差不多的...
/*
程序名称:表达式计算器
编译环境:Microsoft Visual C++ 6.0
作者:吉林大学 计算机科学与技术学院 2006 罗泗勇
时间:200801
*/
/*
说明:
采用树形结构处理表达式,按优先级运算结果,一个加,减,乘,除或数值为一个节点
优先级如下:
函数:4
括号:3
乘除:2
加减:1
*/
#include <windows.h>
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;
const char NUM[]={'0','1','2','3','4','5','6','7','8','9','.'};
const char OPERATION[]={'+','-','*','/'};
const double PI=3.14159265358979;
const double EE=2.71828182818281;
class Fun //处理系统数学函数的类
{
public:
Fun(string o,int t,double l=0.0,double r=0.0):op(o),type(t),lvalue(l),rvalue(r){}
static string FUN[];
double calc();
private:
int type; //666 0 1 sin90 2 3! 3 3C2
string op; //函数类型
double lvalue; //函数左边的值
double rvalue; //函数右边的值
static int FunNum;
};
int Fun::FunNum=8;
string Fun::FUN[]={"!","sin","cos","tan","log","ln","C","A","^"};
/*
函数说明:
1:log是以10为底的工程对数
2:ln 是以e为底的自然对数
3:C 计算组合数 输入规则 如计算 3取2的组合 输入表达式 3C2
4:A 计算排列数 输入规则 如计算 3取2的排列 输入表达式 3A2
5:! 计算阶乘
6:^ x的y次方 输入 x^y
*/
int factorial(int n) //阶乘函数
{
int i,s=1;
for(i=1;i<=n;i++)
s*=i;
return s;
}
int C(int a,int b)
{
return factorial(a)/(factorial(b)*factorial(a-b));
}
int A(int a,int b)
{
return factorial(a)/factorial(b);
}
double Fun::calc() //计算系统函数的值
{
if(type==0)
return lvalue;
else
{
if(op=="!")
return factorial(lvalue);
if(op=="sin")
return sin(rvalue/180*PI);
if(op=="cos")
return cos(rvalue/180*PI);
if(op=="tan")
return tan(rvalue/180*PI);
if(op=="log")
return log10(rvalue);
if(op=="ln")
return log10(rvalue)/log10(EE);
if(op=="C")
return C(lvalue,rvalue);
if(op=="A")
return A(lvalue,rvalue);
if(op=="^")
return pow(lvalue,rvalue);
else
{
string err="暂时没有函数"+op;
MessageBox(NULL,err.c_str(),"错误",MB_OK);
return 0;
}
}
}
struct Unit //双向链表保存运算单元
{
Unit(int p,char o,string c,double v,int t,Unit * pr=NULL,Unit * n=NULL)
:PRI(p),Operation(o),Code(c),value(v),Type(t),Pre(pr),Next(n){}
int PRI; //优先级
char Operation; //操作符
string Code; //原始代码
double value; //数据
int Type; //类型 操作符0 数据1 函数2
Unit * Pre; //构成双向链表
Unit * Next;
};
class Node //表达式树状结构的节点
{
public:
Node(char o,int p,int e=1,double v=0,Node * ph=NULL,Node * pl=NULL,Node * pr=NULL)
:Operation(o),PRI(p),Expression(e),value(v),Head(ph),Left(pl),Right(pr){}
Node * Head; //节点的根,左树枝,右树枝
Node * Left;
Node * Right;
double GetValue();
char GetOperation() const {return Operation;}
int GetPri() const {return PRI;}
int IsExp() const {return Expression;}
private:
char Operation; //操作符
int PRI; //优先级
int Expression; //记录该节点是否是表达式0 1
double value; //该节点的值
};
double Node::GetValue() //运算该节点的值
{
if(IsExp()) //该节点的值还未算出来
{
double lvalue,rvalue;
lvalue=Left->GetValue();
rvalue=Right->GetValue();
Expression=0;
char op=GetOperation();
switch(op)
{
case '+':
return lvalue+rvalue;
case '-':
return lvalue-rvalue;
case '*':
return lvalue*rvalue;
case '/':
return lvalue/rvalue;
default:
return 0;
}
}
else
return value;
}
bool Isnum(char c)
{
for(int i=0;i<sizeof(NUM);i++)
{
if(c==NUM[i])
return true;
}
return false;
}
bool Isoperation(char c)
{
for(int i=0;i<sizeof(OPERATION);i++)
{
if(c==OPERATION[i])
return true;
}
return false;
}
Unit * Analyse(string exp) //分析表达式并生成链表
{
int pri=0; //当前优先级
int stat=-1; //当前的读入状态 括号 0 数据 1 运算符 2
Unit * head=NULL,* p=NULL;
int i=0,explen;
explen=exp.size();
for(i=0;i<explen;i++)
{
char c=exp.at(i);
if(c=='(')
{
pri+=3;
stat=0;
}
else if(c==')')
{
pri-=3;
stat=0;
}
else if(Isoperation(c)) //操作符不会出现在表达式开头
{
Unit * temp=p;
int add_pri; //自身增加的优先级
if(c=='+' || c=='-')
add_pri=1;
else
add_pri=2;
p->Next=new Unit(pri+add_pri,c," ",0,0);
p=p->Next;
p->Pre=temp;
}
else //其他的当做函数处理
{
string function="";
while(i<explen && (c=exp.at(i),! Isoperation(c)) && c!=')')
{
function+=c;
i++;
}
i--;
if(head==NULL)
{
p=new Unit(pri,' ',function,0,2);
head=p;
}
else
{
Unit * temp=p;
p->Next=new Unit(pri,' ',function,0,2);
p=p->Next;
p->Pre=temp;
}
}
}
return head;
}
Unit * Calc(Unit * head) //计算双向链表基本单元的值
{
Unit * p=head;
while(p!=NULL)
{
if(p->Type!=0) //非操作符
{
string temp=p->Code;
string op;
double lvalue=0,rvalue=0;
int l_point=0,r_point=0;
int i=0,type=0;
char ch;
while(i<temp.size() && (ch=temp.at(i),Isnum(ch)))
{
if(ch=='.')
{
l_point++;
i++;
continue;
}
if(! l_point)
lvalue*=10;
lvalue+=(ch-'0')*pow(10,-l_point);
i++;
if(l_point)
l_point++;
}
while(i<temp.size() && (ch=temp.at(i),! Isnum(ch)))
{
op+=ch;
type=1;
i++;
}
while(i<temp.size() && (ch=temp.at(i),Isnum(ch)))
{
if(ch=='.')
{
r_point++;
i++;
continue;
}
if(! r_point)
rvalue*=10;
rvalue+=(ch-'0')*pow(10,-r_point);
i++;
if(r_point)
r_point++;
}
Fun * f=new Fun(op,type,lvalue,rvalue);
p->value=f->calc();
}
p=p->Next;
}
return head;
}
Node * Tree(Unit * head) //生成表达式树
{
Node * root=NULL,* proot=NULL,* pbranch=NULL;
Unit * p=head;
int now_pri; //当前优先级
bool hadop=false;
while(p!=NULL)
{
if(p->Type==0) //如果是一个操作符
{
hadop=true;
if(root==NULL)
{
proot=new Node(p->Operation,p->PRI,1);
root=proot;
pbranch=root;
now_pri=p->PRI;
proot->Left=new Node(' ',0,0,p->Pre->value);
proot->Right=new Node(' ',0,0,p->Next->value);
}
else
{
if(p->PRI<=now_pri) //优先级低于当前优先级,树根方向 //最初写的 if(p->PRI<now_pri),9/3/3=9,错的
{
proot=new Node(p->Operation,p->PRI,1); //新的树根
proot->Left=root; //根的变换
proot->Right=new Node(' ',0,0,p->Next->value);
root=proot;
pbranch=proot; //右树枝的变换
//pbranch->Right=new Node(' ',0,0,p->Pre->value); //树枝右边取值
}
else
{
Node * temp;
temp=new Node(p->Operation,p->PRI,1);
pbranch->Right=temp;
temp->Head=pbranch;
pbranch=pbranch->Right;
pbranch->Left=new Node(' ',0,0,p->Pre->value);
pbranch->Right=new Node(' ',0,0,p->Next->value);
}
now_pri=p->PRI;
}
}
p=p->Next;
}
if(! hadop)
root=new Node(' ',0,0,head->value);
return root;
}
int main()
{
string exp;
//ifstream infile("test.txt",ios::in);
while(! getline(cin,exp).eof())
{
if(exp=="")
continue;
Unit * h=Analyse(exp);
h=Calc(h);
Node * root=Tree(h);
cout<<exp<<"="<<root->GetValue()<<endl;
}
return 0;
}
❽ 请问:如何制作一个简单的计算软件!!
C就可以~这种编程不是很难。
首先,程序本身包含了带+,-,*,/等运算。
只要对输入的文字进行扫描(以C语言为例,scanf),读出所要进行运算的符号,再进行计算就可以了~
那建议用JAVA的图形计算功能编辑~你要做的是实际的计算软件是吧?
❾ 用C语言编译一个简单计算器的程序,要求其中有括号和幂函数
既然大家都没发程序,I am coming.
说明:由于幂的运算应该比括号低比乘除要高,所以为避免混淆用幂运算时用括号括起来,比如2+9/3^2-5表示2+(9/3)^2-5,要是想要9除以3^2,这样输入:2+9/(3^2)-5,以免引起歧义。
程序功能强大代码简练。可以对任意数值类型计算,这里全部按double型处理,程序还可以使用大括号{}中括号[]小括号()三种括号,当然优先级是小括号>中括号>大括号>运算符。
要是只想结果取整,将所有double类型改为int即可,不过不主张这样做,既然是计算器,当然要精确计算。
一个完整的c程序如下,程序在win-tc和Dev-c++下都调试通过。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
char s[201];/*全局变量s[]与i分别表示算术表达式字符串以及其当前位置指针变量*/
int i=0;
double proc1(char ch);
void proc2(double *a,char *c);
void str_read(double *a,char *c) /*读取下一个操作数*/
{ int j=0;
char s1[30];
while ((s[i]!='\0')&&(s[i]!='+')&&(s[i]!='-')&&(s[i]!='(')&&(s[i]!=')')
&&(s[i]!='=')&&(s[i]!='^')&&(s[i]!='*')&&(s[i]!='/')&&(s[i]!='[')&&(s[i]!=']')
&&(s[i]!='{')&&(s[i]!='}')) /*操作数结束标志*/
s1[j++]=s[i++];
s1[j]='\0';
*a=atof(s1);
*c=s[i++];
}
void input_str() /*表达式接收模块*/
{ int j,k,t=0;
char c,s1[80];
printf("\n请输入任一算术表达式:\n");
while (!t)
{ gets(s);
j=k=0; t=1;
while ((s[j]!='=')&&(s[j]!='\0')&&(t)) /*判断括号配对*/
{if ((s[j]=='(')||(s[j]=='[')||(s[j]=='{'))
switch(s[j])
{ case '(':s1[k++]=')';break;
case '[':s1[k++]=']';break;
case '{':s1[k++]='}';
}
else if ((s[j]==')')||(s[j]==']')||(s[j]=='}'))
if (s1[--k]!=s[j])
{ printf("输入出错!请重新输入(直接回车退出):\n");
t=0;
}
j++;
}
if ((k!=0)&&(t))
{printf("输入出错!请重新输入(直接回车退出):\n");
t=0;
}
}
}
void proc2(double *a,char *c)
/*算术运算符之后只有两种情况:要么是各种左括号,要么是操作数*/
{ char ch;
if ((s[i]=='(')||(s[i]=='[')||(s[i]=='{'))
{ switch(s[i])
{ case '(':ch=')';break;
case '[':ch=']';break;
case '{':ch='}';
}
++i;
*a=proc1(ch);
/*计算从当前左括号开始到与其相对应的右括号结束这段表达式的值*/
*c=s[i++]; /*跳过右括号*/
}
else str_read(a,c); /*读取一个操作数*/
}
double proc1(char ch)
/*该过程对算术表达式s从当前位置s[i]开始到表达式结束或s[i]==ch这部分进行求值*/
{ double a1=0,a2,a=0;
char c1='+',c='+',c2='+';
/*给表达式前面加上"0+"(第一操作数与第一操作符)*/
while((c!='=')&&(c!='\0')&&(c!=ch))
{ proc2(&a,&c); /*读取第二操作数与第二操作符.*/
while (c=='^' || c=='*' || c=='/')
{ proc2(&a2,&c2); /*读取第三操作数与第三操作符.*/
switch (c) /*对第二操作符进行运算*/
{ case '*':a=a*a2; break;
case '/':a=a/a2; break;
case '^':a=pow(a,a2);
}
c=c2; /*把第三操作符赋给第二操作符变量*/
}
switch (c1) /*对第一操作符进行运算*/
{ case '+':a1=a1+a;break;
case '-':a1=a1-a;
}
c1=c; /*把第二操作符赋给第一操作符变量*/
}
return(a1); /*返回这部分表达式的值*/
}
int main(void)
{ system("cls");
input_str();
if (s[0]=='\0') return 0;
printf("该表达式的值是: ");
printf("%-8f\n",proc1('\0'));
system("pause");
return 0;
}
❿ 如何使一个数据计算小软件
简易计算器呗,用MFC或者C++builder都可以做出来。比如,需要做两个数字的计算,数字输入框为edit1和edit2,读取这两个输入框中的数据,使用button按钮做计算,设置N个button按钮,创建单击时的函数,单击时让其做+、-、*、/以及开方、乘方等操作即可。