C语言制作简单计算器
简易计算器C语言代码
简易四则运算计算器计算机工具地历史而言,中国古代最早采用地一种计算工具叫筹策,又叫做算筹,这种算筹多用竹子制成,也有用木头,兽骨充当材料的,大约270枚一束,放在布袋里可随身携带。
直到今天仍在使用的住算盘,是中国古代计算工具领域中的另一项发明明代时的住算盘已经与现代的住算盘几乎相同。
17世纪初,西方国家的计算工具有了较大的发展。
英国数学家纳尔发现了“纳皮尔算筹”;英国牧师奥却德发明了圆柱形对数计算尺,这种计算尺不仅能做加减乘涂,乘方和开方运算,甚至可以计算三角函数,指数函数和对数函数。
这些计算工具不仅带动了计算的发展,也为现代计算器发展尊定了良好的基础,成为现代社会应用广泛的计算工具,如手机,操作系统上附带的多功能计算器。
项目设计目的掌握模块的划分;掌握结构体定义;掌握栈的操作;掌握函数的定义;掌握栈的基本操作;掌握VC的基本绘图库;掌握鼠标的响应操作;目设计内容设计一个含有界面的计算器,输入一个包含括号的表达式,使用栈数据类型实现整数的四则运算操作,开方运算。
项目设计要求根据分析,系统要求实现以下几点基本功能:可通过按钮输入数字、运算符;能通过按钮实现退格、清除功能;实现加、减、乘、除、开方运算功能;实现括号运算;显示运算结果;良好的交互界面。
项目详细设计功能模块图根据系统功能要求,主要含有四大模块,分别是计算器界面设计模块、计算器按键控制模块、四则混合运算模块、计算器记忆处理模块。
计算器界面设计模块:调用VC图形系统函数和字符函数画出计算器的界面,包括24个按钮和一个文本输入框。
计算机按键控制模块:计算器通过键盘按键值的判断,执行相应的操作,如接收数字输入等。
计算器计算处理模块。
计算处理模块主要完成可以包括括号的表达式运算,运算包括加,减,乘,除、开方。
计算处理模块在按键控制模块中被调用执行。
处理模块是通过栈来实现的,分别定义了两个顺序栈,一个用来存放操作符栈,一个用来存放操作数栈。
计算器记忆处理模块。
c语言编写计算器程序
题目:计算器用C语言编写软件完成以下任务:在实数范围内支持加、减、乘、除运算,同时支持正弦、正切,及其反三角函数运算。
用户可以选择运算的类型,并可以在界面进行数据的输入和输出。
被运算的数据、运算的类型、运算的结果应能够保存到文件myfile.txt 中。
保存的形式可以参考如下所示:4*2=8;sin(0.5)=0.479426。
三、课程设计要求1. 程序质量:✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“运算选项”、“数据输入”、“保存结果”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2. 课程设计说明书:课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
目录一.需求分析 (1)二.流程图 (1)三.核心技术的实现方法及程序 (3)四.总结 (4)五.参考文献 (5)六.源程序 (5)一需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为2个模块。
其中每一个模块对应一个函数,他们的功能分别是:运算和保存。
二.程序流程图(1)用switch语句完成:图(1)运算流程图图(2)程序整体流程图三.核心技术的实现方法及程序本程序主要由一个主函数和8个自定义函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
下面分别进行说明:1.选择函数:定义函数名称,分别编号,按照数字选择。
进入调试状态,页面显示“choose the right number”选择计算函数进行下一步的运算,具体程序段如下:void main(){int n;double a,b,c;FILE *fp;fp=fopen("c:\\myfile.txt","w+");while(1){printf("***********计算器************************ \n ");printf("*********************1-sum*************** *********** \n" );printf("********************2-jian**************** ********* \n");printf("********************3-cheng************** ********** \n ");printf("********************4-chu************************* \n ");printf("********************5-zhengxuan******************** \n ");printf("********************6-zhengqie************ ******** \n ");printf("********************7-fanzhengxuan******** ********** \n ");printf("********************8-fanzhengqie******************* \n ");printf("*********************9-exit*************** ********** \n ");printf("choose the ringt number:\n");2.运算函数:用switch语句实现,分别计算,然后跳出。
C语言实现计算器功能
C语言实现计算器功能计算机科学中的计算器功能是一个非常常见的问题。
在C语言中,我们可以使用各种技术和算法来实现这个功能。
在本文中,我将介绍一种简单的实现方法,该方法可以处理基本的四则运算。
首先,我们需要定义我们的计算器结构。
在C语言中,我们可以使用结构来组织相关的数据和函数。
我们可以定义一个名为 Calculator 的结构体,它包含两个浮点数类型的操作数和一个字符类型的操作符。
```ctypedef structfloat operand1;float operand2;char operator;} Calculator;```接下来,我们可以定义一些辅助函数来执行各种计算。
我们可以使用switch 语句来根据操作符执行相应的操作。
我们可以使用 scanf 函数来读取用户输入的操作数和操作符。
```cfloat add(float operand1, float operand2)return operand1 + operand2;float subtract(float operand1, float operand2)return operand1 - operand2;float multiply(float operand1, float operand2)return operand1 * operand2;float divide(float operand1, float operand2)return operand1 / operand2;void calculate(Calculator* calculator)switch(calculator->operator)case '+':printf("Result: %f\n", add(calculator->operand1, calculator->operand2));break;case '-':printf("Result: %f\n", subtract(calculator->operand1, calculator->operand2));break;case '*':printf("Result: %f\n", multiply(calculator->operand1, calculator->operand2));break;case '/':printf("Result: %f\n", divide(calculator->operand1,calculator->operand2));break;default:printf("Invalid operator\n");break;}```现在我们可以编写一个主函数来演示我们的计算器功能。
C语言(面积计算器)
C语⾔(⾯积计算器)简单⾯积计算器(⾃定义函数利⽤)调试了好久也没有从default再次进⼊switch;程序不能输⼊负数⽂章中以规范;1 #include<stdio.h>2 #include <stdlib.h>3 #include<math.h>4double calculateround(double);5double calculatesan(double,double);6double calculatechang(double,double);7int panduan(double);8int main ()9 {10int choose;11double r,s;12double w ,h;13 printf("*************本应⽤程序只能执⾏⼀次且不能循环执⾏****************\n");14 printf("------------------------只有三个选项由---------------------------\n");15 printf("1、计算圆的⾯积!\n");16 printf("2、计算三⾓形的⾯积!\n");17 printf("3、计算长⽅形的⾯积!\n");18 printf("-----------------------------------------------------------------\n");19 printf("请输所计算的⾯积的选项:\n");20 scanf ("%d",&choose);21switch (choose)22 {23case1:printf("请输⼊圆的半径:\n");24do25 {26 scanf("%lf",&r);27if(!panduan(r))28 {29 printf("请输⼊正确的数值,本程序只⽀持正数,请重新输⼊:");30 }31 }while(!panduan(r));32 s = calculateround(r);33break;34case2:printf("请输⼊三⾓形的宽和⾼:\n");35do36 {37 scanf("%lf%lf",&w,&h);38if(!panduan(w)||!panduan(h))39 {40 printf("请输⼊正确的数值,本程序只⽀持正数,请重新输⼊:");41 }42 }while(!panduan(w)||!panduan(h));43 s= calculatesan( w, h);44break;45case3:printf("请输⼊三⾓形的宽和⾼:\n");46do47 {48 scanf("%lf%lf",&w,&h);49if(!panduan(w)||!panduan(h))50 {51 printf("请输⼊正确的数值,本程序只⽀持正数,请重新输⼊:");52 }53 }while(!panduan(w)||!panduan(h));54 s= calculatechang(w,h);55break;56default:57 printf("请输⼊正确的选项:");58 }59 printf("所需计算的⾯积为:%.2lf\n",s);6061return0;62 }63int panduan(double num)64 {65return num>0;66 }67double calculateround(double r)68 {69double s=3.14 * pow(r,2);70return s;71 }72double calculatesan(double w,double h)73 {74double s = w *h/2;75return s;76 }77double calculatechang(double w,double h) 78 {79double s = w *h;80return s;81 }希望⼤神给与指点!。
c语言计算器程序编写代码
c语言计算器程序编写代码C语言是一门广泛应用于计算机程序设计中的高级编程语言,计算器是我们日常生活中必不可少的工具之一。
今天,我们将探讨如何使用C语言编写计算器程序。
步骤一:确定计算器的基本功能在开始编写任何计算器程序之前,我们需要先决定它的基本功能。
例如,我们需要让计算器能够执行四种基本算术运算 -- 加、减、乘、除。
我们可能还需要添加其他一些功能,例如计算百分数、开根号、求幂等。
步骤二:编写C语言代码接下来,我们可以开始编写计算器程序的C代码。
此时,我们需要确定程序的最外层框架。
这包括用于接收用户输入、调用所需的函数以及输出结果的代码。
例如,我们可以使用如下的代码框架:```#include <stdio.h>int main() {// 接收输入// 调用对应的函数进行计算// 输出结果return 0;}```步骤三:编写函数我们需要编写函数来执行各种计算。
例如,我们可以编写一个add函数来执行加法,一个Subtract函数来执行减法,以此类推。
对于每个函数,我们需要指定它所需的输入,以及它返回的输出。
例如,对于add函数,我们期望它将两个数字相加,并返回结果:```int add(int x, int y) {return x + y;}```步骤四:解析用户输入为了使计算器程序更加友好,我们希望程序能够解析用户输入并检查其是否有效。
例如,如果用户输入了两个不能相互转换为数字的字符串,则程序应该输出错误消息。
步骤五:测试代码最后,我们需要测试我们的代码以确保它能够正常工作。
这意味着我们应该使用各种输入和边缘情况进行测试,例如“0除以任何数字”和“无效输入”的情况。
总结编写C语言计算器程序可能看起来很困难,但实际上它是一项非常有趣的任务,因为它要求我们配备基本的编程知识并创造性地思考解决方案。
通过这篇文章,我们了解了如何确定计算器的基本功能,如何编写C语言代码并编写函数,如何解析用户输入以及如何测试我们的代码。
C语言程序设计-简单的计算器
- - . 《程序设计基础(C)》课程设计报告简易计算器设计学生姓名:学号:班级:指导老师:日期:309工作室设计目录一、设计目标2二、总体设计4三、详细设计6四、调试与测试12五、分析及结论13六、参考文献14【附录】16一、设计目标设计一个C语言程序(简单计算器设计)具体要求:在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。
主要功能:进行+、-、*、/、三角函数、对数、幂等各项数学运算,能够进行进制间的相互转换与计算。
二、总体设计1、程序设计组成框图2、设计思路简单计算器的设计的程序中主要调用的函数有:数学函数的定义和I/O函数;设计思路和理念在于一切追求简便易操作原理,通过个人的构思和设计以及调试运行设计出这一款简单的计算器。
3、程序设计流程图三、详细设计1、功能函数①函数的功能:两数的+、-、*、/计算、求平均函数的入口:从main()的if(flag==1)开关结构中进入,即flag的值为1时进入该函数,从而进行该功能函数的计算。
函数调用关系:被主函数调用,由if()开关结构中进入。
函数的出口:函数的出口为printf("是否继续运算?(Y/N) :"),此时输入“Y”,继续前面的结构。
2、功能函数②函数的功能: x的y次方的计算、两数的求余、以x为底y的对数函数的入口:从main()的if(flag==2)开关结构中进入,即flag的值为2时进入该函数,从而进行该功能函数的计算。
函数调用关系:被主函数调用,由if()开关结构中进入。
函数的出口:函数的出口为printf("是否继续运算?(Y/N) :"),此时输入“Y”,继续前面的结构。
3、功能函数③函数的功能: 单个数值sin、cos、tan的计算,以e为底的指数、求绝对值函数的入口:从main()的if(flag==3)开关结构中进入,即flag的值为3时进入该函数,从而进行该功能函数的计算。
C语言实现简易计算器(可作加减乘除)
C语⾔实现简易计算器(可作加减乘除)C语⾔实现简易计算器(加减乘除)计算器作为课设项⽬,已完成答辩,先将代码和思路(注释中)上传⼀篇博客已增添、修改、整理⾄⽆错且可正常运⾏虽使⽤了栈,但初学者可在初步了解栈和结构语法后理解代码#include <stdlib.h>#include <stdio.h>#include <string.h>#define IsDouble 0#define IsChar 1//_______________________________________________________________________________________________________________________________________________________ //1.⽀持浮点数和字符的栈typedef struct {char * buffer;int typesize;int top;int max;} stack;stack * CreateStack(int max, int typesize);//创建⼀个栈void DestroyStack(stack *);//释放栈的空间void ClearStack(stack *);//清空栈int Push(stack *, void *);//⼊栈int Pop(stack *, void *);//出栈int GetSize(stack *s);//得到栈的⼤⼩int GetTop(stack *, void *);//找到栈顶int IsEmpty(stack *);//判断是否为空栈,空则下溢int IsFull(stack *);//判断栈是否已满,满则溢出stack * CreateStack(int max, int typesize){stack * s = (stack*)malloc(sizeof(stack));//为栈s malloc内存if (!s) return 0;//为结构中buffer元素malloc内存s->buffer = (char *)malloc(sizeof(char) * max * typesize);if (!s->buffer) return 0;//初始化结构中的栈顶,最⼤值,类型⼤⼩s->top = -1;s->max = max;s->typesize = typesize;return s;}void DestroyStack(stack* s){free(s->buffer);//先释放buffer的空间free(s);//在释放s的空间}void ClearStack(stack * s){s->top = -1;//清空栈(栈头位置归零)}int Push(stack * s, void * data){if (IsFull(s)) return 0;//如果栈已满则return 0,防⽌溢出//栈未满则将栈头移动打动下⼀位置,并将data中的元素拷⼊栈中buffer的第top位置s->top++;memcpy(s->buffer + s->top*s->typesize, data, s->typesize);//⼊栈成功return 1return 1;}int Pop(stack * s, void * data){if (IsEmpty(s)) return 0;//出栈判断栈是否为空,若为空则return 0//栈未空则将buffer中top位置的字符拷⼊data记录,并让栈头向前移动⼀个位置memcpy(data, s->buffer + s->top*s->typesize, s->typesize);s->top--;//成功则return 1return 1;}int GetSize(stack *s){return s -> top+1;//栈头位置+1得到⼤⼩}int GetTop(stack *s, void * data){if (IsEmpty(s)) return 0;//如果栈空return 0//栈不为空则将top位置的字符拷回data记录,得到栈头memcpy(data, s->buffer + s->top*s->typesize, s->typesize);//成功则return 1;return 1;}int IsEmpty(stack * s){return s->top == -1;//如果top为-1则栈空}int IsFull(stack * s){return s->top == s->max-1;//如果top为max-1则栈满}//___________________________________________________________________________________________________________________________________________________ //2.定义⼀个cal类型,其中data存数时sign为IsDouble,存字符时,sign为Ischartypedef struct {double data;char sign;} cal;//3.查找对应符号(找到则返回该符号下标)(找不到则说明该部分为数字返回-1)int SearchCode(char ch){char * code = "+-*/()@";//@为终⽌符,算式输⼊结束int index = 0;//while (code[index]){if (code[index] == ch) return index;index++;}return -1;}//4.得到两个符号间的优先级//与SearchCode相对应,char GetPriority(char ch, char next){//创建⼀个perferen表,第i⾏(列)对应SearchCode函数中code中的第i个字符char perferen[7][7] = {">><<<>>",">><<<>>",">>>><>>",">>>><>>","<<<<<=E",">>>>E>>","<<<<<E="};//找到两个形参对应的字符int c = SearchCode(ch);int n = SearchCode(next);//如果找不到对应运算符(字符不是运算符⽽是为数字)return Eif (c==-1 || n==-1) return 'E';//如果找到两个对应运算符则按照优先级表返回两个运算符的优先级return perferen[c][n];}//5.四则运算double add(double a, double b) { return a+b; }double sub(double a, double b) { return a-b; }double mul(double a, double b) { return a*b; }double ddiv(double a, double b) { return a/b; }//整合四种运算double calcu(double a, char ch, double b){double (*calculation[4])(double,double) = {add,sub,mul,ddiv};return calculation[SearchCode(ch)](a,b);}//6.检测字符串int CheckStr(char * buffer){int n;//遍历字符串确保算式中⽆⾮法字符若检测到⾮法字符return 0,若都合法则return 1for (n = 0;buffer[n];n++){if ((SearchCode(buffer[n]) != -1 || buffer[n] == '.' || (buffer[n] >= '0' && buffer[n] <= '9')) && buffer[n] != '@') continue;else return 0;}buffer[n] = '@';//加上终⽌符,表⽰算式结束buffer[n+1] = '\0';return 1;}//7.得到数据转化为double类型存⼊rsint GetDigit(char * buffer, int * n, double * rs){char str[30];int i,j = 0;for (i = 0;SearchCode(buffer[*n]) == -1;i++){str[i] = buffer[*n];//从*n位置开始,将这⼀串数字字符存⼊str(*n)++;}str[i] = '\0';for (i = 0;str[i];i++){if (str[i] == '.') j++;}//如果⼀段⼩数有多个⼩数点或⼩数点在数字⾸尾,return 0if (j>1 || str[i-1] == '.' || str[0] == '.') return 0;//rs接收转化为double的数据*rs = atof(str);//操作成功return 1return 1;}//8.将⽤户输⼊的buffer字符串转化为可供程序运算的calstr数组int resolu(char * buffer, cal * calstr){int i = 0, j = 0;cal c;while (buffer[i]){if (SearchCode(buffer[i]) == -1){//如果得到数据不成功则return 0if (GetDigit(buffer,&i, &c.data) == 0) return 0;//如果成功得到数据则在c.sign标记为浮点数c.sign = IsDouble;//将c存⼊数组calstr中calstr[j++] = c;}else{//若符号为运算符//判断正负号if (buffer[i] == '-' && (buffer[i-1] == '('||buffer[i-1] == '+'||buffer[i-1] == '-'||buffer[i-1] == '*'||buffer[i-1] == '/') || (i==0 && buffer[0] == '-')){ i++;if (GetDigit(buffer,&i, &c.data) == 0) return 0;//在符号的下⼀位开始查找,若找不到数字return 0//否则,给数字取相反数,c.sign标记为浮点数,存⼊calstr中c.data = 0 - c.data;c.sign = IsDouble;calstr[j++] = c;} else//如果是正号,与符号处理⽅式同理if (buffer[i] == '+' && (buffer[i-1] == '('||buffer[i-1] == '+'||buffer[i-1] == '-'||buffer[i-1] == '*'||buffer[i-1] == '/') || (i==0 && buffer[0] == '+')){ i++;if (GetDigit(buffer, &i, &c.data) == 0) return 0;c.sign = IsDouble;calstr[j++] = c;}else{//如果不是正负号,则为运算符,先强制转换为double类型存在c.data⾥,然后c.sign标记为char类型,存⼊calstrc.data = (double)buffer[i++];c.sign = IsChar;calstr[j++] = c;}}}//操作蔡成功则return 1return 1;}//9.计算出结果int result(cal * calstr, double * rs){stack * pst = CreateStack(100,sizeof(char));//运算符栈stack * pnd = CreateStack(100,sizeof(double));//数据栈double num1,num2;int n = 0;char ch = '@';Push(pst, &ch);//在转换得到的calstr中遍历直到终⽌符'@"while(ch != '@' || !(calstr[n].sign == IsChar && (char)calstr[n].data == '@')){//如果calstr的n位上是浮点数,则将这个data压栈进⼊数据栈pnd中if (calstr[n].sign == IsDouble){Push(pnd, &(calstr[n].data));n++;}//反之,如果是运算符,则要检测优先级else{switch( GetPriority(ch, (char)calstr[n].data)){//如果运算符优先级较⼩,则让ch等于优先级⼤的符号并压⼊符号栈pst中case '<':ch = (char)calstr[n].data;Push(pst, &ch);n++;break;//如果结果为等号,让符号出栈暂存到ch中case '=':if (!Pop(pst, &ch)) return 0;n++;break;//如果ch优先级较⾼,则将前两个数字及运算符出栈,分别储存⾄num2,ch,num1中,进⾏运算,得到的结果再次压栈进⼊pnd中 case '>':if (!(Pop(pnd,&num2) && Pop(pst,&ch) && Pop(pnd,&num1))) return 0;num1 = calcu(num1,ch,num2);Push(pnd, &num1);break;//如果符号顺序出错,return 0case 'E':return 0;}}//检测是否可以得到栈顶符号,栈空则return 0if (!GetTop(pst, &ch)) return 0;}//如果栈中得到了最终结果,并且取出pnd中的最终结果到rs,return 1if (GetSize(pnd) == 1 && GetTop(pnd,rs)){DestroyStack(pst);DestroyStack(pnd);return 1;}//否则 return 0else{return 0;}}//10.⽤户交互函数void treatment(){char buffer[100];//⽤户输⼊的字符串(算式)cal calstr[50];//计算⽤的数组double rs = 0;//计算结果printf("Enter your equation:");gets(buffer);//让⽤户输⼊算式buffer//⽤户不输⼊"exit"就不退出while (!(buffer[0]=='e' && buffer[1]=='x' && buffer[2]=='i' && buffer[3]=='t')){//检查buffer中字符君合法,成功将buffer转化为⽤于计算的calstr数组,成功计算出结果存⼊rsif (CheckStr(buffer) && resolu(buffer,calstr) && result(calstr,&rs)){printf("\n%lf\n",rs);}else{printf("\nError!\n");}printf("Enter \"exit\"to quit");printf("\nEnter your equation:");gets(buffer);//再次让⽤户输⼊算式}printf("\nbye\n");}//11.主函数int main(){treatment();}参考⽂献链接如下[参考⽂献]()。
c语言编写计算器
#define MAX 80#define MAX1 40#define MAX2 40#define NULL 0#include <stdio.h>#include <math.h>typedef struct{double A[ MAX1 ];int top1;}shuju;typedef struct{char B[ MAX2 ];int top2;}yunsuanfu;void chushihua1(shuju *p) {p->top1 = 0;}void chushihua2(yunsuanfu *p) {p->top2 = 0;}int charu1(shuju *p,double x) {if(p->top1 >= (MAX1 - 1)) {return 0;}else{p->A[ p->top1 ] = x;p->top1++;return 1;}}int charu2(yunsuanfu *p,char x) {if(p->top2 >= (MAX2 - 1)){printf("you are wrong2\n");return 0;}else{p->B[ p->top2 ] = x;p->top2++;return 1;}}int chuzhuan1(shuju *p,double *x) {if(p->top1 < 0){return 0;}else{p->top1--;*x=p->A[ p->top1 ];return 1;}}int chuzhuan2(yunsuanfu *p,char *x){if(p->top2 < 0){printf("you are wrong22\n");return 0;}else{p->top2--;*x=p->B[ p->top2 ];return 1;}}int op(char f,char b){if((f == '(' && b == ')') || (f == '\0' && b == '\0')) return 2;else if(((b == '*' || b == '/') && (f == '+' || f == '-'))||(b == '(' && f != ')') || ((f == '(' || f == '\0') && (b == '+' || b == '/' || b == '-' || b == '*')))return -1;else if((b == '\0' && f != '(') || (b == ')' && f != '\0') || b == f || ((f == '*' || f == '/' || f == ')') && (b == '+' || b == '/' || b == '-' || b == '*')))return 1;else{printf("\t\t\tyou are wrong\n");return 0;}}double zhuanhuan(int x,int y,char a[]){int i, j=0, k;double n=0;for(i=x; i<y; i++){if(a[ i ] != '.')n = n*10+a[ i ]-'0';else j=i;}if(j == 0)return n;else{for(k=0; k < i-1-j; k++)n = n/10;return n;}}double f1(shuju *a,yunsuanfu *b) {double m, m1, m2;char x;chuzhuan2(b, &x);chuzhuan1(a, &m1);chuzhuan1(a, &m2);if(x == '*')m = m1*m2;else if(x == '+')m = m1+m2;else if(x == '-')m = m2-m1;else if(x == '/')if(m1 == 0){printf("\t\t\tyou are wrong\n");jieshu();}elsem = m2/m1;charu1(a, m);return m;}void f2(int j, yunsuanfu *b, char k[]) {charu2(b, k[ j ]);}void jiemian(){system("cls");printf("\n");printf("\t\t\t C O U N T E R\n");textcolor(5);cprintf("*********************************************************************** ********");printf("\n\n");printf("\t\t\tPlease input your exprssion\n");printf("\t\t\t ");}jieshu(){char c;printf("Are you contiune?(y/n) ");while(1){c = getch();printf("\n");if(c == 'y' || c == 'Y')main();else if(c == 'n' || c == 'N'){system("cls");printf("\n\n\t\t\t Thank you use the counter\n");printf("\t\t\t");getch();exit(0);}else{printf("\t\t\t");cprintf("Please input y/n!");printf("\n");printf("\t\t\t");continue;}}}main(){int i=0,j=0,bi,b1,B=0;double n,m1,m2,m=0;char k[ MAX ],ch='\0',x;shuju a;yunsuanfu b;chushihua1( &a );chushihua2( &b );charu2( &b, '\0' );jiemian();gets(k);while(k[ i ] != '\0'){if(k[ j ] == 's' && k[ j+2 ] == 'n'){j = j+3;i = j;B = 1;}else if(k[ j ] == 'c' && k[ j+2 ] == 's'){j = j+3;i = j;B = 2;}else if(k[ j ] == 't' && k[ j+2 ] == 'n'){j = j+3;i = j;B = 3;}else if(k[ j ] == 'l' && k[ j+2 ] == 'g'){j = j+3;i = j;B = 4;}else if(k[ j ] == 'l' && k[ j+1 ] == 'n'){j = j+2;i = j;B = 5;}while(k[ j ] == '.' || (k[ j ] >= '0' && k[ j ] <= '9' ))j++;n=zhuanhuan(i,j,k);switch(B){case 1: n=sin(n);break; case 2: n=cos(n);break; case 3: n=tan(n);break; case 4: n=log10(n);break; case 5: n=log(n);}charu1(&a, n);b1 = 0;while(b1 == 0){bi = op(ch, k[j] );if(bi == 0)jieshu();while(bi == 1){m = f1(&a, &b);chuzhuan2(&b, &ch);bi = op(ch, k[ j ]);charu2(&b, ch);}if(bi == -1){do{f2(j, &b,k);j++;}while(k[j ] == '(');j--;}else if(bi == 2){if(ch == '('){if(k[ j ] == ')')j++;chuzhuan2(&b, &ch);chuzhuan2(&b, &ch);charu2(&b, ch);continue;}else chuzhuan1(&a, &m); }b1 = 1;}if(k[ j ] == '\0')break;else{ch = k[ j ];j++;}i = j;B = 0;}printf("\t\t\t");textcolor(30);cprintf("The answer is %f",m); printf("\n");jieshu();}。
用c语言写的简单计算器
⽤c语⾔写的简单计算器这是⾃⼰在学习C语⾔,凭借⾃⼰的兴趣,将课本的知识运⽤后整理的关于C语⾔计算器的代码。
计算器实现的功能有:加、减、乘、除、求余。
功能简单,但对于初学者的我来说能把它写出来,排除每个错误依旧是个难题。
前后两种代码是由⾃⼰所学东西的质量决定的,如有错误,请前辈指出。
最初版本的计算器:1 #include<stdio.h>23int checkPassword();45int add(int x,int y);67int sub(int x,int y);89int multi(int x,int y);1011float quo(float x1,float y1);1213int com(int x,int y);1415int x,y;1617int result;1819int select;2021float result1;2223float x1,y1;2425int success,psw;2627int a;2829int i;3031int t;323334353637void main()3839 {4041 printf("请输⼊密码:\n");4243 i=0;4445do{46474849 scanf("%d",&a);50515253if( a!=1234 && i<2)5455 printf("请重新输⼊密码:\n");5657else5859 i=3;6061 i++;6263 }while( i<=2);6465if(a==1234)6667 {6869for(t=1;t!=6;t=select)7071 {72737576777879 printf("+=============================+\n"); 8081 printf("+======计=算=器=主=菜=单======+\n"); 8283 printf("+=============================+\n"); 8485 printf("+==========1、加法==========+\n"); 8687 printf("+==========2、减法==========+\n"); 8889 printf("+==========3、乘法==========+\n"); 9091 printf("+==========4、除法==========+\n"); 9293 printf("+==========5、求余==========+\n"); 9495 printf("+==========6、退出==========+\n"); 9697 printf("+=============================+\n"); 9899100101102103 printf("请输⼊你的选择:\n");104105 scanf("%d",&select);106107108109switch(select)110111 {112113114115case1:116117 printf("请输⼊两个数:\n");118119 scanf("%d%d",&x,&y);120121 result=add(x,y);122123 printf("%d+%d=%d\n",x,y,result);124125break;126127case2:128129 printf("请输⼊两个数:\n");130131 scanf("%d%d",&x,&y);132133 result=sub(x,y);134135 printf("%d-%d=%d\n",x,y,result);136137break;138139case3:140141 printf("请输⼊两个数:\n");142143 scanf("%d%d",&x,&y);144145 result=multi(x,y);146147 printf("%d*%d=%d\n",x,y,result);148149break;150151case4:152153 printf("请输⼊两个数:\n");154155 scanf("%f%f",&x1,&y1);156157 result1=quo(x1,y1);159 printf("%f/%f=%f\n",x1,y1,result1); 160161break;162163case5:164165 printf("请输⼊两个数:\n");166167 scanf("%d%d",&x,&y);168169 result=com(x,y);170171 printf("%d/%d=%d\n",x,y,result); 172173break;174175case6:176177break;178179default:180181 printf("请输⼊1~5之间的数\n"); 182183break;184185186187188189 }190191 }192193 }194195 }196197int add(int x,int y)198199 {200201int sum;202203 sum=x+y;204205return sum;206207 }208209int sub(int x,int y)210211 {212213int sub;214215 sub=x-y;216217return sub;218219 }220221int multi(int x,int y)222223 {224225int multi;226227 multi=x*y;228229return multi;230231 }232233float quo(float x,float y)234235 {236237float quo;238239 quo=x/y;240241return quo;243 }244245int com(int x,int y)246247 {248249int com;250251 com=x%y;252253return com;254255 }256257int checkPassword( int psw)258259 {260261if(psw==1234)262263 success=1;264265else266267 success=-1;268269return success;270271 }改版后的计算器:1 #include<stdio.h>23int yanzheng(int );45void caidan();67void jiafa(int,int);89void jianfa(int,int);1011void chengfa(float,float);1213void chufa(float,float);1415void mo(int,int);16171819void main(){2021int x,m;2223int y;2425float a,b;2627 printf("请输⼊密码:\n");2829 scanf("%d",&x);3031 m=yanzheng(x);3233if(m==1){3435 caidan();3637//int y;3839//float a,b;4041for(;y!=6;){4243 printf("请输⼊选项:\n"); 4445 scanf("%d",&y);4647if(y>=1 && y<6){4849 printf("请输⼊要运算的两个数:\n");5051 scanf("%f%f",&a,&b);5253 }54555657switch(y){5859case1 :jiafa(a,b);break;6061case2 :jianfa(a,b);break;6263case3 :chengfa(a,b);break;6465case4 :chufa(a,b);break;6667case5 :mo(a,b);break;6869case6 :break;7071default : printf("选项输⼊错误!请重试\n");break; 7273 }7475 }7677 }7879 }808182838485int yanzheng(int x){8687int i,m;8889for(i=1,m=0;i<3;i++){9091if(x==1234){9293 m=1;9495break;9697 }9899 printf("请重新出⼊密码:");100101 scanf("%d",&x);102103104105 }106107return m;108109 }110111112113void caidan(){114115 printf("+=============================+\n"); 116117 printf("+======计=算=器=主=菜=单======+\n"); 118119 printf("+=============================+\n"); 120121 printf("+==========1、加法==========+\n"); 122123 printf("+==========2、减法==========+\n"); 124125 printf("+==========3、乘法==========+\n"); 126127 printf("+==========4、除法==========+\n"); 128129 printf("+==========5、求余==========+\n"); 130131 printf("+==========6、退出==========+\n"); 132133 printf("+=============================+\n"); 134135 }136137138139void jiafa(int x,int y){140141int sum;142143 sum=x+y;144145 printf("%d\n", sum);146147 }148149150151void jianfa(int x,int y){152153int cha;154155 cha=x-y;156157 printf("%d\n", cha);158159 }160161162163void chengfa(float x,float y){164165float ji;166167 ji=x*y;168169 printf("%f\n", ji);170171 }172173174175void chufa(float x,float y){176177float shang;178179 shang=x/y;180181 printf("%f\n", shang);182183 }184185186187void mo(int x,int y){188189int mo;190191 mo=x%y;192193 printf("%d\n", mo);194195 }。
C语言简易计算器的实现
C语言简易计算器的实现C语言简易计算器是一种用于进行基本数学运算的程序。
实现一个简易计算器的关键是要能够解析用户输入的数学表达式,并将其转化为计算机可以理解的形式,然后进行计算,并输出结果。
下面是一个大约1200字以上的示例实现。
```c#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <ctype.h>#define MAX_SIZE 100//定义操作符的优先级int getPriority(char op)if (op == '+' , op == '-')return 1;else if (op == '*' , op == '/')return 2;elsereturn 0;//进行四则运算int calculate(int a, int b, char op)switch (op)case '+': return a + b;case '-': return a - b;case '*': return a * b;case '/': return a / b;default: return 0;}//将中缀表达式转换为后缀表达式void infixToPostfix(char* infixExp, char* postfixExp) char stack[MAX_SIZE];int top = -1;int j = 0;for (int i = 0; infixExp[i] != '\0'; i++)if (isdigit(infixExp[i])) { // 数字直接输出到后缀表达式while (isdigit(infixExp[i]))postfixExp[j++] = infixExp[i++];}postfixExp[j++] = ' ';i--;}else if (infixExp[i] == '(') { // 左括号压入栈stack[++top] = infixExp[i];}else if (infixExp[i] == ')') { // 右括号弹出栈内所有操作符并输出到后缀表达式,直到遇到左括号while (top != -1 && stack[top] != '(')postfixExp[j++] = stack[top--];postfixExp[j++] = ' ';}top--; // 弹出栈顶的左括号}else { // 操作符while (top != -1 && getPriority(stack[top]) >=getPriority(infixExp[i]))postfixExp[j++] = stack[top--];postfixExp[j++] = ' ';stack[++top] = infixExp[i];}}while (top != -1) { // 将栈内剩余操作符弹出并输出到后缀表达式postfixExp[j++] = stack[top--];postfixExp[j++] = ' ';}postfixExp[j] = '\0';//计算后缀表达式的值int evaluatePostfix(char* postfixExp)char stack[MAX_SIZE];int top = -1;for (int i = 0; postfixExp[i] != '\0'; i++)if (isdigit(postfixExp[i])) { // 数字压入栈int num = 0;while (isdigit(postfixExp[i]))num = num * 10 + (postfixExp[i++] - '0');stack[++top] = num;i--;}else if (postfixExp[i] == ' ')continue;}else { // 操作符,弹出栈顶的两个数进行计算,并将结果压入栈int b = stack[top--];int a = stack[top--];int result = calculate(a, b, postfixExp[i]);stack[++top] = result;}}return stack[top];int maichar infixExp[MAX_SIZE];printf("请输入中缀表达式:");fgets(infixExp, sizeof(infixExp), stdin); // 读取用户输入//将中缀表达式转换为后缀表达式char postfixExp[MAX_SIZE];infixToPostfix(infixExp, postfixExp);printf("后缀表达式为:%s\n", postfixExp);//计算后缀表达式的值并输出int result = evaluatePostfix(postfixExp);printf("计算结果为:%d\n", result);return 0;```这个简易计算器的实现基于栈的数据结构。
C语言实现简单计算器程序
C语⾔实现简单计算器程序这两天在看⼀个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 26int 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);elseprintf ("error: zero divisor\n");break;case '%':op2 = pop();if (op2 != 0.0)push (fmod(pop(), op2));elseprintf ("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();elseprintf ("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);elseprintf ("error: unknown command %s\n", s);break;}var = type;}return 0;}/* ----------------------------------------------------------- */#define MAXVAL 100int sp = 0; //标识栈顶double val[MAXVAL];void push(double f){if (sp < MAXVAL)val[sp++] = f;elseprintf ("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));}elseprintf ("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;elsereturn 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 100char 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");elsebuf[bufp++] = c;}该程序虽然简单,但是还是存在⼀些⼩⼩的问题,⽐如没有数据时进⾏pop的话,会打印栈中⽆数据同时返回数值0.0,在循环体中许多执⾏操作会将该数值保存到栈中,之后打印该值,⽤户体验度⽐较差。
c语言计算器原理
c语言计算器原理随着计算机技术的发展,计算器作为基本的数学运算工具,已经广泛地应用于各个领域。
在计算机编程中,C语言是一种通用的、面相过程的编程语言,它可以用来开发各种类型的应用程序,包括计算器。
本文将介绍使用C语言编写计算器的原理和方法。
一、计算器的基本原理计算器的基本原理是利用数学运算的原理,通过编程实现加、减、乘、除等基本运算功能。
在C语言中,可以使用各种运算符和函数来实现这些运算,例如“+”、“-”、“*”、“/”等运算符,以及“abs”、“sqrt”等函数。
这些运算符和函数可以被嵌入到程序中,以实现各种复杂的数学运算。
二、计算器的设计思路设计一个计算器需要考虑到以下几个问题:1.用户界面:计算器需要有一个直观、易于使用的用户界面,以便用户能够输入要计算的表达式并得到结果。
2.表达式解析:计算器需要能够解析用户输入的表达式,并将其转换为计算机能够处理的数学运算。
3.运算执行:计算器需要能够执行解析后的表达式,并输出结果。
4.错误处理:计算器需要能够处理各种可能的错误情况,例如无效的输入、除以零等。
基于以上思路,我们可以设计一个简单的计算器程序,它使用命令行界面,支持基本的加、减、乘、除运算,并能够处理一些常见的错误情况。
三、计算器的实现方法实现一个计算器需要使用C语言的输入输出函数、字符串处理函数和数学函数等。
下面是一个简单的计算器程序示例:```c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>intmain(){charexpression[100];printf("请输入表达式(如:2+3*4):");fgets(expression,sizeof(expression),stdin);expression[strcspn(expression,"\n")]='\0';//去掉换行符doubleresult=0;intsign='+';//默认运算符为加号inti=0;while(expression[i]!='\0'){if(expression[i]==sign){//如果是运算符,则执行相应的运算if(i+2>strlen(expression)){//确保后面还有数字printf("无效的表达式\n");return1;//返回错误码}doublenum1=atof(expression+i+1);//获取第一个数字result+=num1;//进行运算i+=2;//跳过运算符和数字}elseif(isdigit(expression[i])){//如果是数字,则添加到结果中result+=expression[i]-'0';//进行加法运算}else{//遇到非数字和非运算符字符时,结束表达式解析并输出结果break;}i++;//移动到下一个字符}printf("结果为:%f\n",result);//输出结果return0;//返回正常结束代码}```以上代码实现了一个简单的命令行计算器程序,它使用fgets函数从标准输入读取用户输入的表达式,并使用字符串处理函数和数学函数进行表达式解析和运算。
一元稀疏多项式计算器c语言
一元稀疏多项式计算器c语言下面是一个使用C语言编写的一元稀疏多项式计算器的示例代码。
```c#include<stdio.h>#include<stdlib.h>//定义多项式的一个节点typedef struct Nodeint coefficient; // 系数int exponent; // 指数struct Node* next; // 下一个节点} Node;//创建一个节点Node* createNode(int coefficient, int exponent)Node* newNode = (Node*)malloc(sizeof(Node));newNode->coefficient = coefficient;newNode->exponent = exponent;newNode->next = NULL;return newNode;//插入节点到多项式中Node* insertNode(Node* head, int coefficient, int exponent) Node* newNode = createNode(coefficient, exponent);if(head == NULL)return newNode;} elseNode* temp = head;while(temp->next != NULL)temp = temp->next;}temp->next = newNode;return head;}//打印多项式void printPolynomial(Node* head)Node* temp = head;while(temp != NULL)printf("%dx^%d ", temp->coefficient, temp->exponent);temp = temp->next;if(temp != NULL)printf("+ ");}}printf("\n");//计算两个多项式的和Node* addPolynomials(Node* polynomial1, Node* polynomial2) Node* result = NULL;while(polynomial1 != NULL && polynomial2 != NULL)if(polynomial1->exponent > polynomial2->exponent)result = insertNode(result, polynomial1->coefficient, polynomial1->exponent);polynomial1 = polynomial1->next;} else if(polynomial1->exponent < polynomial2->exponent) result = insertNode(result, polynomial2->coefficient, polynomial2->exponent);polynomial2 = polynomial2->next;} elseresult = insertNode(result, polynomial1->coefficient + polynomial2->coefficient, polynomial1->exponent);polynomial1 = polynomial1->next;polynomial2 = polynomial2->next;}}//将剩余的节点加入结果中while(polynomial1 != NULL)result = insertNode(result, polynomial1->coefficient, polynomial1->exponent);polynomial1 = polynomial1->next;}while(polynomial2 != NULL)result = insertNode(result, polynomial2->coefficient, polynomial2->exponent);polynomial2 = polynomial2->next;}return result;//主函数int maiNode* polynomial1 = NULL;Node* polynomial2 = NULL;Node* result = NULL;//输入第一个多项式int numTerms1;printf("Enter the number of terms in polynomial 1: ");scanf("%d", &numTerms1);printf("Enter each term of polynomial 1 (coefficient exponent):\n");for(int i=0; i<numTerms1; i++)int coefficient, exponent;scanf("%d %d", &coefficient, &exponent);polynomial1 = insertNode(polynomial1, coefficient, exponent);}//输入第二个多项式int numTerms2;printf("Enter the number of terms in polynomial 2: ");scanf("%d", &numTerms2);printf("Enter each term of polynomial 2 (coefficient exponent):\n");for(int i=0; i<numTerms2; i++)int coefficient, exponent;scanf("%d %d", &coefficient, &exponent);polynomial2 = insertNode(polynomial2, coefficient, exponent);}//打印两个多项式printf("\nPolynomial 1: ");printPolynomial(polynomial1);printf("Polynomial 2: ");printPolynomial(polynomial2);//计算两个多项式的和result = addPolynomials(polynomial1, polynomial2);//打印结果多项式printf("\nSum of polynomials: ");printPolynomial(result);return 0;```这个计算器使用了链表来表示多项式,每个节点包含一个系数和一个指数。
用C语言写的计算器源代码
用C语言写的计算器源代码#include <stdio.h>#include <conio.h>//用户选择操作符号函数int symint sym;printf("请选择操作符号:1.+ 2.- 3.* 4./ 5.% 6.e(退出)\n");printf("请输入:");scanf("%d", &sym);return sym;//加法函数double add(double a, double b)double c;c=a+b;printf("计算结果:\n");printf("%.2lf + %.2lf = %.2lf", a, b, c);return 0;//减法函数double sub(double a, double b)double c;c=a-b;printf("计算结果:\n");printf("%.2lf - %.2lf = %.2lf", a, b, c); return 0;//乘法函数double mul(double a, double b)double c;c=a*b;printf("计算结果:\n");printf("%.2lf * %.2lf = %.2lf", a, b, c); return 0;//除法函数//判断除数是否为0,为0返回0,反之计算double div(double a, double b)if(b==0)printf("计算错误!");return 0;}elsedouble c;c=a/b;printf("计算结果:\n");printf("%.2lf / %.2lf = %.2lf", a, b, c); return 0;}//取余函数//判断除数是否为0,为0返回0,反之计算int mod(double a, double b)if(b==0)printf("计算错误!");return 0;}elseint c;c=(int)a%(int)b;printf("计算结果:\n");printf("%.0lf %% %.0lf = %d", a, b, c); return 0;}int maindouble a, b;//定义操作符号变量int symbol;//循环计算直到用户选择e(退出)为止while(1)//初始化操作符号变量symbol=0;//输入待计算的两个数printf("请输入待计算的两个数:\n"); scanf("%lf %lf", &a, &b);//调用操作符号函数,获取用户选择symbol=sym(;。
用c语言编写计算器
这就涉及到C语言中函数返回指针的问题了
int i=20;
char cStr[3];
itoa(i,cStr,10);
char* f1()
{
return "adsfadsfasd";
}
在函数内部返回函数内构建的指针有可能出现数据混乱.
DWORD dwMydrivers;
dwMydrivers = GetLogicalDrives();
TCHAR cDrivers[256];
itoa(dwMydrivers,cDrivers,2); //转换为字符串
strrev(cDrivers); //反转字符串
(8)思考:这个计算两个数的和程序有什么缺陷?没有阻止用户输入非数字
(9)作业:做一个面积计算器,用户输入半径,在另外一个文本框中显示面积。
5、得到系统中有哪些逻辑驱动器
DWORD GetLogicalDrives(VOID);
返回值的二进制位标志着存在哪些驱动器。其中,位0设为1表示驱动器A存在于系统中;位1设为1表示存在B驱动器;以次类推。
编辑Main_OnCommand方法:
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_BTNHELLO:
MessageBox(NULL,TEXT("世界你好"),TEXT("问好"),MB_OK);
{
switch(id)
{
case IDC_OK:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言制作简单计算器
一、项目介绍
我们要用c语言做一个简单的计算器,进行加、减、乘、除操作。
本程序涉及的所有数学知识都很简单,但输入过程会增加复杂性。
我们需要检查输入,确保用户没有要求计算机完成不可能的任务。
还必须允许用户一次输入一个计算式,例如:32.4+32 或者9*3.2
项目效果图
编写这个程序的步骤如下:
∙获得用户要求计算机执行计算所需的输入。
∙检查输入,确保输入可以理解。
∙执行计算。
∙显示结果。
三、解决方案
1.步骤1
获得用户输入是很简单的,可以使用printf()和scanf()。
下面是读取用户输入的程序代码:
#include<stdio.h>int main(){
double number1=0.0; //定义第一个操作值
double number2=0.0; //定义第二个操作值
char operation=0; //operation必须是'+''-''*''/'或'%'
printf("\nEnter the calculation\n");
scanf("%lf%c%lf",&number1,&operation,&number2);
return0;
}
2.步骤2
接着,检查输入是否正确。
最明显的检查是要执行的操作是否有效。
有效的操作有+、-、*、/和%,所以需要检查输入的操作是否是其中的一个。
还需要检查第二个数字,如果操作是/或者%,第二个数字就不能是0。
如果右操作数是0,这些操作就是无效的。
这些操作都可以用if语句来完成,switch语句则为此提供了一种更好的方式,因此它比一系列if语句更容易理解。
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)
printf("\n\n\aDavision by zero error!\n");
else
printf("=%lf\n",number1/number2);
break;
if((long)number2==0)
printf("\n\n\aDavision by zero error!\n");
else
printf("=%ld\n",(long)number1%(long)number2);
break;
default:
printf("\n\n\aDavision by zero error!\n");
break;
取余运算符对float或double类型是没有意义的,因为他们可以表示精确的结果。
只有把%运算符应用于整数类型才有意义。
因此在应用这个运算符前,把操作数转换为整数。
当运算符是%时,将第二个操作数转换为一个整数,所以仅仅检查第二个操作数是否为0是不够的,还必须检查number2在转换为long时,值是否为0.例如0.5不是0,但是转换为整数时就是0。
四、程序的完整代码
#include<stdio.h>int main(){
double number1=0.0;
double number2=0.0;
char operation=0;
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)
printf("\n\n\aDavision by zero error!\n");
printf("=%lf\n",number1/number2);
break;
case'%':
if((long)number2==0)
printf("\n\n\aDavision by zero error!\n");
else
printf("=%ld\n",(long)number1%(long)number2);
break;
default:
printf("\n\n\aDavision by zero error!\n");
break;
}
return0;
}
如果有疑问或者想学习更多基础课和项目课的话,欢迎登陆实验楼官方网站:。