C++程序设计实践指导——第一章 简单编程 (1)

本文是C++编程实践的第一章,涵盖了数组操作的多个方面,包括删除序列中相同数字、二维数组非对角线元素之和、整数降序排列、整数转字符串、求整数集合并集、分数运算、超长数列部分降序排序及求指定范围内的素数。通过实例介绍了如何使用C++构建ARR、matrix、NUM、STR、SET、List和PRIMENUM等类来实现这些功能。
摘要由CSDN通过智能技术生成

第一章 简单编程 (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++)
		{
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值