华北电力大学c++实验指导数组的应用习题参考答案.docx

上传人:b****6 文档编号:8119176 上传时间:2023-01-28 格式:DOCX 页数:26 大小:21.52KB
下载 相关 举报
华北电力大学c++实验指导数组的应用习题参考答案.docx_第1页
第1页 / 共26页
华北电力大学c++实验指导数组的应用习题参考答案.docx_第2页
第2页 / 共26页
华北电力大学c++实验指导数组的应用习题参考答案.docx_第3页
第3页 / 共26页
华北电力大学c++实验指导数组的应用习题参考答案.docx_第4页
第4页 / 共26页
华北电力大学c++实验指导数组的应用习题参考答案.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

华北电力大学c++实验指导数组的应用习题参考答案.docx

《华北电力大学c++实验指导数组的应用习题参考答案.docx》由会员分享,可在线阅读,更多相关《华北电力大学c++实验指导数组的应用习题参考答案.docx(26页珍藏版)》请在冰豆网上搜索。

华北电力大学c++实验指导数组的应用习题参考答案.docx

华北电力大学c++实验指导数组的应用习题参考答案

P126数组的应用习题解答

1.改错题

见文件“实验指导改错题习题解答”。

2.填空题(在空白处填入适当内容,将程序补充完整,并上机调试)

(1)求Fibonachi数列(1,1,2,3,5,8,13,……)的前10项。

#include

voidmain()

{intf[11]={0,1,1},n;

for(n=3;n<=10;n++)

f[n]=

(1);

for(

(2);n<=10;n++)

cout<

}

参考答案

(1)f[n]=f[n-1]+f[n-2]

(2)n=10

(2)从键盘上输入若干学生的成绩,统计出平均成绩,并输出低于平均分的学生成绩,输入负数结束数据的输入。

#include

voidmain()

{floatx[100],sum=0.0,ave,a;

intn=0,i;

cin>>a;

while(

(1))

{sum+=a;

x[n]=a;

(2);

cin>>a;}

ave=sum/n;;

cout<<"ave="<

for(i=0;(3);i++)

if((4))

cout<

}

参考答案

(1)a>=0

(2)n++(3)i

(3)计算一个3X3矩阵的各列元素的平均值。

#include"iostream.h"

#defineM3

voidmain()

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

floatave[M];

