double shu[100],jieguo=0.0;
char fuhao[100];
for(int i=0;;i++)//输入表达式,分别存入数【100】和
{
-
cin>>shu[i];
cin>>fuhao[i];
if(fuhao[i]=='=')break;
}
for(int j=0;j<=i;j++)//幂次方运算
{
if(fuhao[j]='^')
{
double f=1;
for(int ii=0;ii<shu[j+1];ii++)
f=f*shu[j];
shu[j+1]=f;
shu[j]=1;
fuhao[j]='*';
}
}
//乘除运算
for(j=0;j<=i;j++)
{
if(fuhao[j]=='*')
{
jieguo=shu[j]*shu[j+1];
shu[j+1]=jieguo;
shu[j]=0;
if(j>=1&&fuhao[j-1]=='-')fuhao[j]='-';
else fuhao[j]='+';
}
else if(fuhao[j]='/')
{
if(shu[j+1]==0)
{
cout<<"除数不能为0";
break;
}
else
{
jieguo=shu[j]/shu[j+1];
shu[j+1]=jieguo;
shu[j]=0;
if(j>=1&&fuhao[j-1]=='-')fuhao[j]='-';
else fuhao[j]='+';
}
}
}
//加减运算
for(int k=0;k<=i;k++)
{
if(fuhao[k]=='+')
{
jieguo=shu[k]+shu[k+1];
shu[k]=shu[k+1]=jieguo;
fuhao[k]='0';
}
else if(fuhao[k]=='-')
{
jieguo=shu[k]-shu[k+1];
shu[k]=shu[k+1]=jieguo;
fuhao[k]='0';
}
if(k==i)return jieguo;
}
}
C语言
#include <iostream>
using namespace std;
double calculateExpression()
{
double shu[100];
char fuhao[100];
int i;
for (i = 0;; i++) // 输入表达式,分别存入数【100】和符号
{
cin >> shu[i];
cin >> fuhao[i];
if (fuhao[i] == '=') break;
}
// 幂次方运算
for (int j = 0; j <= i; j++)
{
if (fuhao[j] == '^')
{
double f = 1;
for (int ii = 0; ii < shu[j + 1]; ii++)
f = f * shu[j];
shu[j + 1] = f;
shu[j] = 1;
fuhao[j] = '*';
}
}
// 乘除运算
for (int j = 0; j <= i; j++)
{
if (fuhao[j] == '*')
{
double jieguo = shu[j] * shu[j + 1];
shu[j + 1] = jieguo;
shu[j] = 0;
if (j >= 1 && fuhao[j - 1] == '-')
fuhao[j] = '-';
else
fuhao[j] = '+';
}
else if (fuhao[j] == '/')
{
if (shu[j + 1] == 0)
{
cout << "除数不能为0";
break;
}
else
{
double jieguo = shu[j] / shu[j + 1];
shu[j + 1] = jieguo;
shu[j] = 0;
if (j >= 1 && fuhao[j - 1] == '-')
fuhao[j] = '-';
else
fuhao[j] = '+';
}
}
}
// 加减运算
double jieguo = 0.0;
for (int k = 0; k <= i; k++)
{
if (fuhao[k] == '+')
{
jieguo = shu[k] + shu[k + 1];
shu[k] = shu[k + 1] = jieguo;
fuhao[k] = '0';
}
else if (fuhao[k] == '-')
{
jieguo = shu[k] - shu[k + 1];
shu[k] = shu[k + 1] = jieguo;
fuhao[k] = '0';
}
if (k == i) return jieguo;
}
return 0.0; // 返回默认值,表示计算错误
}
int main()
{
double result = calculateExpression();
cout << "计算结果: " << result << endl;
return 0;
}
else if(fuhao[j]='/')
是
else if(fuhao[j]=='/') 类似的错误仔细找找吧
比如
if(fuhao[j]='^')
问题出在以下这句判断语句上:
if(fuhao[j]='^')
这里使用了赋值运算符(=),而不是相等比较运算符(==)。因此,条件判断始终为真,导致shu[j+1]
被错误地计算为shu[j]
的连乘结果。
要解决这个问题,您需要将条件判断语句修改为:
if(fuhao[j]=='^')
请注意,这里使用的是双等号(==)进行相等比较。
另外,你的代码中存在其他一些逻辑问题,可以尝试参考我提供的一些修复后的代码作为参考:
#include <iostream>
using namespace std;
double calculateResult() {
double shu[100], jieguo = 0.0;
char fuhao[100];
int i;
for (i = 0;; i++) {
cin >> shu[i];
cin >> fuhao[i];
if (fuhao[i] == '=') {
break;
}
}
for (int j = 0; j < i; j++) {
if (fuhao[j] == '^') {
double f = 1;
for (int ii = 0; ii < shu[j + 1]; ii++) {
f = f * shu[j];
}
shu[j + 1] = f;
shu[j] = 1;
fuhao[j] = '*';
}
}
for (int j = 0; j < i; j++) {
if (fuhao[j] == '*') {
jieguo = shu[j] * shu[j + 1];
shu[j + 1] = jieguo;
shu[j] = 0;
if (j >= 1 && fuhao[j - 1] == '-') {
fuhao[j] = '-';
} else {
fuhao[j] = '+';
}
} else if (fuhao[j] == '/') {
if (shu[j + 1] == 0) {
cout << "除数不能为0";
break;
} else {
jieguo = shu[j] / shu[j + 1];
shu[j + 1] = jieguo;
shu[j] = 0;
if (j >= 1 && fuhao[j - 1] == '-') {
fuhao[j] = '-';
} else {
fuhao[j] = '+';
}
}
}
}
jieguo = shu[0];
for (int k = 1; k < i; k++) {
if (fuhao[k] == '+') {
jieguo += shu[k];
} else if (fuhao[k] == '-') {
jieguo -= shu[k];
}
}
return jieguo;
}
int main() {
double result = calculateResult();
cout << "结果:" << result << endl;
return 0;
}
请注意,这只是对你提供的代码的一些修复,并不意味着它是完全正确的或没有其他潜在的问题。建议对代码进行编译运行仔细测试和验证。
#include<stdio.h>
struct S
{
int arr[20];
char c;
char ch[20];
};
void print(struct S set)
{
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", set.arr[i]);
}
printf("\n");
printf("%c\n", set.c);
printf("%s\n", set.ch);
}
int main()
{
struct S s={{0,1,2,3,4,5,6,7,8,9},'c',"hello,world"};
print(s);
return 0;
}