• C语言写的计算器程序
• C语言编写计算器程序；附有源代码的详细注解
• c语言编写的基于51单片机的计算器程序(4x4按键)；0~9十个数字键，加减乘除四个键，等号按键和清零按键。实现长度最长为6位数的加、减、乘、除，可根据自己的硬件，进行改写，增加计算数字的长度。
• ## 用C语言编写简易计算器

万次阅读 多人点赞 2017-06-29 11:40:34
C语言中的switch语句实现简易的四则运算计算器#include int main() { double number1=0.0; double number2=0.0; char operation=0; for(;;) { printf("\nEnter the calculation\n"); scanf("%lf%c%lf",&n
用C语言中的switch语句实现简易的四则运算计算器

#include<stdio.h>
int main()
{
double number1=0.0;
double number2=0.0;
char operation=0;
for(;;)
{

printf("\nEnter the calculation\n");
scanf("%lf%c%lf",&number1,&operation,&number2);

switch(operation)
{
case '+':
printf("=%lf\n",number1+number2);
break;

case '-':
printf("=%lf\n",number1-number2);
break;

case '*':
printf("=%lf\n",number1*number2);
break;

case '/':
if(number2==0)
else
printf("=%lf\n",number1/number2);
break;

case '%':
if((long)number2==0)
else
printf("=%ld\n",(long)number1%(long)number2);
break;

default:
break;
}
}
return 0;
}
展开全文
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼printf("please input the Expression :\n ");gets©;s=filter©;Resolve(s,a,b);while(b[i]!='\0'&&b!='\n'){if(b[i]!='('){ if(kern<=a[0])number=stackin(number,a[kern++]); }if(b[i]=='a'||b[i]=='s'){number=stackout(number,&num);number=stackin(number,tatal(0,num,b[i]));}else if(operater==NULL||b[i]=='(')operater=stackin(operater,(double)b[i]);else if(b[i]==')'){if((char)operater->data=='(')operater=stackout(operater,&sum);else { while((char)operater->data!='('){number=stackout(number,&num);ber=stackin(ber,num);operater=stackout(operater,&sum);if(oper==NULL)oper=stackin(oper,sum);else {if(max((char)sum)<=max((char)oper->data)&&ber->next!=NULL){ber=stackout(ber,&num1);ber=stackout(ber,&num2);oper=stackout(oper,&num);ber=stackin(ber,tatal(num1,num2,(char)num));}oper=stackin(oper,sum);}}number=stackout(number,&num1);ber=stackin(ber,num1);operater=stackout(operater,&sum);ber=stackout(ber,&num1);ber=stackout(ber,&num2);oper=stackout(oper,&num);if((char)num=='-'||(char)num=='/')number=stackin(number,Contrary(num1,num2,(char)num));else { number=stackin(number,tatal(num1,num2,(char)num)); }}}else {if(max(b[i])<=max((char)operater->data)&&number->next!=NULL){number=stackout(number,&num1);number=stackout(number,&num2);operater=stackout(operater,&sum);num=tatal(num1,num2,(char)sum);number=stackin(number,num);}operater=stackin(operater,(double)b[i]);}i++;}if(kern<=a[0])number=stackin(number,a[kern]);while(operater!=NULL){number=stackout(number,&num1);number=stackout(number,&num2);operater=stackout(operater,&sum);number=stackin(number,tatal(num1,num2,(char)sum));}for(k=0;s[k]!='\0';k++)printf("%c",s[k]);number=stackout(number,&num2);printf("=%lf\n",num2);printf("\nSuccess! Press any key to exit!\n");getch();}
展开全文
• 这两天在看一个C语言写的计算器程序，做了不少的功夫，跟着作者一步步的进行完善，了解了许多细节性的东西，在此自己做个总结，加深自己对程序的印象，也算是梳理。 在该计算器程序，能进行加减乘除、sin、cos、exp...
• 这是用C语言编写计算器源代码，可以借鉴学习一下，有错误的地方请改正
• C语言编写计算器程序只能在黑框框里输入，怎么能让它可视化，就是能出现一个界面能点的那种
• 在进行程序运算时，float型数据一律转换为double型数据，为自动类型转换。所以结果一样。但float，double两种类型数据精度不同，float型有效数字位数为6~7位，double为15~16位，二者有区别； 一般情况下都用double...
main(){char c;double a,b;scanf("%lf%c%lf",&a,&c,&b);if(c=='+'){printf("%.2lf\n",a+b);}if(c=='-'){printf("%.2lf\n",a-b);}if(c=='*'){printf("%.2lf\n",a*b);}if(c=='/'){if(b==0)printf("error\n");elseprintf("%.2lf\n",a/b);}}判断输入符号：+-*/;输出对应数；重点是：​定义类型时定义double类型；输入%lf;输出想保存两位小数点的话就是%.2f;那么double和float类型定义的区别是什么呢？百度：​使用%f对实数只输出小数点后6位的数字(不是有效数字，强制只输出小数点后6位)，所以输出双精度型必须明确指定输出小数点后位数，要求使用%.nf格式n为小数点后数位！ %lf格式定义的是scanf()函数的格式输入，不是输出。​float是单精度实型，用4个字节存储double是双精度实型，用8个字节存储。在进行程序运算时，float型数据一律转换为double型数据，为自动类型转换。所以结果一样。但float，double两种类型数据精度不同，float型有效数字位数为6~7位，double为15~16位，二者有区别；一般情况下都用double定义；输出时根据需要%.nf;输入时指定是%lf(再次强调是字母l;不是数字1)​
展开全文
• C语言编写计算器 可以进行高浮点数计算， 带有界面，windows程序设计
• ## C语言编写的简单计算器程序

