當前位置:首頁 » 編程語言 » c語言前綴重復計算
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言前綴重復計算

發布時間: 2023-03-11 12:36:17

1. C語言,i--和--i有什麼區別,怎麼用

--i和i--都是自減運算符
--i稱為前綴運算,i--稱為後綴運算
前綴運算後,表達式的值為原變數值減1;
後綴運算後,表達式的值仍為原變數值;
而變數值不論前綴運算還是後綴運算都減1。
例如:i=10;
--i的值為原變數值減1,是9;現在的變數i也是9
i=10
i--的值為原變數值,是10;而變數i現在就是9

2. C語言中,前綴運算和後綴運算有什麼區別呀!

前綴是運算後返回的是原值,後綴是運算後返回結果值

3. C語言中 x/=2 怎麼理解

C語言中提供了自增1運算符++和自減1運算符--
而且,這兩種運算符,還分為前綴運算和後綴運算
如:
int a=5;
a++; //後綴運算,表示a=a+1 = 5+1=6
a--; //後綴運算,表示a=a-1 = 6-1=5
--a; //前綴運算,表示a=a-1 = 5-1=4
++a; //前綴運算,表示a=a+1 = 4+1=5
以上單獨使用自增1或自減1運算符,前綴運算和後綴運算沒有區別,其結果都是完成變數a的自加1或自減1
前綴運算和後綴運算的區別在於:前綴運算,先運算,再使用變數;後綴運算,先使用變數,再運算。如:
int a=5;
printf("a=%d\n", ++a ); //前綴運算,先運算a=a+1=5+1=6,再使用變數a,輸出結果a=6
a=5; //重新賦值為5
printf("a=%d\n", a++ ); //後綴運算,先使用變數a,輸出結果a=5,再運算a=a+1=5+1=6
void main(){
int x = 6, y = 5;
printf("%d\n",++x+y++); //以下代碼表面看有區別,實際都是一樣的,先執行++x 然後結果+y,然後y++。 ++的結合性要優於+,所以,解題時,先找++的參與變數,再找其它運算符的參與變數
printf("%d\n",++ x+y++);
printf("%d\n",++x +y++);
printf("%d\n",++x+ y++);
printf("%d\n",++x+y ++);
printf("%d\n",++x+y++ );
}

4. 如何在一個C語言程序中實現重復計算

只要設個循環就可以了
#include
<stdio.h>
main()
{
int
a,
b;
char
end='
';
while(end!='q')
{
scanf("%d
%d",
&a,
&b);
printf("%d\n",
a
+
b);
getchar();
end=getchar();
}
}
就這樣了按q退出
按其他鍵繼續計算
第一個getchar()是為了消除你在輸入2個數字之後按的那次回車

5. C語言代碼補全:前綴表達式求值

思路:這里實際是把前綴表達式逆序輸出轉化為類似後序表達式求值:
比如:

輸入:++2*3-74/84處理成48/47-3*2++鏈表,放到後綴表達式求值程序postFixEval計算得

13.0
#include<stdio.h>
#include<stddef.h>
#include<string.h>
#include<stdlib.h>
#defineMAXSIZE100
//用鏈表實現前綴表達式,
typedefstructNode
{
union
{charexp;
inta;
}data;
structNode*next;
structNode*prev;
}Node;
intisExpression(inttmpExp){
if(tmpExp=='+'||tmpExp=='-'||tmpExp=='/'||tmpExp=='*'||tmpExp=='('||tmpExp==')')
return1;
else
return0;
}
intisSuperior(inttmpExp,inttmpExp2){
if(tmpExp2=='('||(tmpExp=='/'||tmpExp=='*'))//tmpExp2=='('||(tmpExp=='/'||tmpExp=='*')&&(tmpExp2=='+'||tmpExp2=='-')
return1;
else
return0;
}

voidprintNode(Node*node)
{
if(node)
{chartmpExp=node->data.exp;
if(isExpression(tmpExp))
printf("%c",node->data.exp);
else
printf("%d",node->data.a);
if(node)
printNode(node->next);
}
}
typedefstructStack2
{doublearr[MAXSIZE];
inttop;
}Stack2;
voidpush(doublenum,Stack2*stack)
{if(stack->top>=MAXSIZE)
return;
else
{stack->top++;
(stack->arr[stack->top]=num);
}
}

doublepop(Stack2*stack)
{doubleret;
if(stack->top<=-1)
return-1;
else
{ret=stack->arr[stack->top];stack->top--;}
returnret;
}
//後綴表達式求值程序
doublepostFixEval(Node*head)
{doubleval=0;
Node*node=head;
Stack2stack2;
stack2.top=-1;
while(node)
{
if(!isExpression(node->data.exp))
{
push(node->data.a,&stack2);
}
else
{
doubleop1=pop(&stack2);
doubleop2=pop(&stack2);
switch(node->data.exp)
{
case'+':
val=op1+op2;
break;
case'-':
val=op1-op2;//注意是op1/op2
break;
case'*':
val=op1*op2;
break;
case'/':
val=op1/op2;//注意是op1/op2
break;
}
push(val,&stack2);
}
node=node->next;
}
returnval=pop(&stack2);
}

intmain(intargc,char*argv[])
{
Node*head=0;
inti=0,length=0;
charbuf[1024];
char*tmpExp,sep[]="";
char*p=NULL;
//head=(Node*)malloc(sizeof(Node));
//head->data.exp='';
//head->data.a=0;
//head->next=0;
gets(buf);
tmpExp=buf;
Node*tmpExpNode=head;
//輸入為前綴表達式
while(p=strtok(tmpExp,sep))
{
Node*node=(Node*)malloc(sizeof(Node));
node->next=0;
//printf("%s",p);pisapointtostring(notapointtoachar)
if(strcmp(p,"+")==0||strcmp(p,"+")==0||strcmp(p,"-")==0||strcmp(p,"*")==0||strcmp(p,"/")==0||strcmp(p,"(")==0||strcmp(p,")")==0)
sscanf(p,"%c",&node->data.exp);
else
sscanf(p,"%d",&node->data.a);
node->next=tmpExpNode;//逆轉輸入的前序表達式,即後輸入的在前
tmpExpNode=node;
tmpExp=0;
}
printf("%0.1f ",postFixEval(tmpExpNode));//0.1f表示一位小數
return0;
}