⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chapter6.htm

📁 为清华大学出版社 C++课后答案
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<p class="style4">void main()<br>
  {<br>
  int i;<br>
  float total,average;<br>
  <br>
  //提示输入成绩<br>
  for(i = 0; i &lt; N; i++ )<br>
  {<br>
  cout &lt;&lt; "Enter grade #" &lt;&lt;(i +1) &lt;&lt; ": ";<br>
  cin &gt;&gt; grades[i];<br>
  }<br>
  <br>
  total = 0;<br>
  for (i = 0; i &lt; N; i++)<br>
  total += grades[i];<br>
  average = total / N;<br>
  cout &lt;&lt; "\nAverage grade: " &lt;&lt; average &lt;&lt; endl;<br>
  }<br>
  程序运行输出:<br>
  Enter grade #1: 86<br>
  Enter grade #2: 98<br>
  Enter grade #3: 67<br>
  Enter grade #4: 80<br>
  Enter grade #5: 78<br>
  Enter grade #6: 95<br>
  Enter grade #7: 78<br>
  Enter grade #8: 56</p>
<p class="style4">Average grade: 79.75<br>
</p>
<p class="style4"><strong>6-25 设计一个字符串类MyString,具有构造函数、析构函数、拷贝构造函数,重载运算符+、=、+=、[],尽可能地完善它,使之能满足各种需要。(运算符重载功能为选做,参见第8章)</strong><br>
</p>
<p class="style4">解: <br>
  #include &lt;iostream.h&gt;<br>
  #include &lt;string.h&gt;</p>
<p class="style4">class MyString<br>
  {<br>
  public:<br>
  MyString();<br>
  MyString(const char *const);<br>
  MyString(const MyString &amp;);<br>
  ~MyString();</p>
<p class="style4">char &amp; operator[](unsigned short offset);<br>
  char operator[](unsigned short offset) const;<br>
  MyString operator+(const MyString&amp;);<br>
  void operator+=(const MyString&amp;);<br>
  MyString &amp; operator= (const MyString &amp;);</p>
<p class="style4">unsigned short GetLen()const { return itsLen; }<br>
  const char * GetMyString() const { return itsMyString; }</p>
<p class="style4">private:<br>
  MyString (unsigned short); // private constructor<br>
  char * itsMyString;<br>
  unsigned short itsLen;<br>
  };</p>
<p class="style4">MyString::MyString()<br>
  {<br>
  itsMyString = new char[1];<br>
  itsMyString[0] = '\0';<br>
  itsLen=0;<br>
  }</p>
<p class="style4">MyString::MyString(unsigned short len)<br>
  {<br>
  itsMyString = new char[len+1];<br>
  for (unsigned short i = 0; i&lt;=len; i++)<br>
  itsMyString[i] = '\0';<br>
  itsLen=len;<br>
  }</p>
<p class="style4">MyString::MyString(const char * const cMyString)<br>
  {<br>
  itsLen = strlen(cMyString);<br>
  itsMyString = new char[itsLen+1];<br>
  for (unsigned short i = 0; i&lt;itsLen; i++)<br>
  itsMyString[i] = cMyString[i];<br>
  itsMyString[itsLen]='\0';<br>
  }</p>
<p class="style4">MyString::MyString (const MyString &amp; rhs)<br>
  {<br>
  itsLen=rhs.GetLen();<br>
  itsMyString = new char[itsLen+1];<br>
  for (unsigned short i = 0; i&lt;itsLen;i++)<br>
  itsMyString[i] = rhs[i];<br>
  itsMyString[itsLen] = '\0';<br>
  }</p>
<p class="style4">MyString::~MyString ()<br>
  {<br>
  delete [] itsMyString;<br>
  itsLen = 0;<br>
  }</p>