万次阅读 多人点赞 2016-07-01 10:03:13
这两天在看一个C语言写的计算器程序，做了不少的功夫，跟着作者一步步的进行完善，了解了许多细节性的东西，在此自己做个总结，加深自己对程序的印象，也算是梳理。 在该计算器程序，能进行加减乘除、sin、cos、exp...
这两天在看一个C语言写的计算器程序，做了不少的功夫，跟着作者一步步的进行完善，了解了许多细节性的东西，在此自己做个总结，加深自己对程序的印象，也算是梳理。

在该计算器程序，能进行加减乘除、sin、cos、exp等操作，同时能进行数值保存功能。而该计算器使用逆波兰表示法。即所有运算符都跟在操作数的后面，比如下列表达式：
（1 - 2） * （4 + 5）采用逆波兰表示法表示为：1 2 - 4 5 + *
逆波兰表达法中不需要圆括号，只要知道每个运算符需要几个操作数就不会引起歧义。

计算器程序实现很简单，具体原理如下：

while（/* 下一个运算符或操作数不是文件结束指示符 */）
if（/* 是数 */）
/* 将该数压入到栈中 */
else if （/* 是运算符 */）
/* 弹出所需数目的操作数 */
/* 执行运算 */
/* 将结果压入到栈中 */
else if （/* 是换行符 */）
/* 弹出并打印栈顶的值 */
else
/* 出错 */

在程序设计中，使用模块化思想，getop函数来进行读入，该函数返回一个标识，用来标识读入的是什么类型。主循环体中根据该标识执行相应的动作。

以下是该程序：  （我将所有函数和变量放在同一文件）

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define MAXOP 100
#define NUMBER '0'   //标识读入的是数字
#define NAME 'n'     //标识读入的是字符串（函数名或非法字符串）
#define ALPHA 26
int getop(char []);
void push (double);  //压栈
double pop(void);    //出栈
void clear(void);    //清空栈
void mathfnc(char []);   //执行相应的数学函数sin、cos、exp等

