C语言简易科学计算器加减乘除括号
#include<stdio.h>#include<stdlib.h>main(){inti,j,h,g,num[20],z,m,n,s;charch[80],r,sig...
#include <stdio.h>
#include <stdlib.h>
main()
{
int i,j,h,g,num[20],z,m,n,s;
char ch[80],r,sign[20];
for (i=0;i<20;i++)
{
num[i]=0;
} /*储存数组初始化*/
for (i=0;;i++)
{
scanf("%c",ch[i]);
if (ch[i]=='\n')
{
z=i;
break;
}
} /*读入程序到此结束*/
for(i=0;i<=z;i++)
{
s=0;
switch (ch[i])
{
case '+':sign[s]='+';s++;
case '-':sign[s]='-';s++;
case '*':sign[s]='*';s++;
case '/':sign[s]='/';s++;
case '(':sign[s]='(';s++;
case ')':sign[s]=')';s++;
}
} /*读入符号*/
do{
m=0;
num[m]=atoi(ch);
n=sizeof(num[0]);
for (i=n+2;i<=z-n-2;i++)
{
ch[i-n-2]=ch[i];
}
m++;
}while (ch[0]=='\n'); /*进行数字的读入转换*/
for (i=0;;i++) /*开始进行计算*/
{
if (sign[i]=='(')
{
for (j=i+1;j<=z;j++)
{
if (sign[j]==')')
{
for (h=i+1;h<=j;h++)
{
if (sign[h]=='*')
{
num[h-1]=num[h-1]*num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='/')
{
num[h-1]=num[h-1]/num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
for (h=i+1;;h++)
{
if (sign[h]=='+')
{
num[h-1]=num[h-1]+num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='-')
{
num[h-1]=num[h-1]-num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
}
}
}
for (h=i+1;h<=j;h++)
{
if (sign[h]=='*')
{
num[h-1]=num[h-1]*num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='/')
{
num[h-1]=num[h-1]/num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
for (h=i+1;;h++)
{
if (sign[h]=='+')
{
num[h-1]=num[h-1]+num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='-')
{
num[h-1]=num[h-1]-num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
}
printf("%d \n",num[0]);
r=getchar();
return 0;
}
无法运行程序。。想问下是为啥。。。 展开
#include <stdlib.h>
main()
{
int i,j,h,g,num[20],z,m,n,s;
char ch[80],r,sign[20];
for (i=0;i<20;i++)
{
num[i]=0;
} /*储存数组初始化*/
for (i=0;;i++)
{
scanf("%c",ch[i]);
if (ch[i]=='\n')
{
z=i;
break;
}
} /*读入程序到此结束*/
for(i=0;i<=z;i++)
{
s=0;
switch (ch[i])
{
case '+':sign[s]='+';s++;
case '-':sign[s]='-';s++;
case '*':sign[s]='*';s++;
case '/':sign[s]='/';s++;
case '(':sign[s]='(';s++;
case ')':sign[s]=')';s++;
}
} /*读入符号*/
do{
m=0;
num[m]=atoi(ch);
n=sizeof(num[0]);
for (i=n+2;i<=z-n-2;i++)
{
ch[i-n-2]=ch[i];
}
m++;
}while (ch[0]=='\n'); /*进行数字的读入转换*/
for (i=0;;i++) /*开始进行计算*/
{
if (sign[i]=='(')
{
for (j=i+1;j<=z;j++)
{
if (sign[j]==')')
{
for (h=i+1;h<=j;h++)
{
if (sign[h]=='*')
{
num[h-1]=num[h-1]*num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='/')
{
num[h-1]=num[h-1]/num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
for (h=i+1;;h++)
{
if (sign[h]=='+')
{
num[h-1]=num[h-1]+num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='-')
{
num[h-1]=num[h-1]-num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
}
}
}
for (h=i+1;h<=j;h++)
{
if (sign[h]=='*')
{
num[h-1]=num[h-1]*num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='/')
{
num[h-1]=num[h-1]/num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
for (h=i+1;;h++)
{
if (sign[h]=='+')
{
num[h-1]=num[h-1]+num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='-')
{
num[h-1]=num[h-1]-num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
}
printf("%d \n",num[0]);
r=getchar();
return 0;
}
无法运行程序。。想问下是为啥。。。 展开
2个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
int i,j,h,g,num[20]={0},z,m,n,s; //num[20]可以这样初始化
char ch[80],r,sign[20];
gets(ch); //字符串输入
for(i=0;i<strlen(ch);i++)
{
s=0;
switch (ch[i])
{
case '+':sign[s]='+';s++;break; //缺少break;
case '-':sign[s]='-';s++;break;
case '*':sign[s]='*';s++;break;
case '/':sign[s]='/';s++;break;
case '(':sign[s]='(';s++;break;
case ')':sign[s]=')';s++;break;
}
} /*读入符号*/
do{
m=0;
num[m]=atoi(ch);
n=sizeof(num[0]);
for (i=n+2;i<=(z-n-2);i++)
{
ch[i-n-2]=ch[i];
}
m++;
}while (ch[0]=='\n'); /*进行数字的读入转换*/
///// 发现下面好多死循环,怎么可能会有结果呢 ////////////////
for (i=0;;i++) /*开始进行计算*/
{
if (sign[i]=='(')
{
for (j=i+1;j<=z;j++)
{
if (sign[j]==')')
{
for (h=i+1;h<=j;h++)
{
if (sign[h]=='*')
{
num[h-1]=num[h-1]*num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='/')
{
num[h-1]=num[h-1]/num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
for (h=i+1;;h++)
{
if (sign[h]=='+')
{
num[h-1]=num[h-1]+num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='-')
{
num[h-1]=num[h-1]-num[h];
for (g=h;;g++) //死循环
{
num[g]=num[g+1];
}
}
}
}
}
}
for (h=i+1;h<=j;h++)
{
if (sign[h]=='*')
{
num[h-1]=num[h-1]*num[h];
for (g=h;;g++) //死循环
{
num[g]=num[g+1];
}
}
if (sign[h]=='/')
{
num[h-1]=num[h-1]/num[h];
for (g=h;;g++) //死循环
{
num[g]=num[g+1];
}
}
}
for (h=i+1;;h++) //死循环
{
if (sign[h]=='+')
{
num[h-1]=num[h-1]+num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='-')
{
num[h-1]=num[h-1]-num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
}
printf("%d \n",num[0]);
r=getchar();
return 0;
}
展开全部
不好意思,挺晚了,您的程序只是大致看了一下,
scanf("%c",ch[i]);此处拙见认为少了一个&;
此外,您看输入改为如下:
gets(ch);
for (i=0;;i++)
{
if (ch[i]=='\n')
{
z=i;
break;
}
}
可不可以。
另您的switch在使用时,每一个case后都没有break;
本人不才,不太理解是不是您有意为之。
望您对您的程序提供更清晰的说明。
scanf("%c",ch[i]);此处拙见认为少了一个&;
此外,您看输入改为如下:
gets(ch);
for (i=0;;i++)
{
if (ch[i]=='\n')
{
z=i;
break;
}
}
可不可以。
另您的switch在使用时,每一个case后都没有break;
本人不才,不太理解是不是您有意为之。
望您对您的程序提供更清晰的说明。
追问
依然不能执行啊。直接就是停止工作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询