# include<stdio.h> # include<stdlib.h什么意思> # include<math.h> # include<string.h>

用c语言设置计算器,能运行加减乘除。而且运行的时候不能有任何错误_百度知道
用c语言设置计算器,能运行加减乘除。而且运行的时候不能有任何错误
一定要能运行的程序
提问者采纳
最近自己做的,可以进行乘除优先,括号优先的运算#include&stdio.h&#include&stdlib.h&#include&string.h&#include&math.h&void bracket(char *a);/*处理含有括号的式子,将括号部分计算后值放回原数组*/int digit(double a);/*计算一个浮点型数整数部分的位数*//*存放括号处字符串的长度*/void pick(double a,char *ch);/*将浮点数a存入数组ch中(不包括小数点)*/double part_take1(char a[],int b,int c);/*取出数组a下标b到c的字符所组成的数*/double multiply(char h[]);/*对数组h中存放的式子进行乘除运算*/void part_take2(char d[],char *e,int f,int g);/*取出数组d下标f到g的字符并存入数组e中*/double sum(char express[]);/*对数组express中字符组成的表达式进行运算*/int main(void){char express[100];/*存放运算式*//*存放结果*/puts(&请输入计算式,或输入q退出&);gets(express);/*输入运算式*/while(express[0]!='q')/*输入q则退出*/{bracket(express);/*处理括号*/result=sum(express);/*计算*/printf(&计算结果为%f\n&,result);gets(express);}return 0;}double sum(char express[])/*对数组express中字符组成的表达式进行运算*/{/*用于控制循环次数*//*用于记录+或-的位置*//*用于存放express的长度*/char ch2[100];/*用于存放式子中乘除部分的运算式*/double part1;/*存放乘除部分的运算式的结果*/
double result=0;/*存放结果*/k=-1;length=strlen(express);for(i=0;i&(int)(strlen(express));i++){if(express[i]=='+'||express[i]=='-'){part_take2(express,ch2,k+1,i-1);part1=multiply(ch2);if(k==-1){result=result+part1;}if(express[k]=='+'&&k&0){result=result+part1;}if(express[k]=='-'&&k&0){result=result-part1;}ch2[0]='\0';k=i;}}part_take2(express,ch2,k+1,length-1);part1=multiply(ch2);if(k==-1||express[k]=='+'){result=result+part1;}else{result=result-part1;}return(result);}double part_take1(char a[],int b,int c){char ch1[100];for(h=b,j=0;h&=c;h++,j++){ch1[j]=a[h];}result=atof(ch1);return(result);}double multiply(char h[]){int k=-1;double part=1;int s=strlen(h);for(i=0;i&s;i++){if(h[i]=='*'||h[i]=='/'){num=part_take1(h,k+1,i-1);if(k&0){part=part*}if(h[k]=='*'&&k&0){part=part*}if(h[k]=='/'&&k&0){part=part/}k=i;}}num=part_take1(h,k+1,s-1);if(h[k]=='*'||k==-1){part=part*}else{part=part/}return(part);}void part_take2(char d[],char *e,int f,int g){for(i=f,j=0;i&=g;i++,j++){e[j]=d[i];}e[j]='\0';}void bracket(char *a){int length=strlen(a);char ch1[100];char ch[100];for(i=0;i&i++){if(a[i]=='('){k=i;}if(a[i]==')'){partlength=i-k+1;part_take2(a,ch,k+1,i-1);num=sum(ch);count=digit(num);pick(num,ch1);for(j=1;j&=count+1;j++){a[k]=ch1[j-1];++k;}a[k-1]='.';while(j&=partlength-count+1){a[k]=ch1[j-1];j+=1;k+=1;}}}}void pick(double a,char *ch){for(k=0,i=1-digit(a);i&=i++){d=i;c=a*pow(10.0,(double)d);ch[k]=((int)c)%10+48;k++;}ch[k]='\0';}int digit(double a){int num=a;for(i=1;num/10!=0;i++){num/=10;}return(i);}
你确定能运行出来么??这是期末作业,我必须确定它能运行,没有一点错误,还有你能给我截图么.给我看一下运行出来是什么样子的
......你不会自己编译一下吗?
提问者评价
其他类似问题
按默认排序
其他1条回答
#include &stdio.h& #include &stdlib.h& #include &string.h&
#define MAXSIZE
100typedef struct
data[MAXSIZE]; } S
table[] = {0,0,2,1,0,1,0,2};//查询运算符优先级表
void infix_to_suffix(Stack *sta, char *infix, int *suffix, int *length);
//将后缀表达式转换为结果直接返回 int suffix_to_result(Stack *sta, int *suffix, int length); void init(Stack *sta); int main() {
sstr[MAXSIZE];
istr[MAXSIZE];
printf(&请输入以 + - * / 组成的四则运算\n(注意负数需要在两旁添加上括号)\n&);
scanf(&%s&, istr);
init(&sta);
infix_to_suffix(&sta, istr, sstr, &length);
init(&sta);
result = suffix_to_result(&sta, sstr, length);
printf(&%d\n&, result);
0; } void infix_to_suffix(Stack *sta, char *infix, int *suffix, int *length) {
priority = 0;
for (i = 0; i & strlen(infix); )
if (infix[i] &= '0' && infix[i] &= '9')
while (infix[i] &= '0' && infix[i] &= '9')
b = b * 10 + (infix[i] - '0');
suffix[j] =
if (infix[i] == 41)
while (sta-&data[sta-&top] != 40)
suffix[j] = sta-&data[sta-&top];
sta-&data[sta-&top] = 0;
sta-&top--;
sta-&data[sta-&top] = 0;
sta-&top--;
priority = table[sta-&data[sta-&top] % 10];
if (infix[i] == 40)
sta-&top++;
sta-&data[sta-&top] = infix[i];
priority = table[sta-&data[sta-&top] % 10];
if (infix[i] &= 42 && infix[i] &= 47)
if (priority &= table[infix[i] % 10])
while (priority &= table[infix[i] % 10] && sta-&data[sta-&top] != 40)
suffix[j] = sta-&data[sta-&top];
sta-&data[sta-&top] = 0;
sta-&top--;
priority = table[sta-&data[sta-&top] % 10];
sta-&top++;
sta-&data[sta-&top] = infix[i];
priority = table[sta-&data[sta-&top] % 10];
if (infix[i] == 45 && sta-&data[sta-&top] == 40)
while (infix[i+1] &= '0' && infix[i+1] &= '9')
b = b * 10 + (infix[i+1] - '0');
suffix[j] = b * -1;
sta-&data[sta-&top] = 0;
sta-&top--;
priority = table[sta-&data[sta-&top] % 10];
sta-&top++;
sta-&data[sta-&top] = infix[i];
priority = table[sta-&data[sta-&top] % 10];
while (sta-&top != -1)
suffix[j] = sta-&data[sta-&top];
sta-&top--;
*length = } int suffix_to_result(Stack *sta, int *suffix, int length) {
result = 0;
for (i = 0; i & i++)
switch (suffix[i])
result = sta-&data[sta-&top - 1] * sta-&data[sta-&top];
sta-&top -= 1;
sta-&data[sta-&top] =
result = sta-&data[sta-&top - 1] + sta-&data[sta-&top];
sta-&top -= 1;
sta-&data[sta-&top] =
result = sta-&data[sta-&top - 1] - sta-&data[sta-&top];
sta-&top -= 1;
sta-&data[sta-&top] =
result = sta-&data[sta-&top - 1] / sta-&data[sta-&top];
sta-&top -= 1;
sta-&data[sta-&top] =
sta-&top++;
sta-&data[sta-&top] = suffix[i];
//初始化栈空间 void init(Stack *sta) {
for (i = 0; i & MAXSIZE; i++)
sta-&data[i] = 0;
sta-&top = -1; }
亲,你确定能运行出来么??没有一点错误??
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁您还未登陆,请登录后操作!
计算机二级C语言
#include &stdio.h&
while(x--);
printf(&%d\n&,x);
输出结果是什么?
为什么啊?
输出结果是-1
循环执行条件是(x--)为真,即不为0。
执行第一次,x为2,但是实际已变为1(x--是先引用再减)
第二次,x变为1,但是实际已变为0
第三次,x变为0,但是实际已变为-1
退出循环,输出结果,为-1。
回答数:1480
您的举报已经提交成功,我们将尽快处理,谢谢!您还未登陆,请登录后操作!
c语言 函数 求平均值
#include&stdio.h&
#define n 10
void main()
int score[n],
//函数声明
int aver(int score[n]);
for(i=0,sum=0;i&n;i++)
//输入数据
scanf(&%d&,score[i]);
average=aver(score);
//调用函数
printf(&\naverage=%d\n&,average);
int aver(int score[n])
//函数定义
for(i=0,sum=0;i&n;i++)
sum=sum+score[i];
return(sum/n);
我这个程序是不是有问题啊,每次运行都会自己关闭。。
求不出平均值是怎么回事
scanf("%d",score[i]);
scanf("%d",&score[i]);
否则你不能得到输入
其结果是不确定的
回答数:4992
带我去寻找
辛苦了,不过他比较早。。
你是不是经常在windows下进行学习?从你的代码上看出有一定的经验。
#include "stdio.h"
#include "conio.h"不符合语法规范,应该使用&&
在windows下可以,但是在unix就会失败。不是标准语法!建议你不要这样使用,
您的举报已经提交成功,我们将尽快处理,谢谢!c语言奔跑的小人,是从左往右走的 现在要它从右面往左走,怎么修改? #include&stdio._百度知道
c语言奔跑的小人,是从左往右走的 现在要它从右面往左走,怎么修改? #include&stdio.
c语言奔跑的小人,是从左往右走的 现在要它从右面往左走,怎么修改? #include&stdio.h& #include&stdlib.h& #include&unistd.h& void main() {
while (a&=20)
system(&clear&);
while (b&=a)
printf(& &);
printf(& O\n&);
while (b&=a)
printf(& &);
printf(&&H&\n&);
while (b&=a)
printf(& &);
printf(&I I\n&);
提问者采纳
把初始值a = 20; while循环改成a &= 0 最后的a ++ 改成a --就好了#include&stdio.h&#include&stdlib.h&#include&unistd.h&int&main()&{&&&&&&&&int&a,b;&&&&&a=20;//---------------------&&&&&&&&while&(a&&=&0)&&&&&{&//-------------------------&&&&&&&&&&&&&&&&&&&&&&&&system(&clear&);&&&&&&&&&&&&b=1;&&&&&&&&&&&&while&(b&=a)&&&&&&&&&{&&&&&&&&&&&&&&&&printf(&&&);&&&&&&&&&&&&&&&&b++;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&printf(&&O\n&);&&&&&&&&&&&&&&&&b=1;&&&&&&&&&&&&&&&&while&(b&=a)&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&printf(&&&);&&&&&&&&&&&&&&&&&&&&b++;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&printf(&&H&\n&);&&&&&&&&&&&&&&&&&&&&b=1;&&&&&&&&&&&&&&&&&&&&while&(b&=a)&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&printf(&&&);&&&&&&&&&&&&&&&&&&&&&&&&b++;&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&printf(&I&I\n&);&&&&&&&&&&&&&&&&&&&&sleep(1);&&&&&&&&&&&&&&&&&&&&a--;&//--------------------------------------&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&}
提问者评价
太给力了,你的回答完美解决了我的问题!
其他类似问题
include的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁您还未登陆,请登录后操作!
error C2065: “true”: 未声明的标识符
#include&stdio.h&
#include&math.h&
void main(){
float a,b,c,disc,x1,x2,realpart,
while(true){
printf(&Input a,b,c:&);
scanf_s(&%f,%f,%f&,&a,&b,&c);
printf(&The equation &);
if(fabs(a)&1e-6)
printf(&is not a quadratic\n&);
disc=b*b-4*a*c;
if(fabs(disc)&1e-6)
printf(&has two equal roots:%8.4f\n&,-b/(2*a));
if(disc&1e-6){
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf(&has distinct real roots:%8.4f and %8.4f\n&,x1,x2);
realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
printf(&has complex roots:\n&);
printf(&%8.4f+%8.4fi\n&,realpart,imagpart);
printf(&%8.4f-%8.4fi\n&,realpart,imagpart);
这是我用VS2010编的一段求二次方程根的代码,在生成的时候,总出现“error C2065: “true”: 未声明的标识符”,请问大家这是怎么回事啊?
您的举报已经提交成功,我们将尽快处理,谢谢!

我要回帖

更多关于 stdlib.h什么意思 的文章

 

随机推荐