<p class="style4">MyString&amp; MyString::operator=(const MyString &amp; rhs)<br>
  {<br>
  if (this == &amp;rhs)<br>
  return *this;<br>
  delete [] itsMyString;<br>
  itsLen=rhs.GetLen();<br>
  itsMyString = new char[itsLen+1];<br>
  for (unsigned short i = 0; i&lt;itsLen;i++)<br>
  itsMyString[i] = rhs[i];<br>
  itsMyString[itsLen] = '\0';<br>
  return *this;<br>
  }</p>
<p class="style4">char &amp; MyString::operator[](unsigned short offset)<br>
  {<br>
  if (offset &gt; itsLen)<br>
  return itsMyString[itsLen-1];<br>
  else<br>
  return itsMyString[offset];<br>
  }</p>
<p class="style4">char MyString::operator[](unsigned short offset) const<br>
  {<br>
  if (offset &gt; itsLen)<br>
  return itsMyString[itsLen-1];<br>
  else<br>
  return itsMyString[offset];<br>
  }</p>
<p class="style4">MyString MyString::operator+(const MyString&amp; rhs)<br>
  {<br>
  unsigned short totalLen = itsLen + rhs.GetLen();<br>
  MyString temp(totalLen);<br>
  for (unsigned short i = 0; i&lt;itsLen; i++)<br>
  temp[i] = itsMyString[i];<br>
  for (unsigned short j = 0; j&lt;rhs.GetLen(); j++, i++)<br>
  temp[i] = rhs[j];<br>
  temp[totalLen]='\0';<br>
  return temp;<br>
  }</p>
<p class="style4">void MyString::operator+=(const MyString&amp; rhs)<br>
  {<br>
  unsigned short rhsLen = rhs.GetLen();<br>
  unsigned short totalLen = itsLen + rhsLen;<br>
  MyString temp(totalLen);<br>
  for (unsigned short i = 0; i&lt;itsLen; i++)<br>
  temp[i] = itsMyString[i];<br>
  for (unsigned short j = 0; j&lt;rhs.GetLen(); j++, i++)<br>
  temp[i] = rhs[i-itsLen];<br>
  temp[totalLen]='\0';<br>
  *this = temp;<br>
  }</p>
<p class="style4">int main()<br>
  {<br>
  MyString s1("initial test");<br>
  cout &lt;&lt; "S1:\t" &lt;&lt; s1.GetMyString() &lt;&lt; endl;</p>
<p class="style4">char * temp = "Hello World";<br>
  s1 = temp;<br>
  cout &lt;&lt; "S1:\t" &lt;&lt; s1.GetMyString() &lt;&lt; endl;</p>
<p class="style4">char tempTwo[20];<br>
  strcpy(tempTwo,"; nice to be here!");<br>
  s1 += tempTwo;<br>
  cout &lt;&lt; "tempTwo:\t" &lt;&lt; tempTwo &lt;&lt; endl;<br>
  cout &lt;&lt; "S1:\t" &lt;&lt; s1.GetMyString() &lt;&lt; endl;</p>
<p class="style4">cout &lt;&lt; "S1[4]:\t" &lt;&lt; s1[4] &lt;&lt; endl;<br>
  s1[4]='x';<br>
  cout &lt;&lt; "S1:\t" &lt;&lt; s1.GetMyString() &lt;&lt; endl;</p>
<p class="style4">cout &lt;&lt; "S1[999]:\t" &lt;&lt; s1[999] &lt;&lt; endl;</p>
<p class="style4">MyString s2(" Another myString");<br>
  MyString s3;<br>
  s3 = s1+s2;<br>
  cout &lt;&lt; "S3:\t" &lt;&lt; s3.GetMyString() &lt;&lt; endl;</p>
<p class="style4">MyString s4;<br>
  s4 = "Why does this work?";<br>
  cout &lt;&lt; "S4:\t" &lt;&lt; s4.GetMyString() &lt;&lt; endl;<br>
  return 0;<br>
  }</p>
