算术操作符:+、-、*、/、%(c语言)

操作符也被叫做:运算符
C语⾔中为了⽅便运算,提供了⼀系列操作符,其中有⼀组操作符叫:算术操作符。分别是: + - *
\ % ,都是双⽬操作符。

1、+ -

+ - ⽤来完成加法和减法。
+ - 都是有2个操作数的,位于操作符两端的就是它们的操作数,这种操作符也叫双⽬操作符。
#include <stdio.h>
int main()
{
 int x = 5 + 1;
 printf("%d\n", x);
 return 0;
}

2、*

运算符 * ⽤来完成乘法。
#include <stdio.h>
int main()
{
 int num = 5;
 printf("%d\n", num * num); // 输出 25
 return 0;
}

3、/

运算符 / ⽤来完成除法。
#include <stdio.h>
int main()
{
 float x =5 / 3;
 int y = 5 / 3;
 printf("%f\n", x); // 输出 1.000000
 printf("%d\n", y); // 输出 1
 return 0;
}
C 语⾔⾥⾯的整数除法是整除,只会返回整数部分,丢弃⼩数部分。
如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时 C 语⾔就会进⾏浮点数除法。
#include <stdio.h>
int main()
{
 float x = 6.0 / 4; // 或者写成 6 / 4.0
 printf("%f\n", x); // 输出 1.500000
 return 0;
}

4、%

运算符 % 表⽰求模运算,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点数。
#include <stdio.h>
int main()
{
 int x = 6 % 5; // 1
 return 0;
}
负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定。
#include <stdio.h>
int main()
{
 printf("%d\n", 11 % -5); // 1
 printf("%d\n",-11 % -5); // -1
 printf("%d\n",-11 % 5); // -1
 return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用栈来实现表达式求值。具体步骤如下: 1. 定义一个操作数栈(用于存储数字)和一个操作符栈(用于存储运算符)。 2. 从键盘读入一个表达式字符串,逐个字符进行处理。 3. 如果当前字符是数字,则将其转换为整型数值并压入操作数栈中。 4. 如果当前字符是左括号,直接将其压入操作符栈中。 5. 如果当前字符是右括号,则从操作符栈中弹出运算符进行运算,直至遇到左括号为止。 6. 如果当前字符是运算符,则比较其与操作符栈顶元素的优先级,如果当前运算符优先级较低,则从操作符栈中弹出运算符进行运算,直至当前运算符优先级不低于栈顶元素的优先级。 7. 最后,当表达式扫描完毕后,如果操作符栈中还有运算符,则依次弹出进行运算,最终得到表达式的值。 下面是示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <ctype.h> typedef struct { int top; int data[100]; } Stack; void initStack(Stack *s) { s->top = -1; } int isEmpty(Stack *s) { return s->top == -1; } void push(Stack *s, int x) { s->data[++(s->top)] = x; } int pop(Stack *s) { return s->data[(s->top)--]; } int getTop(Stack *s) { return s->data[s->top]; } int priority(char op) { switch(op) { case '+': case '-': return 1; case '*': case '/': return 2; default: return 0; } } int calculate(int a, int b, char op) { switch(op) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': return a / b; default: return 0; } } int evaluate(char *expr) { Stack numStack, opStack; initStack(&numStack); initStack(&opStack); while (*expr != '\0') { if (isdigit(*expr) || (*expr == '-' && isdigit(*(expr+1)))) { int num = 0, sign = 1; if (*expr == '-') { sign = -1; ++expr; } while (isdigit(*expr)) { num = num * 10 + (*expr - '0'); ++expr; } push(&numStack, sign * num); } else if (*expr == '(') { push(&opStack, '('); ++expr; } else if (*expr == ')') { while (getTop(&opStack) != '(') { char op = (char)pop(&opStack); int b = pop(&numStack); int a = pop(&numStack); push(&numStack, calculate(a, b, op)); } pop(&opStack); ++expr; } else if (*expr == '+' || *expr == '-' || *expr == '*' || *expr == '/') { while (!isEmpty(&opStack) && priority(getTop(&opStack)) >= priority(*expr)) { char op = (char)pop(&opStack); int b = pop(&numStack); int a = pop(&numStack); push(&numStack, calculate(a, b, op)); } push(&opStack, *expr); ++expr; } else { ++expr; } } while (!isEmpty(&opStack)) { char op = (char)pop(&opStack); int b = pop(&numStack); int a = pop(&numStack); push(&numStack, calculate(a, b, op)); } return pop(&numStack); } int main() { char expr[100]; printf("请输入算术表达式:\n"); scanf("%s", expr); int result = evaluate(expr); printf("表达式求值结果为:%d\n", result); return 0; } ``` 注意:此处假设输入的表达式是合法的,未作错误处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值