帮助我用C语言编写一个计算机科学与技术专业大一学生知识能编写出来的计算机程序200行

时间: 2024-01-24 22:17:28 浏览: 27
好的,以下是一个简单的计算器程序,使用C语言编写,共200行左右: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define MAX_INPUT_LENGTH 100 // 函数声明 void print_menu(); void do_calculate(char* input); int is_operator(char c); int priority(char op); double calculate(double a, double b, char op); int main() { char input[MAX_INPUT_LENGTH + 1]; int choice; do { print_menu(); scanf("%d", &choice); getchar(); // 消耗掉换行符 switch (choice) { case 1: printf("请输入表达式: "); fgets(input, MAX_INPUT_LENGTH, stdin); do_calculate(input); break; case 2: printf("感谢使用,再见!\n"); break; default: printf("无效的选择,请重新输入。\n"); break; } } while (choice != 2); return 0; } // 打印菜单 void print_menu() { printf("\n请选择:\n"); printf("1. 计算表达式\n"); printf("2. 退出\n"); printf("请选择: "); } // 计算表达式 void do_calculate(char* input) { double nums[MAX_INPUT_LENGTH / 2 + 1]; // 存放数字 char ops[MAX_INPUT_LENGTH / 2]; // 存放运算符 int num_top = -1, op_top = -1; // 栈顶指针初始化为-1 int len = strlen(input); input[len - 1] = '\0'; // 将字符串最后的换行符替换为结束符 for (int i = 0; i < len; i++) { char c = input[i]; if (isdigit(c)) { // 如果是数字,入栈 double num = c - '0'; while (i < len - 1 && isdigit(input[i + 1])) { num = num * 10 + (input[i + 1] - '0'); i++; } nums[++num_top] = num; } else if (is_operator(c)) { // 如果是运算符 while (op_top >= 0 && priority(ops[op_top]) >= priority(c)) { // 栈顶运算符优先级比当前运算符高,先计算栈顶的 double b = nums[num_top--]; double a = nums[num_top--]; double result = calculate(a, b, ops[op_top--]); nums[++num_top] = result; } ops[++op_top] = c; // 当前运算符入栈 } else if (c == '(') { // 左括号直接入栈 ops[++op_top] = c; } else if (c == ')') { // 右括号,计算括号内的表达式 while (ops[op_top] != '(') { double b = nums[num_top--]; double a = nums[num_top--]; double result = calculate(a, b, ops[op_top--]); nums[++num_top] = result; } op_top--; // 弹出左括号 } } while (op_top >= 0) { // 处理剩余的运算符 double b = nums[num_top--]; double a = nums[num_top--]; double result = calculate(a, b, ops[op_top--]); nums[++num_top] = result; } printf("结果为: %.2lf\n", nums[0]); } // 判断字符是否为运算符 int is_operator(char c) { return c == '+' || c == '-' || c == '*' || c == '/'; } // 获取运算符的优先级 int priority(char op) { switch (op) { case '+': case '-': return 1; case '*': case '/': return 2; default: return 0; } } // 计算表达式的值 double calculate(double a, double b, char op) { switch (op) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': return a / b; default: return 0; } } ``` 这个程序实现了一个简单的四则运算计算器,可以通过菜单选择计算表达式或退出程序。它的实现使用了栈来处理中缀表达式转后缀表达式,并计算后缀表达式的值。虽然只有200多行,但也涉及到了字符串处理、字符判断、栈的应用等多个方面的知识点。

最新推荐

recommend-type

使用C语言编写圣诞表白程序

圣诞节快到了,让我们用C语言制作一个圣诞表白程序吧,下面通过本文学习下实现代码
recommend-type

18真题-计算机科学与技术 试卷答案.doc

河北省计算机科学与技术考试试题18真题-计算机科学与技术 试卷答案.doc 2018年计算机专业真题
recommend-type

C语言编写基于TCP和UDP协议的Socket通信程序示例

主要介绍了C语言编写基于TCP和UDP协议的Socket通信程序示例,其中TCP的客户端与服务器端采用多线程实现,需要的朋友可以参考下
recommend-type

C语言程序设计实现学生成绩记录簿

通过编写c语言《学生成绩记录簿系统》让我知道所学的编程语言是需要多练多编写代码锻炼出来的。 1)C语言课程设计的主要目的是培养学生综合运用C语言程序设计课程所学到的知识,编写C程序解决实际问题的能力,以及...
recommend-type

使用C语言编写基于TCP协议的Socket通讯程序实例分享

主要介绍了使用C语言编写基于TCP协议的Socket通讯程序实例分享,能够实现包括重新连接与每分钟通信一次等的功能,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

深入了解MATLAB开根号的最新研究和应用:获取开根号领域的最新动态

![matlab开根号](https://www.mathworks.com/discovery/image-segmentation/_jcr_content/mainParsys3/discoverysubsection_1185333930/mainParsys3/image_copy.adapt.full.medium.jpg/1712813808277.jpg) # 1. MATLAB开根号的理论基础 开根号运算在数学和科学计算中无处不在。在MATLAB中,开根号可以通过多种函数实现,包括`sqrt()`和`nthroot()`。`sqrt()`函数用于计算正实数的平方根,而`nt
recommend-type

react的函数组件的使用

React 的函数组件是一种简单的组件类型,用于定义无状态或者只读组件。 它们通常接受一个 props 对象作为参数并返回一个 React 元素。 函数组件的优点是代码简洁、易于测试和重用,并且它们使 React 应用程序的性能更加出色。 您可以使用函数组件来呈现简单的 UI 组件,例如按钮、菜单、标签或其他部件。 您还可以将它们与 React 中的其他组件类型(如类组件或 Hooks)结合使用,以实现更复杂的 UI 交互和功能。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。