当下常见编程语言中,C语言是一种十分常用的语言。C语言可以用来开发各种类型的应用、系统和游戏,其中之一就是实现计算器。下面将结合两条示例来详细讲解“C语言实现计算器的两种方法”的完整攻略。
第一种方法:基于表达式求值的计算机实现
思路分析
在程序开发者社区中,基于表达式求值的方式是最广泛使用的方法之一。下面是一个实现“基于表达式求值的计算机”的思路:
- 读入表达式字符串
- 实现字符串切分,将表达式拆分成操作数和运算符
- 利用栈进行对表达式进行操作符和数值的储存
- 优先计算乘除运算符
- 计算加减运算符
- 按顺序计算完毕,最终将答案推出
示例演示
下面是一个实现基于表达式求值的计算器的示例源代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 1000 // 定义栈的长度
int numStack[MAXSIZE]; // 创建储存数字栈
char opStack[MAXSIZE]; // 创建储存存储操作符的栈
int numTop = -1; // 定义数字栈顶指针
int opTop = -1; // 定义操作符栈顶指针
void cal() { // 定义计算函数
int a = numStack[numTop--];
int b = numStack[numTop--];
char op = opStack[opTop--];
int sum;
if(op == '+'){
sum = b+a;
}
else if(op == '-'){
sum = b-a;
}
else if(op == '*'){
sum = b*a;
}
else{
sum = b/a;
}
numStack[++numTop] = sum;
}
int pre(char op) { // 定义优先级函数
if(op == '+' || op == '-') return 1;
if(op == '*' || op == '/') return 2;
return 0;
}
int isNumber(char c){ // 判断字符是否为数字
return c >= '0' && c <= '9';
}
int scan(char str[],int *i){ // 读取表达式中的数字
int sum=0;
while(str[*i]!='\0' && isNumber(str[*i])){
sum = sum*10 + str[*i] - '0';
(*i)++;
}
return sum;
}
void calculate(char str[]){ // 计算表达式的函数
int i=0;
while(str[i] != '\0'){
if (isNumber(str[i])){
numStack[++numTop] = scan(str,&i);
}
else if(str[i] == ')'){
while(opStack[opTop] != '('){
cal();
}
opTop--;i++;
}
else{
while(opTop!=-1 && opStack[opTop]!='(' && pre(opStack[opTop])>=pre(str[i])){
cal();
}
opStack[++opTop] = str[i++];
}
}
while(opTop != -1){
cal();
}
}
int main(){ // 主函数
char exp[MAXSIZE];
while(scanf("%s",exp)!=EOF){
numTop = -1;
opTop = -1;
int exp_len = strlen(exp);
opStack[++opTop] = '('; // 运算符入栈
exp[exp_len++] = ')'; // 将表达式尾添加')'
calculate(exp);
printf("%d\n",numStack[numTop]); // 输出计算结果
}
return 0;
}
这段代码会读入一组表达式字符串,计算表达式中的算式结果,并基于printf输出函数输出结果。
第二种方法:基于switch分支的实现方法
思路分析
n第二种实现计算器的方法是基于switch分支实现的,该方法不是基于表达式求值而是进行列举型调用以实现计算器的运行机制。以下是基于switch分支的实现方法:
- 输入算式中的两个数字以及运算符
- 运用switch分支判断输入运算符类型
- 处理根据运算符类型匹配所需的算式处理函数
- 输出结果
示例演示
下面是一个使用switch基于实现的计算器示例源代码:
#include<stdio.h>
int main(){
char operator = 0; // 运算符
float operand1 = 0; // 操作数1
float operand2 = 0; // 操作数2
float answer = 0; // 计算结果
while(1){
scanf("%f%c%f",&operand1,&operator,&operand2); // 读取输入数据
switch(operator){
case '+': answer = operand1 + operand2; break; // 实现四则运算
case '-': answer = operand1 - operand2; break;
case '*': answer = operand1 * operand2; break;
case '/': answer = operand1 / operand2; break;
default: printf("INVALID ENTRY.\n"); exit(0); // 非法输入
}
printf("= %f\n",answer); // 输出计算结果
}
return 0;
}
这段代码包含了switch分支语句、浮点数等关键字。输入不同的操作符(+,-,*,/)时,会分别计算运算符两边的数字并输出结果。
所以,以上两种方法都可以用于实现基于C语言的计算器,开发者可以根据具体需求选择适用的方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现计算器的两种方法 - Python技术站