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

📄 array.cpp

📁 这我们老师对是面向对象程序设计(清华大学出版社)一书制作的PPT
💻 CPP
字号:

//【例4.1】 一维数组的应用

#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
void main()
{
	int aa[][3]={1,2,3,4,5,6,7};
	for(int k=0;k<3;k++)
		for(int l=0;l<3;l++)
			cout<<aa[k][l]<<'\t';

	int sum=0;
	float average;
	const int N=5;					//定义整型常量N=5;
	int a[N]={85,90,75,80,78};		//初始化整型数组ai各元素的值
	int b[8];				//初始化整型数组b
	a[2]+=5;					//将数组中第三个元素ai[2]值增加5
	cout<<"输入数组b中的各元素(8个):\n";
	for(int i=0;i<8;i++)
		cin>>b[i];
	cout<<"数组a中的元素为:\n";
	for (i=0;i<N;i++)
	{
		sum+=a[i];				//求数组ai的累加和sum
		cout<<a[i]<<'\t';
	}
	cout<<'\n';
	cout<<"数组b中的元素为:\n";
	for(i=0;i<8;i++)
		cout<<b[i]<<'\t';
	cout<<'\n';
	average=(float)sum/N;				//求数组ai的平均值average
	cout<<"数组a中元素的平均值为: "<<average<<'\n';
	cout<<"数组a中元素所占用的字节数为: "<<sizeof(a)<<"个字节"<<'\n';
	cout<<"数组b的大小为:"<<sizeof(b)/sizeof(int)<<'\n';
}



//【例4.2】二维数组的不同形式的初始化。


void main4_2()
{	
	int array1[2][3]={{10,20,30},{40,50,60}};	//定义并初始化array1数组
	int array2[2][3]={10,20,30,40,50};			//定义并初始化array2数组
	int array3[][3]={{10},{20,30,40}};			//定义并初始化array4数组
	int i,j;
	cout<<"Values in array1 by row are:"<<endl;
	for (i=0;i<2;i++)					//按行输出array1数组各元素值
	{	
		for (j=0;j<3;j++)
			cout<<array1[i][j]<<'\t';
			cout<<endl;
	}
	cout<<"Values in array2 by row are:"<<endl;
	for (i=0;i<2;i++)					//按行输出array2数组各元素值
	{	
		for (j=0;j<3;j++)
			cout<<array2[i][j]<<'\t';
		cout<<endl;
	}
	cout<<"Values in array4 by row are:"<<endl;
	for (i=0;i<(sizeof(array3)/(3*sizeof(int)));i++)	//按行输出array4数组各元素值
	{	
		for (j=0;j<3;j++)
			cout<<array3[i][j]<<'\t';
		cout<<endl;
	}
}


//【例4.3】输入一个4行3列数组,设计一个程序,求出数组中元素的平均值、最大元素、
//最小元素,并求出最大元素和最小元素的位置(行号和列号)。


void main4_3()
{	
	const int arow=3;			//定义数组a的行数arow=3
	const int acol=2;			//定义数组a的列数acol=2
	const int brow=2;			//定义数组b的行数brow=2
	const int bcol=3;			//定义数组b的列数bcol=3
	int a[arow][acol]={{1,3},{5,7},{9,11}};	//定义并初始化数组a
	int b[brow][bcol]={{2,4,6},{8,10,12}};	//定义并初始化数组b
	int c[arow][bcol];					//定义数组c
	int i,j,k;
	if (acol!=brow)						//判断矩阵a的列数是否与矩阵b的行数相等
	{
		cout<<"矩阵a和矩阵b不能相乘!\n";
		exit(0);
	}
	else{	
		for (i=0;i<arow;i++)
			for (j=0;j<bcol;j++)
			{	
				c[i][j]=0;
				for (k=0;k<acol;k++)
					c[i][j]+=a[i][k]*b[k][j];		//求矩阵c中的元素cij
			}
			cout<<"矩阵a和矩阵b相乘之后的矩阵为:"<<endl;
			for (i=0;i<arow;i++)
			{	
				for(j=0;j<bcol;j++)
					cout<<setw(5)<<c[i][j];			//按对齐的方式输出矩阵c各元素值
				cout<<'\n';
			}
		}
}

//【例4.4】已知三行二列的矩阵a与二行三列矩阵b,求这两矩阵的积c=a×b。
//分析:按照两矩阵相乘的运算法则,要求a矩阵的列数与b矩阵的行数相同,假设它们的积为c,
//则c矩阵的行数等于a矩阵的行数,c矩阵的列数等于b矩阵的列数。

void main4_4()
{
	int a[4][5];
	int i,j,max,min,sum=0;
	int maxr,maxc,minr,minc;
	float average;
	cout<<"输入4行5列数组a中的各元素:\n";
	for(i=0;i<4;i++)
		for(j=0;j<5;j++)
			cin>>a[i][j];
	max=min=a[0][0];
	maxr=maxc=minr=minc=0;
	for(i=0;i<4;i++)
		for(j=0;j<5;j++)
		{
			sum+=a[i][j];
			if(a[i][j]>max)max=a[i][j],maxr=i,maxc=j;
			else if(a[i][j]<min)min=a[i][j],minr=i,minc=j;
		}
	average=(float)sum/(sizeof(a)/sizeof(int));
	cout<<"数组a中元素的平均值为:"<<average<<'\n';
	cout<<"数组a中值最大的元素为a["<<maxr<<"]["<<maxc<<"],其值为"<<max<<'\n';
	cout<<"数组a中值最小的元素为a["<<minr<<"]["<<minc<<"],其值为"<<min<<'\n';
}

//【例4.5】设计一个函数,判定一个数组中的元素是否按升序排列。

