当前位置:首页 » 编程语言 » c语言编程多功能计算机
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言编程多功能计算机

发布时间: 2023-04-10 03:51:05

A. c语言编写“多功能计算器”的代码

#include<stdio.h>
#include<windows.h>
#include<math.h>
double
EPS=10E-6;
double
sum(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
divv(double
a,double
b)
{
return
a/b;
}
int
rem(int
a
,
int
b)
{
return
a%b;
}
int
addnumber(int
c,int
d)
{
int
sum=0;
for(int
i=c;i<=d;i++)
{
sum+=i;
}
return
sum;
}
int
factor(int
n)
{
int
f=1;
for(int
i=1;i<=n;i++)
{
f*=i;
}
return
f;
}
void
displaymenu()
{
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\n");
printf("*############高级计算器############*
\n");
printf("************************************
\n");
printf("*
①加法运算
*
\n");
printf("*
②减法运算
*
\n");
printf("*
③乘法运算
*
\n");
printf("*
④除法运算
*
\n");
printf("*
⑤取余运算
*
\n");
printf("*
⑥累加运敏仿算
*
\n");
printf("*
⑦阶乘运算
*
\n");
printf("*
⊙结束运算
*
\n");
printf("************************************
\n");
printf("************************************
\n");
}
void
main()
{
int
c,d;
/*用于做四则运算的两个数值的说明*/
double
a,b;
/*用来做累加函数的两个参数值的说明*/
int
intresult;
double
result;
/*用于保存表单运算中函数的返回值*/
int
choice;
displaymenu();/*保存用户选择项目菜单项*/
while(1)
{
printf("请选择你所进行运算项目的符号:");
scanf("%d",&choice);
switch(choice)
{
case
1:
/*加法计算*/
printf("请输入两个数字:");
scanf("%lf%lf",&a,&b);
result=sum(a,b);
printf("%lf+%lf的计算结果是:%lf\n",a,b,result);
break;
case
2:
/*减法计算*/
printf("请输入两岁悔个数字:");
scanf("%lf%lf",&a,&b);
result=sub(a,b);
printf("%lf-%lf的计算结果是:%lf\n",a,b,result);
break;
case
3:
/*乘法计算*/
printf("请输入两个数字桥雀纤:");
scanf("%lf%lf",&a,&b);
result=mul(a,b);
printf("%lf*%lf的计算结果是:%lf\n",a,b,result);
break;
case
4:
/*除法计算*/
{
scanf("%lf%lf",&a,&b);
if(b-0.0<EPS)
printf("数字错误\n");
else
{
printf("请输入两个数字:");
result=divv(a,b);
printf("%lf/%lf的计算结果是:%lf\n",a,b,result);
}
break;
}
case
5:
/*取余计算*/
printf("请输入两个数字:");
scanf("%d%d",&c,&d);
result=rem(c,d);
printf("%d
%
%d的计算结果是:%d\n",c,d,result);
break;
case
6:
/*累加计算*/
printf("请输入两个整数");
scanf("%d%d",&c,&d);
intresult=addnumber(c,d);
printf("%d-%d的累加计算结果是:%d\n",c,d,intresult);
break;
case
7:
//阶乘计算
{
printf("请输入一个大于0小于10的整数字");
scanf("%d",&c);
if(c<0||c>10)
{
printf("请输入一个大于0小于10的整数字,数据错误。\n");
break;
}
intresult=factor(c);
printf("%d的阶乘计算结果是:%d\n",c,intresult);
break;
}
case
0:
printf("谢谢使用。欢迎下次再用。\n");
return
;
default:
printf("选择错误,程序结束\n");
break;
}
}
}

B. 设计一个多功能计算器<用C语言程序设计>

一.题目意义和设计思想
1、题目意义 多功能计算器的设计目的是为了简化计算及对所学C语言知识的有效应用。在多功能计算器设计的这个实际的例子中,我们运用C语言知识来解决这个生活中的实际问题。从而能更有效地检验自己的C语言学习的水平,加强对知识的掌握,提高解决实际问题的能力。 2、设计思想 首先是对要解决的问题进行分拿颂析,
二、采用的主要技术、遇到的难点和解决方法
在设计的过程中主要运用到do-while 循环语句,if-else判断语句,switch选择语句,函数的递归调用,库函数windows.h的清屏函数system(“cls”),和程序的终止函数exit(0)等技术。遇到的问题主要有两个: 1) 清屏的功能的实现 2) 输出结果后将结果作为操作数继续计算的功能的实现解决方法:1) 是通过查询资料和复习书上的知识 明白了应该调用库函数windows.h的清屏函数system(“cls”)就可以解决这个问题2) 通过循环do-while嵌套do-while和if-else语句的使用来解决,循环的利用前次计算的结果来作为下一个计算的第一个操好闹作数来实现的。
三、实现的主要功能和系统结构
各函数的 实现的功能Main()主函数 主函数
Calculate() 进行直接的计算
Expression() 表达式计算得形式
System(“cls”) 系统清屏的功能
Exit() 系统使得程序退出的功能
函数之间的关系\实现功能:1)具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。依次输入第一个运算数、运算符(+,-,*,/),第二个运算数,然后输出结果。结果可以作友敏罩为下一个运算的第一运算数。按‘C’清屏,按‘X’退出。例如: 选择c清屏的功能后如图 按任意键继续 最后按X退出功能2)实现单运算符表达式计算的功能。输入的操作数可以包含整数或浮点数。如果遇到错误的表达式,应输出错误提示信息。输入表达式如下:

C. 请问怎样用C语言编写一个一键多功能的程序,就是说按一下是一种功能

说一下思路辩桥:对按键进行计数,给个默认功能,对应计数0,每按一次,计数器加1,就老雹可以了
主体里面使用switch...case,侍灶帆判断按键次数

D. c语言设计一个“多功能计算器”

#include<stdio.h> /*库文件包含*/
#include<string.h> /*用于字符串操作*/
#include<stdlib.h> /*用于exit函数*/

/**************************************************************************
int check(char *c)
输入参数:
char *c: 输入的字符串
返回参数:
0:字符串中有不符合规定的字符
1: 字符串字符符合规定,没有不符合规定的字符.
功能:
检查字符串中有否除了 0-9, +,-,*,/,(,),之外的其他字符,
如果有,则返回0, 表示出现错误。
若没有,则返回1,表式字符串符合规定。
**************************************************************************/
int check(char *c)
{
int k=0;
while(*c!='\0')
{
if((*c>='0' && *c<='9') || *c=='+' ||
*c=='-' || *c=='*' || *c=='/' ||
*c=='.' || *c=='(' || *c==')' )
{

}
else
{
printf("input error, there have the char not the math expression char!\n");
return 0;
}

if(*c=='(')
k++;
else if(*c==')')
k--;

c++;
}
if(k!=0)
{
printf("input error, there is not have correct bracket '()'!\n");
return 0;
}
return 1;
}

/**************************************************************************
void move(char *f, double *s,int p)

输入参数:
char *f : 运算符数组
double *s: 数值数组
int p: 当液碧前运算符数组位置。
返回参数:

功能:
将当前已经完成运算的运算符消去,同时将数值数组的位置调整以进行下一次运算。
传入值p若为3
则当前符号的数组位置为3.
f[3]=f[3+1].......f[len-2]=f[len-1] f[len-1]='\0';
s[i]=s[i+1].......s[len-1]=s[len] 因为数值比运算符含老多一个。
***************************************************************************/

void move(char *f, double *s,int p)
{
int i=0,len=strlen(f);
for(i=p; i<len; i++) /*将已经运算过的符号,空出来的位置用后面谈埋升的符号来填充,*/
{ /*即把乘和除号的位置用后面的加和减号填充*/
f[i]=f[i+1];
s[i]=s[i+1];
}
s[i]=s[i+1];
f[len-1]='\0';
}
/**************************************************************************
double convnum(char *c)
输入参数:
char *c :由数字和小数点组成的字符,用以转换成double型的数值。
返回参数:
num:返回转换好的值。
功能:
将输入的字符串先将其小数点以前的部分复制到temp[]数组中,
若有小数点,则将小数点之后的数值,也就是小数部分先进行计算,值存入num中
计算完成后,再对整数部分进行计算,值加上小数部分的值,存入num中。
***************************************************************************/
double convnum(char *c)
{
double num=0.0;
double a=1.0;
int i=0,p=0,len=0;
char temp[100];
int tempi=0;
int start=0;
int f=1; /*正负符号指示器,若为1则为正数,为-1,此数为负数*/

len=strlen(c);

if(c[0]=='-')
{
start=1;
f=-1;
}
for(i=start; i<len; i++)
{
if(c[i]=='.')
{
p=i;
break;
}
temp[tempi++]=c[i]; /*将整数部分复制到temp[]中*/
}
temp[tempi]='\0';

if(p!=0)
{
for(i=p+1;i<len;i++) /*将小数部分计算出来*/
{
if(c[i]=='.') /*如果有多余的小数点,则表示输入错误*/
{
printf("there is more that one dot '.' in number!error!\n");
exit(0);
}
a=a*0.1;
num+=(a*(c[i]-48));
}
}

a=1.0;

len=strlen(temp); /*计算整数部分*/
for(i=len-1;i>=0; i--)
{
num=num+(a*(temp[i]-48));
a*=10;
}

num=num*f;
return num;
}

/**************************************************************************
double good(char *c)
输入参数:
char *c :即将进行运算的字符串型数学表达式。如3.5+(2*3/5)
返回参数:
s[0]:计算结果将放入s[0]中
功能:
将输入的字符串中的数字分别调用convnum(char *c)函数进行数值变换,再将其依
次存入doulbe s[i]中,将加减乘除运算符依次存入字符串符号数组 char f[i]中,
然后如果遇到括号,则将括号内的字符串存入另一字符数组中,然后用此
good(char *c) 递归函数进行递归运算。 然后根据先乘除,后加减的顺序对已
存入数组的数值根 据存入字符串符号数组的运算符进行运算。结果存入s[0]中。
返回最终结果。
***************************************************************************/
double good(char *c) /*可递归函数*/
{ /*取得数值字符串,并调用convnum转换成double*/
char g[100],number[30]; /*g,保存当前的表达式串,number保存一个数的所有字符*/
char f[80]; /*保存所有的符号的堆栈*/
int fi=0; /*保存符号的位置指针*/
double s[80]; /*保存当前所有的数的一个堆栈*/
int si=0; /*保存数字位置指针*/
int k=0; /* 若k=1则表示有一对括号*/
int num=0,i=0; /*num保存新括号内的字符数,i 保存number里的字符位置*/
int cc=0; /*乘除符号数量*/
int jj=0; /*加减符号数量*/

while(*c!='\0')/*当p==1 和k==0时,表示已经把括号里的内容全部复制到g[100]中了*/
{
k=0;
num=0;

switch(*c)
{
case '+': /*当前字符为+-乘除时则表示*/
case '-':
case '*':
case'/':
f[fi++]=*c;
if(*c=='*' || *c=='/')
cc++;
else
jj++;
if(*(c-1)!=')')
{
number[i]='\0';
i=0;/*完成一个数字的复制,其位置指针i=0*/

s[si++]=convnum(number);
}
break;
case'(': /*有括号,则将当前括号作用范围内的全部字符保存,作为*/
k++; /*一个新的字符表达式进行递归调用good函数计算。*/
while(k>0)
{
c++;
g[num]=*c;
num++;
if(*c==')')
{
k--;
}
else if(*c=='(')
{
k++;
}
}
g[num-1]='\0';
num=0;/*完成一个括号内容的复制,其位置指针num=0*/
s[si++]=good(g);
break;
default:
number[i++]=*c;

if(*(c+1)=='\0')
{ number[i]='\0';
s[si++]=convnum(number);
}
break;
}

c++;
}

f[fi]='\0';

i=0;
while(cc>0)
{
switch(f[i])
{
case '*': cc--;
s[i+1]=s[i]*s[i+1];
move(f,s,i);
break;
case '/': cc--;
s[i+1]=s[i]/(float)s[i+1];
move(f,s,i);
break;
default:
i++;
break;
}
}

i=0;
while(jj>0)
{
switch(f[i])
{
case '+': s[i+1]=s[i]+s[i+1];
jj--;
move(f,s,i);
break;
case '-': s[i+1]=s[i]-s[i+1];
jj--;
move(f,s,i);
break;
default:
printf("operator error!");
break;
}
}

return s[0];
}

void main()
{
char str[100];
double sum=0;
int p=1;

while(1)
{
printf("enter expression: enter 'exit' end of program\n");
scanf("%s",str);
p=strcmp(str,"exit");
if(p==0)
break;
p=check(str);

if(p==0)
continue;
sum=good(str);
printf("%s=%f",str,sum);
printf("\n");
}
printf("good bye!\n");
}

E. 求按要求用C语言作的一个计算器

计算器的c语言程序设计
一.功能概述:本程序能计算带二重括号的计算式的结果,如输入((3+2)*(3+2)+5)*((3+2)*(3+2)+5)*(5+5)= 将输出结果为9000
二.源程序:
#include<stdio.h>
int w;
double B[4][40];

shuru(char *pt)
{
int i=0,m;
do
{
*(pt+i)=getchar();
m=i;
i++;
}
while(*(pt+m)!='=');
*(pt+m)='+';
*(pt+m+1)='=';
}

tlchli(char *p)
{
int a,b;
if(*p=='-'||*p=='+')
{
for(b=0;*(p+b)!='=';b++)
;
for(;b>=0;b--)
*(p+b+1)=*(p+b);
*p='0';
}
else
{
for(a=1;*(p+a)!='=';a++)
{
if(*(p+a)=='-'||*(p+a)=='+')
{
if(*(p+a-1)=='('&&*(p+a+1)>='0'&&*(p+a+1)<='9')
{
for(b=0;*(p+a+b)!='=';b++)
;
for(;b>=0;b--)
*(p+a+b+1)=*(p+a+b);
*(p+a)='0';
a=(a+1);
}
}
}
}
}

jgh(double B[4][40],char *p)
{
int a,b,c=0,d,e,f,h,i,k,n,m;
double g=0,j=0;
for(a=0;a<4;a++)
for(b=0;b<40;b++)
B[a]=0;
for(d=0;*(p+d)!='=';d++)
{
if(*(p+d)=='+'||*(p+d)=='-'||*(p+d)=='*'||*(p+d)=='/')
{
if(*(p+d)=='+') B[3][c]='+';
if(*(p+d)=='-') B[3][c]='-';
if(*(p+d)=='*') B[3][c]='*';
if(*(p+d)=='/') B[3][c]='/';
if(*(p+d-1)==')'&&*(p+d-2)==')')
{
B[0][c]=')';
B[1][c]=')';
}
if(*(p+d-1)==')'&&*(p+d-2)!=')')
B[1][c]=')';
for(e=d-1;*(p+e)<'0'||*(p+e)>'9';e--)
;
for(f=e;*(p+f)!='.'&&(f>0)&&*(p+f)>='0'&&*(p+f)<='9';f--)
;
if(*(p+f)=='.')
{
for(h=f-1;(h>=0)&&*(p+h)>='0'&&*(p+h)<='9';h--)
;
h++;
if(*(p+h-1)=='('&&*(p+h-2)=='(')
{
B[0][c]='(';
B[1][c]='(';
}
if(*(p+h-1)=='('&&*(p+h-2)!='(')
B[1][c]='(';
for(i=h;*(p+i)>='0'&&*(p+i)<='9';i++)
g=(*(p+i)-48)+g*10.0;
for(k=f+1;*(p+k)>='0'&&*(p+k)<='9';k++)
;
k--;
for(n=k;*(p+n)>='0'&&*(p+n)<='9';n--)
j=(j/10.0+(*(p+n)-48)/10.0);
B[2][c]=(g+j);
g=j=0;
}
else
{
for(m=e;*(p+m)>='0'&&*(p+m)<='9';m--);
m++;
if(*(p+m-1)=='('&&*(p+m-2)=='(')
{
B[0][c]='(';
B[1][c]='(';
}
if(*(p+m-1)=='('&&*(p+m-2)!='(')
B[1][c]='(';
for(i=m;*(p+i)>='0'&&*(p+i)<='9';i++)
g=(*(p+i)-48)+g*10.0;
B[2][c]=g;
g=0;
}
c++;
}
}
w=(c-1);
}

qkh1(double B[4][40])
{
int a=1,b,c,d,e,f,j,k;
for(b=0;b<w;b++)
{
if(B[a]=='(')
{
for(c=b;B[a][c]!=')';c++)
;
for(d=b+1;B[a][d]!='('&&d<c;d++)
;
if(B[a][d]=='(')
k=d;
else
k=b;
B[a][k]=0;B[a][c]=0;
for(e=k;e<c;e++)
{
if(B[3][e]=='*')
{
B[2][e+1]=B[2][e]*B[2][e+1];
if(B[3][e-1]=='-'&&(e>0))
{
B[2][e]=0;
B[3][e]='-';
}
else
{
B[2][e]=0;
B[3][e]='+';
}

}
if(B[3][e]=='/')
{
B[2][e+1]=B[2][e]/B[2][e+1];
if(B[3][e-1]=='-'&&e>0)
{
B[2][e]=0;
B[3][e]='-';
}
else
{
B[2][e]=0;
B[3][e]='+';
}
}
}
for(f=k;f<c;f++)
{
if(B[3][f]=='+')
{
B[2][f+1]=B[2][f]+B[2][f+1];
B[2][f]=0;B[3][f]='+';
}
if(B[3][f]=='-')
{
B[2][f+1]=B[2][f]-B[2][f+1];
B[2][f]=0;B[3][f]='+';
}
}
b=c-1;
if(B[3][k-1]=='*'&&k>0)
{
for(;k<c;k++)
{
B[3][k]='*';
B[2][k]=1.0;
}
}
if(B[3][k-1]=='/'&&k>0)
{
for(;k<c;k++)
{
B[3][k]='/';
B[2][k]=1.0;
}
}
}
}
for(j=0;j<=w;j++)
{
if(B[1][j]!='('&&B[1][j]!=')')
B[1][j]=B[0][j];
}
}

qkh2(double B[4][40])
{
int a,b,c,d,e,f,j;
for(b=0;b<w;b++)
{
if(B[1]=='(')
{
for(c=b;B[1][c]!=')';c++)
;
B[1]=0;B[1][c]=0;
for(e=b;e<c;e++)
{
if(B[3][e]=='*')
{
B[2][e+1]=B[2][e]*B[2][e+1];
if(B[3][e-1]=='-'&&(e>0))
{
B[2][e]=0;
B[3][e]='-';
}
else
{
B[2][e]=0;
B[3][e]='+';
}
}
if(B[3][e]=='/')
{
B[2][e+1]=B[2][e]/B[2][e+1];
if(B[3][e-1]=='-'&&(e>0))
{
B[2][e]=0;
B[3][e]='-';
}
else
{
B[2][e]=0;
B[3][e]='+';
}
}
}
for(f=b;f<c;f++)
{
if(B[3][f]=='+')
{
B[2][f+1]=B[2][f]+B[2][f+1];
B[2][f]=0;B[3][f]='+';
}
if(B[3][f]=='-')
{
B[2][f+1]=B[2][f]-B[2][f+1];
B[2][f]=0;B[3][f]='+';
}
}
if(B[3][b-1]=='*'&&b>0)
{
for(;b<c;b++)
{
B[3]='*';
B[2]=1.0;
}
}
if(B[3][b-1]=='/'&&b>0)
{
for(;b<c;b++)
{
B[3]='/';
B[2]=1.0;
}
}
}
}
}

jshjg(double B[4][40])
{
int b,d,e,f;
for(e=0;e<w;e++)
{
if(B[3][e]=='*')
{
B[2][e+1]=B[2][e]*B[2][e+1];
if(B[3][e-1]=='-'&&e>0)
{
B[2][e]=0;
B[3][e]='-';
}
else
{
B[2][e]=0;
B[3][e]='+';
}
}
if(B[3][e]=='/')
{
B[2][e+1]=B[2][e]/B[2][e+1];
if(B[3][e-1]=='-'&&e>0)
{
B[2][e]=0;
B[3][e]='-';
}
else
{
B[2][e]=0;
B[3][e]='+';
}
}
}
for(f=0;f<w;f++)
{
if(B[3][f]=='+')
{
B[2][f+1]=B[2][f]+B[2][f+1];
B[2][f]=0;B[3][f]='+';
}
if(B[3][f]=='-')
{
B[2][f+1]=(B[2][f]-B[2][f+1]);
B[2][f]=0;B[3][f]='+';
}
}
}

shuchu(double B[4][40],char *p)
{
printf("answer %f\n",B[2][w]);
}

main()
{
char *p,A[100];
shuru(A);
p=&A[0];
tlchli(p);
jgh(B,p);
qkh1(B);
qkh2(B);
jshjg(B);
shuchu(B,p);
}

#include"string.h"
#include"graphics.h"
#include"conio.h"
#include"dos.h"
#include"time.h"
#include"stdlib.h"
#include"stdio.h"
#include"math.h"
/*调用一系列的库函数*/
int py;/*定义一个全局变量*/
void mode(int py)/*mode函数,用来设置的,来使用计算器的多种运算功能*/
{ double x1,x2,ans,ans2;
if(py<11)
{ printf("input x1,x2:");
scanf("%lf,%lf",&x1,&x2); }
else {printf("input x:");scanf("%lf",&x1);}
switch(py)
{ case 6 : ans=x1+x2;printf("=%.3lf",ans);break;
case 7 : ans=x1-x2;printf("=%.3lf",ans);break;
case 8 : ans=x1*x2;printf("=%.3lf",ans);break;
case 9 : ans=x1/x2;printf("=%.3lf",ans);break;
case 10 : ans=pow(x1,x2);printf("x^%.1lf=%.3lf",x2,ans);break;
case 11 : ans=sqrt(x1);printf("=%.3lf",ans);break;
case 12 : ans=sin(x1);ans2=cos(x1);printf("sin x=%.3lf,cos x=%.3lf",ans,ans2);break;
case 13 : ans=asin(x1);ans2=acos(x1);printf("asin x=%.3lf,acos x=%.3lf",ans,ans2);break;
}
getch();clrscr();
}
int join(char *ps) /*join函数是输入用户名和密码的,可于已注册的用户进行匹配,注册用户可使用高级功能*/
{ char name[30],pass[20];
int len,i;
printf("ID:");
scanf("%s",name);
printf("\npass word:");
scanf("%s",pass);
clrscr();
for(i=0;i<strlen(ps);i++)
if(pass[i]!=*(ps+i)) return 0;
return 1;
}

int menu(int pass)/*menu函数,菜单*/
{int py=6;char key=0;
gotoxy(1,4);
printf("MENU\n\n");
printf("ADD +\n");
printf("SUB -\n");
printf("MUL *\n");
printf("DIV /");
gotoxy(10,6);printf("<-");
if(pass) {gotoxy(1,10);printf("INV ^\n");
printf("EVO ~\n");
printf("SIN COS\n");
printf("ASIN ACOS\n");
printf("modify\n");
printf("QUIT"); }
else {gotoxy(1,10);printf("QUIT");}
while(key!=13) /*以下都是控制选择箭头的位子的语句*/
{ key=getch();
switch(key)
{ case 80 : gotoxy(10,py);printf(" ");if(!pass) py=py%5+6; else {++py;if(py==16) py=6;}break;

case 72 : gotoxy(10,py);printf(" ");--py; if(py==5) py=10+5*pass; break;
}
gotoxy(10,py);printf("<-");
}
return py;
}

main() /*主函数,关于函数分配和开始动画的语句*/
{ int gd=DETECT,gm,x=320,y=10,i,l=10,h=10,t,co=3,v=0;
int pass;
FILE *fp;char ps[20];
initgraph(&gd,&gm,"");/*初始化图形模式*/
registerbgidriver(EGAVGA_driver);
for(i=1;i<31;co=(co++%10),v++,y+=2+v,i++)
{ delay(9e10);cleardevice();
setcolor(co);
setfillstyle(1,co);
sector(x,y,0,360,l,h);/*画圆*/
}
for(i=1;i<300;i++)
{ setcolor(i%10);
circle(x,y,i);
delay(1000);/*延时*/
}
cleardevice();/*清屏*/
closegraph();
fp=fopen("file1","r");
if(fp==NULL) pass=1;
else {fgets(ps,20,fp);
pass=join(ps);}
ld: py=menu(pass);
if(py==pass*5+10) {clrscr();printf("bye bye!");getch();return 0;}
else if(py!=14){clrscr();mode(py);} else { fp=fopen("file1","w");
printf("\npass word:");
scanf("%s",ps);
fputs(ps,fp);
fclose(fp); getch();clrscr();
}
goto ld; /*函数内跳转*/
}
#include <stdio.h> /*库函数*/
struct s_node
{
int data;
struct s_node *next;
};
typedef struct s_node s_list;
typedef s_list *link;
link operator=NULL;
link operand=NULL;

link push(link stack,int value)
{
link newnode;

newnode=(link) malloc(sizeof(s_list));
if(!newnode)
{
printf("\nMemory allocation failure!!!");
return NULL;
}
newnode->data=value;
newnode->next=stack;
stack=newnode;
return stack;
}

link pop(link stack,int *value)
{
link top;
if(stack !=NULL)
{
top=stack;
stack=stack->next;
*value=top->data;
free(top);
return stack;
}
else
*value=-1;
}

int empty(link stack)
{
if(stack==NULL)
return 1;
else
return 0;

}

int is_operator(char operator)
{
switch (operator)
{
case '+': case '-': case '*': case '/': return 1;
default:return 0;
}
}

int priority(char operator)
{
switch(operator)
{
case '+': case '-' : return 1;
case '*': case '/' : return 2;
default: return 0;
}
}

int two_result(int operator,int operand1,int operand2)
{
switch(operator)
{
case '+':return(operand2+operand1);
case '-':return(operand2-operand1);
case '*':return(operand2*operand1);
case '/':return(operand2/operand1);
}
}

void main()
{
char expression[50];
int position=0;
int op=0;
int operand1=0;
int operand2=0;
int evaluate=0;

printf("\nPlease input the inorder expression:");
gets(expression);

while(expression[position]!='\0'&&expression[position]!='\n')
{
if(is_operator(expression[position]))
{
if(!empty(operator))
while(priority(expression[position])<= priority(operator->data)&&
!empty(operator))
{
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);
operator=pop(operator,&op);
operand=push(operand,two_result(op,operand1,operand2));
}
operator=push(operator,expression[position]);
}
else
operand=push(operand,expression[position]-48);
position++;
}
while(!empty(operator))
{
operator=pop(operator,&op);
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);

operand=push(operand,two_result(op,operand1,operand2));
}
operand=pop(operand,&evaluate);
printf("The expression [%s] result is '%d' ",expression,evaluate);
getch();
}

F. C语言编程:多功能计算软件

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#define
UNKNOWN_CHAR
2
#define
DIVISOR_IS_ZERO
3
#define
FALSE
0
#define
TRUE
1
/*定义结构,主要用于GetString函数,可以不管它*/
typedef
struct
string
{char
str;
struct
string
*next;
}string;
/*函数声明*/
/*可以无限接受字符,输入一个字符就给你个空间,返回一个字符串首地址
.
*/
/*这个函数可以看成普通的scanf()*/
char
*GetString();
/*从字符串str第*rank个字符开始分析直到遇到
')'
or
']'
or
'}'
or
'\0'
.
*/
/*有错误就把错误代号装在*errorNum中,返回从中计算出的值*/
double
GetASResultOf(char
*
str,
int
*rank,
int
*errorNum);
/*从字符串str第*rank个字符开始分析直到遇到散纯不符合要求的字符,返回这个单位值.*/
/逗掘悄*如:str="12+sin(30)+[12+cos(60)]"
GetUnitageOf(str,0,errorNum)=12
GetUnitageOf(str,3,errorNum)=0.5
GetUnitageOf(str,11,errorNum)=12.5
*/
double
GetUnitageOf(char
*
str,
int
*rank,
int
*errorNum);
/*Are
you
ready?
Let's
go!----------------------------------*/
int
main()
{
/*定义变量*/
double
value;
int
rank=0;
int
errorNum=TRUE;
char
*
str;
/*接收字符*/
printf("counter
v1.0\n");
printf("Made
by
PT\n");
printf("Date
2005-07-16\n\n");
printf("Please
input
your
arithmetic:\山渣n");
str=GetString();
/*调用处理函数,*/
value
=
GetASResultOf(str,
&rank,
&errorNum);
/*错误处理(没完善)*/
if
(errorNum==TRUE)
printf("The
result
is:
%lf\n",value,
rank);
else
if
(errorNum==UNKNOWN_CHAR)
printf("char
error!\n");
else
if
(errorNum==DIVISOR_IS_ZERO)
printf("Divisor
could
not
be
0\n");
else
printf("Other
error\n");
getch();
return
0;
}
/*0==[=========>无限动态字符接受函数*/
char
*GetString()
{
char
*CharToString(string
*
sHead,
int
arraySize);
int
arraySize=0;
string
*s;
string
*sHead;
s
=
(string
*)malloc(sizeof(string));
sHead
=
s;
s->str
=
getchar();
arraySize++;
while((s->str)!='\n')
{
arraySize++;
s->next=(string
*)malloc(sizeof(string));
s=s->next;
s->str=getchar();
}
return
CharToString(sHead,
arraySize);
}
char
*CharToString(string
*
sHead,
int
arraySize)
{
char
*strArray;
string
*s=sHead;
int
i=0;
strArray
=
(char*)malloc(arraySize*sizeof(char));
while(i<arraySize)
{
if
(s->str=='='
||
s->str=='\n')
break;
if
(s->str!=32)
strArray[i++]=s->str;
s=s->next;
}
strArray[i]='\0';
return
strArray;
}
/*0==[=========>
得到一个单位的值*/
double
GetUnitageOf(char
*
str,
int
*rank,
int
*errorNum)
{
double
CharToNum(char
*
str,
int
*rank);
double
value;
/*如果是数字或负号就返回这个数字*/
if
((str[*rank]>=48
&&
str[*rank]<=57)
||
(str[*rank]=='-'))
{if
(str[*rank]=='-')
{(*rank)++;value
=
(-1)*GetUnitageOf(str,
rank,errorNum);}
else
{value
=
CharToNum(str,
rank);}}
/*如果是括号就用GetASResultOf取得括号里面的值并返回*/
else
if
(str[*rank]=='('
||
str[*rank]=='['
||
str[*rank]=='{'
)
{(*rank)++;
value
=
GetASResultOf(str,
rank,
errorNum);}
/*返回sin(x)*/
else
if
(str[*rank]=='s'
&&
str[(*rank)+1]=='i'
&&
str[(*rank)+2]=='n')
{
(*rank)=(*rank)+3;
value
=
GetUnitageOf(str,
rank,
errorNum);
value
=
sin(value);
}
/*返回cos(x)*/
else
if
(str[*rank]=='c'
&&
str[(*rank)+1]=='o'
&&
str[(*rank)+2]=='s')
{*rank=*rank+3;
value
=
cos(GetUnitageOf(str,
rank,
errorNum));}
/*返回tan(x)*/
else
if
(str[*rank]=='t'
&&
str[(*rank)+1]=='a'
&&
str[(*rank)+2]=='n')
{*rank=*rank+3;
value
=
tan(GetUnitageOf(str,
rank,
errorNum));}
/*还可以加一些的,懒得加了*/
/*defult:处理错误*/
else
{*errorNum
=
UNKNOWN_CHAR;value
=
0;}
/*检查errorNum*/
if
(*errorNum==TRUE){return
value;}
else
return
FALSE;
}
/*0==[=========>这个是把字符转换成数字的函数,只在GetUnitageOf()里用*/
/*数字不能超过15个,其余的将被抹去.*/
double
CharToNum(char
*
str,
int
*rank)
{
int
j=0;
double
value=0;
while((str[*rank]>=48
&&
str[*rank]<=57)
||
(str[*rank]==46))
{
if
(str[*rank]!='.')
{if
((j++)<=15)
{value
=
value*10+(str[*rank]-48);}}
else
{if
(j<=15)
{
for
((*rank)++,j=1;
(str[*rank]>=48
&&
str[*rank]<=57
&&
str[*rank]!='\0');
(*rank)++,
j++)
{value
=
value+(str[*rank]-48)*pow(0.1,j);}
return
value;
}
}
(*rank)++;
}
return
value;
}
/*0==[=========>这个函数写的太复杂了,实在不好作解释,反正是在GetPDResultOf
函数和GetUnitageOf函数之间转啊转的*/
/*简单地说就是把str中第一个加减号前的式子算出来放在value变量中.再用函数
GetPDResultOf算出直到二个加减号前的式子然后与value相加或相减放在
变量value中,以此类推,直到遇上
')'
or
']'
or
'}'
or
'\0'
*/
double
GetASResultOf(char
*
str,
int
*rank,
int
*errorNum)
{
double
GetPDResultOf(char
*
str,
int
*rank,
int
*errorNum);
double
value;
double
dwIf_Zero;
/*遇上
')'
or
']'
or
'}'
or
'\0'
就返回*/
while
(str[*rank]!=')'
&&
str[*rank]!=']'
&&
str[*rank]!='}'
&&
str[*rank]!='\0')
{
if
((str[*rank]>=48
&&
str[*rank]<=57)
||
str[*rank]=='s'
||
str[*rank]=='c'
||
str[*rank]=='t')
{
if
((str[*rank-1]==')'
||
str[*rank-1]==']'
||
str[*rank-1]=='}')
&&
*rank!=0)
{value
=
value*GetUnitageOf(str,
rank,
errorNum);}
else
{value
=
GetUnitageOf(str,
rank,
errorNum);}
}
else
if
(str[*rank]=='+')
{if
(str[*rank-1]!=
'('
&&
str[*rank-1]!=
'['
&&
str[*rank-1]!=
'{'
&&
(*rank)!=0
)
{(*rank)++;
value
=
value
+
GetPDResultOf(str,
rank,
errorNum);}
else
{*errorNum=UNKNOWN_CHAR;return
0;}}
else
if
(str[*rank]=='-')
{if
(str[*rank-1]!=
'('
&&
str[*rank-1]!=
'['
&&
str[*rank-1]!=
'{'
&&
(*rank)!=0
)
{(*rank)++;
value
=
value
-
GetPDResultOf(str,
rank,
errorNum);}
else
{value
=
GetUnitageOf(str,
rank,
errorNum);}}
else
if
(str[*rank]=='*')
{if
(str[*rank-1]!=
'('
&&
str[*rank-1]!=
'['
&&
str[*rank-1]!=
'{'
&&
(*rank)!=0
)
{(*rank)++;
value
=
value
*
GetUnitageOf(str,
rank,
errorNum);}
else
{*errorNum=UNKNOWN_CHAR;return
0;}}
else
if
(str[*rank]=='/')
{if
(str[*rank-1]!=
'('
&&
str[*rank-1]!=
'['
&&
str[*rank-1]!=
'{'
&&
(*rank)!=0
)
{(*rank)++;
dwIf_Zero=GetUnitageOf(str,
rank,
errorNum);
if
(dwIf_Zero==0)
{*errorNum=DIVISOR_IS_ZERO;return
0;}
else
value
=
value
/dwIf_Zero;}
else
{*errorNum=UNKNOWN_CHAR;return
0;}}
else
if
(str[*rank]==
'('
||
str[*rank]==
'['
||
str[*rank]==
'{'
)
{if
(str[*rank-1]!=
'('
&&
str[*rank-1]!=
'['
&&
str[*rank-1]!=
'{'
&&
(*rank)!=0
)
{(*rank)++;
value
=
value*GetASResultOf(str,
rank,
errorNum);}
else
{value
=
GetUnitageOf(str,
rank,
errorNum);}}
else
{*errorNum=UNKNOWN_CHAR;return
FALSE;}
if
(*errorNum!=TRUE)
return
FALSE;
}
(*rank)++;
return
value;
}
double
GetPDResultOf(char
*
str,
int
*rank,
int
*errorNum)
{
double
value;
double
dwIf_Zero;
value
=
GetUnitageOf(str,
rank,
errorNum);
if
(str[*rank]=='\0')
return
value;
while
(str[*rank]!='+'
&&
str[*rank]!='-'
&&
str[*rank]!=')'
&&
str[*rank]!=']'
&&
str[*rank]!='}')
{
if
(str[*rank]=='*')
value
=
value
*
GetUnitageOf(str,
rank,
errorNum);
else
if
(str[*rank]=='/')
{
dwIf_Zero=
GetUnitageOf(str,
rank,
errorNum);
if
(dwIf_Zero=0)
{*errorNum=DIVISOR_IS_ZERO;return
0;}
else
value
=
value
/dwIf_Zero;
}
else
if
(str[*rank]=='('
||
str[*rank]=='['
||
str[*rank]=='{')
{(*rank)++;
value
=
value
*
GetUnitageOf(str,
rank,
errorNum);}
else
{*errorNum=UNKNOWN_CHAR;return
FALSE;}
if
(*errorNum!=TRUE)
return
FALSE;
}
return
value;
}

G. 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;

运行结果:

(7)c语言编程多功能计算机扩展阅读:

return表示把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回,返回时可附带一个返回值,由return后面的参数指定。

return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。

H. c语言编程,编一个多功能计算器

#define MAX 100

typedef struct //运算数
{
double a[MAX];
int top;
}OPND;

typedef struct //运算符
{
char a[MAX];
int top;
}OPTR;

void Init_OPND(OPND *s); //初始化运算数栈
void Push_OPND(OPND *s,double x); //push一个运算数
double Pop_OPND(OPND *s); //pop一个运算数
double GetTop_OPND(OPND *s); //取栈顶运算数
void Init_OPTR(OPTR *s); //初始化运算符栈
void Push_OPTR(OPTR *s,char x); //push一个运算符
char Pop_OPTR(OPTR *s); //pop一个运算符
char GetTop_OPTR(OPTR *s); //取栈顶运算符
int IsOpr(char c); //判断输入字符是否为运算符
char Precede(char s,char c); //判断字符的优先级
double Operate(double x,char opr,double y); //计算

void Init_OPND(OPND *s) //初始化运算数栈

{
s->top =-1;
}

void Init_OPTR(OPTR *s) //初始化运算符栈

{
s->top =-1;
}

void Push_OPND(OPND *s,double x) //push一个运算数

{
s->top ++;
s->a [s->top ]=x;
}

void Push_OPTR(OPTR *s,char x) //push一个运算符

{
s->top ++;
s->a [s->top ]=x;
}

double Pop_OPND(OPND *s) //pop一个运算数
{
double x;
x=s->a [s->top];
s->top --;
return x;
}

char Pop_OPTR(OPTR *s) //pop一个运算符

{
char x;
x=s->a [s->top];
s->top --;
return x;
}

double GetTop_OPND(OPND *s) //取栈顶运算数

{
return (s->a[s->top]);
}

char GetTop_OPTR(OPTR *s) //取栈顶运算符

{
return (s->a[s->top]);
}

int IsOpr(char c) //判断输入字符是否为运算符
{
if (c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#'||c=='.')
return 1;
else
return 0;
}

char Precede(char s,char c) //判断字符的优先级
{
switch(s)
{
case '+':
case '-':
{
if(c=='+'||c=='-')
return '>';
else if (c=='*'||c=='/')
return '<';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
}
break;

case '*':
case '/':
{
if(c=='+'||c=='-')
return '>';
else if (c=='*'||c=='/')
return '>';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
}
break;

case '(':
{
if(c==')')
return '=';
else
return '<';
}
break;

case ')':
{
return '>';
}
break;

case '#':
{
if(c=='#')
return '=';
else
return '<';

}
break;
}
return 0;
}

double Operate(double x,char opr,double y) //计算
{
double result;
switch (opr)
{
case '+':
result = x + y;
break;
case '-':
result = x - y;
break;
case '*':
result = x * y;
break;
case '/':
result = x / y;
break;
}
return result;
}

I. C语言课程设计 题目为设计一个多功能计算软件实现功能 求完美的代码

参考下这个:
#include <stdio.h>
#include <windows.h>
//输入操作数和操作符
void inputNum(double &num_one,double &num_two,short &operatorNum)
{
printf("第一个数:");
double num;
scanf("%lf",&num);
if(num==0)
{
num_one=num_one;
}
else
{
num_one=num;
}
printf("选择运算:");
scanf("%d",&operatorNum);
printf("第二个数:");
scanf("%lf",&num_two);
}
//返回操作符号
char intputOperator(short &typeOperator)
{
char signal;
switch (typeOperator)
{
case 1:
signal='+';break;
case 2:
signal='-';break;
case 3:
signal='*';break;
case 4:
signal='/';break;
default:
printf("无此运算符");
}
return signal;
}
//显示菜单
void showMenu()
{
printf("操作符选择:\n1:\t加法(+)\n2:\t减法(-)\n3:\t乘法(×)\n4:\t除法(÷)\n注:若想把上次的结果作为下次的第一运算数那么请输入0\n\n");
}
//清屏操作
void clearScreen()
{
printf("输入C 清除屏幕,输入R回到主菜单,输入S继续计算\n输入:");
char ch;
getchar();
scanf("%c",&ch);
if(ch=='C')
{
system("cls");
}
else if(ch=='R')
{
system("cls");
showMenu();
}
else if (ch=='S')
{
}
else
{
printf("输入错闭册误,请重新输入!\n");
clearScreen();
}
}
//计算结果
void GetResult(double &num_one,double &num_two,short &typeOperator)
{
char signal;
signal=intputOperator(typeOperator);
double res=0.0;
switch (signal)
{
case '+':
res=num_one+num_two;break;
case '-':
res=num_one-num_two;break;
case '*':
res=num_one*num_two;break;
case '/':
if(num_two == 0)
{
printf("除数不能尺态肆为0\n");break;
}
res=num_one/num_two;break;
default:
printf("无此运算方法");
}
printf("=%lf\n\n",res);
num_one=res;
}
void main()
{
double num_one,num_two; //声明操作数
short operator_num; //声明陵轿操作符
showMenu(); //显示菜单
while (1)
{
inputNum(num_one,num_two,operator_num); //输入操作数和操作符
GetResult(num_one,num_two,operator_num); //计算结果以及显示结果
clearScreen(); //清屏工作
}
}