<p class="style4">程序运行输出:<br>
  S1: initial test<br>
  S1: Hello World<br>
  tempTwo: ; nice to be here!<br>
  S1: Hello World; nice to be here!<br>
  S1[4]: o<br>
  S1: Hellx World; nice to be here!<br>
  S1[999]: !<br>
  S3: Hellx World; nice to be here! Another myString<br>
  S4: Why does this work?</p>
<p class="style4">&nbsp;</p>
<p class="style4"><strong>6-26 编写一个3×3矩阵转置的函数,在main()函数中输入数据。</strong><br>
</p>
<p class="style4">解: <br>
  #include &lt;iostream.h&gt;</p>
<p class="style4">void move (int matrix[3][3])<br>
  {<br>
  int i, j, k;<br>
  for(i=0; i&lt;3; i++)<br>
  for (j=0; j&lt;i; j++)<br>
  {<br>
  k = matrix[i][j];<br>
  matrix[i][j] = matrix[j][i];<br>
  matrix[j][i] = k;<br>
  }<br>
  }</p>
<p class="style4">void main()<br>
  {<br>
  int i, j;<br>
  int data[3][3];<br>
  cout &lt;&lt; "输入矩阵的元素" &lt;&lt; endl;<br>
  for(i=0; i&lt;3; i++)<br>
  for (j=0; j&lt;3; j++)<br>
  {<br>
  cout &lt;&lt; "第" &lt;&lt; i+1 &lt;&lt; "行第" &lt;&lt; j+1<br>
&lt;&lt;"个元素为:";<br>
  cin &gt;&gt; data[i][j];<br>
  }<br>
  cout &lt;&lt; "输入的矩阵的为:" &lt;&lt; endl;<br>
  for(i=0; i&lt;3; i++)<br>
  {<br>
  for (j=0; j&lt;3; j++)<br>
  cout &lt;&lt; data[i][j] &lt;&lt; " ";<br>
  cout &lt;&lt; endl;<br>
  }<br>
  move(data);<br>
  cout &lt;&lt; "转置后的矩阵的为:" &lt;&lt; endl;<br>
  for(i=0; i&lt;3; i++)<br>
  {<br>
  for (j=0; j&lt;3; j++)<br>
  cout &lt;&lt; data[i][j] &lt;&lt; " ";<br>
  cout &lt;&lt; endl;<br>
  }<br>
  } </p>
<p class="style4">程序运行输出:<br>
  输入矩阵的元素<br>
  第1行第1个元素为:1<br>
  第1行第2个元素为:2<br>
  第1行第3个元素为:3<br>
  第2行第1个元素为:4<br>
  第2行第2个元素为:5<br>
  第2行第3个元素为:6<br>
  第3行第1个元素为:7<br>
  第3行第2个元素为:8<br>
  第3行第3个元素为:9<br>
  输入的矩阵的为:<br>
  1 2 3 <br>
  4 5 6 <br>
  7 8 9 <br>
  转置后的矩阵的为:<br>
  1 4 7 <br>
  2 5 8 <br>
  3 6 9 <br>
</p>
<p class="style4"><strong>6-27 编写一个矩阵转置的函数,矩阵的维数在程序中由用户输入。</strong><br>
</p>
<p class="style4">解: <br>
  #include &lt;iostream.h&gt;</p>
<p class="style4">void move (int *matrix ,int n)<br>
  {<br>
  int i, j, k;<br>
  for(i=0; i&lt;n; i++)<br>
  for (j=0; j&lt;i; j++)<br>
  {<br>
  k = *(matrix + i*n + j);<br>
  *(matrix + i*n + j) = *(matrix + j*n + i);<br>
  *(matrix + j*n + i) = k;<br>
  }<br>
  }</p>
