📄 chapter6.htm
字号:
<p class="style4">void main()<br>
{<br>
int i;<br>
float total,average;<br>
<br>
//提示输入成绩<br>
for(i = 0; i < N; i++ )<br>
{<br>
cout << "Enter grade #" <<(i +1) << ": ";<br>
cin >> grades[i];<br>
}<br>
<br>
total = 0;<br>
for (i = 0; i < N; i++)<br>
total += grades[i];<br>
average = total / N;<br>
cout << "\nAverage grade: " << average << 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 <iostream.h><br>
#include <string.h></p>
<p class="style4">class MyString<br>
{<br>
public:<br>
MyString();<br>
MyString(const char *const);<br>
MyString(const MyString &);<br>
~MyString();</p>
<p class="style4">char & operator[](unsigned short offset);<br>
char operator[](unsigned short offset) const;<br>
MyString operator+(const MyString&);<br>
void operator+=(const MyString&);<br>
MyString & operator= (const MyString &);</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<=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<itsLen; i++)<br>
itsMyString[i] = cMyString[i];<br>
itsMyString[itsLen]='\0';<br>
}</p>
<p class="style4">MyString::MyString (const MyString & rhs)<br>
{<br>
itsLen=rhs.GetLen();<br>
itsMyString = new char[itsLen+1];<br>
for (unsigned short i = 0; i<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& MyString::operator=(const MyString & rhs)<br>
{<br>
if (this == &rhs)<br>
return *this;<br>
delete [] itsMyString;<br>
itsLen=rhs.GetLen();<br>
itsMyString = new char[itsLen+1];<br>
for (unsigned short i = 0; i<itsLen;i++)<br>
itsMyString[i] = rhs[i];<br>
itsMyString[itsLen] = '\0';<br>
return *this;<br>
}</p>
<p class="style4">char & MyString::operator[](unsigned short offset)<br>
{<br>
if (offset > 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 > itsLen)<br>
return itsMyString[itsLen-1];<br>
else<br>
return itsMyString[offset];<br>
}</p>
<p class="style4">MyString MyString::operator+(const MyString& rhs)<br>
{<br>
unsigned short totalLen = itsLen + rhs.GetLen();<br>
MyString temp(totalLen);<br>
for (unsigned short i = 0; i<itsLen; i++)<br>
temp[i] = itsMyString[i];<br>
for (unsigned short j = 0; j<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& 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<itsLen; i++)<br>
temp[i] = itsMyString[i];<br>
for (unsigned short j = 0; j<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 << "S1:\t" << s1.GetMyString() << endl;</p>
<p class="style4">char * temp = "Hello World";<br>
s1 = temp;<br>
cout << "S1:\t" << s1.GetMyString() << endl;</p>
<p class="style4">char tempTwo[20];<br>
strcpy(tempTwo,"; nice to be here!");<br>
s1 += tempTwo;<br>
cout << "tempTwo:\t" << tempTwo << endl;<br>
cout << "S1:\t" << s1.GetMyString() << endl;</p>
<p class="style4">cout << "S1[4]:\t" << s1[4] << endl;<br>
s1[4]='x';<br>
cout << "S1:\t" << s1.GetMyString() << endl;</p>
<p class="style4">cout << "S1[999]:\t" << s1[999] << endl;</p>
<p class="style4">MyString s2(" Another myString");<br>
MyString s3;<br>
s3 = s1+s2;<br>
cout << "S3:\t" << s3.GetMyString() << endl;</p>
<p class="style4">MyString s4;<br>
s4 = "Why does this work?";<br>
cout << "S4:\t" << s4.GetMyString() << 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"> </p>
<p class="style4"><strong>6-26 编写一个3×3矩阵转置的函数,在main()函数中输入数据。</strong><br>
</p>
<p class="style4">解: <br>
#include <iostream.h></p>
<p class="style4">void move (int matrix[3][3])<br>
{<br>
int i, j, k;<br>
for(i=0; i<3; i++)<br>
for (j=0; j<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 << "输入矩阵的元素" << endl;<br>
for(i=0; i<3; i++)<br>
for (j=0; j<3; j++)<br>
{<br>
cout << "第" << i+1 << "行第" << j+1<br>
<<"个元素为:";<br>
cin >> data[i][j];<br>
}<br>
cout << "输入的矩阵的为:" << endl;<br>
for(i=0; i<3; i++)<br>
{<br>
for (j=0; j<3; j++)<br>
cout << data[i][j] << " ";<br>
cout << endl;<br>
}<br>
move(data);<br>
cout << "转置后的矩阵的为:" << endl;<br>
for(i=0; i<3; i++)<br>
{<br>
for (j=0; j<3; j++)<br>
cout << data[i][j] << " ";<br>
cout << 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 <iostream.h></p>
<p class="style4">void move (int *matrix ,int n)<br>
{<br>
int i, j, k;<br>
for(i=0; i<n; i++)<br>
for (j=0; j<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 << "请输入矩阵的维数:";<br>
cin >> n;<br>
p = new int[n*n];<br>
cout << "输入矩阵的元素" << endl;<br>
for(i=0; i<n; i++)<br>
for (j=0; j<n; j++)<br>
{<br>
cout << "第" << i+1 << "行第" << j+1<br>
<<"个元素为:";<br>
cin >> p[i*n + j];<br>
}<br>
cout << "输入的矩阵的为:" << endl;<br>
for(i=0; i<n; i++)<br>
{<br>
for (j=0; j<n; j++)<br>
cout << p[i*n + j] << " ";<br>
cout << endl;<br>
}<br>
move(p, n);<br>
cout << "转置后的矩阵的为:" << endl;<br>
for(i=0; i<n; i++)<br>
{<br>
for (j=0; j<n; j++)<br>
cout << p[i*n + j] << " ";<br>
cout << 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 <iostream.h><br>
#include <string.h></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 << name << " " << street << " ";<br>
cout << city << " "<< zip;<br>
}</p>
<p class="style4">void main(void)<br>
{<br>
Employee e1("张三","平安大街3号", "北京", "100000");<br>
e1.display();<br>
cout << endl;<br>
e1.change_name("李四");<br>
e1.display();<br>
cout << endl;<br>
}<br>
程序运行输出:<br>
张三 平安大街3号 北京 100000<br>
李四 平安大街3号 北京 100000</p>
<p class="style4"> </p>
<p class="style4"> </p>
<p class="style4"></p>
<p class="style4"></p>
<p class="style4"> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -