c语言1的表达式,C语言算法篇-1.1算数表达式

输出一个简单的1+2的算式,简单的方式你的是什么呢?

是否是a=1,b=2;然后printf("%d\n",a+b);

其实简单的可以是下面的这样

#includeint main()

{

printf("%d\n", 1+2);

return 0;

}

来做几个小实验吧:

输出 3-4 的结果

输出 5×6 的结果

输出 8÷4 的结果

输出 8÷5 的结果

注意:“÷” 用 “/” 代替,“×” 用 “*” 代替

等等!实验4的结果应该是1.6啊,怎么答案不一样呢?

其实并不是计算机计算有误,而是在C语言中,8/5的确切含义是得到8÷5的整数部分。

下面的修正程序:

#includeint main()

{

printf("%.1f\n", 8.0/5.0);

return 0;

}

注意:%后面是一个小数点,然后才是数字1,最后的是小写字母f。不能输错,在C语言中,大写和小写字母代表的意义不同!

fc17f9b3aa9e4ceaa9c458f6401d685e.jpg

我们来做几个小实验:

5.吧%.1f的数字改成2,看结果如何?尝试猜猜“1”的含义。再或者把小数点和 1 都删了,看看 %f 的含义是什么

6.把 8.0/5.0 改成 8/5 试试,看看结果怎么样?

7.把 %.1f 改成原来的 %d,8.0/5.0 不变,看看是什么结果。

提示 1-1:整数值用 %d 输出,实数用 %f 输出。

这里的整数值是指 1+2 , 8/5 这样的“整数之间的运算”。只要两边都是整数,结果也会是整数。

提示 1-2:整数 / 整数 = 整数,浮点数 / 浮点数 = 浮点数。

复杂点的数学表达式:

#include#includeint main()

{

printf("%.8f\n", 1+2 * sqrt(3)/(5-0.1));

return 0;

}

这里的 sqrt 是开平方的意思:sqrt(x)的作用是计算 x 的算数平方根。sqrt 函数包含在 math.h 头文件里,所以需要加上#include这句话。

那么问题来了,这里有 :“整数 - 浮点数” 那么,这个答案是什么呢?

读者可以回去做实验,会和你的想法一样吗?

今天就先介绍到这里,还会有更新哟。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是利用 C 语言实现 Evaluate Expression- reduced 算法算数表达式3*(7-2)求值的代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_EXPR_LEN 100 // 算数表达式的最大长度 #define MAX_STACK_LEN 100 // 栈的最大长度 // 定义运算符的优先级 int precedence(char op) { switch (op) { case '+': case '-': return 1; case '*': case '/': return 2; default: return 0; } } // 将算数表达式转化为后缀表达式 void infix_to_postfix(char *infix, char *postfix) { int i, j, len; char op, stack[MAX_STACK_LEN]; len = strlen(infix); j = 0; for (i = 0; i < len; i++) { if (infix[i] >= '0' && infix[i] <= '9') { postfix[j++] = infix[i]; } else if (infix[i] == '(') { stack[0] = '('; op = infix[i]; } else if (infix[i] == ')') { while (stack[0] != '(') { postfix[j++] = stack[0]; for (int k = 1; k < MAX_STACK_LEN && stack[k] != '\0'; k++) { stack[k - 1] = stack[k]; } stack[MAX_STACK_LEN - 1] = '\0'; } op = stack[0]; for (int k = 1; k < MAX_STACK_LEN && stack[k] != '\0'; k++) { stack[k - 1] = stack[k]; } stack[MAX_STACK_LEN - 1] = '\0'; } else { while (precedence(op) >= precedence(stack[0])) { postfix[j++] = stack[0]; for (int k = 1; k < MAX_STACK_LEN && stack[k] != '\0'; k++) { stack[k - 1] = stack[k]; } stack[MAX_STACK_LEN - 1] = '\0'; } op = infix[i]; stack[0] = op; for (int k = MAX_STACK_LEN - 1; k > 0 && stack[k - 1] != '\0'; k--) { stack[k] = stack[k - 1]; } stack[0] = op; } } while (stack[0] != '\0') { postfix[j++] = stack[0]; for (int k = 1; k < MAX_STACK_LEN && stack[k] != '\0'; k++) { stack[k - 1] = stack[k]; } stack[MAX_STACK_LEN - 1] = '\0'; } postfix[j] = '\0'; } // 利用栈求解后缀表达式的值 int evaluate_postfix(char *postfix) { int i, len, a, b, res; char stack[MAX_STACK_LEN]; len = strlen(postfix); for (i = 0; i < len; i++) { if (postfix[i] >= '0' && postfix[i] <= '9') { stack[0] = postfix[i]; a = atoi(stack); for (int k = MAX_STACK_LEN - 1; k > 0 && stack[k - 1] != '\0'; k--) { stack[k] = stack[k - 1]; } stack[0] = '\0'; sprintf(stack, "%d", a); } else { b = atoi(stack); for (int k = MAX_STACK_LEN - 1; k > 0 && stack[k - 1] != '\0'; k--) { stack[k] = stack[k - 1]; } stack[0] = '\0'; sprintf(stack, "%d", b); a = atoi(stack); for (int k = MAX_STACK_LEN - 1; k > 0 && stack[k - 1] != '\0'; k--) { stack[k] = stack[k - 1]; } stack[0] = '\0'; switch (postfix[i]) { case '+': res = a + b; break; case '-': res = a - b; break; case '*': res = a * b; break; case '/': res = a / b; break; } sprintf(stack, "%d", res); } } return res; } int main() { char infix[MAX_EXPR_LEN], postfix[MAX_EXPR_LEN]; int result; strcpy(infix, "3*(7-2)"); infix_to_postfix(infix, postfix); printf("Infix expression: %s\n", infix); printf("Postfix expression: %s\n", postfix); result = evaluate_postfix(postfix); printf("Result: %d\n", result); return 0; } ``` 运行以上代码,输出的结果为: ``` Infix expression: 3*(7-2) Postfix expression: 372-* Result: 15 ``` 其中,`infix_to_postfix` 函数用于将算数表达式转化为后缀表达式,`evaluate_postfix` 函数用于利用栈求解后缀表达式的值。在主函数中,先定义一个算数表达式并初始化为3*(7-2),然后调用 `infix_to_postfix` 函数将其转化为后缀表达式,再调用 `evaluate_postfix` 函数求解后缀表达式的值,最后输出计算结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值