实验5数组习题及答案.docx

上传人:b****2 文档编号:24129703 上传时间:2023-05-24 格式:DOCX 页数:16 大小:45.84KB
下载 相关 举报
实验5数组习题及答案.docx_第1页
第1页 / 共16页
实验5数组习题及答案.docx_第2页
第2页 / 共16页
实验5数组习题及答案.docx_第3页
第3页 / 共16页
实验5数组习题及答案.docx_第4页
第4页 / 共16页
实验5数组习题及答案.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

实验5数组习题及答案.docx

《实验5数组习题及答案.docx》由会员分享,可在线阅读,更多相关《实验5数组习题及答案.docx(16页珍藏版)》请在冰豆网上搜索。

实验5数组习题及答案.docx

实验5数组习题及答案

实验5数组

班级:

学号:

日期:

一、实验目的

(1)掌握一维数组和二维数组的定义、赋值和输入输出方法;

(2)掌握字符数组和字符串函数的使用;

(3)掌握与数组有关的算法(特别是排序算法)。

二、实验内容

1.阅读下面程序,写出程序运行结果,并且上机进行验证。

(1)#include"stdio.h"

voidmain()

{

inti,n[4]={0,0,0,0};

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

{

if(i==3)break;

n[i]=n[i-1]+1;

}

printf("n[i-1]=%dn[i]=%d\n",n[i-1],n[i]);

}

(2)#include"stdio.h"

voidmain()

{

charch[]={'0','1','2','3','4','5','6','7','8','9'};

inti=0,m=2,r,x=42;charb[80];

while(x)

{

r=x%m;x/=m;

b[i++]=ch[r];

}

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

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

printf("\n");

}

(3)#include"stdio.h"

voidmain()

{

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

inti,j,s1=0,s2=0;

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

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

{

if(i==j)s1=s1+a[i][j];

if(i+j==2)s2=s2+a[i][j];

}

printf("s1=%ds2=%d",s1,s2);

}

(4)#include"stdio.h"

voidmain()

{

intr[5]={1,2,3,4,5};

inti,j,a[5][5];

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

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

a[i][j]=r[j-i];

for(j=0;j

a[i][j]=r[i-j];

}

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

{

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

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

printf("\n");

}

}

2.程序填空(根据题意在空白处填入适当的内容,使程序变得完整。

并上机进行调试验证)

(1)程序说明:

下列程序完成的是插入排序功能:

数组a中存放一个递增数列,输入一个整数x,将它插入到数组中,使之仍为一个有序数列。

#include"stdio.h"

#defineN10

voidmain()

{

inta[11]={1,10,20,30,40,50,60,70,80,90},x,i,p;

scanf("%d",&x);

for(i=0,p=N;i

if(x

{

p=i;

_break_;

}

for(i=N-1;i>=p;_i--__)

a[i+1]=a[i];

_a[p]=x___;

printf("%d",x);

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

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

printf("\n");

}

(2)程序说明:

下面程序完成的是折半查找。

A数组中存放的是n个由大到小已经排好序的数列,从这n个数中查找x的值是否存在。

其基本思想是:

在查找范围里,将x与处于中间位置上的数比较,如果相等,则查找成功,如果小于该元素,则在较小的一半元素里再进行折半查找;如果x大于该元素,则在较大的一半元素里再进行折半查找。

变量top,bottom,mid分别指向查找范围的顶部、底部和中间位置。

#include"stdio.h"

#definen10

main()

{

inta[n],find;

intx,i,top,bottom,mid;

printf("inputthesortednumbers:

\n");

for(i=0;i

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

printf("inputthenumbertofind:

\n");

scanf("%d",&x);

find=0;top=0;bottom=n-1;

if(x<=a[0]&&top<=bottom)

while(!

find&&top<=bottom)

{

mid=mid=(bottom+top)/2;

if(x==a[mid])

{

find=1;

printf("x=%dposition=%d\n",x,mid);

}

elseif(x>a[mid])

bottom=mid-1;

else

top=mid+1;

}

if(find==0)printf("thenumber%disnotinthetable",x);

}

(3)程序说明:

下面程序分别输出方阵中主对角线、副对角线上元素的和suml和sum2(主对角线为从矩阵的左上角至右下角的连线,副对角线为从矩阵的右上角至左下角的连线).

#include"stdio.h"

#defineSIZE5

voidmain()

{

inta[SIZE][SIZE],m,n,sum1,sum2;

for(m=0;m

for(n=0;n

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

sum1=sum2=__0__;

for(m=0;m

{

sum1=sum1+a[m][m];

sum2=sum2+a[m][SIZE-1-m];

}

printf("sum1=%dsum2=%d\n",sum1,sum2);

}

(4)程序说明:

下面程序打印出如下所示的杨辉三角行(打印10行)。

1

11

121

1331

14641

15101051

…….

#include"stdio.h"

voidmain()

{

inti,j,a[10][10]={{1},{1,1}};

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

{

a[i][0]=1;_a[i][i]=1;

for(j=0;j

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

}

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

{

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

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

printf("\n");

}

}

3.程序设计(根据题意编写程序并上机进行调试)。

(1)编写程序完成如下功能:

输入10个数存入一维数组,然后再按逆序重新存放后输出。

#include

voidmain()

{

inta[10],i,temp;

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

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

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

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

printf("\n");

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

{

temp=a[i];

a[i]=a[9-i];

a[9-i]=temp;

}

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

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

printf("\n");

}

(2)编写程序完成如下功能:

从键盘输入两个字符串ch2、ch1,然后将字符串ch2连接到字符串ch1的后面,并输出连接后的字符串。

#include

#include

voidmain()

{

charch1[20],ch2[10];

inti,j;

scanf("%s",ch1);

scanf("%s",ch2);

j=strlen(ch1);

for(i=0;i

ch1[j]=ch2[i];

ch1[j]='\0';

printf("%s\n",ch1);

}

(3)编写程序完成如下功能:

现有两个已按升序排好的数组,将它们合并为一个升序排序的数组(归并排序)。

算法:

两个数组合并时,可为每个数组各安排一个指针,从第一个元素开始依次比较两数组对应元素,小的取下来顺序放入新的数组,取下所指元素的指针后移,再比较,依此类推,直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。

编程并上机调试运行。

(1)用选择法对10个整数排序。

10个整数用scanf函数输入。

#include

voidmain()

{

inti,j,min,temp,a[11];

printf("enterdata:

\n");

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

{

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

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

}

printf("Theorginalnumbers:

\n");

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

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

printf("\n");

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

{

min=i;

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

if(a[min]>a[j])min=j;

temp=a[i];

a[i]=a[min];

a[min]=temp;

}

printf("\nThesortednumbers:

\n");

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

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

printf("\n");

}

(2)有15个数存放在一个数组中,输入一个数,要求用对半查找法找出该数是数组中第几个元素的值。

如果该数不在数组中,则输入“无此数”。

以15个数用赋初值的方法在程序中给出。

要找的数用scanf函数输入。

#include

voidmain()

{

inti,number,top,bott,mid,loca,a[15],flag=1,sign;

charc;

printf("enterdata:

\n");

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

i=1;

while(i<15)

{

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

if(a[i]>=a[i-1])

i++;

else

printf("enterthisdataagain:

\n");

}

printf("\n");

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

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

printf("\n");

while(flag)

{

printf("inputnumbertolookfor:

");

scanf("%d",&number);

sign=0;

top=0;

bott=14;

if((numbera[14]))

loca=-1;

while((!

sign)&&(top<=bott))

{

mid=(bott+top)/2;

if(number==a[mid])

{

loca=mid;

printf("Hasfound%d,itspostionis%d\n",number,loca+1);

sign=1;

}

elseif(number

bott=mid-1;

else

top=mid+1;

}

if(!

sign||loca==-1)

printf("cannotfound%d.\n",number);

printf("continueornot(Y/N)?

");

scanf("%c",&c);

if(c!

='N'||c!

='n'||c!

='Y'||c!

='y')

scanf("%c",&c);

if(c=='N'||c=='n')

flag=0;

}

}

(3)将两个字符串连接起来,不要用strcat函数。

#include

voidmain()

{

chars1[80],s2[40];

inti=0,j=0;

printf("\ninputstring1:

");

gets(s1);

printf("inputstring2:

");

gets(s2);

while(s1[i]!

='\0')

i++;

while(s2[j]!

='\0')

s1[i++]=s2[j++];

s1[i]='\0';

printf("Thenewstringis:

%s",s1);

}

(4)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。

应至少准备两组测试数据:

二维数组有鞍点,例如:

二维数组没有鞍点,例如:

用scanf函数从键盘输入数组各元素的值,检查结果是否正确。

题目并未指定二维数组的行数和列数,程序应该能处理任意行数和列数的数组,因此,从理论上说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备典型数据即可。

#include

voidmain()

{

inta[4][5],i,j,k,max,maxj,flag;

printf("pleaseinputmatria:

\n");

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

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

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

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

{

max=a[i][0];

maxj=0;

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

{

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

{

max=a[i][j];

maxj=j;

}

}

flag=1;

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

if(max>a[k][maxj])

{

flag=0;

continue;

}

if(flag)

{

printf("a[%d][%d]=%d\n",i,maxj,max);

break;

}

}

if(!

flag)

printf("itisnotexist!

\n");

}

如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。

请修改程序以实现之。

三、预习内容

预习教材第6章。

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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