bool isNonSorted(int a[10])
{
	for(int i=1;i<10;i++)
		if(a[i]<a[i-1]) return false;
	return true;
}

void main4_5()
{
	int b[10];
	cout<<"输入数组b中的各元素(10个):\n";
	for(int i=0;i<10;i++)
		cin>>b[i];
	if(isNonSorted(b))
		cout<<"数组b中的元素是按升序排列的!\n";
	else
		cout<<"数组b中的元素没有按升序排列!\n";
}

//【例4.6】设计一个函数,用"冒泡排序法"对数组中的元素进行升序排序。

void sort(float a[],int n)
{
	float temp;
	for(int i=1;i<n;i++)
		for(int j=0;j<n-i;j++)
			if(a[j]>a[j+1])
				temp=a[j],a[j]=a[j+1],a[j+1]=temp;
}

void main4_6()
{
	float b[8]={12.3,5.4,89.6, 37.2, 22.4,56.3,62.1,49.0};
	cout<<"排序前数组b中的元素依次为:\n";
	for(int i=0;i<8;i++)
		cout<<b[i]<<'\t';
	cout<<'\n';
	sort(b,8);
	cout<<"排序后数组b中的元素依次为:\n";
	for(i=0;i<8;i++)
		cout<<b[i]<<'\t';
	cout<<'\n';
}

//【例4.7】构造三个函数,分别用于输入二维数组、输出二维数组以及对二维数组中的元素进行排序。

void read(float a[4][5])
{
	cout<<"输入4行五列数组的各元素:\n";
	for(int i=0;i<4;i++)
		for(int j=0;j<5;j++)
			cin>>a[i][j];
}

void print(float a[][5],int n)
{
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<5;j++)
			cout<<a[i][j]<<'\t';
		cout<<'\n';
	}
}

void sort(float a[][5],int n)
{
	int i,j,k,m,col,row,flag,flag1;
	float temp;
	for(i=0;i<n;i++)
		for(j=0;j<5;j++)
		{
			row=i;col=j;flag=j+1;flag1=0;
			for(k=i;k<n;k++)
			{
				for(m=flag;m<5;m++)
					if(a[row][col]>a[k][m])
						row=k,col=m,flag1=1;
				flag=0;
			}
			if(flag1)
			{
				temp=a[i][j];
				a[i][j]=a[row][col];
				a[row][col]=temp;
			}
		}
}


void main4_7()
{
	float b[4][5];
	read(b);
	sort(b,4);
	cout<<"排序后的二维数组为:\n";
	print(b,4);
}

//【例4.8】字符数组的输入和输出

void main4_8()
{
	char str1[20],str2[20];
	cout<<"请输入一串字符:\n";
	for(int i=0;i<20;i++)
		cin>>str1[i];
	cout<<"输入的字符串为:\n";
	for(i=0;i<20;i++)
		cout<<str1[i];
	cout<<'\n';
	cout<<"请输入一串字符:\n";
	cin>>str2;
	cout<<"输入的字符串为:\n";
	cout<<str2<<'\n';
}

//【例4.9】将一个字符串数组的每一个有效字符的数值加3后,按顺序颠倒过来。

void main4_9()
{	
	char s[]="Hello,everyone!";			//已知的字符串数组s
	int len=sizeof(s)-1;			//求字符串的有效字符
	int i;
	char temp;
	cout<<"The original string :"<<s<<endl; 
	for (i=0;i<len;i++)
		s[i]+=3;					//将字符串的每个字符基于ASCII表后移3位
	cout<<"The variable string :"<<s<<endl; 
	for(i=0;i<len-i-1;i++)					//将字符串颠倒过来
	{	
		temp=s[i];
		s[i]=s[len-i-1];
		s[len-i-1]=temp;
	}
	cout<<"The converse string :"<<s<<endl;
}


//【例4.10】函数strlen()应用举例


#include <string.h>
void main4_10()
{
	cout<<strlen("abc")<<'\n';
	char str1[10]={'a', 'b', 'c', '\0', '\d','e'};
	cout<<strlen(str1)<<'\t'<<sizeof(str1)<<'\n';
	char str2[]="abcdefg";
	cout<<strlen(str2)<<'\t'<<sizeof(str2)<<'\n';
	char str3[]="abcd\0efg";
	cout<<strlen(str3)<<'\t'<<sizeof(str3)<<'\n';
}

//实验题2

#define N 10

void mainex1()
{
	int a[N],b[N],c[N],i,j,k,t;
	cout<<"输入数组a中的各元素:";
	for(i=0;i<N;i++)
	{
		b[i]=c[i]=1;
		cin>>a[i];
	}
	k=0;
	for(i=0;i<N;i++)
	{
		if(b[i])
		{
		
			a[k]=a[i];
			for(j=i+1;j<N;j++)
				if(a[j]==a[i])
				{
					b[j]=0;c[k]++;				
				}
			k++;
		}
	}
	t=N-1;
	for(i=k-1;i>=0;i--)
		for(j=0;j<c[i];j++)
			a[t--]=a[i];
	for(i=0;i<N;i++)
		cout<<a[i]<<'\t';
	cout<<'\n';
}

//实验题3

#define N 40

void main4_ex_3()
{
	int num,t,i,j,k,a[N];
	cout<<"请输入一个正整数:\n";
	cin>>num;
	i=2;
	k=N-1;
	a[0]=1;j=0;
	a[N-1]=num;t=num;
	while(i<t)
	{
		if(num%i==0)
		{
			t=num/i;
			a[++j]=i;
			if(i<t)a[--k]=t;
		}
		i++;
	}
	for(i=0;i<=j;i++)cout<<a[i]<<'\t';
	for(i=k;i<N;i++)cout<<a[i]<<'\t';
	cout<<'\n';
}

⌨️ 快捷键说明

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