《C++ primer plus》课后习题11.7，求解。

`````` #include <iostream>

using namespace std;

class plural
{
private:
double A;
double B;
public:
plural();
plural(double ,double);
~plural();
plural operator+(plural CB);
plural operator-(plural CB);
plural operator*(plural CB);
friend plural operator*(double x,plural CA);
friend plural operator~(plural CA);
friend ostream & operator<<(ostream &os,plural CA);
friend bool operator>>(istream &is,plural &CA);
};

plural::plural()
{
A=0.0;
B=0.0;
}

plural::plural(double A_,double B_)
{
A=A_;
B=B_;
}

plural::~plural()
{

}

plural plural::operator+(plural CB)
{
plural CC;
CC.A=A+CB.A;
CC.B=B+CB.B;
return CC;
}

plural plural::operator-(plural CB)
{
plural CC;
CC.A=A-CB.A;
CC.B=B-CB.B;
return CC;
}

plural plural::operator*(plural CB)
{
plural CC;
CC.A=A*CB.A-B*CB.B;
CC.B=A*CB.B+B*CB.B;
return CC;
}

plural operator*(double x,plural CA)
{
plural CB;
CB.A=x*CA.A;
CB.B=x*CA.B;
return CB;
}

plural operator~(plural CA)
{
plural CC;
CC.A=CA.A;
CC.B=-CA.B;
return CC;
}

ostream & operator<<(ostream &os,plural CA)
{
os<<CA.A<<'+'<<CA.B<<'i';
return os;
}

bool operator>>(istream &is,plural &CA)
{
char ch;
cin.get(ch);
if(ch!='q')
{
cout<<"real:";
is>>CA.A;
cout<<endl<<"imaginary:";
is>>CA.B;
return true;
}
else
return false;

}

``````

`````` #include "11.7_func.cpp"

int main()
{
plural AA(3.0,4.0);
plural CC;
cout<<"enter a plural number (q to quit)"<<endl;
while(cin>>CC)
{
cout<<" CC is "<<CC<<endl;
cout<<"complex conjugate is "<<~CC<<endl;
cout<<"a is "<<AA<<endl;
cout<<"a+c is "<<AA+CC<<endl;
cout<<"a-c is "<<AA-CC<<endl;
cout<<"a*c is "<<AA*CC<<endl;
cout<<"2*c is "<<2*CC<<endl;
cout<<"enter a plural number (q to quit)"<<endl;
}
cout<<"done!"<<endl;
return 0;
}
``````

`````` bool operator>>(istream &is,plural &CA)
{
char ch;
cin.get(ch);
if(ch!='q')
{
cout<<"real:";
is>>CA.A;
cout<<endl<<"imaginary:";
is>>CA.B;
return true;
}
else
return false;

}
``````

1个回答

《C++ primer plus》课后习题11.7，求解。

C primer plus章节和今后学习的取舍，有dalao帮帮弱女子吗

C primer plus 这本书的章节有必要每一章都要仔仔细细的去啃吗？或者说有那些是必须要细读的章节，下个学期要学php，有必要再花大量时间去更深层的了解指针吗。书后面有很多函数的介绍，有必要一一全部弄懂吗，求大佬解答，谢谢 另外插一句（如果要学习php的话，有哪些书是推荐学习的？

《C Primer Plus》13.11.12题目

