C++编程问题请大神赐教谢谢! 5C

我下面这段代码是要输出c=px(n)的,函数px()里面return c,在c的表达式里面有字符x,但是在输出的时候会自动编译成120??请问怎么在表达式中显示字符 x?
double px(int n) {
double c;
if (n == 0)
c = 1;
if (n == 1)
c ='x';
if(n>1)
c = ((2 * n - 1)*'x'*px(n - 1) - (n - 1)*px(n - 2)) / n;
return c;

}

int main()
{
int n;
while (1) {
cout << "please enter n:" << endl;
cin >> n;
cout << "c=:" << px(n) << endl;
}
return 0;
}

9个回答

cout << "c=:" << px(n) << endl;这个语句换成cout << "c=:" << (char)px(n) << endl。
完整代码如下:
#include
using namespace std;

double px(int n) {
double c;
if (n == 0)
c = 1;
if (n == 1)
c ='x';
if(n>1)
c = ((2 * n - 1)*'x'*px(n - 1) - (n - 1)*px(n - 2)) / n;
return c;

}

int main()
{
int n;
while (1) {
cout << "please enter n:" << endl;
cin >> n;
cout << "c=:" << (char)px(n) << endl;
}
return 0;
}

c 定义成int,再检查一下c的表达式有没有错误

”c = ((2 * n - 1)*'x'*px(n - 1) - (n - 1)*px(n - 2)) / n; “ 这里面的第一个x是被转换成ascII码参与运算的,而且是对应十进制120。如果是想输出表达式的话,
cout<<"c =" <<(”表达式“)<<"x"<<(”表达式“)<<<endl; 这样写应该可以(中文字符记得替换成你要写的表达式)。

额……多打了个<=-=

转换一下类型就可以,代码可以直接运行:

 #include<iostream>

using namespace std;
double px(int n) {
    double c;
    if (n == 0)
        c = 1;
    if (n == 1)
        c = 'x';
    if (n > 1)
        c = ((2 * n - 1)*'x'*px(n - 1) - (n - 1)*px(n - 2)) / n;
    return c;

}

int main()
{
    int n;
    while (1) {
        cout << "please enter n:" << endl;
        cin >> n;
        cout << "c=:" << (char)px(n) << endl;
    }
    return 0;
}

因为'X'的ASCII码是120,而且你定义C的类型是double,所以在输出的时候会自动给你转换成double类型,则在输出的时候要转换下类型

你的代码有三个主要问题,首先是double c,c='x'。要知道个这个语句的意义是跟c=120没差别的,因为c是double类型的。第二个问题是你的px函数
的返回类型是double 类型,意思就是无论你怎么转换,它首先得到的值是一个双精度浮点数值,即使用char强制转化,也只是得到一个字符而非想要的表达式字符串。而题意中(n>1)的语句执行是想返回一条表达式,这是不可能的。
想输出表达式的话应该将运算符号跟数值分开输出,连在一起机器会自动计算的。
例:cout<<"c =" <<"("<<2*n-1<<"*x"<<px(n-1)<<"-"<<(n-1)*px(n-2)<<")/"<<n<<endl;
这里的x已经不是一个具体数值了。把操作数跟符号分开写才能输出表达式,而且x也不用改。

分类讨论

 double px(int n) {
double c;
if (n == 0)
c = 1;
if (n == 1)
c ='x';
if(n>1)
c = ((2 * n - 1)*'x'*px(n - 1) - (n - 1)*px(n - 2)) / n;
return c;
}
int main()
{
int n;
while (1) {
cout << "please enter n:" << endl;
cin >> n;
cout << "c=:" << px(n) << endl;/*cout<<"c=:";
                                                                                                                    double xx=px(n);
                                                                                                                    if(xx==120)
                                                                                                                        cout<<'x';
                                                                                                                    else cout<<xx;
*/
}
return 0;
}

因为double px(int n)的返回类型是double,同时c也定义程double,而字符‘x'用double(或者int,long等)表示是120(参考ASCII吗),所以你最后输出结果就是数字120
如果想输出字符'x',建议把main函数改成如下:
int main()
{
int n;
while (1)
{
cout << "please enter n:" << endl;
cin >> n;
if(n==1)
{
cout << "c=:" <<(char) px(n) << endl; //这里,如果n==1,那么px(n)=120,然后把double类型的120强制转换成char类型,就是字符‘x'
}
else
{
cout << "c=:" << px(n) << endl;
}

            }

return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问