大学的第一学期就这样结束了。前阵子临近放假,不知道该干嘛,就分别用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语言写的一个简单的计算器相关推荐

  1. C语言写的一个简单文字游戏-勇者斗恶龙

    最近在学C语言,昨晚利用已学的循环.函数.变量等知识写了这样一个简陋的文字游戏,发在CSDN论坛上试试~~另外,如果代码有什么问题或者坏习惯,希望能帮我指出来.谢谢! #include <std ...

  2. 简易计算器 java_终于写出一个简单的计算器了

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import javax.swing.*; import java.awt.event.*; import java.awt.*; import java ...

  3. java swing 简单计算器_java用swing写了一个简单的计算器

    其实swing没什么难度,主要是字符串运算表达式,如何进行计算才能得到结果 swing界面5分钟,算法5小时 下面看具体代码 package frame; import java.awt.Border ...

  4. python123程序设计题说句心里话_用c++写一个简单的计算器程序

    // 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...

  5. 用C语言实现一个简单的计算器代码

    #include <stdio.h> #include <math.h> #include <stdlib.h> //预处理指令 int main(void) {d ...

  6. c语言设计程序计算器,C语言程序设计,做一个简单计算器

    题目: C语言程序设计,做一个简单计算器 程序内容有:加减乘除和平方,立方,开方等.用if或者swith结构来编程. 算加法时只输出加法的结果,算减法时只出减法的结果,如此类推. 解答: 已发送, # ...

  7. 最近写了一个简单的面向对象的脚本语言 Q 语言

    最近写了一个简单的面向对象的脚本语言 Q 语言,语法类似于 Javascript, 加入了一些 python 的语法功能. 同时实现了部分的 Javascript prototype 的功能 (个人觉 ...

  8. C语言设计一个简单的计算器,完成两个数的加、减、乘、除、取余。(根据输入的运算符,选择相应的运算,用switch语句实现。

    设计一个简单的计算器,完成两个数的加.减.乘.除.取余.(根据输入的运算符,选择相应的运算,用switch语句实现. 实验代码: #include <stdio.h> #include & ...

  9. c语言12之编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除。

    题目: 设计一个简单的计算器程序,要求根据用户从键盘输入的表达式: 操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除. 源代码: #include<stdio.h> ...

最新文章

  1. c++ 全局变量初始化的一点总结
  2. 通过JDBC进行简单的增删改查(二)
  3. windbg-!process显示进程
  4. 皮一皮:华夏之大,无奇不有...
  5. 链表相交以及找循环链表入口
  6. cocos2d-x坐标系
  7. npm和node.js升级
  8. PHP 单一入口程序
  9. Why settype table is used in Genil component implementation
  10. SystemCenter2012SP1实践(23)私有云的权限设计
  11. c++十进制转二进制_二进制与十进制相互转换的原理
  12. Opera Android将支持HTML5和Flash功能
  13. C++中main函数中参数argc和argv的使用实例
  14. reportlab 应用 打印考生成绩
  15. Bjui框架--日期选择器
  16. Flash课堂计分板
  17. P,NP,NPC,NP-HARD 图片基于P!=NP
  18. JAVA WEB开发技术作业 HTML国家奖学金申请审批表
  19. 20189320《网络攻防》第六周作业
  20. 【附源码】计算机毕业设计SSM宁夏旅游信息管理系统

热门文章

  1. TeamTalk服务器
  2. 【渝粤教育】国家开放大学2019年春季 1292企业集团财务管理 参考试题
  3. Git与远程仓库进行关联设置
  4. Oracle入门(学习整理)
  5. 上不了网,代理服务器出现问题
  6. 力扣199场比赛 5473. 灯泡开关 IV
  7. mysql 获取一个库下的所有表名
  8. JS实现span标签显示年月日日期格式
  9. Python跟孩子一起学编程之一
  10. Python中获取两数相除的商和余数