![图片说明](https://img-ask.csdn.net/upload/201910/07/1570453198_933726.jpg) ![图片说明](https://img-ask.csdn.net/upload/201910/07/1570453181_368723.jpg) ``` //《C Primer Plus》p438 13.11.12 #include <stdio.h> #include <stdlib.h> #define NAME 20 #define ROWS 20 #define COLS 30 int main(void) { FILE * f_n, * f_p; char name_n[NAME]; char name_p[NAME] = "picture"; int numbers[ROWS][COLS]; char chs[] = " .':~*=&%#"; char picture[ROWS][COLS + 1]; printf("Enter the numbers_file name:"); scanf("%s", name_n); if ((f_n = fopen(name_n, "r")) == NULL) { fprintf(stderr, "Can't open \"%s\" file.\n", name_n); exit(EXIT_FAILURE); } if ((f_p = fopen(name_p, "w")) == NULL) { fprintf(stderr, "Can't open \"%s\" file.\n", name_p); exit(EXIT_FAILURE); } int i, j; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { fscanf(f_n, "%d", &numbers[i][j]); picture[i][j] = chs[numbers[i][j]]; } picture[i][j] = '\0'; fprintf(f_p, "%s\n", picture[i]); } if (fclose(f_n) != 0) { fprintf(stderr, "Error closing \"%s\" file.\n", name_n); exit(EXIT_FAILURE); } if (fclose(f_p) != 0) { fprintf(stderr, "Error closing \"%s\" file.\n", name_p); exit(EXIT_FAILURE); } printf("Done.\n"); return 0; } ``` 源数据是这样的 0 0 9 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 5 8 9 9 8 5 5 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 8 1 9 8 5 4 5 2 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 5 8 9 9 8 5 0 4 5 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 1 8 5 0 0 4 5 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 4 5 2 0 0 0 0 0 0 5 5 5 5 5 5 5 5 5 5 5 5 5 8 9 9 8 5 5 5 5 5 5 5 5 5 5 5 5 5 8 8 8 8 8 8 8 8 8 8 8 8 5 8 9 9 8 5 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 0 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 3 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 5 8 9 9 8 5 8 8 8 8 8 8 8 8 8 8 8 8 5 5 5 5 5 5 5 5 5 5 5 5 5 8 9 9 8 5 5 5 5 5 5 5 5 5 5 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 0 6 6 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 5 6 0 0 6 5 0 0 0 0 0 0 0 3 3 0 0 0 0 0 0 5 8 9 9 8 5 0 0 5 6 1 1 1 1 6 5 0 0 0 0 0 0 4 4 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 5 6 0 0 6 5 0 0 0 0 0 0 0 5 5 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 0 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 0 0 0 0 0 0 0 0 编译调试都找不出问题 会运行很长时间 然后输出文件是空的 似乎就是写入不了 求解 ![图片说明](https://img-ask.csdn.net/upload/201910/07/1570453525_795681.png)

c primer plus 第六版第5章程序清单5.16的问题

c primer plus程序清单7.7的问题

#include<stdio.h> #include<ctype.h> #include<stdbool.h> #define STOP '|' int main(void) { char c; char prev; long n_chars = 0L; int n_lines = 0; int n_words = 0; int p_lines = 0; bool inword = false; printf("enter next to be analyzed (| to terminate):\n"); prev = '\n'; while ((c = getchar()) != STOP) { n_chars++; if (c == '\n') n_lines++; if (!isspace(c) && !inword) { inword = true; n_words++; } if (isspace(c) && inword) inword = false; prev = c; } if (prev != '\n') p_lines = 1; printf("characters=%ld,words=%d,lines=%d,", n_chars, n_words, n_lines); printf("partial lines=%d\n", p_lines); getchar(); getchar(); return 0; } 第二个if那里，！inword为假，那为什么要把 bool inword声明为false？我觉得把inword声明为true更方便呀，intword声明为false，然后！inword也是false，这样或许会让人产生理解错误？

c primer plus 编程练习第九章

《C Primer Plus》程序清单12.4无法运行

C++ Primer Plus(第六版)

//从树中删除一个项目 bool DeleteItem(const Item *pi,Tree *ptree) { Pair look; look = SeekItem( pi, ptree); //如果要删除的项目本身不存在 if(look.child == NULL) { return false; } //删除根项目 if(look.child == ptree->root) { DeleteNode(&ptree->root); } else if(look.parent->left == look.child) //DeleteNode(&look.parent->left); DeleteNode(&(look.child)); else //DeleteNode(&look.parent->right); DeleteNode(&(look.child)); ptree->size--; return true; } DeleteNode(&look.parent->left); DeleteNode(&(look.child));删不干净，这是为什么

C Primer Plus 8.8练习题 编写一个菜单，提供加减乘除的选项进行计算

C++ primer plus 第6版 中文版 第16章复习题的一个问题

c primer plus第294页

total+=*start++ 一元运算符*和++优先级相同，但结合律从右至左，所以start++先求值，然后才是*start。也就是说，指针start先递增后指向，使用后缀形式(即start++而不是++start)意味着先把指针指向位置上的值加到total上，然后再递增指针。如果使用*++start，顺序则反过来，先递增指针，再使用指针指向位置上的值。如果使用(*start)++，则先使用start指向位置上的值，再递增该值，而不是递增指针。这样，指针将一直指向同一个位置，但是该位置上的值发生了变化。虽然*start++比较常用，但是*(start++)这样写更清楚。 问题：感觉第一个句号前面说的和后面的意思不一致啊，哪位大神能给解释一下(我理解第一句话的意思是先start+1，然后*(start+1)，然后再加到total上)，这和后面说的不一样啊？迷糊了。

c primer Plus上的一段代码有点看不懂

1.为什么把那句话注释掉以后输入评分会直接跳出循环？ 2.gets(movies[i].title) != NULL && movies[i].title[0] != '\0'这个怎么理解，有什么用，两者有什么区别？ ``` #include <stdio.h> #define Tsize 45 #define FMAX 2 struct film { char title[Tsize]; int rating; }; int main() { struct film movies[FMAX]; int i = 0; int j; puts("Enter first movie title:"); while (i < FMAX && gets(movies[i].title) != NULL && movies[i].title[0] != '\0') { puts("enter your ratings"); scanf("%d", &movies[i++].rating); // while (getchar() != '\n'){ // continue; // } puts("enter next movies title (empty line to stop)"); } if (i == 0) { printf("no data entered "); } else { printf("here is the list: \n "); } for(j=0;j<i;j++){ printf("movies:%s Rating: %d\n",movies[j].title,movies[j].rating); } printf("bye"); } ```

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内，我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年，古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合，再掺入煅烧石灰石制成的石灰，由此得来了人...

loonggg读完需要3分钟速读仅需 1 分钟大家好，我是你们的校长。我之前讲过，这年头，只要肯动脑，肯行动，程序员凭借自己的技术，赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

MySQL数据库面试题（2020最新版）

HashMap底层实现原理，红黑树，B+树，B树的结构原理 Spring的AOP和IOC是什么？它们常见的使用场景有哪些？Spring事务，事务的属性，传播行为，数据库隔离级别 Spring和SpringMVC，MyBatis以及SpringBoot的注解分别有哪些？SpringMVC的工作原理，SpringBoot框架的优点，MyBatis框架的优点 SpringCould组件有哪些，他们...

《经典算法案例》01-08：如何使用质数设计扫雷（Minesweeper）游戏

《Oracle Java SE编程自学与面试指南》最佳学习路线图（2020最新版）