既然大家都没发程序,I am coming
说明:由于幂的运算应该比括号低比乘除要高,所以为避免混淆用幂运算时用括号括起来,比如2+9/3^2-5表示2+(9/3)^2-5,要是想要9除以3^2,这样输入:2+9/(3^2)-5,以免引起歧义。
程序功能强大代码简练。可以对任意数值类型计算,这里全部按double型处理,程序还可以使用大括号{}中括号[]小括号()三种括号,当然优先级是小括号>中括号>大括号>运算符。
要是只想结果取整,将所有double类型改为int即可,不过不主张这样做,既然是计算器,当然要精确计算。
一个完整的c程序如下,程序在win-tc和Dev-c++下都调试通过。
#include <stdioh>
#include <stdlibh>
#include <mathh>
#include <stringh>
char s[201];/全局变量s[]与i分别表示算术表达式字符串以及其当前位置指针变量/
int i=0;
double proc1(char ch);
void proc2(double a,char c);
void str_read(double a,char c) /读取下一个 *** 作数/
{ int j=0;
char s1[30];
while ((s[i]!='\0')&&(s[i]!='+')&&(s[i]!='-')&&(s[i]!='(')&&(s[i]!=')')
&&(s[i]!='=')&&(s[i]!='^')&&(s[i]!='')&&(s[i]!='/')&&(s[i]!='[')&&(s[i]!=']')
&&(s[i]!='{')&&(s[i]!='}')) / *** 作数结束标志/
s1[j++]=s[i++];
s1[j]='\0';
a=atof(s1);
c=s[i++];
}
void input_str() /表达式接收模块/
{ int j,k,t=0;
char c,s1[80];
printf("\n请输入任一算术表达式:\n");
while (!t)
{ gets(s);
j=k=0; t=1;
while ((s[j]!='=')&&(s[j]!='\0')&&(t)) /判断括号配对/
{if ((s[j]=='(')||(s[j]=='[')||(s[j]=='{'))
switch(s[j])
{ case '(':s1[k++]=')';break;
case '[':s1[k++]=']';break;
case '{':s1[k++]='}';
}
else if ((s[j]==')')||(s[j]==']')||(s[j]=='}'))
if (s1[--k]!=s[j])
{ printf("输入出错!请重新输入(直接回车退出):\n");
t=0;
}
j++;
}
if ((k!=0)&&(t))
{printf("输入出错!请重新输入(直接回车退出):\n");
t=0;
}
}
}
void proc2(double a,char c)
/算术运算符之后只有两种情况:要么是各种左括号,要么是 *** 作数/
{ char ch;
if ((s[i]=='(')||(s[i]=='[')||(s[i]=='{'))
{ switch(s[i])
{ case '(':ch=')';break;
case '[':ch=']';break;
case '{':ch='}';
}
++i;
a=proc1(ch);
/计算从当前左括号开始到与其相对应的右括号结束这段表达式的值/
c=s[i++]; /跳过右括号/
}
else str_read(a,c); /读取一个 *** 作数/
}
double proc1(char ch)
/该过程对算术表达式s从当前位置s[i]开始到表达式结束或s[i]==ch这部分进行求值/
{ double a1=0,a2,a=0;
char c1='+',c='+',c2='+';
/给表达式前面加上"0+"(第一 *** 作数与第一 *** 作符)/
while((c!='=')&&(c!='\0')&&(c!=ch))
{ proc2(&a,&c); /读取第二 *** 作数与第二 *** 作符/
while (c=='^' || c=='' || c=='/')
{ proc2(&a2,&c2); /读取第三 *** 作数与第三 *** 作符/
switch (c) /对第二 *** 作符进行运算/
{ case '':a=aa2; break;
case '/':a=a/a2; break;
case '^':a=pow(a,a2);
}
c=c2; /把第三 *** 作符赋给第二 *** 作符变量/
}
switch (c1) /对第一 *** 作符进行运算/
{ case '+':a1=a1+a;break;
case '-':a1=a1-a;
}
c1=c; /把第二 *** 作符赋给第一 *** 作符变量/
}
return(a1); /返回这部分表达式的值/
}
int main(void)
{ system("cls");
input_str();
if (s[0]=='\0') return 0;
printf("该表达式的值是: ");
printf("%-8f\n",proc1('\0'));
system("pause");
return 0;
}
#include <stdioh>
#include <stringh>
void main()
{
char a[] = "hello";
char b[100];
memset(b, 0, sizeof(b));
strcpy(b, a);
strcat(b, "world!");
printf("%s\n", b);
}
5个函数,memset,sizeof,strcpy,strcat,printf,个个常用。
分析:问题库(QAS)用外部的配置文件保存,每次运行前先载入库中已经建立的问题。然后再进入 *** 作选择。完整代码如下:/1暂时不考虑汉字;2可以用链表优化;3将每一种 *** 作封装成一个函数;/#include#include#include#include////////////////////////////////////////////////////////////////////////////字符串最大长度#defineMAX_STR_LEN2048//题库上限#defineMAX_QAS_LEN1024//配置文件路径#defineQAS_FILE_PATH"d:\\qasconfigtxt"////////////////////////////////////////////////////////////////////////////问题结点typedefstructtagQASNode{charQuestion[MAX_STR_LEN];charAnswer[MAX_STR_LEN];doubleScore;boolIsAnswered;}QASNode;//问题库QASNodeg_QASLib[MAX_QAS_LEN];intg_QASIndex=0;////////////////////////////////////////////////////////////////////////////添加boolInsertToLib(charpQuestion,charpAnswer,doublescore){if(pQuestion==NULL||strcmp(pQuestion,"")==0||pAnswer==NULL)returnfalse;QASNodepNewNode=(QASNode)malloc(sizeof(QASNode));memset(pNewNode,0L,sizeof(QASNode));strcpy_s(pNewNode->Question,pQuestion);strcpy_s(pNewNode->Answer,pAnswer);pNewNode->Score=score;g_QASLib[g_QASIndex++]=pNewNode;returntrue;}//随机一个不重复的序号intGetQuestionIndex(){intretVal=-1;inttryCnt=0;while(tryCnt++IsAnswered){retVal=randVal;break;}}returnretVal;}//////////////////////////////////////////////////////////////////////////intmain(){//打开配置文件FILEpStream=NULL;if(fopen_s(&pStream,QAS_FILE_PATH,"a+")!=0){printf_s("Opentheconfigfilefailed\n");return-1;}//加载已有的QASfseek(pStream,0L,SEEK_END);intfileSize=ftell(pStream);fseek(pStream,0L,SEEK_SET);while(!feof(pStream)&&fileSize){if(g_QASIndexQuestion);printf_s("Inputanswer:");chartempA[MAX_STR_LEN]={0};fflush(stdin);gets_s(tempA,MAX_STR_LEN);if(strcmp(tempA,g_QASLib[currentIndex]->Answer)==0){printf("Right!\n");totalSocore+=g_QASLib[currentIndex]->Score;g_QASLib[currentIndex]->IsAnswered=true;}else{printf("Wrong!\n");}}else{printf("你已经答对了所有的问题!\n");}}break;case2:{if(currentIndex!=-1){printf("Quest:%s\nScore=%2f\n",g_QASLib[currentIndex]->Question,g_QASLib[currentIndex]->Score);}else{printf("请先选择\"回答问题\"!\n");}}break;case3:{//一次只添加一个问题if(g_QASIndexQuestion,g_QASLib[i]->Answer,g_QASLib[i]->Score);}}break;default:break;}}printf("\n");return0;}运行起来后先建立问题库!
给你一个简单的菜单程序吧。其中的子函数,填充成楼主所需即可。
#include <stdioh>/子函数1/
fun1() {
printf ("子函数1\n");
}
/子函数2/
fun2() {
printf ("子函数2\n");
}
/子函数3/
fun3() {
printf ("子函数3\n");
}
/子函数4/
fun4() {
printf ("子函数4\n");
}
int main(void) {
int key; /命令编号/
do {
system("cls"); /清屏/
/打印菜单/
printf ("======================================================\n");
printf (" #\t功能详情\n");
printf ("------------------------------------------------------\n");
printf (" 1\t功能1\n");
printf (" 2\t功能2\n");
printf (" 3\t功能3\n");
printf (" 4\t功能4\n");
printf (" 5\t退出\n");
printf ("======================================================\n");
printf ("\n");
printf("请输入命令编号以开启 *** 作:");
/输入命令编号/
scanf("%d",&key);
printf ("\n");
/switch函数实现输入功能序号执行相应函数/
switch (key) {
case 1: fun1(); break; /子函数1/
case 2: fun2(); break; /子函数2/
case 3: fun3(); break; /子函数3/
case 4: fun4(); break; /子函数4/
case 5: printf("程序结束!按任意键退出\n\n"); break;
default:printf("输入错误,请重新输入!\n\n"); break;
}
/屏幕暂留/
if (key!=5) {
printf ("\n");
printf("按Enter键继续\n");
printf ("\n");
fflush(stdin);
getch ();
}
} while (key!=5);
/屏幕暂留/
fflush(stdin);
getch ();
return 0;
}
运行结果
改好了~~ #include <iostream> #include <conioh> #include <stringh> #include <iomanip> using namespace std; #define MAX 5 int login() { char ch,str[80],passwd[]="1234567"; int i; cout<<"登陆账号为:huitailang2010\n请输入您的登录密码(你有3次机会):"; for(int k=1;k<=3;k++) { i=0; ch=getch(); cout<<""; while(ch!='\r') { str[i]=ch; ch=getch(); cout<<""; i++; } str[i]=0; cout<<endl; if(strcmp(str,passwd)==0) { cout<<"密码正确,你是合法用户,欢迎进入灰太狼皮包公司员工工资管理系统!\n\n"<<endl; int ca=9,i=0;//i为循环变量,ca为选择的 *** 作 int temp=0;//临时存输入数据 int max=0,imax=0,mix=0,imix=0,salary=0,avg=0,sum=0;//max最高工资,mix最低,salary,经理人数 ,avg平均工资 ,sum工资总和 ,imax,imix求最高和最低序号 // cout<<"-----------灰太狼皮包公司员工工资管理系统---------\n"<<endl; cout<<"1输入员工工资\n"<<endl; cout<<"2显示员工工资\n"<<endl; cout<<"3统计分析工资\n"<<endl; cout<<"4升序排列工资\n"<<endl; cout<<"5招聘插入工资\n"<<endl; cout<<"6解聘删除工资\n"<<endl; cout<<"7查找员工工资\n"<<endl; cout<<"8打印员工工资\n"<<endl; cout<<"9退出应用系统\n"<<endl; cout<<"-------------程序结束---------------\n"<<endl; cout<<"请输入你的选择:\n"<<endl; return 1; } else { if(k<3)cout<<"密码错误,再输入一次:"; } if(k>3) { cout<<"密码不正确,你是非法用户!!!!"<<endl; } } return 0; } int input1(int yuangong) { int temp=0;//临时存输入数据 for(int i=0;i<MAX;i++) { cout<<"请输入灰太狼皮包公司第"<<i+1<<"个员工工资:"<<endl; cin>>temp; if(temp<=0) { cout<<"工资应该大于0"<<endl; i--; } else { yuangong[i]=temp; } } cout<<"信息输入完毕,显示信息请按2"<<endl; return 0; } int input2(int yuangong) { for(int i=0;i<MAX;i++) cout<<"第"<<i+1<<"个员工的工资为:"<<yuangong[i]<<endl; cout<<"信息输入完毕,统计分析工资请按3"<<endl; return 0; } int tongji(int yuangong) { int max=0,imax=0,mix=0,imix=0,salary=0,avg=0,sum=0;//max最高工资,mix最低,salary,经理人数 ,avg平均工资 ,sum工资总和 ,imax,imix求最高和最低序号 mix=yuangong[0]; for(int i=0;i<MAX;i++)//求最大 { if(yuangong[i]>max) { max=yuangong[i]; imax=i; } else if(yuangong[i]<mix) { mix=yuangong[i]; imix=i; } sum+=yuangong[i]; avg=sum/MAX; if(yuangong[i]>4000) { salary++; } } cout<<"最高工资为第"<<imax+1<<"号员工:"<<max<<endl; cout<<"最低工资为第"<<imix+1<<"号员工:"<<mix<<endl; cout<<"平均工资为:"<<avg<<endl; cout<<"经理人数为:"<<salary<<endl; cout<<"信息输出完毕,升序排列工资请按4"<<endl; return 0; } int sort(int yuangong) { int temp; for(int i=0;i<MAX;i++) { for (int j=i+1;j<=MAX-1;j++) if(yuangong[i]<yuangong[j]) { temp=yuangong[i];yuangong[i]=yuangong[j];yuangong[j]=temp; } } cout<<"查看结果请按2\n"<<endl; cout<<"信息输出完毕,招聘插入工资请按5"<<endl; return 0; } int charu(int yuangong) { int i,x; cout<<"招聘插入工资:"<<endl; cout<<"请输入要插入的数:"<<endl; cin>>x; for(i=0;i<MAX;i++) if(yuangong[i]>=x) break; if(i>=MAX) yuangong[MAX-1]=x; else { cout<<"要插入的数是数组的第"<<i<<"个元素"<<endl; for(int j=MAX-2;j>=i;j--) yuangong[j+1]=yuangong[j]; yuangong[i]=x; } cout<<"插入"<<x<<"以后的数组为:" ; for(i=0;i<MAX;i++) cout<<yuangong[i]<<" "; cout<<endl; cout<<"信息输出完毕,解聘删除工资请按6"<<endl; return 0; } int shanchu(int yuangong) { int i,x; cout<<"解聘删除工资:"<<endl; cout<<"请输入要删除的数x:"; cin>>x; for(i=0;i<MAX;i++) if(yuangong[i]==x) break; if(i>=MAX) cout<<"查无此数!"<<endl; else { cout<<"要删除的数是数组的第"<<i<<"个元素"<<endl; for(int j=0;j<MAX;j++) yuangong[j]=yuangong[j+1]; } cout<<"信息输出完毕,查找员工工资请按7"<<endl; return 0; } int chazhao(int yuangong) { int i,x; cout<<"查找员工工资:"<<endl; cout<<"请输入要查找的数x:"; cin>>x; for(i=0;i<MAX;i++) { if(yuangong[i]==x) break; if(i>=MAX) cout<<"查无此数!"<<endl; else cout<<"要查找的数是数组的第"<<i<<"个元素"<<endl; break; } cout<<"信息输出完毕,打印员工工资请按8"<<endl; return 0; } int dayin(int yuangong) { cout<<"8打印员工工资"<<endl; float salary[4][7],sum; int i,j; for(i=0;i<=4;i++) { cout<<"输入第"<<i+1<<"个员工前三项工资:"<<endl; for(j=0;j<3;j++) cin>>salary[i][j]; sum=salary[i][0]+salary[i][1]+salary[i][2]; salary[i][3]=sum01; salary[i][4]=sum005; salary[i][5]=sum01; salary[i][6]=sum075; } for(i=0;i<=4;i++) { cout<<"\n工号 基本工资 岗位工资 补助工资 住房公积金 医疗保险金 养老保险金 总工资\n\n"<<endl; cout<<i+1<<" "; for(j=0;j<7;j++) cout<<setw(6)<<salary[i][j]<<" "; cout<<endl; } cout<<"员工工资打印结束,退出程序请按9,继续程序请按1!!\n\n" <<endl; return 0; } int main() { int login();//函数声明 int input1(int); int ca=9,i=0;//i为循环变量,ca为选择的 *** 作 int temp=0;//临时存输入数据 int max=0,imax=0,mix=0,imix=0,salary=0,avg=0,sum=0;//max最高工资,mix最低,salary,经理人数 ,avg平均工资 ,sum工资总和 ,imax,imix求最高和最低序号 int yuangong[MAX];//员工工资数组 if(login()==1) { while(1) { cin>>ca; if(ca==1) { input1(yuangong); } else if(ca==2) { input2(yuangong); } else if(ca==3) { tongji(yuangong); } else if(ca==4) { sort(yuangong); } else if(ca==5) { charu(yuangong); } else if(ca==6) { shanchu(yuangong); } else if(ca==7) { chazhao(yuangong); } else if(ca==8) { dayin(yuangong); } else { exit(0); } } } getchar();getchar(); system ("puase"); system ("puase"); return 0; }
采纳哦
(1)Int(-314159)
(2)Sqr(Sqr(64))
(3)CInt(15/4)
(4)Str(-45965)
(5)Int(Abs(99-100)/2)
(6)Val("16 Year")
(7)Len("VB50")
(8)Mid("Window_VB",3,4)
以上就是关于用C语言编译一个简单计算器的程序,要求其中有括号和幂函数全部的内容,包括:用C语言编译一个简单计算器的程序,要求其中有括号和幂函数、谁能帮我设计一个使用C语言库函数的简单程序、用c语言写一个简单的菜单程序,一个主函数至少四个子函数急求!!就像这样的。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)