📄 chapter6.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<style type="text/css">
<!--
.style2 {
font-family: "宋体";
font-size: 16px;
font-weight: bold;
font-style: italic;
color: #00FF00;
}
.style3 {
font-family: "宋体";
color: #FF0000;
}
.style4 {font-size: 14px}
-->
</style>
</head>
<body>
<p class="style2"><span
class=style3>第 六 章 数组、指针与字符串</span><br>
</p>
<p><span class="style4"><strong>6-1 数组A[10][5][15]一共有多少个元素?</strong><br>
</span></span></p>
<p class="style4">解: <br>
10×5×15 = 750 个元素<br>
1-2 在数组A[20]中第一个元素和最后一个元素是哪一个?<br>
解: <br>
第一个元素是A[0],最后一个元素是A[19]。<br>
</span></p>
<p class="style4"><strong>6-3 用一条语句定义一个有五个元素的整型数组,并依次赋予1~5的初值。</strong><br>
</span></p>
<p class="style4">解: <br>
源程序:<br>
int IntegerArray[5] = { 1, 2, 3, 4, 5 };<br>
或:int IntegerArray[] = { 1, 2, 3, 4, 5 };<br>
</span></p>
<p class="style4"><strong>6-4 已知有一个数组名叫oneArray,用一条语句求出其元素的个数</strong>。<br>
</span></p>
<p class="style4">解: <br>
源程序:<br>
nArrayLength = sizeof(oneArray) / sizeof(oneArray[0]);<br>
</span></p>
<p class="style4"><strong>6-5 用一条语句定义一个有5×3个元素的二维整型数组,并依次赋予1~15的初值</strong>。<br>
</span></p>
<p class="style4">解: <br>
源程序:<br>
int theArray[5][3] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };<br>
或:int theArray[5][3] = { {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12},{13,14,15} };<br>
</span></p>
<p class="style4"><strong>6-6 运算符*和&的作用是什么?</strong><br>
</span></p>
<p class="style4">解: <br>
*称为指针运算符,是一个一元操作符,表示指针所指向的对象的值;&称为取地址运算符,也是一个一元操作符,是用来得到一个对象的地址。<br>
<br>
<strong>6-7 什么叫做指针?指针中储存的地址和这个地址中的值有何区别?</strong><br>
</span></p>
<p class="style4">解: <br>
指针是一种数据类型,具有指针类型的变量称为指针变量。指针变量存放的是另外一个对象的地址,这个地址中的值就是另一个对象的内容。<br>
</span></p>
<p class="style4"><strong>6-8 定义一个整型指针,用new语句为其分配包含10个整型元素的地址空间。</strong><br>
</span></p>
<p class="style4">解: <br>
源程序:<br>
int *pInteger = new int[10];<br>
</span></p>
<p class="style4"><strong>6-9 在字符串”Hello,world!”中结束符是什么</strong>?<br>
</span></p>
<p class="style4">解: <br>
是NULL字符。<br>
</span></p>
<p class="style4"><strong>6-10 定义一个有五个元素的整型数组,在程序中提示用户输入元素值,最后再在屏幕上显示出来。</strong><br>
</span></p>
<p class="style4">解: <br>
源程序:<br>
#include <iostream.h> </span></p>
<p class="style4">int main()<br>
{<br>
int myArray[5];<br>
int i;<br>
for ( i=0; i<5; i++) <br>
{<br>
cout << "Value for myArray[" << i << "]: ";<br>
cin >> myArray[i];<br>
}<br>
for (i = 0; i<5; i++)<br>
cout << i << ": " << myArray[i] << "\n";<br>
return 0;<br>
}<br>
程序运行输出:<br>
Value for myArray[0]: 2<br>
Value for myArray[1]: 5<br>
Value for myArray[2]: 7<br>
Value for myArray[3]: 8<br>
Value for myArray[4]: 3<br>
0: 2<br>
1: 5<br>
2: 7<br>
3: 8<br>
4: 3<br>
</p>
<p class="style4"><strong>6-11 引用和指针有何区别?何时只能使用指针而不能使用引用?</strong><br>
</p>
<p class="style4">解: <br>
引用是一个别名,不能为NULL值,不能被重新分配;指针是一个存放地址的变量。当需要对变量重新赋以另外的地址或赋值为NULL时只能使用指针。<br>
</p>
<p class="style4"><strong>6-12 声明下列指针:float类型变量的指针pFloat,char类型的指针pString和struct customer型的指针prec。</strong><br>
</p>
<p class="style4">解: <br>
float *pfloat;<br>
char *pString;<br>
struct customer *prec;<br>
</p>
<p class="style4"><strong>6-13 给定float类型的指针fp,写出显示fp所指向的值的输出流语句</strong>。<br>
</p>
<p class="style4">解: <br>
cout << "Value == " << *fp;<br>
</p>
<p class="style4"><strong>6-14 程序中定义一个double类型变量的指针。分别显示指针占了多少字节和指针所指的变量占了多少字节。</strong><br>
</p>
<p class="style4">解: <br>
double *counter;<br>
cout << "\nSize of pointer == "sizeof(counter);<br>
cout << '\nSize of addressed value == "<<sizeof(*counter);<br>
</p>
<p class="style4"><strong>6-15 const int * p1 和 int * const p2的区别是什么?</strong><br>
</p>
<p class="style4">解: <br>
const int * p1 声明了一个指向整型常量的指针p1,因此不能通过指针p1来改变它所指向的整型值;int * const p2声明了一个指针型常量,用于存放整型变量的地址,这个指针一旦初始化后,就不能被重新赋值了。<br>
</p>
<p class="style4"><strong>6-16 定义一个整型变量a,一个整型指针p,一个引用r,通过p把a的值改为10,通过r把a的值改为5</strong><br>
</p>
<p class="style4">解: <br>
void main()<br>
{<br>
int a;<br>
int *p = &a;<br>
int &r = a;<br>
*p = 10;<br>
r = 5;<br>
}<br>
</p>
<p class="style4"><strong>6-17 下列程序有何问题,请仔细体会使用指针时应避免出现这个的问题。</strong><br>
<strong>#include <iostream.h><br>
int main()<br>
{<br>
int *p;<br>
*pInt = 9;<br>
cout << "The value at p: " << *p;<br>
return 0;</strong><br>
<strong>}</strong><br>
</p>
<p class="style4">解: <br>
指针p没有初始化,也就是没有指向某个确定的内存单元,它指向内存中的一个随机地址,给这个随机地址赋值是非常危险的。<br>
<strong>6-18 下列程序有何问题,请改正;仔细体会使用指针时应避免出现的这个问题。</strong><br>
<strong>#include <iostream.h><br>
int Fn1();<br>
int main()<br>
{<br>
int a = Fn1();<br>
cout << "the value of a is: " << a;<br>
return 0;<br>
}</strong></p>
<p class="style4"><strong>int Fn1()<br>
{<br>
int * p = new int (5);<br>
return *p;<br>
}</strong><br>
</p>
<p class="style4">解: <br>
此程序中给*p分配的内存没有被释放掉。<br>
改正:<br>
#include <iostream.h><br>
int* Fn1();<br>
int main()<br>
{<br>
int *a = Fn1();<br>
cout << "the value of a is: " << *a;<br>
delete a;<br>
return 0;<br>
}</p>
<p class="style4">int* Fn1()<br>
{<br>
int * p = new int (5);<br>
return p;<br>
}<br>
</p>
<p class="style4"><strong>6-19 声明一个参数为整型,返回值为长整型的函数指针;声明类A的一个成员函数指针,其参数为整型,返回值长整型。</strong><br>
</p>
<p class="style4">解: <br>
long (* p_fn1)(int);<br>
long ( A::*p_fn2)(int);<br>
</p>
<p class="style4"><strong>6-20 实现一个名为SimpleCircle的简单圆类,其数据成员int *itsRadius为一个指向其半径值的指针,设计对数据成员的各种操作,给出这个类的完整实现并测试这个类。</strong><br>
</p>
<p class="style4">解: <br>
源程序:<br>
#include <iostream.h></p>
<p class="style4">class SimpleCircle<br>
{<br>
public:<br>
SimpleCircle();<br>
SimpleCircle(int);<br>
SimpleCircle(const SimpleCircle &);<br>
~SimpleCircle() {}<br>
<br>
void SetRadius(int);<br>
int GetRadius()const;<br>
<br>
private:<br>
int *itsRadius;<br>
};</p>
<p class="style4">SimpleCircle::SimpleCircle()<br>
{<br>
itsRadius = new int(5);<br>
}</p>
<p class="style4">SimpleCircle::SimpleCircle(int radius)<br>
{<br>
itsRadius = new int(radius);<br>
}</p>
<p class="style4">SimpleCircle::SimpleCircle(const SimpleCircle & rhs)<br>
{<br>
int val = rhs.GetRadius();<br>
itsRadius = new int(val);<br>
}</p>
<p class="style4">int SimpleCircle::GetRadius() const<br>
{<br>
return *itsRadius;<br>
}<br>
int main()<br>
{<br>
SimpleCircle CircleOne, CircleTwo(9);<br>
cout << "CircleOne: " << CircleOne.GetRadius() << endl;<br>
cout << "CircleTwo: " << CircleTwo.GetRadius() << endl;<br>
return 0;<br>
}程序运行输出:<br>
CircleOne: 5<br>
CircleTwo: 9<br>
</p>
<p class="style4"><strong>6-21 编写一个函数,统计一个英文句子中字母的个数,在主程序中实现输入、输出。</strong><br>
</p>
<p class="style4">解: <br>
源程序:<br>
#include <iostream.h><br>
#include <stdio.h></p>
<p class="style4">int count(char *str)<br>
{<br>
int i,num=0;<br>
for (i=0; str[i]; i++)<br>
{<br>
if ( (str[i]>='a' && str[i]<='z') || (str[i]>='A' && str[i]<='Z') )<br>
num++;<br>
}<br>
return num;<br>
}</p>
<p class="style4">void main()<br>
{<br>
char text[100];<br>
cout << "输入一个英语句子:" << endl;<br>
gets(text);<br>
cout << "这个句子里有" << count(text) << "个字母。" << endl;<br>
}</p>
<p class="style4">程序运行输出:<br>
输入一个英语句子:<br>
It is very interesting!<br>
这个句子里有19个字母。<br>
</p>
<p class="style4"><strong>6-22 编写函数int index(char *s, char *t),返回字符串t 在字符串s中出现的最左边的位置,如果在s中没有与t匹配的子串,就返回-1。</strong><br>
</p>
<p class="style4">解: <br>
源程序:<br>
#include <iostream.h></p>
<p class="style4">int index( char *s, char *t)<br>
{<br>
int i,j,k;<br>
for(i = 0; s[i] != '\0'; i++)<br>
{<br>
for(j = i, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++)<br>
;<br>
if (t[k] =='\0')<br>
return i;<br>
}<br>
return -1;<br>
}</p>
<p class="style4">void main()<br>
{<br>
int n;<br>
char str1[20],str2[20];<br>
cout << "输入一个英语单词:";<br>
cin >> str1;<br>
cout << "输入另一个英语单词:";<br>
cin >> str2;<br>
n = index(str1,str2);<br>
if (n > 0)<br>
cout << str2 << "在" << str1 << "中左起第" << n+1 <br>
<< "个位置。"<<endl;<br>
else<br>
cout << str2 << "不在" << str1 << "中。" << endl;<br>
}<br>
程序运行输出:<br>
输入一个英语单词:abcdefgh<br>
输入另一个英语单词:de<br>
de在abcdefghijk中左起第4个位置。</p>
<p class="style4"><strong>6-23 编写函数reverse(char *s)的倒序递归程序,使字符串s倒序。</strong><br>
</p>
<p class="style4">解: <br>
源程序:<br>
#include <iostream.h><br>
#include <string.h></p>
<p class="style4">void reverse(char *s, char *t)<br>
{<br>
char c;<br>
if (s < t)<br>
{<br>
c = *s;<br>
*s = *t;<br>
*t = c;<br>
reverse(++s, --t);<br>
}<br>
}</p>
<p class="style4">void reverse( char *s)<br>
{<br>
reverse(s, s + strlen(s) - 1);<br>
}</p>
<p class="style4">void main()<br>
{<br>
char str1[20];<br>
cout << "输入一个字符串:";<br>
cin >> str1;<br>
cout << "原字符串为:" << str1 << endl;<br>
reverse(str1);<br>
cout << "倒序反转后为:" << str1 << endl;<br>
}<br>
程序运行输出:<br>
输入一个字符串:abcdefghijk<br>
原字符串为:abcdefghijk<br>
倒序反转后为:kjihgfedcba<br>
</p>
<p class="style4"><strong>6-24 设学生人数N=8,提示用户输入N个人的考试成绩,然后计算出平均成绩,显示出来。</strong><br>
</p>
<p class="style4">解: <br>
源程序:<br>
#include <iostream.h><br>
#include <string.h></p>
<p class="style4">#define N 8</p>
<p class="style4">float grades[N]; //存放成绩的数组</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -