當前位置:首頁 » 編程軟體 » 手機上c語言編譯器寫計算器

手機上c語言編譯器寫計算器

發布時間: 2022-07-09 04:50:25

1. 自己用c語言寫的計算器程序,怎麼做可以安裝在安卓手機上,就像一個軟體一樣使用

你要裝個安卓開發平台,然後用java語言寫一個計算器軟體

2. 用c語言編寫計算器

#include <stdio.h>
struct s_node
{
int data;
struct s_node *next;
};
typedef struct s_node s_list;
typedef s_list *link;
link operator=NULL;
link operand=NULL;

link push(link stack,int value)
{
link newnode;

newnode=(link) malloc(sizeof(s_list));
if(!newnode)
{
printf("\nMemory allocation failure!!!");
return NULL;
}
newnode->data=value;
newnode->next=stack;
stack=newnode;
return stack;
}

link pop(link stack,int *value)
{
link top;
if(stack !=NULL)
{
top=stack;
stack=stack->next;
*value=top->data;
free(top);
return stack;
}
else
*value=-1;
}

int empty(link stack)
{
if(stack==NULL)
return 1;
else
return 0;

}

int is_operator(char operator)
{
switch (operator)
{
case '+': case '-': case '*': case '/': return 1;
default:return 0;
}
}

int priority(char operator)
{
switch(operator)
{
case '+': case '-' : return 1;
case '*': case '/' : return 2;
default: return 0;
}
}

int two_result(int operator,int operand1,int operand2)
{
switch(operator)
{
case '+':return(operand2+operand1);
case '-':return(operand2-operand1);
case '*':return(operand2*operand1);
case '/':return(operand2/operand1);
}
}

void main()
{
char expression[50];
int position=0;
int op=0;
int operand1=0;
int operand2=0;
int evaluate=0;

printf("\nPlease input the inorder expression:");
gets(expression);

while(expression[position]!='\0'&&expression[position]!='\n')
{
if(is_operator(expression[position]))
{
if(!empty(operator))
while(priority(expression[position])<= priority(operator->data)&&
!empty(operator))
{
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);
operator=pop(operator,&op);
operand=push(operand,two_result(op,operand1,operand2));
}
operator=push(operator,expression[position]);
}
else
operand=push(operand,expression[position]-48);
position++;
}
while(!empty(operator))
{
operator=pop(operator,&op);
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);

operand=push(operand,two_result(op,operand1,operand2));
}
operand=pop(operand,&evaluate);
printf("The expression [%s] result is '%d' ",expression,evaluate);
getch();
}

3. 用C語言怎麼寫個計算器

一、用戶界面是用圖形窗口還是命令行窗口。
如果是命令行窗口它的數據輸入輸出比較簡單。
如果是圖形窗口則要涉及,圖形窗口相同的操作了。這個部分如果你不會,那你需要專門學習一樣。

二、支持哪些計算功能。
除了加減乘除外,是否還支持其他高級的計算功能?
加減乘除的計算精度。
32位系統中,如果計算結果為不大於32位二進制的數。(64位系統則為不大於64位數)你可以直接使用C語言的相應的加減乘除表達式完成。
如果是支持超大數的運算,那就需要採取特殊手段了。

比如32位系統中,計算的數超過32位。比如兩個128位數相加。
需要將128位拆分成4個32位。將每個32位作為整體。在依照數學的多位數加進行計算。
A1 B1 C1 D1
A2 B2 C2 D2
--------------

D1與D2相加(需要檢測是否有進位,也就是計算結構是否有溢出)
C1與C2相加,同樣要檢測進位,並且要加上D1與D2結果的進位。
B1與B2相加,同樣要檢測進位,並且要加上C1與C2結果的進位。
B1與B2相加,同上類推。

在實際程序時,可以將用戶界面與加減乘除程序分離。即用戶界面的代碼要與計算程序的代碼分在不同的函數中。
又用戶界面代碼調用計算函數。計算函數將結果返回給用戶界面代碼。

以命令行界面為例,
用戶界面代碼,只是等待用戶輸入,將相應用戶信息轉換成合適的格式,
然後調用相應計算函數。
計算函數做完計算以後,返回相應數字。
用戶界面代碼,再將返回的數字轉換成適當的格式,顯示在窗口上。

4. 怎樣用c語言編一個簡單的計算器

