C语言写的一个简单的计算器

article/2025/11/7 18:41:49

大学的第一学期就这样结束了。前阵子临近放假,不知道该干嘛,就分别用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("此时的符号为。。。");这是编写过程中为了找到错误而写的。没有去删除。觉得这样调试挺不错的。

这个计算器非常简易,只能计算整数。不支持括号运算。 计算也不是百分百正确。因为有些计算会出现小数结果。



http://chatgpt.dhexx.cn/article/TtE6xcW2.shtml

相关文章

用C语言实现一个简易的计算器

计算器可实现加减乘除的功能 首先写一个简单都菜单函数menu: void menu() {printf("*******************************************\n");printf("******1.add 2. sub *********\n");printf("******3.mul 4.div *****…

C语言实现简单的计算器(C语言入门1)

程序介绍 本程序是一个简易的计算器&#xff08;支持小数运算&#xff09;&#xff0c;计算能力是四则运算&#xff08;加减乘除&#xff09;。需要的知识内容&#xff1a;函数&#xff0c;选择语句&#xff0c;循环语句。 源码展示 #include <stdio.h> //加法模块 do…

C语言实现简易计算器

通过C语言实现一个简易的计算器 计算器可实现加减乘除等一系列运算 方法一&#xff1a; 1.程序总体使用switch语句实现多分支选择 switch (input) {case 1:printf("请输入两个操作数\n");scanf("%d%d", &x, &y);Add(x, y); break;case 2:print…

C语言学习:用C语言实现简单的计算器

用C语言编写一个简单的可以进行加减乘除运算混合运算的计算器的方法&#xff1a; # include <stdio.h>int main() {char operator;double firstNumber,secondNumber;printf("输入操作符 (, -, *,/): ");scanf("%c", &operator);printf("输…

用C语言写一个计算器

用C语言写一个计算器&#xff0c;除了四则混合运算之外&#xff0c;还支持三角函数和绝对值等函数。 PS E:\Code\PL\calc> .\a.exe abs(3*5-4^2) abs(3*5-4^2)1.000000 25-76*(4-5) 25-76*(4-5)12.000000文章目录 1. 加减法运算2. 加法和乘法3. 四则混合运算4. 浮点型…

使用C语言构造一个简单计算器

本节我们用小学生知识来制作一个简单的计算器&#xff0c;可以运算加&#xff0c;减&#xff0c;乘&#xff0c;除&#xff0c;以及余数的运算。 在这节代码中用到switch语句&#xff0c;因为要输入运算符&#xff0c;所以注意%c的对应 接下来上代码&#xff1a; #include &…

用c语言编写一个简易计算器

更高级的计算器移步http://t.csdn.cn/E2rVG 文章目录 前言一、原理是什么&#xff1f;二、使用步骤 1.代码总结 前言 利用C语言编写一个能够进行简单加减乘除的计算器 一、原理是什么&#xff1f; 利用C语言自带算法&#xff0c;进行简单的逻辑运算 二、使用步骤 1.代码 …

【C语言】计算器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是謓泽&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f3c5;2021年度博客之星物联网与嵌入式开发TOP5&#xff5e;2…

通信行业研究宝典

文章大纲 哑铃型布局&#xff0c;从供应链、产业链到场景链端-智能硬件&#xff1a;万亿大市场&#xff0c;小米重兵布局管-物联网核心基础设施&#xff0c;小米重点布局芯片、模组、小基站云-应用服务布局&#xff1a;布局向家、车、天场景延伸&#xff0c;文娱迎来新增长 通信…

HTTP RPC Dubbo hsf Spring-cloud 图解比较

前言 HSF是一个分布式的远程服务调用框架&#xff0c;其实我更喜欢把分布式几个字去掉&#xff0c;因为HSF本身并不是一个单独的服务&#xff08;指一个进程&#xff09;&#xff0c;他是附属在你的应用里的一个组件&#xff0c;一个RPC组件(远程过程调用——Remote Procedure…

第五章:产品管理

本章索引&#xff1a; [第五章&#xff1a;产品管理(1) – 产品管理介绍] [第五章&#xff1a;产品管理(2) – 需求管理方法] [第五章&#xff1a;产品管理(3) – 目标管理 ] [第五章&#xff1a;产品管理(4) – 团队沟通] [第五章&#xff1a;产品管理(5) – 团队协同] …

5G时代,产业互联网新生态正在加速形成。

转自:微点阅读(www.weidianyuedu.com)微点阅读 - 范文大全 - 免费学习网站 导 读 回顾整个移动通信发展史,有人说2G时代发短信是最时髦的通信方式,3G时代微信兴起,4G时代手机把衣食住行都“管起来”。 到了5G时代,已经突破传统通信技术人与人之间点对点的通信模式,大…

[已授权] 互联网定位技术小谈

​ 诚邀阿里云先知社区邀请&#xff0c;不胜感激&#xff01;今日小编在此为大家介绍一下互联网中所应用的定位技术。互联网的发展日新月异&#xff0c;技术迭代很快&#xff0c;各行各业的智慧在互联网这片蓝天下碰撞结晶&#xff0c;造福大众。今天要讲述的集中定位方式&…

5G承载网,到底有哪些关键技术?

戳蓝字“CSDN云计算”关注我们哦&#xff01; 作者 | 小枣君 来源 | 鲜枣课堂 之前小枣君给大家介绍了5G承载网的基本知识&#xff08;链接&#xff1a;5G承载网到底有什么不同&#xff1f;&#xff09;。今天&#xff0c;我们再来看看5G承载网中的常见关键技术。 首先&#x…

IDC报告称中国成为全球第二大公有云 IaaS 市场;腾讯牵手宝马在华设云计算中心;华为5G折叠屏手机通过入网许可:8月上市……...

关注并标星星CSDN云计算 极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01; 每周三次&#xff0c;打卡即read 更快、更全了解泛云圈精彩news go go go 海盗船已推出第一款32G…

中台架构的未来在哪—开放式架构

春节前应“技术琐话”之约&#xff0c;试图写一篇讨论架构方法论的文章&#xff0c;然而动笔之后&#xff0c;才发现&#xff0c;自己似乎陷入了Frederick P. Brooks先生在《设计原本》一书中指出的问题&#xff1a;“设计中最困难的部分在于决定要设计什么”。 2020年1月18日…

大多数人不知道的企业数据分析能力金字塔,你处在哪一级?

写这篇文章来源于两个故事&#xff1a; 故事一&#xff1a;一位在互联网行业做数据库架构多年的朋友一起吃饭&#xff0c;问起我现在在做什么&#xff0c;我说自己在做医疗方面的数据分析&#xff0c;朋友笑&#xff0c;说&#xff1a;你有很多资源啊&#xff0c;只要你能拿到…

美团 大规模商品知识图谱的构建与应用

作者 | 曹雪智博士 美团 技术专家 来源 | DataFunTalk 在互联网新零售的大背景下&#xff0c;商品知识图谱作为新零售行业数字化的基石&#xff0c;提供了对于商品相关内容的立体化、智能化、常识化的理解&#xff0c;对上层业务的落地起到了至关重要的作用。 相比于美团大脑中…

我逃到国企了

文章内容整理自公众号国企程序锅 文章目录 入职国企心得体会 一、入职前二、入职后三、工作开发内容四、钱总结&#xff1a;北京户口相关问题 一、北京户口咋获得&#xff1f;二、北京户口有啥用&#xff1f;三、高薪无户口VS低薪有户口&#xff1f;总结&#xff1a;秋招找国企…

小程序,是腾讯云的杀手锏?

“【报告下载】后台回复关键词“数据智能”可免费下载数据猿最新发布的完整高清版《2021中国数据智能产业发展报告》 大数据产业创新服务媒体 ——聚焦数据 改变商业 在中国云计算市场&#xff0c;腾讯云长期坐着第二把交椅。但是&#xff0c;这两年华为云发展太快&#xff0c…