C语言写的一个简单的计算器
大学的第一学期就这样结束了。前阵子临近放假,不知道该干嘛,就分别用java和C语言写了两个东西。java写了个文件查找的程序。C语言写了个简易的计算器。至于为什么写计算器~因为刚学C语言的时候,还没摸过VC,还没碰过编译器就看了几个简单的加减乘除的计算代码。然后就自己想了下,写了段自己认为正确。却不知道错误百出的代码,还发到了论坛。问别人对不对。可是却给论坛的那些"大神"们喷的体无完肤那叫一个惨啊。我记得他们说:"你void main()你就return 0........;"后面还有很多。反正把我这个新手说的差点放弃了。还好我心理够强大!然后前前阵子也是闲着无聊自己想了个计算器的伪算法。一直在那放着没有去尝试。于是就是前阵子试了下。发现还是可以的。但是不支持括号运算。(尝试了好久没有实现。。毕竟算法都只是自己想出来的简单suanf...)
/*********************************************************************
源代码区域
********************************************************************/
#include #include #include char ch={0};//单个字符int numarr[30];//存放最终计算的数字的数组(Number array)
int num_i=0;//(Number index)
int fn=0;//存放最终的结果(finish number)
char tnsarr[30];//存放数字字符的临时字符串数组(Temporary Number String Array)
int tnsa_i=0;//上面数组的下标(Temporary number string array index)
char jsarr[30];//存放+-字符的临时字符串数组(jia/jian string array)
int jsa_i=0;//上面数组的下标(jia/jian string array index)
int tcnarr[30];//存放乘除数字的临时整型数组(Temporary cheng/chu number array)
int tcna_i=0;//上面数组的下标(Temporary cheng/chu number array index)
char csarr[30];//存放*/字符的临时字符串数组(cheng/chu string array)
int csa_i=0;//上面数组的下标(cheng/chu string array index)
int isj=0;//是否执行过乘除操作的标志。如果是则值为1,否则为0
int tfn=0;//所有乘除的积或商/*函数声明*/
void Count(void);//主要函数,用于获取用户输入和判断用户输入以调用其他函数执行操作
void setJstr(void);//处理用户输入的'+'和'-'
void setCstr(void);//处理用户输入的'*'和'/'
void setKstr(void);//处理用户输入的'('和')'
void setNumberstr(char ch);//处理数字
void iniTsarr(void);//初始化临时数字字符串数组
void countC();//计算所有乘除的和
void inic();//初始化乘除操作
void finish(void);//最后调用该函数,将计算结果赋给fn变量
void iniAll(void);//初始化所有变量。让程序可以重复运行int main(void)
{/*C语言简易计算器* 2015年12月30日20:52:41* */system("cls");printf("********************C语言简易计算器********************\n| 时间:2015年12月30日20:52:41 |\n| e 结束运行 |\n| 操作符: |\n| +(加) |\n| -(减) |\n| *(乘) |\n| /(除) |\n*******************************************************\n");while(1){printf(" ");Count();if('\0'!=tnsarr[0]||'\0'!=jsarr[0])//如果发现这两个字符数组有一个为空,则认为用户什么都没有输入{printf("= %d\n",fn);}//初始化所有变量iniAll();}return 0;
}void Count()
{
/*计算*/while(1)//如果用户输入回车则停止获取{ch=getch();if('*'==ch||'/'==ch){//处理*/setCstr();}if('+'==ch||'-'==ch)//处理+-setJstr();if(ch>=48&&ch<=57)//处理数字setNumberstr(ch);if('e'==ch)//退出程序exit(0);//计算机结果(跳出循环获取键盘)if('='==ch||'\r'==ch){numarr[num_i]=atoi(tnsarr);//将临时字符串中的数字转换成整型数字赋给主数组++num_i;//iniTsarr();// printf("this3");break;}}finish();//最终计算// printf("this4");return ;
}//处理加减
void setJstr(){/*处理+-,将+-存入字符数组*/printf("%c",ch);//printf("\n执行setJstr\n");if(0==isj)//isj只能生效一次。一次过后又回到0的状态。因为下面的代码{numarr[num_i]=atoi(tnsarr);//将临时字符串中的数字转换成整型数字赋给主数组++num_i;}isj=0;iniTsarr();//清空临时数组jsarr[jsa_i]=ch;++jsa_i;return;
}//处理乘除
void setCstr()
{printf("%c",ch);tcnarr[tcna_i]=atoi(tnsarr);//将*号前的数字赋给临时整型数组++tcna_i;iniTsarr();//初始化tnsarr数组csarr[csa_i]=ch;//将*或/符号赋给临时字符数组++csa_i;/*********************************///printf("\n(%d)\n",tcnarr[tcna_i-1]);
// printf("\n(%c)\n ",csarr[csa_i-1]);/*********************************/countC();//printf("\n跳出刚刚的函数\n");return;
}
void countC(){//printf("\n执行countC\n");while(1){ch=getch();if(ch>=48&&ch<=57)setNumberstr(ch);if('*'==ch||'/'==ch){setCstr();return;}if('='==ch||'\r'==ch||'+'==ch||'-'==ch){/***********************************************************/tcnarr[tcna_i]=atoi(tnsarr);//将*号前的数字赋给临时整型数组++tcna_i;/***********************************************************/int i;tfn=tcnarr[0];//printf("\n此时的tcna_i=%d\n",tcna_i);for(i=0;i<tcna_i;++i){// printf("\n此时的符号=%c\n",csarr[i]);if('*'==csarr[i]){// printf("\n此时的tfn=%d\n",tfn);// printf("\n此时的tcnarr[i]=%d\n",tcnarr[i]);// printf("\n此时的tcnarr[i+1]=%d\n",tcnarr[i+1]);tfn*=tcnarr[i+1];}if('/'==csarr[i])tfn/=tcnarr[i+1];}isj=1;break;}}// printf("tfn=%d",tfn);numarr[num_i]=tfn;++num_i;inic();//初始化乘除操作//printf("\n执行zuihou\n");return;
}/*处理数字*/
void setNumberstr(char c){printf("%c",ch);tnsarr[tnsa_i]=c;++tnsa_i;return;
}//初始化临时数字字符串数组
void iniTsarr()
{tnsa_i=0;memset(tnsarr,'\0',30*sizeof(char));return;
}//计算结果
void finish()
{int i=0;fn=numarr[0];
// printf("\n执行finish\n");for(i=0;i<num_i;++i){if('+'==jsarr[i]){// printf("加\n");//printf("此时的number%d\n",numarr);// printf("此时的numarr[i]%d\n",numarr[i]);// printf("此时的numarr[i+1]%d\n",numarr[i+1]);fn+=numarr[i+1];}if('-'==jsarr[i]){// printf("减\n");//printf("此时的number%d\n",number);// printf("此时的numarr[i]%d\n",numarr[i]);// printf("此时的numarr[i+1]%d\n",numarr[i+1]);fn-=numarr[i+1];}}return;
}void iniAll(void)
{memset(numarr,0,sizeof(int)*30);//存放最终计算的数字的数组(Number array)num_i=0;//(Number index)fn=0;//存放最终的结果(finish number)memset(tnsarr,'\0',sizeof(char)*30);//存放数字字符的临时字符串数组(Temporary Number String Array)tnsa_i=0;//上面数组的下标(Temporary number string array index)memset(jsarr,'\0',sizeof(char)*30);//存放+-字符的临时字符串数组(jia/jian string array)jsa_i=0;//上面数组的下标(jia/jian string array index)//int t_num_array[30];//存放数字字符的临时字符串数组//int t_num_index=0;//上面数组的下标memset(csarr,'\0',sizeof(char)*30);//存放*/字符的临时字符串数组(cheng/chu string array)csa_i=0;//上面数组的下标(cheng/chu string array index)isj=0;
return;
}
//初始化乘除操作
void inic()
{memset(tcnarr,0,sizeof(int)*30);//存放乘除数字的临时整型数组(Temporary cheng/chu number array)tcna_i=0;//上面数组的下标(Temporary cheng/chu number array index)memset(csarr,0,sizeof(char)*30);//存放*/字符的临时字符串数组(cheng/chu string array)csa_i=0;//上面数组的下标(cheng/chu string array index)tfn=0;return;}
代码中的这些注释代码如://printf("此时的符号为。。。");这是编写过程中为了找到错误而写的。没有去删除。觉得这样调试挺不错的。
这个计算器非常简易,只能计算整数。不支持括号运算。 计算也不是百分百正确。因为有些计算会出现小数结果。
C语言写的一个简单的计算器相关推荐
- C语言写的一个简单文字游戏-勇者斗恶龙
最近在学C语言,昨晚利用已学的循环.函数.变量等知识写了这样一个简陋的文字游戏,发在CSDN论坛上试试~~另外,如果代码有什么问题或者坏习惯,希望能帮我指出来.谢谢! #include <std ...
- 简易计算器 java_终于写出一个简单的计算器了
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import javax.swing.*; import java.awt.event.*; import java.awt.*; import java ...
- java swing 简单计算器_java用swing写了一个简单的计算器
其实swing没什么难度,主要是字符串运算表达式,如何进行计算才能得到结果 swing界面5分钟,算法5小时 下面看具体代码 package frame; import java.awt.Border ...
- python123程序设计题说句心里话_用c++写一个简单的计算器程序
// 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...
- 用C语言实现一个简单的计算器代码
#include <stdio.h> #include <math.h> #include <stdlib.h> //预处理指令 int main(void) {d ...
- c语言设计程序计算器,C语言程序设计,做一个简单计算器
题目: C语言程序设计,做一个简单计算器 程序内容有:加减乘除和平方,立方,开方等.用if或者swith结构来编程. 算加法时只输出加法的结果,算减法时只出减法的结果,如此类推. 解答: 已发送, # ...
- 最近写了一个简单的面向对象的脚本语言 Q 语言
最近写了一个简单的面向对象的脚本语言 Q 语言,语法类似于 Javascript, 加入了一些 python 的语法功能. 同时实现了部分的 Javascript prototype 的功能 (个人觉 ...
- C语言设计一个简单的计算器,完成两个数的加、减、乘、除、取余。(根据输入的运算符,选择相应的运算,用switch语句实现。
设计一个简单的计算器,完成两个数的加.减.乘.除.取余.(根据输入的运算符,选择相应的运算,用switch语句实现. 实验代码: #include <stdio.h> #include & ...
- c语言12之编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除。
题目: 设计一个简单的计算器程序,要求根据用户从键盘输入的表达式: 操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除. 源代码: #include<stdio.h> ...
最新文章
- c++ 全局变量初始化的一点总结
- 通过JDBC进行简单的增删改查(二)
- windbg-!process显示进程
- 皮一皮:华夏之大,无奇不有...
- 链表相交以及找循环链表入口
- cocos2d-x坐标系
- npm和node.js升级
- PHP 单一入口程序
- Why settype table is used in Genil component implementation
- SystemCenter2012SP1实践(23)私有云的权限设计
- c++十进制转二进制_二进制与十进制相互转换的原理
- Opera Android将支持HTML5和Flash功能
- C++中main函数中参数argc和argv的使用实例
- reportlab 应用 打印考生成绩
- Bjui框架--日期选择器
- Flash课堂计分板
- P,NP,NPC,NP-HARD 图片基于P!=NP
- JAVA WEB开发技术作业 HTML国家奖学金申请审批表
- 20189320《网络攻防》第六周作业
- 【附源码】计算机毕业设计SSM宁夏旅游信息管理系统