int main(void)
{
int type;
int i, var = 0;
double op1, op2,v;
char s[MAXOP];
double variable[ALPHA];

for (i = 0; i < ALPHA; i++)    //初始化用于保存数值的变量数组
variable[i] = 0.0;

while ((type = getop(s)) != EOF)    //读取输入
{
switch (type)
{
case NUMBER:
push (atof(s));
break;
case NAME:
mathfnc(s);
break;
case '+':
push (pop() + pop());
break;
case '*':
push (pop() * pop());
break;
case '-':
op2 = pop();
push (pop() - op2);
break;
case '/':
op2 = pop();
if (op2 != 0.0)
push (pop() / op2);
else
printf ("error: zero divisor\n");
break;
case '%':
op2 = pop();
if (op2 != 0.0)
push (fmod(pop(), op2));
else
printf ("error: zero divisor\n");
break;
case '?':    //打印栈顶元素
op2 = pop();
printf ("\t%.8g\n", op2);
push (op2);
break;
case '=':   //保存数值
pop();
if (var >= 'A' && var <= 'Z')
variable[var - 'A'] = pop();
else
printf ("error: no variable name\n");
break;
case 'c':
clear();
break;
case 'd':   //复制栈顶元素
op2 = pop();
push(op2);
push(op2);
break;
case 's':   //交换栈元素
op1 = pop();
op2 = pop();
push(op1);
push(op2);
case '\n':
v = pop();   //v保存最后的一次结果
printf ("\t%.8g\n", v);
break;
default:
if (type >= 'A' && type <= 'Z')
push(variable[type - 'A']);
else if (type == '@')   //输入的字符@表示最近一次结果值
push(v);
else
printf ("error: unknown command %s\n", s);
break;
}
var = type;
}
return 0;
}

/* ----------------------------------------------------------- */

#define MAXVAL 100

int sp = 0;     //标识栈顶
double val[MAXVAL];

void push(double f)
{
if (sp < MAXVAL)
val[sp++] = f;
else
printf ("error: stack full, can't push %g\n", f);
}

double pop(void)
{
if (sp > 0)
return val[--sp];
else
{
printf ("error: statck empty\n");
return 0.0;
}
}

void clear(void)
{
sp = 0;
}

void mathfnc (char s[])
{
double op2;

if (strcmp (s, "sin") == 0)
push(sin(pop()));
else if(strcmp (s, "cos") == 0)
push(cos(pop()));
else if(strcmp (s, "exp") == 0)
push(exp(pop()));
else if(strcmp (s, "pow") == 0)
{
op2 = pop();
push (pow(pop(), op2));
}
else
printf ("error: %s not supported\n", s);
}

/* ----------------------------------------------------------- */

#include <ctype.h>

int getch(void);
void ungetch(int);

int getop(char s[])
{
int i, c;
while ((s[0] = c = getch()) == ' ' || c == '\t')  //过滤开头的空白字符
;
s[1] = '\0';

i = 0;

if (islower(c))   //判断是否为小写字母，也即读取由小写字母组成的字符串
{
while (islower(s[++i] = c = getch()))
;
s[i] = '\0';

if (c != EOF)
ungetch(c);
if (strlen (s) > 1)
return NAME;
else
return c;
}

if (!isdigit(c) && c != '.' && c != '-')
return c;

if (c == '-')     //用于判断是负数还是减操作
{
if (isdigit(c = getch()) || c == '.')
s[++i] = c;
else
{
if (c != EOF)
ungetch(c);
return '-';
}
}

if (isdigit(c))      //收集整数部分
while (isdigit(s[++i] = c = getch()))
;

if (c == '.')    //收集小数部分
while (isdigit(s[++i] = c = getch()))
;

s[i] = '\0';

if (c != EOF)
ungetch(c);

return NUMBER;
}

/* ----------------------------------------------------------- */
/*
* 引用以下两个函数是因为：程序不能确定它已经读入的输入是否足够 *
* 除非超前多读入一些输入，在本程序中，读入一些字符合成一个数字 *
* 所以在看到第一个非数字字符之前，已经读入的数的完整性是不能确定的
* 由于程序要超前读入一个字符，这样就导致最后又一个字符不属于当前所要读入的数
*/

#define BUFSIZE 100
char buf[BUFSIZE];
int bufp = 0;

int getch(void)
{
return (bufp > 0) ? buf[--bufp] : getchar();
}

void ungetch (int c)
{
if (bufp >= BUFSIZE)
printf ("ungetch: too many characters\n");
else
buf[bufp++] = c;
}