for(i=0;i

{

(1);

for(j=0;j

ave[i]=ave[i]+

(2);

ave[i]=(3);

}

for(i=0;i

cout<<""<

}

参考答案

(1)ave[i]=0

(2)a[j][i](3)ave[i]/M

(4)找出一个5x5矩阵中的最小值及其在数组中的位置。

#include"iostream.h"

#defineM5

voidmain()

{inta[M][M],i,j,h,l;

for(i=0;i

for(j=0;j

(1);

h=0;l=0;

for(i=0;i

for(j=0;j

if(

(2)>a[i][j])

{h=i;

(3);

}

cout<<"最小值:

"<<(4)<

cout<<"位置:

行:

"<

"<

}

参考答案

(1)cin>>a[i][j]

(2)a[h][l](3)l=j(4)a[h][l]

(5)程序的功能是将两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差(第一个字串中字符的ASCII码减去第二个字串中字符的ASCII码)。

#include

voidmain()

{charstr1[100],str2[100];

inti,s;

printf("请输入第一个字符串:

");

gets(str1);

printf("请输入第二个字符串:

");

gets(str2);

i=0;

while(

(1))

i++;

s=

(2);

printf("%d",s);

}

参考答案

(1)str1[i]==str2[i]&&str1[i]!

='\0'

(2)str1[i]-str2[i]

思考:

1.如果第一个字串为ab,第二个字串为abc,程序的运行结果是什么?

根据这个结果判断字符’\0’的ASCII码是多少?

答:

运行结果为-99。

依此判断字符’\0’的ASCII码为0

2.对于字符数组str1,关系表达式str1[i]!

=’\0’与str1[i]!

=0是否等价?

答:

等价。

(6)子函数的功能是将十进制数转换成二进制数。

在主函数中输入十进制数,调用子函数进行转换后,然后输出转换的结果。

#include

voidmain()

{inty,n,j,a[8];

(1);

cin>>y;

n=

(2);

for(j=(3);j>=0;j--)

cout<

}

intzh(inta[],intx)

{inti;

i=0;

do

{a[i]=(4);i++;

x=x/2;

}

while(x>=1);

(5);

}

参考答案

(1)intzh(int[],int)

(2)zh(a,y)(3)n-1(4)x%2(5)returni

(一)编写程序

1.从任意n个数构成的数列中找出最大的数和最小的数,将最大的数和最后一个数互换,最小的数和第一个数互换。

程序如下:

#include

voidmain()

{inta[50],n,min,max,b,i;

printf("输入数据个数:

");

scanf("%d",&n);

printf("输入数据:

");

for(i=0;i

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

max=0;min=0;

for(i=1;i

{if(a[i]>a[max])

max=i;

if(a[i]

min=i;

}

b=a[0];a[0]=a[min];a[min]=b;

b=a[n-1];a[n-1]=a[max];a[max]=b;

for(i=0;i

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

}

2.从键盘输入任意个大于0的实数,存入一个数组中(输入小于等于0的数,数据输入过程结束),统计并输出其中大于等于平均值的实数个数。

程序如下:

#include

voidmain()

{intn,i,b;

floata[50],x,s=0;

cout<<"输入实数:

";

n=0;

cin>>x;

while(x>0)

{a[n]=x;

n++;

cin>>x;}

for(i=0;i

s+=a[i];

s/=n;

b=0;

for(i=0;i

{if(a[i]>=s)

b++;}

cout<<"大于等于平均值的实数个数:

"<

}

3.找出1~100之间能被7或11整除的所有整数,将这些整数放在数组中然后输出,要求一行输出10个数。

程序如下:

#include

voidmain()

{intn,i,a[50];

n=0;

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

if(i%7==0||i%11==0)

{a[n]=i;n++;}

for(i=0;i

{if(i%10==0)printf("\n");

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

}

}

4.将任意个互不相同且非0的整数组成的数列输入到数组中(输入0结束输入),然后查找某个数是否在这个数列中,若在,就输出该数在数列中的位置,若不在,就输出相关信息。

程序如下:

#include

voidmain()

{inta[50],i,x,n;

cout<<"输入数列:

";

n=0;

cin>>a[n];

while(a[n]!

=0)

{n++;

cin>>a[n];

}

cout<<"输入要查找的数:

";

cin>>x;

for(i=0;i

if(x==a[i])

{cout<

break;}

if(i==n)

cout<

}

5.查找一数是否在一个数列(由非0整数构成)中,若在,请从数列中删除这个数。

方法一:

#include

voidmain()

{inta[50],n,x,i,j;

printf("输入数列:

");

n=0;

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

while(a[n]!

=0)

{n++;

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

}

printf("输入要查的数:

");

scanf("%d",&x);

for(i=0;i

if(a[i]==x)

{for(j=i+1;j

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

n--;

i--;

}

printf("处理结果");

for(i=0;i

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

}

方法二:

#include

voidmain()

{inta[50],b[50],n,x,i,j;

printf("输入数列:

");

n=0;

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

while(a[n]!

=0)

{n++;

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

}

printf("输入要查的数:

");

scanf("%d",&x);

j=0;

for(i=0;i

if(a[i]!

=x)

{b[j]=a[i];

j++;

}

printf("处理结果");

for(i=0;i

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

}

6.将一个数组中的数循环右移,例如,数组中原来的数为:

12345,移动后变成51234。

程序如下:

#include

voidmain()

{intt[10],i,k,n;

printf("输入数据个数:

");

scanf("%d",&n);

printf("输入%d数据:

",n);

for(i=0;i

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

k=t[n-1];

for(i=n-2;i>=0;i--)

t[i+1]=t[i];

t[0]=k;

for(i=0;i

printf("%5d",t[i]);

}

7.编写程序,任意输入10个整数的数列,先将整数按从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。

程序如下:

#include

voidmain()

{inta[11],i,j,m;

printf("输入数列:

");

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

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

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

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

if(a[i]

{m=a[i];a[i]=a[j];a[j]=m;}

printf("输入要插入的数:

");

scanf("%d",&m);

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

if(m>a[i])break;

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

a[j+1]=a[j];

a[i]=m;

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

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

}

8.从任意一组正整数中找出素数,计算素数之和,并对素数按从大到小的顺序排序。

程序如下:

#include

voidmain()

{inta[50],gs,m,i,j,n,w,b,s;

n=0;s=0;

cout<<"输入一组正整数,输入0或负数结束输入操作:

";

cin>>m;

while(m>0)

{gs=0;

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

if(m%i==0)gs++;

if(gs==2)

{a[n]=m;s+=a[n];

n++;}

cin>>m;

}

for(i=0;i

{w=i;

for(j=i+1;j

if(a[w]

if(w!

=i)

{b=a[w];a[w]=a[i];a[i]=b;}

}

cout<<"素数之和:

"<

for(i=0;i

cout<

}

9.任意输入一个正整数,将其各位数字取出,然后将各位数字按从高到低的顺序排序,重新组合成一个新的整数,并输出该整数。

例如:

输入整数347,重新组合成的新整数为743。

要求:

程序能处理9位之内的任意正整数。

程序如下:

#include

voidmain()

{inta[15],m1,m2,n,i,j;

cout<<"输入一个正整数";

cin>>m1;

n=0;

while(m1!

=0)

{a[n]=m1%10;

m1=m1/10;

n++;

}

for(i=0;i

for(j=i+1;j

if(a[i]

{m1=a[i];a[i]=a[j];a[j]=m1;}

m2=0;

for(i=0;i

m2=m2*10+a[i];

cout<<"组合成的新数为:

"<

}

10.有两个矩阵,均为2行3列,求两个矩阵之和,并输出结果。

程序如下:

#include

voidmain()

{inta[2][3],b[2][3],i,j;

printf("请输入第一个矩阵:

\n");

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

for(j=0;j<3;j++)

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

printf("请输入第二个矩阵:

\n");

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

for(j=0;j<3;j++)

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

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

for(j=0;j<3;j++)

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

printf("结果:

\n");

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

{printf("\n");

for(j=0;j<3;j++)

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

}

}

11.有一个3行3列的矩阵,将其输入到数组中,并输出,再输出其转置,最后输出该矩阵的上三角部分和下三角部分。

例如,一个3X3矩阵为:

123

456

789

其转置为:

147

258

369

其上三角部分:

123

56

9

其下三角部分:

1

45

789

程序如下:

#include

voidmain()

{inta[3][3],i,j;

printf("请输入矩阵:

\n");

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

for(j=0;j<3;j++)

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

printf("原始矩阵为:

");

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

{printf("\n");

for(j=0;j<3;j++)

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

}

printf("\n其转置为:

");

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

{printf("\n");

for(j=0;j<3;j++)

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

}

printf("\n其上三角部分为:

");

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

{printf("\n");

for(j=0;j<3*i;j++)//输出空格

printf("");

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

printf("%3d",a[i][j]);//输出上三角元素

}

printf("\n其下三角部分为:

");

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

{printf("\n");

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

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

}

}

12.找出一个3行4列矩阵每行最大的数及其位置,每列最小的数及其位置。

程序如下:

#include

voidmain()

{inta[3][4],i,j,wz;

printf("请输入矩阵:

\n");

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

for(j=0;j<4;j++)

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

//寻找每行最大数及其位置

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

{wz=0;

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

if(a[i][wz]

printf("第%d行最大数:

%d,在第%d列\n",i+1,a[i][wz],wz+1);

}

//寻找每列最小数及其位置

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

{wz=0;

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

if(a[wz][i]>a[j][i])wz=j;

printf("第%d列最小数:

%d,在第%d行\n",i+1,a[wz][i],wz+1);

}

}

13.将一个3行4列的矩阵输入到数组a中,然后形成该矩阵的转置存储在数组b中,并输出结果。

程序如下:

#include

voidmain()

{inta[3][4],b[4][3],i,j;

printf("请输入矩阵:

\n");

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

for(j=0;j<4;j++)

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

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

for(j=0;j<4;j++)

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

printf("转置为:

");

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

{printf("\n");

for(j=0;j<3;j++)

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

}

}

14.打印“魔方阵”。

所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。

例如,三阶魔方阵为:

816

357

492

要求打印出由1到n2的自然数构成的魔方阵(n阶魔方阵,只考虑n为奇数的情况)。

程序如下:

#include

voidmain()

{inta[11][11],h,l,n,m;

printf("请输入魔方的阶数(奇数):

");

scanf("%d",&n);

h=1;l=n/2+1;//数据1放置的位置

a[h][l]=1;

for(m=2;m<=n*n;m++)//在数组中放置数

{if(m%n==1)h++;

else

{h--;l++;

if(h==0)h=n;

if(l==n+1)l=1;}

a[h][l]=m;

}

for(h=1;h<=n;h++)

{printf("\n");

for(l=1;l<=n;l++)

printf("%4d",a[h][l]);

}

}

15.输入一个由数字字符组成的字符串,分别统计这个字符串中字符0的个数、字符1的个数、……、字符9的个数。

程序如下:

#include

voidmain()

{chart[50];

inttj[10]={0},i;

printf("请输入数字字符组成的字串:

");

gets(t);

for(i=0;t[i]!

='\0';i++)

tj[t[i]-48]++;

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

printf("\n字符%d的个数%d",i,tj[i]);

}

16.将一个字符串中的字符按ASCII码从大到小的顺序排序。

方法一:

#include

voidmain()

{chart[50],c;

inti,j;

printf("请输入字串:

");

gets(t);

for(i=0;t[i]!

='\0';i++)

for(j=i+1;t[j]!

='\0';j++)

if(t[i]

{c=t[i];t[i]=t[j];t[j]=c;}

puts("排序结果:

");

puts(t);

}

方法二:

#include

#include

voidmain()

{chart[50],c;

inti,j,l;

printf("请输入字串:

");

gets(t);

l=strlen(t);

for(i=0;i

for(j=i+1;j

if(t[i]

{c=t[i];t[i]=t[j];t[j]=c;}

puts("排序结果:

");

puts(t);

}

17.将一个字符串中的所有ASCII码能被3整除的字符删除,然后将剩余的字符按从小到大的顺序排序后构成一个新的字符串,并输出。

程序如下:

#include

voidmain()

{chart1[50],t2[50],c;

inti,j;

printf("请输入字串:

");

gets(t1);

j=0;

for(i=0;t1[i]!

=0;i++)//t1[i]!

=0和t1[i]!

='\0'等价

if(t1[i]%3!

=0)

{t2[j]=t1[i];j++;}

t2[j]='\0';

for(i=0;t2[i]!

='\0';i++)

for(j=i+1;t2[j]!

='\0';j++)

if(t2[i]>t2[j])

{c=t2[i];t2[i]=t2[j];t2[j]=c;}

puts("排序的新字串:

");//和printf("排序的新字串:

\n");等价

puts(t2);

}

18.输入字符串1、字符串2以及插入位置f,要求在字符串1中的指定位置f处插入字符串2。

方法一:

#include

#include

voidmain()

{chart1[50],t2[50],c;

inti,w,l,j;

printf("输入字串1:

");

gets(t1);

p

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

当前位置:首页 > 求职职场 > 自我管理与提升

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

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