++i i++ i-- --i 和算术运算的优先级
时间: 2023-10-24 18:06:40 浏览: 47
++i、i++、i--、--i 都是 C 语言中的自增和自减运算符,它们的优先级相同,都比算术运算符的优先级低。它们的区别在于它们的操作顺序和返回值不同。
++i 表示先将 i 的值加 1,再将加 1 后的值赋给 i,它的返回值是加 1 后的值。
i++ 表示先将 i 的值赋给表达式,再将 i 的值加 1,它的返回值是赋给表达式之前的 i 的值。
i-- 表示先将 i 的值减 1,再将减 1 后的值赋给 i,它的返回值是减 1 后的值。
--i 表示先将 i 的值减 1,再将减 1 后的值赋给表达式,它的返回值是减 1 后的值。
相关问题
i++,i--运算优先级
i++和i--的运算优先级相同,都是单目运算符,优先级低于算术运算符和关系运算符,高于赋值运算符。在和其他运算符连用时,i++和i--的运算顺序取决于它们前面的运算符的优先级。如果i++或i--前面是算术运算符或关系运算符,则先进行i++或i--运算;如果i++或i--前面是赋值运算符,则先进行赋值运算。
递归实现表达式运算(c语言)+-*/%
递归实现表达式运算需要考虑一个算术表达式的各个元素以及运算符的优先级。下面是一个用C语言实现加减乘除模取模的递归解法的示例代码:
```c
#include <stdio.h>
int calculate(char *exp, int start);
int parseNumber(char *exp, int *start) {
int num = 0;
while (exp[*start] >= '0' && exp[*start] <= '9') {
num = num * 10 + (exp[*start] - '0');
(*start)++;
}
return num;
}
int calculate(char *exp, int start) {
int num1 = parseNumber(exp, &start);
while (exp[start] != '\0' && exp[start] != ')') {
char op = exp[start++];
int num2 = parseNumber(exp, &start);
switch (op) {
case '+':
num1 += num2;
break;
case '-':
num1 -= num2;
break;
case '*':
num1 *= num2;
break;
case '/':
num1 /= num2;
break;
case '%':
num1 %= num2;
break;
default:
printf("Invalid operator\n");
return -1;
}
}
return num1;
}
int main() {
char expression[100];
printf("请输入要计算的表达式:");
scanf("%s", expression);
int result = calculate(expression, 0);
printf("计算结果为:%d\n", result);
return 0;
}
```
以上代码中,函数`parseNumber`用于解析一个数值。函数`calculate`用于递归计算表达式,包括优先级高的乘除取模和优先级低的加减。在主函数中,用户输入一个表达式,然后调用`calculate`函数进行计算,并输出结果。
这个递归实现表达式运算的方法可以解析加减乘除取模运算,并且支持嵌套括号。但需要注意的是,这个实现有一些限制,例如不支持负数和浮点数的运算。如果需要更复杂的功能,可能需要更复杂的实现。