该程序虽然简单，但是还是存在一些小小的问题，比如没有数据时进行pop的话，会打印栈中无数据同时返回数值0.0，在循环体中许多执行操作会将该数值保存到栈中，之后打印该值，用户体验度比较差。程序设计方面，模块化设计使得该程序容易增加功能而不影响其他模块，比如增加一些数学函数处理，在mathfnc函数中去添加，或增加一些运算符操作，可以在主循环体中增加。

总之，这次学习还是颇有收获。
展开全文
• 其实开发一款计算器简单，当然也是很多C语言小白必练手的一个项目，小编今天介绍的项目课程就是教你利用C语言开发一款简单计算器，非常适合新手小白哦~ 小编整理好了一套C/C++资料，加小编C/C++编程学习群：...
• C语言编的一个简单计算器程序，大家可以看看。
• 关于这个计算器，我已经改进了好几次，使用do-while和switch语句嵌套来进行简单的四则运算。但是在处理“／”运算时，由于分母不能为零，所以我使用了if-else语句。如下：#include main(void){ float sum1,sum2,jum...
• 满意答案zjwandy20102014.09.16采纳率：41%等级：12已帮助：5892人var c:char; sym:array[0..30]of char; num:array[0..30]of longint; ts,tn:shortint; x:longword; procedure calcu; var p:char;...
• 该楼层疑似违规已被系统折叠隐藏此楼查看此楼case'1':printf("请输入要计算的数字\n");scanf("%lf",&a);scanf("%lf",&b);sum=a+b;printf("%lf\n",sum);break;case'2':printf("请输入要计算的数字\n");...
• 该楼层疑似违规已被系统折叠隐藏此楼查看此楼case'1':printf("请输入要计算的数字\n");scanf("%lf",&a);scanf("%lf",&b);sum=a+b;printf("%lf\n",sum);break;case'2':printf("请输入要计算的数字\n");...
• STC89C52单片机C语言编写简单计算器程序，矩阵按键输入，4位数码管输出显示，可实现简单的加减乘除运算！
• 怎样用C语言实现简易计算器 #include<stdio.h> int main() { int a=0,b=0; char c=0; scanf("%d %c %d",&a,&c,&b); if (b==0){printf("Divided by zero!");} else{ switch(c) { ...
• 课程设计名称： C 语言课程设计课程设计题目： 简单计算器程序目录第1章 需求分析 0设计要求 0任务 0第2章 总体设计 1TOC \o "1-5" \h \z \o "Current Document" 设计简介及设计方案论述 1...\o "Current Document" ...
• C语言代码编写的一个简易计算器，可以实现加减乘除的功能！
• C语言简单计算器编写课程设计存档资料 成绩：华东交通大学理工学院课 程 设 计 报 告 书所属课程名称 C语言程序设计题 目 简单计算器分 院 电 信 分 院专业班级 电子商务2010 级 1　班学　号 20100210460123学生...
• 接上一篇文章：C语言实现计算器（一） 该程序较上一篇复杂，但功能比较齐全，可以实现带括号的计算，但仍不能实现带小数点的运算 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define...
• c语言半学期了，对字符的处理实在不擅长，请高手们帮我看看 谢谢了 // Calculator.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "stdlib.h" #include "math.h" #include "string....
• //x, y, z: 用来保存取模相关变量，printf("代码计算器：可以求加、减、乘、除和取模\n""如果需要进行四则运算请输入1, 如果需要进行取模运算请输入2 \n");do{scanf("%d", &xz);if (xz == 1){printf("请按照“被X数 ...
• C语言实现简单计算器 使用了函数指针数组，使代码大大简化。利用函数指针进行相应函数的调用，比起分支语句使代码更易扩展。 #include"jisuanqi.h" //菜单 void menu() { printf("****************************\n...
• 这是一个用C语言编写简单计算器。它使用readline获取用户输入。 最初写于2021年1月25日，当前版本： 1.5 可用命令 当前， calc支持以下命令： 命令 描述 calc 进入仅计算器模式（请参阅[1]） clear 清除萤幕 ...

...

c语言 订阅