📄 array.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 + -