//簡單計算器,含加減乘除、乘方運算。
#include
#include
#include // malloc()等
#include // INT_MAX等
#include // EOF(=^Z或F6),NULL
#include // atoi()
#include // eof()
#include // floor(),ceil(),abs()
#include // exit()
#include // cout,cin
// 函數結果狀態代碼
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
// #define OVERFLOW -2 因為在math.h中已定義OVERFLOW的值為3,故去掉此行
typedef int Status; // Status是函數的類型,其值是函數結果狀態代碼,如OK等
typedef int Boolean; // Boolean是布爾類型,其值是TRUE或FALSE

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

//***************************************************************************
//棧的儲存結構

typedef struct{
//運算符棧
char *base;
char *top;
int stacksize;
}SqStack1;

typedef struct{
//運算數棧
float *base;
float *top;
int stacksize;
}SqStack2;

//***************************************************************************
//以下是運算符棧的基本操作函數

Status InitStack(SqStack1 &S){
//初始化一個棧
S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//InitStack

Status DestroyStack(SqStack1 &S){
//銷毀棧S
free(S.top);
free(S.base);
return OK;
}//DestroyStack

char GetTop(SqStack1 S){
//若棧不空,則返回S的棧頂元素,並返回OK;否則返回ERROR
if(S.top==S.base)return ERROR;
return *(S.top-1);
}//Gettop

Status Push(SqStack1 &S,char e){
//插入元素e為新的棧頂元素
if(S.top-S.base>=S.stacksize){
//棧滿,追加儲存空間
S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//Push

Status Pop(SqStack1 &S,char &e){
//若棧不空,則刪除S的棧頂元素,用e返回其值;並返回OK;否則返回ERROR
if(S.top==S.base)return ERROR;
e=*(--S.top);
return OK;
}//Pop

//***************************************************************************
//以下是運算數棧的基本操作函數

Status InitStack(SqStack2 &S){
//初始化一個棧
S.base=(float *)malloc(STACK_INIT_SIZE*sizeof(float));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//InitStack

Status DestroyStack(SqStack2 &S){
//銷毀棧S
free(S.top);
free(S.base);
return OK;
}//DestroyStack

float GetTop(SqStack2 S){
//若棧不空,則返回S的棧頂元素,並返回OK;否則返回ERROR
if(S.top==S.base)return ERROR;
return *(S.top-1);
}//Gettop

Status Push(SqStack2 &S,float e){
//插入元素e為新的棧頂元素
if(S.top-S.base>=S.stacksize){
//棧滿,追加儲存空間
S.base=(float *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(float));
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//Push

Status Pop(SqStack2 &S,float &e){
//若棧不空,則刪除S的棧頂元素,用e返回其值;並返回OK;否則返回ERROR
if(S.top==S.base)return ERROR;
e=*(--S.top);
return OK;
}//Pop

//***************************************************************************
//以下是相關的運算符判斷函數

char Precede(char A,char B){
//比較運算符A, B的優先關系,A,B的范圍僅限於'+','-','*','/','^','(',')','='
//返回'>','<','='
switch(A){
case '+':switch(B){
case '+':return '>';
case '-':return '>';
case '*':return '<';
case '/':return '<';
case '^':return '<';
case '(':return '<';
case ')':return '>';
case '=':return '>';
default:printf("表達式錯誤!\n");exit(0);
}
case '-':switch(B){
case '+':return '>';
case '-':return '>';
case '*':return '<';
case '/':return '<';
case '^':return '<';
case '(':return '<';
case ')':return '>';
case '=':return '>';
default:printf("表達式錯誤!\n");exit(0);
}
case '*':switch(B){
case '+':return '>';
case '-':return '>';
case '*':return '>';
case '/':return '>';
case '^':return '<';
case '(':return '<';
case ')':return '>';
case '=':return '>';
default:printf("表達式錯誤!\n");exit(0);
}
case '/':switch(B){
case '+':return '>';
case '-':return '>';
case '*':return '>';
case '/':return '>';
case '^':return '<';
case '(':return '<';
case ')':return '>';
case '=':return '>';
default:printf("表達式錯誤!\n");exit(0);
}
case '^':switch(B){
case '+':return '>';
case '-':return '>';
case '*':return '>';
case '/':return '>';
case '^':return '>';
case '(':return '<';
case ')':return '>';
case '=':return '>';
default:printf("表達式錯誤!\n");exit(0);
}
case '(':switch(B){
case '+':return '<';
case '-':return '<';
case '*':return '<';
case '/':return '<';
case '^':return '<';
case '(':return '<';
case ')':return '=';
case '=':printf("表達式錯誤!\n");exit(0);
default:printf("表達式錯誤!\n");exit(0);
}
case ')':switch(B){
case '+':return '>';
case '-':return '>';
case '*':return '>';
case '/':return '>';
case '^':return '>';
case '(':printf("表達式錯誤!\n");exit(0);
case ')':return '>';
case '=':return '>';
default:printf("表達式錯誤!\n");exit(0);
}
case '=':switch(B){
case '+':return '<';
case '-':return '<';
case '*':return '<';
case '/':return '<';
case '^':return '<';
case '(':return '<';
case ')':printf("表達式錯誤!\n");exit(0);
case '=':return '=';
default:printf("表達式錯誤!\n");exit(0);
}
default:printf("表達式錯誤!\n");exit(0);
}
}//Precede

Status InOP(char c){
//判斷c是否是運算符,是則返回TRUE,否則返回FALSE
switch(c){
case '+':return TRUE;
case '-':return TRUE;
case '*':return TRUE;
case '/':return TRUE;
case '^':return TRUE;
case '(':return TRUE;
case ')':return TRUE;
case '=':return TRUE;
default:return FALSE;
}
}//InOP

//***************************************************************************

float Operate(float a,char theta,float b){
switch(theta){
case '+':return a+b;
case '-':return a-b;
case '*':return a*b;
case '/':
if(b==0){
printf("分母不能為0!\n");
exit(0);
}
else return a/b;
case '^':
if(a==0&&b<=0){
printf("0的指數必須大於0!\n");
exit(0);
}
else return (float)pow(a,b);
default:printf("表達式錯誤!\n");exit(0);
}
}//Operate

Status EvaluateExpression(){
//算術表達式求值
char c,x,theta,prec;
//c是每次讀取的字元,x是存放脫括弧後的多餘的括弧,theta是運算符,prec是c的前一個字元
float a,b,result;//a、b是每次從運算數棧中取出的要進行運算的數,result存放最終結果
float cc,flag,ii,minus=1;
//cc存放由字元串轉化而來的浮點數,flag用於標記是否已讀取過小數點,
//ii存放小數部分需要縮小的倍數,minus用於記錄該數前是否有負號
SqStack1 OPTR;
SqStack2 OPND;
InitStack(OPTR);InitStack(OPND);
Push(OPTR,'=');
prec='=';scanf("%c",&c);
while(c!='='||GetTop(OPTR)!='='){
cc=0;flag=0;ii=10;
if(c=='-'&&(prec=='='||prec=='(')){minus=-1;prec=c;scanf("%c",&c);}
//若某「-」前面是「=」(第一個符號就是「-」)或「(」,則此為負號,不是減號
else if(!InOP(c)){
while(!InOP(c)){
if(c>=48&&c<=57){
if(flag==0)cc=cc*10+c-48;//小數點之前
else if(flag==1){cc=cc+(c-48)/ii;ii*=10;}//小數點之後
else {printf("小數點錯誤!\n");exit(0);}//小數點有錯
}
else if(c=='.')flag++;//讀到小數點
else {printf("表達式錯誤!\n");exit(0);}
prec=c;scanf("%c",&c);
}
cc*=minus;minus=1;
Push(OPND,cc);
}//不是運算符則進OPND棧
else
switch(Precede(GetTop(OPTR),c)){
case '<':Push(OPTR,c);prec=c;scanf("%c",&c);break;//棧頂元素優先順序低
case '=':Pop(OPTR,x);prec=c;scanf("%c",&c);break;//脫括弧並接收下一字元
case '>'://退棧並將運算結果入棧
Pop(OPTR,theta);
Pop(OPND,b);Pop(OPND,a);
Push(OPND,Operate(a,theta,b));
break;
}
}
result=GetTop(OPND);
printf("%f\n",result);
//DestroyStack(OPTR);
//DestroyStack(OPND);
return OK;
}//EvaluateExpression

void main(){
printf(" **********************\n");
printf(" * 歡迎使用計算器! *\n");
printf(" **********************\n");
printf("請輸入表達式,以「=」結束:\n");
printf("(支持實數間的加(+)、減(-)、乘(*)、除(/)、乘方(^)、單目減(-)運算)\n");
EvaluateExpression();
exit (0);
}

5. 用C語言編寫簡易計算器程序

#include<stdio.h>

#include<math.h>

int main()

{

char ch,op;

double a,b,c;

printf("請按s鍵開始計算,按q退出程序: ");

while(1)

{

while(scanf("%c",&ch),ch!='q')

{

if(ch!='s')

break;

scanf("%lf%c%lf",&a,&op,&b);

switch(op)

{

case '+' :

c=a+b;

break;

case '-' :

c=a-b;

break;

case '*' :

c=a*b;

break;

case '/' :

c=a/b;

break;

}

printf("%.4f ",c);

printf("按s繼續計算 ");

}

if(ch=='q')

break;

}

return 0;

}

6. 手機能否裝C語言編譯

可以裝,不過需要安卓手機。

安裝步驟如下:

1、我們打開谷歌應用商店。在搜索框里輸入mobile c查找應用程序。下載並安裝好

6、可以看到這里正確的輸出了Hello World字元串。

7. c語言編寫計算器程序

C語言編寫計算器

  • 我們可以用printf和scanf函數輸出結果和獲取用戶的輸入。需要<stdio.h>頭文件。scanf函數在讀取數據的時候不需要再一行上輸入每個數據,只要數據和數據之間留出空白就可以了。先聲明兩個變數number1和number2,operation變數用來存儲運算符。用scanf函數獲取這兩個數字和運算符。分別用%lf %c %lf

8. 如何用C語言編寫一個科學計算器

用棧 就可以辦到了。。。這個很詳細的, lz 隨便輸入一個表達式,中間的計算過程全部輸出了,lz試兩個 就知道怎麼回事了。 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 4000;
typedef struct
{
char data[10];
int top;//頭地址

int base;//基地址

int length;//長度

}Stack;

void init(Stack *st)//初始化棧

{
st->base=0;
st->top=0;
st->length=0;
}

int isEmpty(Stack *st)
{
int n=0,top,base;
top =st->top;
base =st->base;
if(top==base)
{
return 1;
}
return n;
}

int isFull(Stack *st)
{
int n=0,top,base;
top =st->top;
if(top>=4000)
{
return 1;
}
return n;
}

char getTop(Stack *st)// 返回top值,不改變棧的結構

{
char n;
if(isEmpty(st))
{
printf("棧為空\n");
return 0;
}
int positon= st->top-1;
n= st->data[positon];//取出數據;

return n;
}

char pop(Stack *st)// 出棧,返回

{
char n;
if(isEmpty(st))
{
printf("棧為空\n");
return 0;
}
int positon= st->top-1;
n= st->data[positon];//取出數據;

st->top--;
st->length--;
st->data[positon]='\0';//消除數據

return n;
}

void push(char n,Stack *st)//入棧

{
int positon ;
if(isFull(st))
{
printf("棧滿\n");

}
else
{
positon= st->top;//獲取位置

st->data[positon]=n;//存入數據

st->top++;//改變位置

}

}

void show(Stack *m1)//輸出棧中的數據

{
int top,base;
top=m1->top;
base=m1->base;
while(top>base)
{
printf("%c,",m1->data[--top]);
}
printf("\n");
}

int isOperate(char temp)//是否是操作符

{
if(temp=='+'||temp=='-'||temp=='*'||temp=='/'||temp=='('||temp==')'||temp=='#')
{
return 1;
}
return 0;
}

int isValue(char temp)//是否是數值

{
if(temp>='0'&&temp<='9')//

{
return 1;
}
else
{
return 0;
}
}

int isAvail(char temp)//是否有效字元

{
if(isOperate(temp)||isValue(temp))//如果temp既不是操作符和數值的話,則它是非法的

{
return 1;
}
return 0;
}

int detect(char temp)//搜索矩陣位置

{
int i=0;
char oper[7]={'+','-','*','/','(',')','#'};
for(i=0;i<7;i++)
{
if(temp==oper[i])
{
return i;
}
}
}

char Priority(char temp,char optr)//判斷優先順序

{
/**//*
+ - * / ( ) #
1 2 3 4 5 6 7
+ 1 < < < < > > >
- 2 < < < < > > >
* 3 > > < < > > >
/ 4 > > < < > > >
( 5 > > > > > = 0
) 6 < < < < = 0 >
# 7 < < < < > 0 =
*/
int row ,col;
char priority[7][7]={/**//* + - * / ( ) # */
{'<','<','<','<','>','>','>'},

{'<','<','<','<','>','>','>'},

{'>','>','<','<','>','>','>'},

{'>','>','<','<','>','>','>'},

{'>','>','>','>','>','=','>'},

{'<','<','<','<','=','0','>'},

{'<','<','<','<','>','<','='},
};

row = detect(temp);//找出對應的矩陣下標;

col = detect(optr);
// printf("%d,%d",row,col);

//優先順序存儲在一個7x7的矩陣中,對應關繫上圖;

return priority[row][col];

}
char evaluate(int a,int b,char oper)
{
switch(oper)
{
case '+': return a+b+'0';
case '-': return a-b+'0';
case '*': return a*b+'0';
case '/': return a/b+'0';
default : return 0+'0';
}
}
int calculateExpress(char *express)//計算表達式

{
int result=0;
int a,b;
// char oper,result;

Stack OPTR,OPND;//OPTR存儲操作符,OPND操作數值

init(&OPTR);
init(&OPND);
push('#',&OPTR);//默認第一個位'#'

////////////////////-演算法-////////////////////////////

while(*express!='\0')
{
char temp;
temp= *(express);
printf("---------------------------------\n");
printf("當前的符號為%c\n",temp);
if(isAvail(temp))//是否是有效字元

{
if(isOperate(temp) )//輸入的是操作符

{
char oper,result;
char optr = getTop(&OPTR);//棧中top位的操作符

printf("棧頂操作符位:%c\n",optr);
char prior = Priority(temp,optr);//判斷優先順序

switch(prior)
{
case '>':
push(temp,&OPTR);
printf("將符號位%c入棧\n",temp);
express++;
break;
case '<':
//int a,b;

//char oper,result;

a=pop(&OPND)-'0';//存在棧中的都是char字元

b=pop(&OPND)-'0';
oper=pop(&OPTR);

result=evaluate(b,a,oper);//出棧一個操作符,計算結果

//printf("%d",result-'0');

push(result,&OPND);//結果入OPND

printf("%d%c%d結果為:%d\n",b,oper,a,result-'0');
break;

case '=':
//消除括弧

pop(&OPTR);
printf("消除括弧\n");
express++;
break;

}

}
if(isValue(temp))//輸入的是數值

{
push(temp,&OPND);//將數值位入棧;

express++;
printf("將數值%c壓入棧\n",temp);
//show(&OPND);

}
}
else //表達式中有非法字元

{
printf("表達式中有非法字元\n");
exit(-1);//退出程序

}

}
// show(&OPND);

// show(&OPTR);

return getTop(&OPND)-'0';
}

void inputExpress(char *express)//輸入表達式

{
int length=0;
printf("請輸入一個表達式:");
scanf("%s",express);
int len =strlen(express);
express[len]='#';//表達式最後一位默認為'#';

express[len+1]='\0';

}

void output(char *express,int result)//輸出表達式

{
int i=0;
printf("----------------------------------------\n表達式:");
while(express[i]!='#')
{
printf("%c",express[i]);
i++;
}
printf("=%d\n",result);

}

int main()
{

char express[100];//表達式

int result =0;

inputExpress(express);//輸入表達式

result = calculateExpress(express);//計算表達式;

output(express,result); //輸出表達式

//、、、、、、、、、、、、、測試優先順序。

/**//*
char m='7' ;
m=Priority('+','*');
printf("優先順序為%c",m);

int m=evaluate(5,6,'m');
printf("%d",m);
*/
return 0;
}

9. 怎麼用c語言在手機上做編程

可以使用c4droid軟體進行編程。

解決這個問題的方法如下:

1、首先在手機瀏覽器中搜索c4droid軟體。

10. 有沒有能在手機上寫c語言的編譯器

c4droid是款Android設備上的C/C++程序編譯器
,默認以tcc(tiny c
compiler)為編譯器,可以選擇安裝gcc插件(20mb,只有root用戶可以使用),選用gcc後,可以用sdl(簡單直控媒體層庫,需安裝sdl
plugin for c4droid)和qt(nokia官方開發庫,需安裝sdl plugin for
c4droid)。也可以開發native android app(需安裝sdl plugin for c4droid),就像google
ndk一樣。軟體支持代碼高亮,編譯時間隨cpu主頻而定,主頻越高編譯越快。gcc插件版本4.7.2提供了示列程序,包含sdl,android native,qt和命令行測試程序源碼

最新版為4.03(2013年7月7日更新)。
貼吧已發布5.98版本,英文版及漢化版本,默認使用g++編譯器,sdl及gcc插件也有相應更新,還可以拓展sdl2插件

熱點內容
正在限制訪問 發布:2025-02-09 03:47:17 瀏覽:901
架設資料庫 發布:2025-02-09 03:41:29 瀏覽:964
imacpro哪個配置最好 發布:2025-02-09 03:32:29 瀏覽:251
用編程對話 發布:2025-02-09 03:23:43 瀏覽:86
自助解壓球 發布:2025-02-09 03:17:37 瀏覽:319
linux進程的退出 發布:2025-02-09 03:00:22 瀏覽:814
淘寶上傳時間 發布:2025-02-09 02:42:13 瀏覽:638
ios緩存數據 發布:2025-02-09 02:32:06 瀏覽:254
蘋果手機如何存儲word 發布:2025-02-09 02:23:02 瀏覽:781
安卓手機如何有蘋果的emoji 發布:2025-02-09 02:11:02 瀏覽:808