Red de conocimiento informático - Computadora portátil - En la programación en lenguaje C, ¿cómo generar los operadores de suma, resta, multiplicación y división?

En la programación en lenguaje C, ¿cómo generar los operadores de suma, resta, multiplicación y división?

#includelt; stdio.hgt;

#includelt; string.hgt

#define N 100

estructura typedef{ / /operando pila

float d[N];

int len; //len es equivalente a top

}pilas, *lists;

typedef struct{ //Pila del operador

char c[N];

int len; //len es equivalente a la pila superior

}, *list;

int init(list p); //inicialización de pila

int inits(lists p); //inicialización de pilas

int pushs(lists) p, float m); //pilas empujadas a la pila

int push(list p, char c); //pilas empujadas a la pila

int pops(lists p, float *m) ; //apila elementos de la pila

int pop(list p, char *c); //apila elementos de la pila

int in(char c) ; //determina si C es datos Si es así, devuelve 1; de lo contrario, devuelve 0

char pre(char s, char c); //Juzga la prioridad de s c return 'gt;'; return 'lt;'; s =c return '='

float operar(float a, char t, float b); //Realizar la operación t (-*/) en a b return a b o a-b , a*b, a/ b

float value(char s[]); //Encontrar el valor de la expresión S

void main(){

char s[N]; int n; float f;

printf("************************Evaluación rápida* *************** **********\n");

mientras(1){

printf ("Por favor ingrese un expreso\n");

scanf("s", s); //Ingrese la expresión

n=strlen(s); de expresión

printf("express length =d\n", n); // Muestra la longitud de la expresión

s[n]='#'; '#' al final de la expresión Nota: # indica el final de la operación

p>

f=value(s); //Calcular la longitud de la expresión

printf ("f=.5f\n", f); //Muestra el valor de la expresión. Nota solo salida Los primeros cinco decimales

printf("continuar entrada 1, interrumpir entrada 0\n") ;

scanf("d", amp; n); printf("\n" );

Si desea continuar la operación, ingrese 1, de lo contrario ingrese 0

if(!n) break }

}

int init(list p) {

if(!p) {printf("Error, pila inicial NULL\n" return 0;}

p-gt;len=0;

return 1;

}

int inits(listas p){

if(!p) {printf("Error, pilas de inicio NULL\ n" ); devuelve 0; }

p-gt; len=0;

devuelve 1;

}

int empuja (lista p, float m){

if(!p) {printf("Error, empuja pilas NULL\n");}

p-gt; [p -gt; len ]=m; devolver 1;

}

int push(lista p, char c){

if(!p) {printf ("Error, enviar pila NULL\n"); devuelve 0;}

p-gt; c[p-gt;len]=c; }

int pops(lists p, float *m){

if(!p) {printf("Error, empujar pilas NULL\n"); /p >

*m=p-gt; d[--p-gt; len]; devolver 1;

}

int pop(lista p, char * c) {

if(!p) {printf("Error, empujar la pila NULL\n");}

*c=p-gt; -p -gt; len]; return 1;

}

int in(char c){ // Juzga si C son datos, devuelve 1, de lo contrario devuelve 0

if(cgt;='0'amp;amp;clt;='9'||c=='.') return 1; return 0;}

char pre(char s , char c){ // Determinar la prioridad de s c sgt; c return 'gt;'; c return 'lt;'; ;' , n= '=' , k='gt;' ,

si((s=='-')||(s==' ')){

if((c=='*')||(c=='(')||(c=='/'))

r=m;

else r=k; }

if((s=='*')||(s=='/')){

if((c== '( ')) r=m;

más r=k }

if(s=='('){

if(c= =' )') r=n;

más r=

m; }

if(s==')')

r=k

if(s=='#') {

if(c=='#') r=n;

else r=m; }

devolver

}

float operar(float a, char t, float b){ //Realizar la operación t (-*/) en a b return a b o a-b, a*b, a/b

if (t=='-') devuelve a-b; si(t==' ') devuelve a b;

if(t=='*') devuelve a*b; ') devolver a/b; }

valor flotante(char s[]){

pilas opnd; pila optr; , b, m=0;

inits(amp; opnd); init(amp; optr); int k=0, i, tp=10; optr,'#'); //Empuje '#' en la pila optr como marca final

p=pr=s //Inicializa el puntero p pr para que pr p apunte a la expresión

while(*p!='#'||optr.c[optr.len-1]!='#'){//Cuando el operador señalado por p y el elemento superior de la pila en optr son ambos' #'La operación finaliza

if(in(*p)) //Si p apunta a un número, convierte la cadena numérica en datos de tipo real (flotantes) y guárdalos en el pila opnd

{

m=0; k=0;

while(in(*p)) //Hacer p; apunta al siguiente operador

while(pr!=p)

{

if(*pr!='.') //Si pr apunta a el punto decimal, omitir

m=(m *(pr )-'0')*10 //Convierte un solo carácter alfanumérico en datos y suma poco a poco

else{ //Como 12.3 -gt; 1230

k=p-pr; pr }

}

for(i=0, tp= 10; ilt; k; i) //Encontrar Encuentra el divisor tp de modo que 1230 dividido por tp (100) sea igual a 12,3

{

tp=tp*10;

if(i==k-1)

tp=tp/10

}

empuja(amp; opnd, m/tp ); //Entrar pila opnd

}

else switch(pre(optr.c[optr.len-1], *p)){

caso 'lt;': push(amp;optr, *p); pr=p

case'=': pop(amp; opt;

r,amp; pops(amp;opnd,amp;a); // Genera un operador y dos datos

pushs(amp;opnd,operate(a,t,b));break;} / /Operación

}

return opnd.d[opnd.len-1] //Devuelve el valor de la expresión

}