编程练习——计算器的改良
2018-02-02 18:03
267 查看
一、基本介绍
在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“─”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。
输入描述 Input Description:键盘输入一个一元一次方程。
输出描述 Output Description:方程的解。
样例输入
Sample Input:6a-5+1=2-2a。
样例输出 Sample Output:a=0.750。
二、完整代码
程序执行结果:
![](https://img-blog.csdn.net/20180202180011467?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhlbmduaWFubGk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
另外,参考博客:http://blog.csdn.net/u012773338/article/details/41749421
在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“─”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。
输入描述 Input Description:键盘输入一个一元一次方程。
输出描述 Output Description:方程的解。
样例输入
Sample Input:6a-5+1=2-2a。
样例输出 Sample Output:a=0.750。
二、完整代码
/*---------------------------------------------------------------------------------------- Program Explain:解输入的一元一次方程(只包含整数、小写字母及+、-、=这三个数学符号), 将解方程的结果(精确至小数点后三位)输出至屏幕。 Input Description:键盘输入一个一元一次方程(如6a-5+1=2-2a) Output Description:方程的解(如上式的解为a=0.750) Create Date:2018.2.2 by lzn ----------------------------------------------------------------------------------------*/ #include <stdio.h> #include <string.h> #include <stdlib.h> / 9f6c /一元一次方程结构体定义 typedef struct Equation { int k; //未知数系数 char chr; //未知数的代替字符 double x; //方程最终的解 int constant; //方程的常数项的和 }Equation; //函数声明 Equation CalcEquation(char *str,int str_len); /********************************************************************************* * Function Name : main主函数 * Parameter : NULL * Return Value : 0 * Function Explain : * Create Date : 2018.2.2 by lzn **********************************************************************************/ int main(void) { char str[100]; Equation e; scanf("%s",str); e = CalcEquation(str,strlen(str)); e.x = -(double)e.constant/e.k; printf("%c=%.3lf(constant=%d,k=%d)\n",e.chr,e.x,e.constant,e.k); return 0; } /********************************************************************************* * Function Name : CalcEquation,计算一元一次方程 * Parameter : str:一元一次方程 str_len:字符串长度 * Return Value : 返回解析及处理后的结果 * Function Explain : * Create Date : 2018.2.2 by lzn **********************************************************************************/ Equation CalcEquation(char *str,int str_len) { Equation e; e.k = 0; //k为未知数系数 e.chr; //chr为自变量的代替字符 e.constant = 0; //常数项 e.x; //最终需要求的自变量 int sign = 1; //sign用于保存正负号,1代表正号,-1代表负号 int num = 0; //num为当前数值,可以是变量的系数,也可以是常数项 int flag = 1; //flag为"="号左右两边标志,1为等号左边 /*当匹配得到字母时说明这是未知数,此时未知数的前一个字符如果是数字,则说明这就是未知数的系数。 若第一个字符为字母时,通过遍历的方法就没办法判断其系数。所以第一个字符需要单独讨论。 */ if(str[0]=='-') { sign = -1; } else if(str[0]>='a'&&str[0]<='z') { e.k += 1; e.chr = str[0]; } else { num = num*10 + str[0] - '0'; } /* 从第二个字符开始遍历至最后一个字符。"if(num)"这个分支是根据上一次循环得到的num的值来判断的, 所以有一种特殊情况是当最后一个是字符是整数时,没办法再加入到constant里,因为已经没有下一次循环了。 所以需要再循环结束后再单独讨论这种情况。*/ for(int i=1;i<str_len;i++) { if(str[i]>='a'&&str[i]<='z') { e.chr = str[i]; //未知数的代替字符 e.k += sign*num*flag; //未知数的系数之和 num = 0; //当前数值清零 sign = 1; //清除正负号标志 } else if(str[i]>='0'&&str[i]<='9') { num = num*10 + str[i] - '0'; } else { if(num) { e.constant += sign*num*flag; //常数项之和 num = 0; sign = 1; } if(str[i]=='-') {sign = -1;} else if(str[i]=='+') {sign = 1;} else {flag = -1;} } } if(str[str_len-1]>='0'&&str[str_len-1]<='9') { e.constant += sign*num*flag; //最后一个字符是数字的情况 } return e; //返回解析及处理后的结果 }
程序执行结果:
另外,参考博客:http://blog.csdn.net/u012773338/article/details/41749421
相关文章推荐
- python编程练习---一行代码实现计算器功能
- java语言的科学与艺术-编程练习---简单的四则运算计算器
- Coursera-吴恩达-机器学习-(编程练习3)Neural Networks & Multi-class(对应第4周课程)
- 机器学习 - 编程练习(一):线性回归
- 《C和指针》章节后编程练习解答参考——第10章
- 作业 1 熟悉C语言编程环境、练习代码录入
- 25循环结构编程练习
- 编程练习1
- 模板元编程第九章练习(非答案)
- LeetCode编程练习 - Palindrome Linked List学习心得
- 编程练习2
- 第6章_数组_编程练习_Exercise6_5
- 编程练习2——04
- C++ primer plus 第十章编程练习
- C语言学习历程——编程练习2——02
- 13.11编程练习
- C++ Primer Plus第六版 第二章 编程练习答案
- 编程练习6
- 《java 语言程序设计》第1章编程练习
- 郭克华手机编程教学视频----我的练习源码(20)案例2:绘制一个红色的小球,让其慢慢下落,然后又弹起来