简易计算器c语言源码,

本人新学,

用的都是最基本的语句,

程序功能不完善,

有以下问题,

1.大数据无法计算,

2.较大整型数据输出为浮点型,(因为是老师布置的作业,有要求含实数的算术计算输出要含小数。

3.无法用()提升运算优先级,

欢迎提出改进意见

代码附上:

void fun1()//算术运算函数
{
char a[20][30],b[20];
double c[20],s;
int i,j,k,flag;
system("cls");//
printf("输入算术式\n格式如:31+42*21/43-2\n回车输出运算结果.");
do{
fflush(stdin);
flag=0;
system("pause");
system("cls");
for(i=0; i<20; i++)//循环语句输入
{
k=i;
for(j=0;; j++)
{
a[i][j]=getchar();//字符数组中每行保存一串数字与一个运算符或回车符
if(a[i][j]==‘\n‘||a[i][j]==‘+‘||a[i][j]==‘-‘||a[i][j]==‘*‘||a[i][j]==‘/‘)
{
b[i]=a[i][j];
a[i][j+1]=‘\0‘;
break;
}
}
if(b[i]==‘\n‘)break;
}
for(i=0; i<=k; i++)//判断输入是否合法
{
if(!(a[i][0]<=‘9‘&&a[i][0]>=‘0‘||a[i][0]==‘\n‘))
flag=1;
for(j=0; a[i][j+1]!=‘\0‘; j++)
{
if(!(a[i][j]<=‘9‘&&a[i][j]>=‘0‘||a[i][j]==‘\n‘))
flag=1;
if(flag)break;
}
if(flag)break;
}
if(flag)printf("输入错误,请重新输入!\n");
}
while(flag);
for(i=0; i<=k; i++)//判断输入数字是否有浮点型
{
for(j=0; j<10; j++)
if(a[i][j]==‘.‘)flag=1;
c[i]=atof(a[i]);//将字符串中数字字符转换为浮点型
}
for(i=0; b[i]!=‘\n‘; i++)//根据优先级先计算乘除
{
switch(b[i])
{
case ‘*‘:
c[i]*=c[i+1];
c[i+1]=c[i];
for(j=i; j!=0; j--)
{
if(b[j-1]==‘*‘||b[j-1]==‘/‘)
c[j-1]=c[j];
else break;
}
break;
case ‘/‘:
c[i]/=c[i+1];
c[i+1]=c[i];
for(j=i; j!=0; j--)
{
if(b[j-1]==‘*‘||b[j-1]==‘/‘)
c[j-1]=c[j];
else break;
}
break;
}
}
s=c[0];
for(i=0; b[i]!=‘\n‘; i++)
switch(b[i])
{
case ‘+‘:
s+=c[i+1];
break;
case ‘-‘:
s-=c[i+1];
break;
}
if(!flag)//整型浮点型判断
if(!(s==(int)s)) flag=1;
if(!flag) printf("%d\n",(int)s);//判断输出为浮点型还是整形并输出
else printf("%f\n",s);
system("pause");
}

时间: 2024-12-22 05:22:31

简易计算器c语言源码,的相关文章

VC++实现标准型计算器步骤及源码

VC++实现标准型计算器步骤及源码 2013年06月19日 09:48:47 无敌的成长日记 阅读数:4686 最近一段时间一直在做这个东西,刚刚拿到题目的时候认为这是一个简单的程序,可是随着编写程序的深入,发现这也不是一个很简单的程序,主要是需要考虑到一些连续加减以及混合运算的情况. 首先介绍一下这个小计算器的功能.其实也没有什么新的功能啦,只是有一些简单的+.-.*./运算,能够完成混合运算,是一个标准型的计算器. 建立文件 (1)建立应用程序外壳 创建一个新的AppWizard项目,命名为

比特币挂机网赚易语言源码日赚200已上+网站+视频全套

是于易语言开发而成 在线挂机获取收益 软件内设VIP系统 提款系统 推广系统 等多功能化 如而要易语言程序源码的可以联系我QQ 382913699 注册的话需要下载软件,软件大小不到2M,下载下来后注册下,一般一天可以挖200块钱左右!提现的不是VIP一天只能提现1次,一次0.3元! VIP没有这个限制!首先我不是VIP所以不敢断言一定 所以请大家帮个忙,复制下网址访问下就可以了! 等访问量达到500一定给大家反馈下!就算是假的 一天领0.3元也好啊

清晰易懂TCP通信原理解析(附demo、简易TCP通信库源码、解决沾包问题等)

目录 说明 TCP与UDP通信的特点 TCP中的沾包现象 自定义应用层协议 TCPLibrary通信库介绍 Demo演示 未完成功能 源码下载 说明 我前面博客中有多篇文章讲到了.NET中的网络编程,与TCP和UDP相关的有: 1.http://www.cnblogs.com/xiaozhi_5638/p/3167794.html 2.http://www.cnblogs.com/xiaozhi_5638/p/3169641.html 3.http://www.cnblogs.com/xiaoz

Go语言源码中的Rabin-Karp算法

strings.go包实现了一个Rabin-Karp算法.有点意思. 关于这个算法: 图灵社区的有一篇: 图说Rabin-Karp字符串查找算法 关于Go源码实现: 网友GoLove已写一个篇非常详细的说明了. http://www.cnblogs.com/golove/p/3234673.html GoLove那个已经分析的非常清楚了,只是前面那一串说明太长了.我把他的说明替换成代码形式. 直接跑起来,这样更能看得清楚些. package main import ( "fmt" &q

Go语言源码中Replacer查找部份的笔记

用过strings.NewReplacer,replacer.Replace(),它按对传入参数后,能依优先级替换,并能处理中文字符串参数. 觉得功能强大,特别好用.对它的查找和优先级怎么处理有点兴趣,花时间研究了下源码,在这记录一下个人理解. package main //author:xcl //2014-1-20 记录 import ( "fmt" "strings" ) func main(){ patterns := []string{ "y&q

go语言源码赏析之strings

0.字符串为不可变类型,内部使用指针指向UTF-8字节数组 不过要修改字符串可以先将其转换成[]byte或者[]rune.如下 package main func main() { s := "abcd" bs := []byte(s) bs[1] = 'B' println(string(bs)) u := "电脑" us := []rune(u) us[1] = '话' println(string(us)) } 输出: aBcd 电话 for遍历字符串有byt

栈的C语言源码

1.导言(为什么要用栈?) 通常来说,决定采用何种方式来存储数据是非常重要的,这样便于对数据检索时,数据会自动按照某种规定的顺序给出.栈和队列是检索数据的一种常用的数据结构.栈和队列是两种非常重要的数据结构,从数据结构来看,栈和队列也是线性表.是操作受限的线性表,栈只能在一端(栈顶)进行插入和删除,队列只能在一端(队尾)进行插入在另一端(队头)进行删除.但是从数据类型来说,栈和队列是和线性表不大相同两类重要的抽象数据类型.这里,首先重点介绍栈,以及栈的先关操作的c语言实现.栈是按照后进先出(LI

计算器的实现 源码

package com.example.cal; import android.R.integer; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageBut

华为面试题:扑克牌大小 C语言源码

扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A.2各4张,小王1张,大王1张.牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王): 3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如:4 4 4 4-joker JOKER. 请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR. 基本规则