数组典型例题及参考答案.docx

上传人:b****1 文档编号:973923 上传时间:2023-04-30 格式:DOCX 页数:40 大小:28.47KB
下载 相关 举报
数组典型例题及参考答案.docx_第1页
第1页 / 共40页
数组典型例题及参考答案.docx_第2页
第2页 / 共40页
数组典型例题及参考答案.docx_第3页
第3页 / 共40页
数组典型例题及参考答案.docx_第4页
第4页 / 共40页
数组典型例题及参考答案.docx_第5页
第5页 / 共40页
数组典型例题及参考答案.docx_第6页
第6页 / 共40页
数组典型例题及参考答案.docx_第7页
第7页 / 共40页
数组典型例题及参考答案.docx_第8页
第8页 / 共40页
数组典型例题及参考答案.docx_第9页
第9页 / 共40页
数组典型例题及参考答案.docx_第10页
第10页 / 共40页
数组典型例题及参考答案.docx_第11页
第11页 / 共40页
数组典型例题及参考答案.docx_第12页
第12页 / 共40页
数组典型例题及参考答案.docx_第13页
第13页 / 共40页
数组典型例题及参考答案.docx_第14页
第14页 / 共40页
数组典型例题及参考答案.docx_第15页
第15页 / 共40页
数组典型例题及参考答案.docx_第16页
第16页 / 共40页
数组典型例题及参考答案.docx_第17页
第17页 / 共40页
数组典型例题及参考答案.docx_第18页
第18页 / 共40页
数组典型例题及参考答案.docx_第19页
第19页 / 共40页
数组典型例题及参考答案.docx_第20页
第20页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数组典型例题及参考答案.docx

《数组典型例题及参考答案.docx》由会员分享,可在线阅读,更多相关《数组典型例题及参考答案.docx(40页珍藏版)》请在冰点文库上搜索。

数组典型例题及参考答案.docx

数组典型例题及参考答案

⏹第7章数组

7-1输入一个正整数n(1≤n≤10),再输入n个整数

(1)输出最大数和最小数,并输出平均值。

(2)将最小数与第一个数交换,最大数与最后一个数交换,然后输出交换后的结果。

(3)输出所有比平均值大的数。

(4)找到最接近平均值的数。

(提示:

考虑差的绝对值)

Program

#defineN10

main()