<p class="style4">void main()<br>
  {<br>
  int n, i, j;<br>
  int *p;<br>
  cout &lt;&lt; "请输入矩阵的维数:";<br>
  cin &gt;&gt; n;<br>
  p = new int[n*n];<br>
  cout &lt;&lt; "输入矩阵的元素" &lt;&lt; endl;<br>
  for(i=0; i&lt;n; i++)<br>
  for (j=0; j&lt;n; j++)<br>
  {<br>
  cout &lt;&lt; "第" &lt;&lt; i+1 &lt;&lt; "行第" &lt;&lt; j+1<br>
&lt;&lt;"个元素为:";<br>
  cin &gt;&gt; p[i*n + j];<br>
  }<br>
  cout &lt;&lt; "输入的矩阵的为:" &lt;&lt; endl;<br>
  for(i=0; i&lt;n; i++)<br>
  {<br>
  for (j=0; j&lt;n; j++)<br>
  cout &lt;&lt; p[i*n + j] &lt;&lt; " ";<br>
  cout &lt;&lt; endl;<br>
  }<br>
  move(p, n);<br>
  cout &lt;&lt; "转置后的矩阵的为:" &lt;&lt; endl;<br>
  for(i=0; i&lt;n; i++)<br>
  {<br>
  for (j=0; j&lt;n; j++)<br>
  cout &lt;&lt; p[i*n + j] &lt;&lt; " ";<br>
  cout &lt;&lt; endl;<br>
  }<br>
  } <br>
  程序运行输出:<br>
  请输入矩阵的维数:3<br>
  输入矩阵的元素<br>
  第1行第1个元素为:1<br>
  第1行第2个元素为:2<br>
  第1行第3个元素为:3<br>
  第2行第1个元素为:4<br>
  第2行第2个元素为:5<br>
  第2行第3个元素为:6<br>
  第3行第1个元素为:7<br>
  第3行第2个元素为:8<br>
  第3行第3个元素为:9<br>
  输入的矩阵的为:<br>
  1 2 3 <br>
  4 5 6 <br>
  7 8 9 <br>
  转置后的矩阵的为:<br>
  1 4 7 <br>
  2 5 8 <br>
  3 6 9<br>
</p>
<p class="style4"><strong>6-28 定义一个Employee类,其中包括表示姓名、街道地址、城市和邮编等属性,包括chage_name()和display()等函数;display()使用cout语句显示姓名、街道地址、城市和邮编等属性,函数change_name()改变对象的姓名属性,实现并测试这个类。</strong><br>
</p>
<p class="style4">解: <br>
  源程序:<br>
  #include &lt;iostream.h&gt;<br>
  #include &lt;string.h&gt;</p>
<p class="style4">class Employee<br>
  {<br>
  private:<br>
  char name[30];<br>
  char street[30];<br>
  char city[18];<br>
  char zip[6];<br>
  public:<br>
  Employee(char *n, char *str, char *ct, char *z);<br>
  void change_name(char *n);<br>
  void display();<br>
  };</p>
<p class="style4">Employee::Employee (char *n,char *str,char *ct, char *z)<br>
  {<br>
  strcpy(name, n);<br>
  strcpy(street, str);<br>
  strcpy(city, ct);<br>
  strcpy(zip, z);<br>
  }</p>
<p class="style4">void Employee::change_name (char *n)<br>
  {<br>
  strcpy(name, n);<br>
  }</p>
<p class="style4">void Employee::display ()<br>
  {<br>
  cout &lt;&lt; name &lt;&lt; " " &lt;&lt; street &lt;&lt; " ";<br>
  cout &lt;&lt; city &lt;&lt; " "&lt;&lt; zip;<br>
  }</p>
<p class="style4">void main(void)<br>
  {<br>
  Employee e1("张三","平安大街3号", "北京", "100000");<br>
  e1.display();<br>
  cout &lt;&lt; endl;<br>
  e1.change_name("李四");<br>
  e1.display();<br>
  cout &lt;&lt; endl;<br>
  }<br>
  程序运行输出:<br>
  张三 平安大街3号 北京 100000<br>
  李四 平安大街3号 北京 100000</p>
<p class="style4">&nbsp;</p>
<p class="style4">&nbsp;</p>
<p class="style4"></p>
<p class="style4"></p>
<p class="style4">&nbsp;</p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -