第一章 简单编程 (1)
1.1删除序列中相同的数
有16个数|1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10|,已按由小到大的顺序排好,存储 在数组a中。试建立一个类ARR,完成删除数组中相同的数,经删除后,数组a中的内容 为 |1,2,3,4,5,6,7,8,9,10
/*C++程序设计实践指导
第一章 简单编程
1.1删除序列中相同的数*/
/*有16个数|1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10|,已按由小到大的顺序排好,存储 在数组a中。试建立一个类ARR,完成删除数组中相同的数,经删除后,数组a中的内容 为 |1,2,3,4,5,6,7,8,9,10*/
#include<iostream>
#include<iomanip>
using namespace std; //使用标准命名空间std
class ARR{
int m; //数组元素实际个数
int a[100]; //存放原始数组及结果数组
public:
ARR(int x[],int size){ //构造函数,用参数 size 初始化 m,用参数 x 初始化 a
m=size;
for(int i=0;i<m;i++){
a[i]=x[i];
}
}
void delsame(); //完成数组 a中相同元素的删除工作
void show(){ // 将数组以每行5个数的形式输出到屏幕上
cout<<setiosflags(ios::left);
for(int i=0;i<m;i++){
cout<<setw(3)<<a[i];
if((i+1)%5==0)cout<<endl;
}
cout<<resetiosflags(ios::left);
cout<<endl;
}
};
void ARR::delsame(){ //在类的外部定义函数, //完成数组 a中相同元素的删除工作
int i,j;
for(i=0;i<m-1;i++){
if(a[i]==a[i+1]){ // 如果前后相邻的两个元素相同,用这两个元素后的元素覆盖...
//后面那个相同元素。
for(j=i+1;j<m-1;j++)a[j]=a[j+1];//依次向前覆盖,直到数组结束。
m--;//删除一个元素后,元素个数减 1
i--;//有可能出现连续多个相同的数,所以应继续判断当前元素
}
}
}
int main(){
int b[]={1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10};
ARR v(b,sizeof(b)/sizeof(b[0]));/*定义一个ARR类的对象v,用b及数组元素的个数初始化该对象。*/
v.show();//显示原数组
v.delsame();
v.show();//显示结果数组
return 0;
}
1.2 二维数组的操作运算
编写一个通用程序,求出二维数组(行数和列数必须相等)的非对角线元素之和,即 求两条对角线之外的元素之和。例如,数组值如下,其非对角线元素之和为8。
试建立一个类matrix,用于完成该功能。
#include<iostream>
using namespace std;
/**/
/*将以上以二维数组为数据结构的程序实现改写为以单向链表结构来表示矩阵,可定义数据结构体,如下所示:*/
struct linkNode
{
int row;//存放二维数组的行号
int column;//存放二维数组的列号
int data;//存放二维数组对应行号及列号中的数
linkNode *next; //指向下一个结点的指针
};
class Matrix
{
public:
Matrix(int x[][40],int k);//构造函数,用k初始化数据成员m,用数组X初始化数组a
~Matrix() {};
void process();//完成求和
void show();//按二维方式输出数组,并输出求和结果
private:
int m;//二维数组的行数和列数相等,即二维数组是m行m列的
int sum;//存放非对角线元素之和
int a[40][40];//用于存放二维数组
};
Matrix::Matrix(int x[][40], int k)
{
m = k;
sum = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < m; j++)
{