c语言制作计算器源码(计算器编程代码c语言)
本文目录一览:
用c语言程序设计一个简单计算器,求其源代码
/*
2013年12月23日 12:43:46
目的:计算器的实现
*/
# include stdio.h
# include ctype.h
# include math.h
char get_choice(void); //获取用户输入的选项,并建立目
char get_first(void); //获取用户输入的选项,并剔除错误输入
float get_int(void); //获取用户输入的计算值
float add(void); //定义加法函数
float subtraction(void); //定义减法函数
float multiplication(void); //定义乘法函数
float division(void); //定义除法函数
float extract(void); //定义开方函数
float square(void); //定义平方函数
float cube(void); //定义立方函数
int count = 0;
int main(void)
{
char choice;
printf("***欢迎使用由小钱制作的计算器***\n");
choice = get_choice();
while(choice != 'q')
{
switch(choice)
{
case 'a':
add(); break;
case 'b':
subtraction(); break;
case 'c':
multiplication(); break;
case 'd':
division(); break;
case 'e':
extract(); break;
case 'f':
square(); break;
case 'g':
cube(); break;
default :
printf("您输入有误,请重新输入:"); break;
}
fflush(stdin);
choice = get_choice();
}
printf("bye");
return 0;
}
//获取用户输入的选项,并建立目录
char get_choice(void)
{
char ch;
int a = 0;
//建立目录
printf("\n--------------------------------\n");
printf("a. 加法\t\t\tb. 减法\nc. 乘法\t\t\td. 除法\n");
printf("e. 开方\t\t\tf. 平方\ng. 立方\t\t\tq. 退出\n");
printf("--------------------------------\n");
printf("请输入你的选项:");
ch = get_first();
while(ch == ' ' || ch == '\n' || ch == '\t')
ch = get_first();
//判断用户输入的选项是否有误
while((ch'a' || ch'g') ch !='q')
{
putchar(ch);
printf(" 你输入的选项有误,请重新输入:");
ch = get_first();
}
return ch;
}
//获取用户输入的选项,并剔除错误输入
char get_first(void)
{
char ch;
ch = getchar();
//剔除由用户输入选项时产生的换行符
while(ch == '\n')
{
ch = getchar();
}
return ch;
}
//获取用户输入的计算值
float get_int(void)
{
float input;
char ch;
int a;
if(count == 0)
printf("亲!请输入数值:");
if(count == 1)
printf("亲!请输入第一个数值:");
if(count == 2)
printf("亲!请输入第二个数值:");
a = scanf("%f", input);
//判断用户的输入是否为一个数值
while(a != 1)
{
//剔除用户输入错误的字符
while((ch = getchar()) != '\n')
{
putchar(ch);
printf(" 不是一个数值,请输入例如3、111.2、或者-1");
a = scanf("%f", input);
}
}
return input;
}
//定义加法函数
float add(void)
{
float i, j, sum;
count = 0;
count = count+1;
i = get_int();
count = count+1;
j = get_int();
sum = i + j;
printf("%.2f + %.2f = %.2f\n", i, j, sum);
return sum;
}
//定义减法函数
float subtraction(void)
{
float i, j, sum;
count = 0;
count = count+1;
i = get_int();
count = count+1;
j = get_int();
sum = i - j;
printf("%.2f - %.2f = %.2f\n", i, j, sum);
return sum;
}
//定义乘法函数
float multiplication(void)
{
float i, j, sum;
count = 0;
count = count+1;
i = get_int();
count = count+1;
j = get_int();
sum = i * j;
printf("%.2f * %.2f = %.2f\n", i, j, sum);
return sum;
}
//定义除法函数
float division(void)
{
float i, j, sum;
count = 0;
count = count+1;
i = get_int();
count = count+1;
j = get_int();
//判断除数是否为0
while(j == 0)
{
printf("除数不能为0\n请重新输入!!!\n");
j = get_int();
}
sum = i / j;
printf("%.2f / %.2f = %.2f\n", i, j, sum);
return sum;
}
//定义开方函数
float extract(void)
{
float i, sum;
count = 0;
i = get_int();
//判断开方数是否小于0,如果小于0,则让用户重新输入
while(i 0)
{
printf("请输入大于0的数值\n");
i = get_int();
}
sum = sqrt(i);
printf("%.2f的开方等于%.2f\n", i, sum);
return sum;
}
//定义平方函数
float square(void)
{
float i, sum;
count = 0;
i = get_int();
sum = i * i;
printf("%.2f的平方等于%.2f\n", i, sum);
return sum;
}
//定义立方函数
float cube(void)
{
float i, sum;
count = 0;
i = get_int();
sum = i * i * i;
printf("%f的立方等于%.3f\n", i, sum);
return sum;
}
用C语言写的计算器源代码
#includestdio.h
#includeiostream.h
#includestdlib.h
#includestring.h
#includectype.h
typedef float DataType;
typedef struct
{
DataType *data;
int max;
int top;
}Stack;
void SetStack(Stack *S,int n)
{
S-data=(DataType*)malloc(n*sizeof(DataType));
if(S-data==NULL)
{
printf("overflow");
exit(1);
}
S-max=n;
S-top=-1;
}
void FreeStack(Stack *S)
{
free(S-data);
}
int StackEmpty(Stack *S)
{
if(S-top==-1)
return(1);
return(0);
}
DataType Peek(Stack *S)
{
if(S-top==S-max-1)
{
printf("Stack is empty!\n");
exit(1);
}
return(S-data[S-top]);
}
void Push(Stack *S,DataType item)
{
if(S-top==S-max-1)
{
printf("Stack is full!\n");
exit(1);
}
S-top++;
S-data[S-top]=item;
}
DataType Pop(Stack *S)
{
if(S-top==-1)
{
printf("Pop an empty stack!\n");
exit(1);
}
S-top--;
return(S-data[S-top+1]);
}
typedef struct
{
char op;
int inputprecedence;
int stackprecedence;
}DataType1;
typedef struct
{
DataType1 *data;
int max;
int top;
}Stack1;
void SetStack1(Stack1 *S,int n)
{
S-data=(DataType1*)malloc(n*sizeof(DataType1));
if(S-data==NULL)
{
printf("overflow");
exit(1);
}
S-max=n;
S-top=-1;
}
void FreeStack1(Stack1 *S)
{
free(S-data);
}
int StackEmpty1(Stack1 *S)
{
if(S-top==-1)
return(1);
return(0);
}
DataType1 Peek1(Stack1 *S)
{
if(S-top==S-max-1)
{
printf("Stack1 is empty!\n");
exit(1);
}
return(S-data[S-top]);
}
void Push1(Stack1 *S,DataType1 item)
{
if(S-top==S-max-1)
{
printf("Stack is full!\n");
exit(1);
}
S-top++;
S-data[S-top]=item;
}
DataType1 Pop1(Stack1 *S)
{
if(S-top==-1)
{
printf("Pop an empty stack!\n");
exit(1);
}
S-top--;
return(S-data[S-top+1]);
}
DataType1 MathOptr(char ch)
{
DataType1 optr;
optr.op=ch;
switch(optr.op)
{
case'+':
case'-':
optr.inputprecedence=1;
optr.stackprecedence=1;
break;
case'*':
case'/':
optr.inputprecedence=2;
optr.stackprecedence=2;
break;
case'(':
optr.inputprecedence=3;
optr.stackprecedence=-1;
break;
case')':
optr.inputprecedence=0;
optr.stackprecedence=0;
break;
}
return(optr);
}
void Evaluate(Stack *OpndStack,DataType1 optr)
{
DataType opnd1,opnd2;
opnd1=Pop(OpndStack);
opnd2=Pop(OpndStack);
switch(optr.op)
{
case'+':
Push(OpndStack,opnd2+opnd1);
break;
case'-':
Push(OpndStack,opnd2-opnd1);
break;
case'*':
Push(OpndStack,opnd2*opnd1);
break;
case'/':
Push(OpndStack,opnd2/opnd1);
break;
}
}
int isoptr(char ch)
{
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='(')
return(1);
return(0);
}
void Infix(char *str)
{
int i,k,n=strlen(str);
char ch,numstr[10];
DataType opnd;
DataType1 optr;
Stack OpndStack;
Stack1 OptrStack;
SetStack(OpndStack,n);
SetStack1(OptrStack,n);
k=0;
ch=str[k];
while(ch!='=')
if(isdigit(ch)||ch=='.')
{
for(i=0;isdigit(ch)||ch=='.';i++)
{
numstr[i]=ch;
k++;
ch=str[k];
}
numstr[i]='\0';
opnd= atof(numstr);
Push(OpndStack,opnd);
}
else
if(isoptr(ch))
{
optr=MathOptr(ch);
while(Peek1(OptrStack).stackprecedence=optr.inputprecedence)
Evaluate(OpndStack,Pop1(OptrStack));
Push1(OptrStack,optr);
k++;
ch=str[k];
}
else if(ch==')')
{
optr=MathOptr(ch);
while(Peek1(OptrStack).stackprecedence=optr.inputprecedence)
Evaluate(OpndStack,Pop1(OptrStack));
Pop1(OptrStack);
k++;
ch=str[k];
}
while(!StackEmpty1(OptrStack))
Evaluate(OpndStack,Pop1(OptrStack));
opnd=Pop(OpndStack);
cout"你输入表达式的计算结果为"endl;
printf("%-6.2f\n",opnd);
FreeStack(OpndStack);
FreeStack1(OptrStack);
}
void main()
{
cout"请输入你要计算的表达式,并以“=”号结束。"endl;
char str[50];
gets(str);
Infix(str);
=================================================================
哈哈!给分吧!
c语言编写计算器程序
C语言编写计算器
c语言制作计算器源码我们可以用printf和scanf函数输出结果和获取用户c语言制作计算器源码的输入。需要stdio.h头文件。scanf函数在读取数据的时候不需要再一行上输入每个数据c语言制作计算器源码,只要数据和数据之间留出空白就可以了。先声明两个变量number1和number2,operation变量用来存储运算符。用scanf函数获取这两个数字和运算符。分别用%lf %c %lf
然后需要检测输入是否是正确的,检查是不是+ - * / %,在这里要用到switch函数,用来看operation变量是否别传入了正确的值。
switch(operation)
{
case '+':
printf........
}
具体的运算我们只需要再case之后的printf语句中设定和输出就可以了。
由于除法和取余运算比较特殊,我们单独说明。除法的除数不能为零,所以除法需要检测除数是否为零,只需要用if else语句就可以,if(number2 == ),取余运算符对于浮点数没有意义,所以将浮点数转换为long类型,强制类型转换,if((long)number2 == 0) else ,这样整个代码就完成了。
简单计算器的编辑并不难,但是要注意一些细节,除法的处理要注意除数不能为零的情况,而且取模运算要将两个操作数转化为整型,当然,作为真正的计算器,只实现这些功能是不够的,还需要更多的功能,不过有一个好的开始也不错。
下面我们就运行一下这个程序吧。25*13的值和8%5的值。可以看到是我们期望的值。
c语言设计一个简单的计算器程序
#include<stdio.h>//计算器
voidmenu()//自定义的菜单界面
{
printf("--------------------\n");
printf("请输入你的选择\n");
printf("1.+\n");
printf("2.-\n");
printf("3.*\n");
printf("4./\n");
printf("--------------------\n");
}
intmain()
{
inti=0;
intj=0;
intnum=0;//计算结果存放在nun
intselect=0;//选择的选项存放在select
do//do-while先执行再判断循环条件,即可实现重复计算功能
{
menu();//打印出菜单界面
scanf("%d",&select);//输入你的选项
printf("请输入计算值:");
scanf("%d%d",&i,&j);//输入要计算的数值
switch(select)
{
case1:
printf("%d+%d=%d\n",i,j,num=i+j);//实现加法功能
break;
case2:
printf("%d-%d=%d\n",i,j,num=i-j);//实现减法功能
break;
case3:
printf("%d*%d=%d\n",i,j,num=i*j);//实现乘法功能
break;
case4:
printf("%d-%d=%d\n",i,j,num=i/j);//实现除法功能
break;
default:
printf("输入有误重新选择");
break;
}
}while(select);
return0;
}
运行结果:
扩展资料:
return表示把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回,返回时可附带一个返回值,由return后面的参数指定。
return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。