C语言表达式的计算练习

作者&投稿:祢贸 (若有异议请与网页底部的电邮联系)
C语言计算表达式的值~

#include
#include
#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("
除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("请输入一个求值表达式
");
printf("表达式:");
gets(str); /*输入一个算术表达式*/
printf("原表达式是:%s
",str);
translate(str,exp); /*将算术表达式转换成后追表达式*/
printf("后缀表达式:%s
",exp);
printf("计算结果:%g
",cal_value(exp));/*通过后缀表达式来求值*/
system("pause");
return 0;
}

1、y+=y-=m*=y这个运算是赋值运算应该从右往左进行,
可分解为:
m=m*y;
y=y-m;
y=y+y;


2、s%2+(s+1)%2 基本算术运算从左往右进行比考虑优先级
即6%2+(6+1)%2 = 0+7%2 = 0+1 = 1;

3、
int k=7,x=12
A. x%-(k%=5) //0
B. x%=(k-k%5) //2
C. x%=k-k%5 //2
D. (x%=k)-(k%=5)//3

1.已知三角形的三边a,b,c,求三角形面积的公式为: area=sqrt(s(s-a)(s-b)(s-c)) 其中:s=(a+b+c)/2,sqrt(x)表示x的平方根。要求编一程序,对任意输入的a,b,c值,计算并输出三角形的面积范围。 提示:sqrt是C的标准库函数,使用该函数应将库文件“math.h”包含到源文件中。另外注意三角形三边的基本关系。 2.对以下程序进行分析,看程序的输出结果应是什么,然后上机运行该程序看实际结果与你分析的有无不同,找出原因。 #include "stdio.h" void main( ) { int x=1,y=2,t; float m; t=x/y; m=x/y; printf("%d \t%8.3f\n",t,m); t=x/(float)y;m= x/(float)y; printf("%d \t%8.3f\n",t,m); t=(float)x/y;m=(float)x/y; printf("%d \t%8.3f\n",t,m); } 3.编辑以下程序:对程序进行分析,看程序的输出结果在下列各种情况下应是什么,然后上机运行该程序看实际结果(写在实验报告里)与你分析的有无不同,找出原因。 #include "stdio.h" void main( ) { int x,y,t; double a; float b; int c; scanf(“%d%d”,&x,&y); c=b=a=20/3; t=(x%y,x/y); printf("%d %d\n",x--,--y); printf("%d\n",t); printf("%d\n",(x=5*6,x*4,x+5)); printf("%d %f %f\n",c,b,a); } ⑴程序运行时,在键盘上输入20 3 ⑵程序运行时,在键盘上输入15 5


用VC语言编写程序实现简单四则表达式的计算,比如1+2-3×5输出-12_百度...
case 4: {int i=0,j=0; float divide=0; scanf("%d%d",&i,&j); divide=i\/j; if(j=0) printf("erro\\n"); else printf("divide=%lf\\n",divide); };break; case 5: {int i=0,j=0,arith_compliment=0; \/\/这里原先的arith-compliment,不是C语言的合法变量名(变量名中不能有...

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\\n",s);}

c语言编程题:计算表达式3+7+11+15……前20项之和。
include<stdio.h> int main(){int i,s=0;for(i=3;i<3+20*4;i+=4)s+=i;printf("%d\\n",s);return 0;}

C语言用程序验证表达式的值有哪些结果其中包括==?
在 C 语言中,可以使用程序验证表达式的结果,其中包括等于(==)操作符。下面是一个例子,演示了如何使用 C 语言程序计算并验证一个简单的数学表达式:```c include <stdio.h> int main() { int a = 5, b = 2, c;c = a + b; \/\/ 计算 a + b 的值 printf("a + b = %d\\n"...

江湖救急~~~C语言表达式运算过程问题!!!
= x + (a % 3) × (((int)(x + y)) % 2) ÷ 4 x 加:a 对 3 取余的结果乘以 x+y 的值转换为 int 型再对 2 取余的结果再除以 4。a运算符 = b 其实就是 a = a 运算符 b 如 a+=2 就是 a=a+2。同理 x*=y+2 就是 x = x*(y+2)。这种表达式没什么技巧,如...

c语言计算题,若有定义int a=20,b=20,c=20,d=20;则下面表达式的值分别...
++是先进行表达式再给自己加一,并且*的运算优先级比+高,所以是a*10,然后a自身加一,并不是运算式本身加一

请教2个c语言表达式值的小问题
1.如果 b能整除a a%b就是a除以b的 余数为0 a\/b为整数 则 a\/b*b=a 这个式子也为 a 如果不整除,a\/b 是整形 也就是取整,比真正的值要小 余数的 1\/b,乘以b之后,正好差一个余数的值, 后面在加上 余数 所以结果就是 a 即: a\/b*b+a%b = a;2.同理。 为a - a\/b...

C语言计算并输出个表达式的值?
include<stdio.h> int main(){ int a=3,b=2,c=1,m;printf("%d\\n",c>a+b);printf("%d\\n",a>b==c);printf("%d\\n",a==b>c);printf("%d\\n",m=b>c);printf("%d\\n",m=a>b>c);printf("%d\\n",c+1>=a);printf("%d\\n",c*2!=b);printf("%d\\n",m=c==a%b)...

计算列表达式的值 编写程序连续输入a1.a2.…,a15,计算下列表达式的值...
sqrt(a[i]);return sqrt(a[i] + calc(a, i - 1));} int main() { double a[15];for (int i = 0; i < 15; ++i)cin >> a[i];cout << calc(a, 14) << endl;return 0;} 运行结果如下:C语言代码和运行结果如下:附C语言源码链接:递归计算 输出符合题意,望采纳~

C语言 从键盘输入一个简单的数学表达式,计算并显示该表达式的值...
double result0; \/\/存放运算结果 char current_char;int i = 0;printf("请输入简单表达式!\\n");scanf("%c", ¤t_char);while (current_char >= '0' && current_char <= '9'){\/\/输入第一个变量 var1[i++] = current_char;scanf("%c", ¤t_char);} if ( i > 0...

柳州市18677951107: C语言表达式的计算练习 -
枞东海康: 1.已知三角形的三边a,b,c,求三角形面积的公式为: area=sqrt(s(s-a)(s-b)(s-c)) 其中:s=(a+b+c)/2,sqrt(x)表示x的平方根.要求编一程序,对任意输入的a,b,c值,计算并输出三角形的面积范围. 提示:sqrt是C的标准库函数,使用该函数应将库文...

柳州市18677951107: C程序 计算表达式i+=i - =i*i的值编写C程序,完成如下运算: 当i=10时,计算表达式i+=i - =i*i的值 -
枞东海康:[答案] 答案为-180. 表达式可改写为 i=i+(i-=i*i),括号中的i-=i*i又可写为i=i-i*i=-90,括号中是把-90赋值给i, 所以i=-90+(-90)=-180.

柳州市18677951107: C语言的逗号表达式运算a=3*5,a*4,a+5 的运算 求指教 -
枞东海康:[答案] 逗号表达式算法,从左到右顺序计算,取最右边的结果作为整个表达式的值. 假设 b = (a=3*5, a*4, a+5) b = (15, 15*4, 15+5) // a在a=3*5之后没有后续对a赋值的算式,所以a到最后还是=15 b = (15, 60, 20) b = 20

柳州市18677951107: 有关C语言的一道练习题能正确表达S在区间 [ - 1,3]的C语言表达式是:______.A.S>= - 1 && S -
枞东海康:[答案] || 是或者的意思,只要有一个条件满足,就成立.但你这里需要两个条件同时成立,所以必须是 && (并且的意思).

柳州市18677951107: C语言表达式 b==a=2,怎么算? -
枞东海康:[答案] 错误表达式.由于==的优先级比=高,所以b==a=2等效于(b==a)=2.而(b==a)是表达式,不能当左值用.

柳州市18677951107: c程序中表达式a=a+=a*5的a值是多少?其中a=3如题 -
枞东海康:[答案] 解答这道题目首先要知道C语言程序运算符的优先级关系,然后就可以很简单的解答了. 对于C语言程序运算符的优先级关系我就不多介绍了,你是学这个的,自己去查看一下就OK了. 这道题目,首先等价于a=(a+(a*5)),故结果为18.

柳州市18677951107: C语言的计算题. -
枞东海康: 这里主要是运算符优先级的问题. 逻辑运算符< (+-)运算符.同时 || < && 所以 x||y+z&&y-z = 2||0&&-6 =2||0=1 逻辑运算符结果只有0或1 . a&&b 当a,b至少有一个为0时, =0 ,否则为1 a||b 当a,b全为0时, =0.否则为1.

柳州市18677951107: C语言算术表达式题
枞东海康: =2.5+1*(int)(x+y)%2/4 =2.5+1*7%2/4 =2.5+1*1/4 =2.5+1/4 =2.5+0.25 =2.75

柳州市18677951107: C语言理论题4填空题表达式 (72^2 ) 的值是_______. 表达式 !5的值是______.写出一个条件表达式来计算x和y的最大值_______.表达式7 * 7 / 9 * 4 % 3 ... -
枞东海康:[答案] 1.是移位运算自己算 2.1 ,!5是0,!0是1 3 (x>y)?x:y; 4.2 5 0 6 1 7 位运算和取反运算 8 9.(x>0)?1:((x=0)?0:-1)

柳州市18677951107: C语言,此算术表达式如何运算?a+=a - =a*=a; -
枞东海康:[答案] c语言中,计算的顺序,大多是从右向左的. 建议你上机试一下,结果总是0; #include using namespace std; int main() { double a; cout

你可能想看的相关专题

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网