{inta[N],max,min,sum,i,p,q,t;

floatave,sub;

/*输出最大数、最小数和平均数*/

printf("Pleaseinput%dintegers:

\n",N);

for(i=0;i

{scanf("%d",&a[i]);

if(i==0)

{max=min=sum=a[i];

p=q=0;

}

else

{if(max

{max=a[i];

p=i;

}

if(min>a[i])

{min=a[i];

q=i;

}

sum=sum+a[i];

}

}

ave=sum*1.0/N;

printf("Themaximumis:

%d,theminimumis:

%d,theaverageis%.2f\n",max,min,ave);

/*将最小数与第一个数交换,最大数与最后一个数交换*/

t=a[0];

a[0]=a[q];

a[q]=t;

t=a[N-1];

a[N-1]=a[p];

a[p]=t;

printf("Afterexchange:

");

for(i=0;i

printf("%d",a[i]);

/*输出所有比平均值大的数*/

printf("\nLargerthantheaverage:

");

for(i=0;i

if(a[i]>ave)

printf("%d",a[i]);

/*找到最接近平均值的数*/

printf("\nThenumberclosesttotheaverageis:

");

sub=a[0]>ave?

a[0]-ave:

ave-a[0];

p=0;

for(i=1;i

{if((a[i]>ave?

a[i]-ave:

ave-a[i])

{sub=a[i]>ave?

a[i]-ave:

ave-a[i];

p=i;

}

}

printf("%d.",a[p]);

}

Output

Pleaseinput10integers:

1734-1125107-9025↵/*input*/

Themaximumis:

34,theminimumis:

-11,theaverageis8.00

Afterexchange:

-11251725107-9034

Largerthantheaverage:

25171034

Thenumberclosesttotheaverageis:

7

7-2输入一个日期(按照year-month-day格式),计算该日期为当年的第几天。

(提示:

注意闰年)

(1)使用数组存储当年每个月应有的天数;

(2)不使用数组完成;

Program

main()

{intm[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

intyear,month,day,i,total=0;

printf("Pleaseinputadate:

(year-month-day)");

scanf("%d-%d-%d",&year,&month,&day);

total=day;

for(i=1;i

total+=m[i];

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

=0)||(year%400==0)&&month>=3)

total++;

printf("Thisdateisthe%dthdayintheyear.\n",total);

}

Program

(2)

main()

{intyear,month,day,total=0;

printf("Pleaseinputadate:

(year-month-day)");

scanf("%d-%d-%d",&year,&month,&day);

switch(month)

{case12:

total+=30;

case11:

total+=31;

case10:

total+=30;

case9:

total+=31;

case8:

total+=31;

case7:

total+=30;

case6:

total+=31;

case5:

total+=30;

case4:

total+=31;

case3:

total+=28;

case2:

total+=31;

case1:

total+=day;

}

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

=0)||(year%400==0)&&month>=3)

total++;

printf("Thisdateisthe%dthdayintheyear.\n",total);

}

Output

Pleaseinputadate:

(year-month-day)2008-4-14↵/*input*/

Thisdateisthe105thdayintheyear.

7-3输入一个正整数n(1≤n≤10),再输入n个整数,将这n个整数从大到小排序,然后在已经排序后的数组中插入平均数(取整),保持数组的升序,将插入平均数后的数组输出。

(1)用冒泡法排序;

(2)用选择法排序。

Program

(1)

#defineN11

main()

{inta[N],n,i,j,t,k,ave=0;

/*读入数据,计算平均值*/

printf("Howmanynumbersyouwanttosort?

");

scanf("%d",&n);

printf("Pleaseinput%dnumbers:

\n",n);

for(i=0;i<=n-1;i++)

{scanf("%d",&a[i]);

ave+=a[i];

}

ave/=n;

/*冒泡法排序*/

for(i=1;i<=n-1;i++)

{for(j=1;j<=n-i;j++)

{if(a[j-1]

{t=a[j-1];

a[j-1]=a[j];

a[j]=t;

}

}

}

/*插入平均数ave*/

for(i=0;i

{if(a[i]>ave)

continue;

for(j=n;j>i;j--)

a[j]=a[j-1];

a[i]=ave;

break;

}

for(i=0;i<=n;i++)

printf("%d",a[i]);

}

Program

(2)

#defineN11

main()

{inta[N],n,i,j,t,k,ave=0;

/*读入数据,计算平均值*/

printf("Howmanynumbersyouwanttosort?

");

scanf("%d",&n);

printf("Pleaseinput%dnumbers:

\n",n);

for(i=0;i<=n-1;i++)

{scanf("%d",&a[i]);

ave+=a[i];

}

ave/=n;

/*选择法排序*/

for(i=1;i

{k=i-1;

for(j=i;j<=n-1;j++)

if(a[k]

k=j;

t=a[k];

a[k]=a[i-1];

a[i-1]=t;

}

/*插入平均数ave*/

for(i=0;i

{if(a[i]>ave)

continue;

for(j=n;j>i;j--)

a[j]=a[j-1];

a[i]=ave;

break;

}

for(i=0;i<=n;i++)

printf("%d",a[i]);

}

Output

Howmanynumbersyouwanttosort?

5↵/*input*/

Pleaseinput5numbers:

1734-1125↵/*input*/

3417952-11

7-4输入两个数组A和B(各5个元素),将其按照升序排序,然后将A和B合并到数组C中(合并的过程中保持升序,不要合并后再排序)。

输出排序后的数组A、B和C。

Program

#defineN5

main()

{inta[N],b[N],c[2*N],i,j,t,k;

printf("PleaseinputarrayA(containing%delements):

",N);

for(i=0;i

scanf("%d",&a[i]);

printf("PleaseinputarrayB(containing%delements):

",N);

for(i=0;i

scanf("%d",&b[i]);

/*冒泡法排序*/

for(i=1;i

{for(j=1;j<=N-i;j++)

{if(a[j-1]>a[j])

{t=a[j-1];

a[j-1]=a[j];

a[j]=t;

}

}

}

for(i=1;i

{for(j=1;j<=N-i;j++)

{if(b[j-1]>b[j])

{t=b[j-1];

b[j-1]=b[j];

b[j]=t;

}

}

}

/*将数组a和数组b合并到数组c中*/

for(i=0,j=0,k=0;i

if(a[i]<=b[j])

c[k]=a[i++];

else

c[k]=b[j++];

while(i

c[k++]=a[i++];

while(j

c[k++]=b[j++];

printf("ArrayCis:

");

for(i=0;i<2*N;i++)

printf("%d",c[i]);

}

Output

PleaseinputarrayA(containing5elements):

1734-1125↵/*input*/

PleaseinputarrayB(containing5elements):

107-9025↵/*input*/

ArrayCis:

-11-9025710172534

7-5利用数组,求一个int型整数对应的二进制补码并输出(注意负数)。

Program

main()

{intn,m,b[16]={0},i=15;

printf("Pleaseinputaninteger:

");

scanf("%d",&n);

m=n>=0?

n:

-n;

while(m)

{b[i--]=m%2;

m=m/2;

}

/*负数的补码*/

if(n<0)

{for(i=0;i<16;i++)/*取反*/

b[i]=b[i]==1?

0:

1;

for(i=15;i>=0;i--)/*加1*/

{if(b[i]==0)

{b[i]=1;

break;

}

else

b[i]=0;

}

}

printf("Thebinarycomplementalcodeof%dis:

",n);

for(i=0;i<16;i++)

{printf("%d",b[i]);

if(i==7)

printf("");

}

}

Output

(1)

Pleaseinputaninteger:

9↵/*input*/

Thebinarycomplementalcodeof9is:

0000000000001001

Output

(2)

Pleaseinputaninteger:

-9↵/*input*/

Thebinarycomplementalcodeof-9is:

1111111111110111

7-6编写程序,按照下面要求填充并显示5行5列的矩阵(要求:

使用的printf语句不多于2个)

(1)左上三角为+1

(2)右下三角为-1

(3)从右到左的对角线为0。

示例:

11110

1110-1

110-1-1

10-1-1-1

0-1-1-1-1

Program

#defineN5

main()

{inta[N][N]={0},i,j;

for(i=0;i

{for(j=0;j

a[i][j]=1;

for(j=N-1;j>N-i-1;j--)

a[i][j]=-1;

for(j=0;j

printf("%3d",a[i][j]);

printf("\n");

}

}

7-7定义一个二维数组,输入元素,输出最大元素及其行下标和列下标。

Program

#defineM4

#defineN5

main()

{inta[M][N],i,j,p,q;

printf("Pleaseinputamatrixof%dby%d:

\n",M,N);

for(i=0,p=0,q=0;i

for(j=0;j

{scanf("%d",&a[i][j]);

if(a[p][q]

{p=i;

q=j;

}

}

printf("Themaximumis%d,onthe%dthrowand%dthcolumn.",

a[p][q],p+1,q+1);

}

7-8输入一个4*3的矩阵(整型),计算每行中最大值的平均值(实型)。

Program

#defineM4

#defineN3

main()

{inta[M][N],b[M],i,j;/*数组b存放每行的最大值*/

floatave=0;

printf("Pleaseinputamatrixof%dby%d:

\n",M,N);

for(i=0;i

{for(j=0;j

{scanf("%d",&a[i][j]);

if(j==0)

b[i]=a[i][j];

else

if(b[i]

b[i]=a[i][j];

}

ave+=b[i];

}

printf("Theaverageofthemaximumineachrowis:

%.2f\n",ave/M);

}

7-9杨辉三角形(也叫Pascal三角形)如下:

1

11

121

1331

14641

15101051

……

编写程序,生成一个15行的杨辉三角形,存放在一个二维数组里。

输入正整数n(1~15),读取并输出杨辉三角形的前n行元素。

(提示:

如果用i表示行,用j表示列,则第i行j列元素pi,j=pi-1,j-1+pi-1,j)

Program

#defineN15

main()

{intyh[N][N]={1},n,i,j;

/*生成杨辉三角形*/

for(i=1;i

{yh[i][0]=1;

for(j=1;j<=i;j++)

yh[i][j]=yh[i-1][j-1]+yh[i-1][j];

}

/*输出前n行*/

printf("Pleaseinputanintegern(1~15):

");

scanf("%d",&n);

for(i=0;i

{for(j=0;j<=i;j++)

printf("%-5d",yh[i][j]);

printf("\n");

}

}

7-10矩阵A和矩阵B相乘,要求A的列数和B的行数相同。

例如:

m行n列的矩阵A和n行p列的矩阵B相乘,得到m行p列的矩阵C,C中的i行j列元素cij由下列公式得到:

其中,aik是矩阵A中的i行k列元素,bkj是矩阵B中的k行j列元素。

编写程序,输入3行4列的矩阵A和4行5列的矩阵B,输出A和B的乘积——3行5列的矩阵C。

Program

#defineM3

#defineN4

#defineP5

main()

{inta[M][N],b[N][P],c[M][P],i,j,k;

printf("PleaseinputmatrixAof%dby%d:

\n",M,N);

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

printf("PleaseinputmatrixBof%dby%d:

\n",N,P);

for(i=0;i

for(j=0;j

scanf("%d",&b[i][j]);

printf("TheproductofmatrixAandmatrixBis:

\n");

for(i=0;i

{for(j=0;j

{for(k=0,c[i][j]=0;k

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

printf("%6d",c[i][j]);

}

printf("\n");

}

}

7-11判断一个二维数组是否存在鞍点,若存在,则输出鞍点及其行号和列号;否则输出没有鞍点信息。

“鞍点”是指这样的元素:

它在本行是最大元素,而在本列是最小的元素。

Program

#defineM3

#defineN4

main()

{inta[M][N],i,j,k,p,count=0;

printf("Pleaseinputmatrixaof%dby%d:

\n",M,N);

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

/*寻找鞍点*/

for(i=0;i

{p=0;

for(j=0;j

if(a[i][p]

p=j;

for(k=0;k

if(a[i][p]>a[k][p])

break;

if(k==M)

printf("Saddlepoint%d:

a[%d][%d]=%d\n",++count,i,p,a[i][p]);

}

if(!

count)

printf("Nosaddlepoint!

\n");

}

7-12编写程序,实现二叉树查找的算法。

该算法是用一个查找键值与“已排序”列表中的中间元素进行比较,然后:

(1)如果匹配,结束查找

(2)如果查找键值小于中间值,那么键值在列表的前半部分,则在列表的前半部中继续查找(继续与其中的中间元素比较)

(3)如果查找键值大于中间值,那么键值在列表的后半部分,则在列表的前半部中继续查找(继续与其中的中间元素比较)

重复这种“分治”的策略,直到找到一个匹配值,输出它在列表中的位置。

如果该列表减少到只有一个元素,仍没有匹配的值,那么表明该列表中没有键值。

注意:

读入数组后,需

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2