数组的概念.docx

上传人:b****5 文档编号:11913955 上传时间:2023-04-16 格式:DOCX 页数:89 大小:41.14KB
下载 相关 举报
数组的概念.docx_第1页
第1页 / 共89页
数组的概念.docx_第2页
第2页 / 共89页
数组的概念.docx_第3页
第3页 / 共89页
数组的概念.docx_第4页
第4页 / 共89页
数组的概念.docx_第5页
第5页 / 共89页
点击查看更多>>
下载资源
资源描述

数组的概念.docx

《数组的概念.docx》由会员分享,可在线阅读,更多相关《数组的概念.docx(89页珍藏版)》请在冰豆网上搜索。

数组的概念.docx

数组的概念

数组的概念

1(定义一个长度为4的数组,

用于存储用户输入的4个数。

求解并打印第1、4个元素的平均值

以及第2、3个元素的平均值。

#includeusingnamespacestd;voidmain()

{

doublea[4];

cout<<"请输入4个数字:

";

for(intb=0;b<4;b++)

{

cin>>a[b];

}

cout<<(a[0]+a[3])/2<

cout<<(a[1]+a[2])/2<

}

2(定义一个长度为12的整型数组

,其元素由随机数发生器随机产生,并将该数组按照逆序打印出来。

#include#include

usingnamespacestd;voidmain()

{

constintN=12;//const是整型的意思

srand(time(0));//随即发生器函数

inta[N];

cout<<"原数组:

\n";

for(intb=0;b

{

a[b]=rand();

cout<

}

cout<

cout<<"逆序输出:

\n";

for(intc=N-1;c>=0;c--)

{

cout<

}

cout<

}//逆序就是按照从后往前输出。

数组的应用

3(使用一个数组存储一年中各月的天数,试回答用户某年某月的天数。

例:

假设用户输入的年数为2012,

月数为2,则程序应输出29。

要求:

先编写一个判断闰年的函数,

输入:

一个正整数(年份);输出:

(是闰年)或假(不是闰年)。

并在主

函数中使用该函数来判断闰年。

#includeusingnamespacestd;boolrunnian(int);voidmain()

{

intyear,month;

intj[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//加上0是因为数

组找时都是n-1的位置。

cout<<"请输入年份和月份:

";

cin>>year>>month;

if(year>0&&month>0&&month<=12)

{

if(runnian(year))

j[2]++;//这里是加一输出闰年的29天。

cout<

"<

}

else

cout<<"输入数据不合法!

\n";}

boolrunnian(intyear){

if(year%4==0&&year%100!

=0||year%400==0)

returntrue;

else

returnfalse;

}

注意:

boolrunnian的函数中的int在实验中要加表示位置(视情况

而定如果错误删除。

4(试编写程序计算乘积矩阵。

设矩阵A、B如下图片所示,计算乘积矩阵

C并打印出来。

注意矩阵的输入形式按行进行输入

#include#include//矩阵

usingnamespacestd;voidmain()

{

constintM=3,N=4,K=4;//整型

inta[M][K]={{3,0,4,5},{6,2,1,7},{4,1,5,8}};

intb[K][N]={{1,0,4,3},{2,5,1,6},{0,7,4,4},{9,3,6,0}};

intc[M][N];

inti,j,k;

cout<<"原矩阵A:

\n";

for(i=0;i

{

for(j=0;j

cout<

cout<

}

cout<<"原矩阵B:

\n";

for(i=0;i

{

for(j=0;j

cout<

cout<

}

for(i=0;i

for(j=0;j

{

intt=0;

for(k=0;k

t+=a[i][k]*b[k][j];

c[i][j]=t;

}//t无限使用得值在直接赋值,有进行下一个,只是中介作用。

cout<<"乘积矩阵C=A*B:

\n";

for(i=0;i

{

for(j=0;j

cout<

cout<

}

}

字符数组的应用

5.编程实现:

将michaeljackson的名字

保存在字符数组name中,并将其中两个单

词的首字符改为大写后打印出来,

#include

usingnamespacestd;voidmain()

{

charname[]="michaeljackson";

cout<

name[0]=toupper(name[0]);

name[8]=toupper(name[8]);//toupper大写转换的函数

cout<

}

数组中的0为第一个,8为第九个字母。

6.将字符数组str1中下标为单号的元素

值赋给另一个字符数组str2,并打印输

出str1和str2。

其中str1中保存的字符

串可以由用户输入,假设不超过30个字符。

#include

usingnamespacestd;voidmain()

{

constintN=30;

charstr1[N+1]="",str2[N/2+1]="";//这里是设置数组的长度

cout<<"请输入一个不超过30个字符的字符串:

";

cin>>str1;

for(inti=0;str1[i]!

='\0';i++)

{

if(i%2==1)

str2[i/2]=str1[i];

}//取余进行选择然后进行赋值得str2

cout<

cout<

}

7编程实现:

由用户输入一些字符,之后

求出其中英文字母、数字及其他字符各占多少百分比,提示:

假设输入的字符不超过80个。

相关函数说明:

inttoupper(int):

将一个小写字母转

换为大写字母。

输入:

一个小写字母

;输出:

对应的大写字母。

intisalpha(int):

判断一个字符是否

是英文字母。

输入:

一个字符;输出:

真(是个英文字母)或假(不是个英文字母)。

intisdigit(int):

判断一个字符是否是十

进制数字字符。

输入:

一个字符;输出

:

真(是个数字字符)或假(不是个数字字符)。

#includeusingnamespacestd;voidmain()

{

constintN=80;

charstr[N+1];

inti,letter,num,chr;

cout<<"请输入一个不超过80个字符的字符串:

";

cin>>str;

letter=num=chr=0;//定义初始为零,然后进行运算

for(i=0;str[i]!

='\0';i++)

{

if(isalpha(str[i]))

letter++;

elseif(isdigit(str[i]))

num++;

else

chr++;

}

cout<<"Alpha:

"<<(float)letter/i*100<<"%"<

cout<<"Number:

"<<(float)num/i*100<<"%"<

cout<<"Othercharacter:

"<<(float)chr/i*100<<"%"<

}//float这里是指取单精度数的意思(计算后数据为单精度)

8(编程实现:

保存用户输入的12个英文名字

,并打印出其中的第1、3、5、7、9、11个名字。

#include

usingnamespacestd;

voidmain()

{

constintM=12,N=30;

charname[M][N+1];//N的作用是给于名字的储存空间一长度不然输出为单个字母。

inti;

cout<<"请输入12个英文名字:

\n";

for(i=0;i

cin>>name[i];

}

cout<<"第1,3,5,7,9,11个人的名字是:

\n";

for(i=0;i<12;i+=2){

cout<<(i+1)<<":

\t"<

}

}//中间有制表符的存在使输出更加有序

数组的综合应用

9(使用随机数发生器产生50个

不超过100的正整数,保存在数组

中,打印原始数组及降序排列后的数组

并在数组中查找某个由用户指定的整数

,若找到则打印出其下标,否则打印“未找到”。

要求:

打印数组时按横向制表位列对

齐的方式(数据以’\t’间隔),每行10个数。

#include#include

usingnamespacestd;voidmain()

{

constintN=50;

inta[N];

inti,j;

srand(time(NULL));

cout<<"原始数组:

\n";

for(i=0;i

{

a[i]=rand()%100;

cout<

if((i+1)%10==0)cout<

}

cout<

//选择排序法

for(i=0;i

{

intk=i;

for(j=i+1;j

if(a[k]

}

intm=a[k];

a[k]=a[i];

a[i]=m;

}

cout<<"降序排列后的数组:

\n";

for(i=0;i

cout<

if((i+1)%10==0)cout<

}

cout<

intnum;

cout<<"请输入一个要查找的100以内的整数:

";

cin>>num;

//二分查找法

intlow=0,high=N-1;//查找空间的首尾元素的下标

while(low<=high)

{

intmid=(low+high)/2;//查找空间的中点元素的下标

if(a[mid]==num){

cout<<"找到a["<

break;

}

elseif(a[mid]

elselow=mid+1;//查找空间缩小一半

}

if(low>high)cout<<"数组中未找到"<

10(编程实现:

保存用户输入的12个英文名字,排序后打印出来。

提示:

比较两个名字可以使用字符串比较函数intstrcmp(char*,

char*)。

#include

usingnamespacestd;

voidmain()

{

constintM=12,N=30;

charname[M][N+1];

inti;

cout<<"请输入12个英文名字:

\n";

for(i=0;i

cin>>name[i];

}

//冒泡排序法

for(i=0;i

for(intj=M-1;j>i;j--)

{

chart[M];//定义一个整型字符串,实现其中介的作用

if(strcmp(name[j],name[j-1])<0)//将值小的元素向前

交换,升序排列strcmp是比较函数,小为负值,等于为0,大于为

正。

{

strcpy(t,name[j]);

strcpy(name[j],name[j-1]);

strcpy(name[j-1],t);

}//字符串的赋值属于数组,不能用等号赋值,要用strcpy

函数,形式如上述所示,后者赋值给前者。

}

//打印升序排列后的数组

cout<<"升序排列后:

\n";

for(i=0;i

cout<

}

11(某学校有12名学生参加100米短跑比赛

,每个运动员号和成绩如下表所示,请按照比

赛成绩排名并输出,要求每一行输出名次,运

动员号和比赛成绩三项数据。

并在之后查找用

户指定的运动员成绩及其名次,例如用户输入

运动员号8,则程序应打印出8号运动员的成

绩及名次。

100米短跑比赛成绩

运动员号成绩(秒)运动员号成绩(秒)

113.6214.9

314.8412.6

512.0613.4

712.7812.5

915.61015.3

1113.41212.7

#include

usingnamespacestd;

voidmain()

{

constintN=12;

double

result[N][2]={{1,13.6},{2,14.9},{3,14.8},{4,12.6},{5,12.0},{6,13.4},{7,12.7

},{8,12.5},{9,15.6},{10,15.3},{11,13.4},{12,12.7}};//double为双精度数定义

inti,num;

//插入排序法

for(i=1;i

{

doublek[2]={result[i][0],result[i][1]};//待插入的一行数据先保存在数组k中

intj=i-1;

while(j>=0&&k[1]

{//较大的数据向后移动,升序排列

result[j+1][0]=result[j][0];

result[j+1][1]=result[j][1];

j--;

}

//在插入点后插入数据

result[j+1][0]=k[0];

result[j+1][1]=k[1];

}

cout<<"排序后:

\n";

cout<<"名次\t编号\t成绩\n";

for(i=0;i

{

cout<

\t";

cout<

cout<

}

cout<<"请输入要查找的运动员的编号:

";

cin>>num;

//顺序查找法

for(i=0;i

{

if(result[i][0]==num)

{

cout<<"找到:

\n名次\t编号\t成绩\n";

cout<

\t";

cout<

cout<

break;

}

}

if(i>=N)

cout<<"未找到\n";

}

指针的概念和应用

12、假设有int型变量x、y,bool型变量f、g和double型数组a[5]。

按以下要求编写程序:

(a)为x、y、f和g随便赋一个值,请输出各变量的值及其地址。

(b)输出数组a的第一个元素和最后一个元素的地址。

思考:

两个地址之间差多少,为什么,

#include

usingnamespacestd;

voidmain()

{

intx,y;

boolf,g;

doublea[5];

x=10,y=20;

int*xp=&x,*yp=&y;

cout<<"x:

"<<*xp<<'\t'<

cout<<"y:

"<<*yp<<'\t'<

f=true,g=false;

bool*fp=&f,*gp=&g;

cout<<"f:

"<<*fp<<'\t'<

cout<<"g:

"<<*gp<<'\t'<

因此元素a[0]与a[4]的地址相差应为4*8Byte,即32Byte。

需注意的是:

显示的地址是一个十六进制数,

所以下面打印出的两个地址应相差0x20。

*/

cout<<"a[0]:

"<<&a[0]<

cout<<"a[4]:

"<<&a[4]<

13(将字符串常量"pointer"保存在一个字符数组中,打印以下三行内容:

(1)该数组的首地址;

(2)该字符串;(3)请使用指针变量输出该字符串,要求每个字符之间空一个格。

#include

usingnamespacestd;

voidmain()

{

charstr[]="pointer";//定义字符数组str存储该字符串

cout<<(void*)str<

cout<

char*p=str;//定义字符指针p指向数组中的第一个字符

while(*p){

cout<<*p<<'';//循环打印数组中的每个字符,并以空格间隔

p++;

}

cout<

}

14(试用指针实现:

判断一个数组是否是对称的。

1,2,3,5,7,7,5,3,2,1,是对称的,而,1,2,3,5,7,5,3,2,1,或,1,2,3,5,7,5,3,都不是对称的。

要求:

数组的元素个数定义为常量N,N的值以及数组各元素的值自定。

#include

usingnamespacestd;

voidmain()

{

constintN=10;

inta[N]={1,2,3,5,7,7,5,3,2,1};

//其他试验值intb[]={1,2,3,5,7,5,3,2,1};intc[]={1,2,3,5,7,5,3};

等等

for(inti=0;i

cout<

cout<

if(N%2==0)

{

int*headp=a;//定义首指针,指向数组第一个元素

int*tailp=a+N-1;//定义尾指针,指向数组最后一个元素

while(headp

{

if(*headp!

=*tailp)//如果两个指针指向的数不相等

{

cout<<"该数组不对称。

\n";

break;

}

headp++;//首指针增1,即向后移动,指向下一个元素

tailp--;//尾指针减1,即向前移动,指向前一个元素

}

if(headp>=tailp)//如果首指针已大于或等于尾指针

cout<<"该数组对称。

\n";

}

else

cout<<"该数组不对称。

\n";

}

指针与函数的应用

15(试编写一个实现三位正整数数字拆分功能的函数ChaiFen,其函数原型如下:

boolChaiFen(intn,int&n2,int&n1,int&n0);

要求:

函数检查参数n是否是正数,若是则进行拆分,并将百、十、个位分别保存在引用型参数n2、n1和n0中,函数返回true表示拆分成功;否则不进行拆分,函数返回false。

编写主函数,调用上述函数将用户输入的任意正整数进行拆分后显示。

#include

usingnamespacestd;

boolChaiFen(int,int&,int&,int&);

voidmain()

{

intx,bai,shi,ge;

cout<<"请输入任意一个三位正整数:

";

cin>>x;

if(x>=100&&x<1000&&ChaiFen(x,bai,shi,ge))//调用函数,形参n2,n1,n0将分别引用实参bai,shi,ge

{

cout<

<

}

else

cout<<"输入数据不合法。

\n";

}

boolChaiFen(intn,int&n2,int&n1,int&n0)//函数定义,n2,n1,n0声明为引用型参数

{

if(n<=0)

returnfalse;

n2=n/100;//百位保存在n2中,也即保存在main函数中的变量bai中

n1=n%100/10;//十位保存在n1中,也即保存在main函数中的变量shi中

n0=n%10;//个位保存在n0中,也即保存在main函数中的变量ge中

returntrue;

}//这里的拆分函数是文章后自己定义编写的前文只是提及引用。

16(试编写函数ChaZhao实现数组元素查找的功能。

若找到,返回其地址;否则,返回空指针NULL。

正确定义上述函数,使其功能可以在下面的主函数中得到测试。

voidmain()

{

constintN=12;

inta[N]={15,96,46,53,58,52,10,35,66,16,63,50};

intk1=30,k2=58;

int*p1=ChaZhao(a,N,k1),*p2=C

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1