表達式計算c語言
Ⅰ c語言中表達式是怎麼計算的
z=15;
首先定義x=2;
第一個++x中x的值先自增1即x=3然後再被調用即z=3+
第二個++x中x先被調用再自增即z=3+3 當詞句結束後然後x再自增即分號完了之後自增
第三個++x同第一個此時z=3+3+4
最後一個++x也同第一個此時z=3+3+4+5
Ⅱ C語言表達式計算步驟
強制轉換的優先順序高於運算符
剩下的就是括弧和四則運算次序了
a+(int)(b/3*(int)
(a+c)/2)%4
1、(int)
(a+c)
強制轉換
2、b/3*(int)
(a+c)/2
自左向右依次進行
3、(int)(b/3*(int)
(a+c)/2
強制轉換
4、(int)(b/3*(int)
(a+c)/2)%4
數據取余
5、a+(int)(b/3*(int)
(a+c)/2)%4
Ⅲ C語言計算表達式的值
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 99
void translate(char str[],char exp[]) /*將算術表達式轉換成後綴表達式*/
{
struct
{
char data[MaxSize];
int top; /*top為棧頂*/
}op; /*定義一個含data和top的結構體*/
char ch;
int i = 0,t = 0;
op.top = -1;
ch = str[i]; /*將str的每一個數轉換成ch*/
i++;
while(ch != '\0') /*ch對應不同的符號的時候對應的轉換情況*/
{
switch(ch)
{
case '(': /*當是(的時候,將此括弧存入棧op*/
op.top++;op.data[op.top]=ch;
break;
case ')':
while(op.data[op.top] != '(') /*括弧內的轉換優先順序最高,故先提取表達式*/
{
exp[t]=op.data[op.top];
op.top--;
t++;
}
op.top--;
break;
case '+':
case '-':
while(op.top != -1&&op.data[op.top] != '(')
{
exp[t] = op.data[op.top];
op.top--;
t++;
}
op.top++; /*恢復可插入位置*/
op.data[op.top] = ch;
break;
case '*':
case '/':
while(op.top == '/'||op.top == '*') /*優先順序*/
{
exp[t] = op.data[op.top];
op.top--;
t++;
}
op.top++;
op.data[op.top] = ch;
break;
case ' ': /*忽略空格,排除誤操作*/
break;
default:
while(ch >= '0'&&ch <= '9')
{
exp[t] = ch;t++;
ch = str[i];i++;
}
i--;
exp[t] = '#'; /*分隔操作數,為了美觀,也為了以後好分隔操作數,呵呵*/
t++;
}
ch = str[i];
i++;
}
while(op.top != -1) /*得到剩下的部分*/
{
exp[t] = op.data[op.top];
t++;
op.top--;
}
exp[t] = '\0'; /*表達式結束*/
}
float cal_value(char exp[])
{
struct
{
float data[MaxSize];
int top;
}st; /*操作數棧*/
float d;
char ch;
int t = 0;
st.top = -1;
ch = exp[t];
t++;
while(ch != '\0')
{
switch(ch) /*運算主體*/
{
case '+':
st.data[st.top-1] = st.data[st.top-1]+st.data[st.top];
st.top--;
break;
case '-':
st.data[st.top-1] = st.data[st.top-1]-st.data[st.top];
st.top--;
break;
case '*':
st.data[st.top-1] = st.data[st.top-1]*st.data[st.top];
st.top--;
break;
case '/':
if(st.data[st.top] != 0)
st.data[st.top-1]=st.data[st.top-1]/st.data[st.top];
else
{
printf("\n\t除0是錯誤的");
}
st.top--;
break;
default:
d=0;
while(ch >= '0'&&ch <= '9') /*從後綴表達式中獲取操作數,#作用在此體現*/
{
d = 10*d+ch-'0';
ch = exp[t];
t++;
}
st.top++;
st.data[st.top] = d;
}
ch = exp[t];
t++;
}
return st.data[st.top];
}
int main() /*可以提到前面去*/
{
char str[MaxSize],exp[MaxSize]; /*str為算術表達式,exps為後綴表達式*/
printf("請輸入一個求值表達式\n");
printf("表達式:");
gets(str); /*輸入一個算術表達式*/
printf("原表達式是:%s\n",str);
translate(str,exp); /*將算術表達式轉換成後追表達式*/
printf("後綴表達式:%s\n",exp);
printf("計算結果:%g\n",cal_value(exp));/*通過後綴表達式來求值*/
system("pause");
return 0;
}
Ⅳ C語言表達式怎麼計算
這個就是考察運算符優先順序,也就是先計算誰,後計算誰, 可以看我下面的截圖,優先順序從上到下從高變低, 高優先順序的優先運算。
1+3>3&&5%2==1 可以等價這個((1+3)> 3)&& ((5%2)== 1)
這個上面加括弧是因為括弧的優先順序最高, 這樣不知你能理解不。
Ⅳ C語言計算表達式
#include <stdio.h>
main()
{
int i;
float s=0;
for(i = 0 ; i < 50 ; i ++)
s += 1.0 / ((2 * i + 1) * (2 * i + 3));
printf("s = %lf ",s);
}
Ⅵ c語言中表達式計算問題
這種問題十分沒有意義,准確地說,此題答案不唯一,不同的系統會對這個表達式進行不同的解釋,
1.
等號是右結合性操作符,所以運算過程是從右到左的,
首先計算
x-=x*x,之後整個表達式變成了
x+=-30,此時,x==6因此,最終結果是-24
2.
等號是右結合性操作符,所以運算過程是從右到左的,
首先計算
x-=x*x,之後,x=-30,然後再執行x+=x所以,結果就是x==-60
Ⅶ C語言計算並輸出個表達式的值
#include<stdio.h>
int main()
{ int a=3,b=2,c=1,m;
printf("%d ",c>a+b);
printf("%d ",a>b==c);
printf("%d ",a==b>c);
printf("%d ",m=b>c);
printf("%d ",m=a>b>c);
printf("%d ",c+1>=a);
printf("%d ",c*2!=b);
printf("%d ",m=c==a%b);
return 0;
}
Ⅷ C語言計算表達式
#include<stdio.h>
int main()
{ double x;
int i,n;
scanf("%lf%d",&x,&n);
for(i=1; i<=n; i++)
x=sqrt(i+x);
printf("%f\n",x);
return 0;
}
Ⅸ C語言中表達式的值怎麼算
此式即等同於 (4!=3)&&(2)&&(4+1<5)
1代表真,0代表非,則原式即 1&&1&&0 所以值為0。
例如:
-12/5 = -2 只為這個是整數運算,結果只取整數部分。
62 1*(6+7) + 7 *(6+1) = 13 +49 62
3.2 *(6+7+1) = 44.8
(9)表達式計算c語言擴展閱讀:
一個表達式的賦值和算符的定義以及數值的定義域是有關聯的。
兩個表達式若被說是等值的,表示對於自由變數任意的定值,兩個表達式都會有相同的輸出,即它們代表同一個函數。
一個表達式必須是合式的。亦即,其每個算符都必須有正確的輸入數量,在正確的地方。如表達式2+3便是合式的;而表達式*2+則不是合式的,至少不是算術的一般標記方式。
表達式和其賦值曾在20世紀30年代由阿隆佐·邱奇和Stephen Kleene在其λ演算中被公式化。λ演算對現代數學和電腦編程語言的發展都曾有過重大的影響。