第5章习题解答

更新时间:2023-10-16 08:47:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第5章 数组

【习题5-1】现有一实型一维数组A[12],其各元素值在内存中排列的顺序为:1.0,15.5,9.5,-23,8.4,66.5,7.1,22.0,54.5,-34,11.3,32.5,请按下列要求编写程序求答案。

(1)数组中元素值最小的数组元素。 (2)数组中元素值最大的数组元素。

(3)数组中某数组元素值等于另外两个数组元素值之和的等式。 (4)数组中某数组元素值等于另外两个数组元素值之差的等式。 程序如下:

/*c5_1.c*/ #include void main() {

double a[12]={1.0,15.5,9.5,-23,8.4,66.5,7.1,22.0,54.5,-34,11.3,32.5}; int i,j,k; double max,min; min=a[0]; for(i=0;i<12;i++) if(min>a[i]) min=a[i]; printf(\ max=a[0]; for(i=0;i<12;i++) if(max

if(i==j||j==k||k==i) continue; if(a[i]+a[j]==a[k])

printf(\ }

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

if(i==j||j==k||k==i) continue; if(a[i]-a[j]==a[k])

printf(\ }

}

【习题5-2】现有一实型二维数组A[4][3],其各元素值在内存中排列的顺序为: 4.0,28.0,15.5,?9.5,?23.0,8.0,56.0,2.0,28.0,7.0,6.2,5.0 请按下列要求写出各题的答案。

(1)数组中元素值最小的数组元素。 (2)数组中元素值最大的数组元素。

(3)数组中某数组元素值等于另外两个数组元素值之积的等式。 (4)数组中某数组元素值等于另外两个数组元素值之商的等式。 答案:

(1)?23.0 (2)56.0 (3)(略) (4)(略)

【习题5-3】完成下列各数组的数组说明语句。

(1)定义一个有100个数组元素的整型一维数组r。 (2)定义一个有100行100列的实型二维数组s。

(3)定义一个整型三维数组t,第一维长度为3,第二维长度为4,第三维长度为5。 (4)定义一个实型四维数组q,第一维长度为6,第二维长度为5,第三维长度为4,第四维长度为3。

答案:

(1)int r[100]; (2)float s[100][100]; (3)int t[3][4][5];

(4)float q[6][5][4][3];

【习题5-4】说明下面各数组定义的含义,并指出对各数组元素所赋的值。 (1)float a[10]={3.,4.5,6.0,8.4,-32.8,3.2,56.0,4.5,2.3,1.5}; (2)int b[10]={3,5,0,12,34,7,8,9,41,88}; (3)float c[2][4]={1.,2.,3.,4.,5.,6.,7.,8.}; (4)int d[3][3]={{1,2,3},{4,5,6},{7,8,9}}; (5)int e[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 答案: (1)(略) (2)(略) (3)(略) (4)(略) (5)(略)

【习题5-5】按下列要求完成对各数组的初始化数组语句。

(1)实型一维数组A[12],其各元素值在内存中排列的顺序为:

1.0,15.5,9.5,-23.0,8.4,66.5,7.1,22.0,54.5,-34.0,11.3,32.0 (2)整型二维数组A[3][3],其各元素值在内存中排列的顺序为:

1,2,3,4,5,6,7,8,9

(3)实型三维数组A[2][3][2],其各元素值在内存中排列的顺序为:

1.0,15.5,9.5,-23,8.4,66.5,7.1,22.0,54.5,-34,11.3,32.0 答案:

float a[12]={1.0,15.5,9.5,-23.0,8.4,66.5,7.1,22.0,54.5,-34.0,11.3,32.0}; int a[3][3]={1,2,3,4,5,6,7,8,9};

float a[2][3][2]={1.0,15.5,9.5,-23,8.4,66.5,7.1,22.0,54.5,-34,11.3,32.0}; 【习题5-6】用数组定义语句和scanf语句完成5.4题中各小题相应的功能。 程序如下: /*c5_6.c*/

(略)

【习题5-7】有一整型二维数组a[10][10], 按下列要求写出下列各题C语言程序段。 (1)按行输出所有的数组元素。 (2)按列输出所有的数组元素。 (3)输出主对角线上的所有元素。 (4)输出副对角线上的所有元素。

(5)输出上三角阵(包含主对角线元素)的所有元素。 (6)输出上三角阵(包含副对角线元素)的所有元素。 (7)输出下三角阵(包含主对角线元素)的所有元素。 (8)输出下三角阵(包含副对角线元素)的所有元素。 程序如下: /*c5_7.c*/ #include void main() {

int a[10][10]; int i,j,k; for(i=0;i<10;i++) for(j=0;j<10;j++) a[i][j]=i*10+j; printf(\ for(i=0;i<10;i++) {

for(j=0;j<10;j++) printf(\ printf(\ }

printf(\ printf(\ fori=0;i<10;i++) {

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

printf(\ printf(\ }

printf(\ printf(\ for(i=0;i<10;i++) {

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

printf(\ else

printf(\ printf(\ }

printf(\ printf(\ for(i=0;i<10;i++) {

for(j=0;j<10;j++) if(i+j==10-1)

printf(\ else

printf(\ printf(\ }

printf(\ printf(\ for(i=0;i<10;i++) {

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

printf(\ else

printf(\ printf(\ }

printf(\ printf(\ for(i=0;i<10;i++) {

for(j=0;j<10;j++) if(j<10-i)

printf(\ else

printf(\ printf(\ }

printf(\ printf(\ for(i=0;i<10;i++) {

for(j=0;j<10;j++) if(i>=j)

printf(\ else

printf(\ printf(\ }

printf(\ printf(\ for(i=0;i<10;i++) {

for(j=0;j<10;j++) if(j>=9-i)

printf(\ else

printf(\ printf(\ }

printf(\}

【习题5-8】阅读、分析下列程序,并写出运行相应程序后的输出结果。

(1)#include \ void main()

{ static int a[10]={1,1,1,1,1,1,1,1,1,1}; int i,j;

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

printf(\ }

(2)#include \ void main()

{ static int a[200]; int i,j,n; for(i=0;i<200;i++) a[i]=0; n=100;

for(i=0;i

(3)#include \ void main() { int a,b=0;

static int c[10]={1,2,3,4,5,6,7,8,9,0}; for(a=0;a<10;++a)

if((c[a]%2)==0) b+=c[a]; printf(\ }

(4)#include \ void main() { int a,b=0;

static int c[10]={1,2,3,4,5,6,7,8,9,0}; for(a=0;a<10;++a) if((a%2)==0) b+=c[a]; printf(\ }

(5)#include \ main() { int a,b=0;

int c[10]={1,2,3,4,5,6,7,8,9,0}; for(a=0;a<10;++a) b+=c[a]; printf(\ }

(6)#include \

int c[10]={1,2,3,4,5,6,7,8,9,0}; void main() { int a,b=0; for( a=0;a<10;++a) if((c[a]%2)==1) b+=c[a]; printf(\ } (1) 结果: 1 2 4 8 1632 64 128 256 512 (2) 结果:199 (3) 结果:20 (4) 结果:25 (5) 结果:45 (6) 结果:25

【习题5-9】编写一个程序,完成5.1题的要求。 程序如下: /*c5_9.c*/ #include void main() {

double a[12]={1.0,15.5,9.5,-23,8.4,66.5,7.1,22.0,54.5,-34,11.3,32.5}; int i,j,k; double max,min; min=a[0]; for(i=0;i<12;i++) if(min>a[i]) min=a[i];

printf(\ max=a[0]; for(i=0;i<12;i++) if(max

if(i==j||j==k||k==i) continue; if(a[i]+a[j]==a[k])

printf(\ }

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

if(i==j||j==k||k==i) continue; if(a[i]-a[j]==a[k])

printf(\ } }

【习题5-10】编写一个程序,完成5.2题的要求。 程序如下: /*c5_10.c*/

(略)

【习题5-11】对给定的整型一维数组a[100]赋值,要求给奇数下标值的元素赋负值,偶数下标值的元素赋正值。

程序如下:

/*c5_11.c*/ #include void main() {

int a[100]; int i,j,k; for(i=0;i<100;i++) if(i%2==1) a[i]=-1; else a[i]=1; }

【习题5-12】给整型二维数组b[3][4]输入12个数据,计算并输出数组中所有正数之和、所有负数之和。

程序如下: /*c5_12a.c*/

#include void main()

{ static int b[3][4]; int i,j,sum1=0,sum2=0;

printf(\ for(i=0;i<3;i++) for(j=0;j<4;j++)

scanf(\ for(i=0;i<3;i++) for(j=0;j<4;j++)

{if(b[i][j]>0) sum1+=b[i][j]; if(b[i][j]<0) sum2+=b[i][j]; }

printf(\

/*c5-12b.c*/

#include void main()

{ int x[3][4],i,j,a=0,b=0; for(i=0;i<3;i++) for(j=0;j<4;j++)

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

for(j=0;j<4;j++) if(x[i][j]>0) a+=x[i][j]; else

b+=x[i][j];

printf(\}

【习题5-13】对稀疏数组a[20](所谓稀疏数组,即有若干数组元素值为0的数组),编写一个程序,将所有非零元素值按紧密排列形式转移到数组的前端。(要求:程序中不再开辟其它的单元作为数组元素值的缓存单元)

程序如下:

/*c5_13.c*/ #include void main() {

int a[20]={0,0,1,0,2,0,0,0,3,4,0,0,0,0,0,5,0,0,6,0}; int i,j,k; for(i=0;i<20;i++) printf(\

printf(\ for(i=1;i<20;i++) {

if(a[i]==0) continue; for(k=i-1;k>=0;k--) if(a[k]!=0) break; if(k==i-1) continue; a[k+1]=a[i]; a[i]=0; }

for(i=0;i<20;i++) printf(\ printf(\}

【习题5-14】用选择法编写一个程序,使存储在整型数组a[100]中的各元素值按升序排列存放。(要求:程序中至多允许使用一个缓存单元)

程序如下:

/*c5_14a.c*/

#include void main()

{ static int a[100]; int i,j,temp;

printf(\ for(i=0;i<100;i++) scanf(\ for(i=0;i<99;i++) for(j=i+1;j<100;j++) if(a[i]>a[j]) {

temp=a[j]; a[j]=a[i];

a[i]=temp;

}

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

printf(\ printf(\

/*c5.14b.c*/ void main()

{ int a[100],i,j,min,t; for(i=0;i<100;i++) scanf(\ for(i=0;i<99;i++) { min=i;

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

if(a[j]

t=a[i];

a[i]=a[min]; a[min]=t; }

printf(\ for(i=0;i<100;i++) printf(\}

【习题5-15】试编写一个程序,把下面的矩阵a转置成矩阵b的形式。(用两种算法完成)

?125?a???348????679?? 程序如下: /*c5_15.c*/ #include void main() {

int a[3][3]={1,2,5,3,4,8,6,7,9}; int i,j,k; for(i=0;i<3;i++) {

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

printf(\ printf(\ }

printf(\ /* method 1 for(i=0;i<3;i++) {

k=a[0][i]; a[0][i]=a[2][i]; a[2][i]=k; }

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

k=a[i][0]; a[i][0]=a[i][2]; a[i][2]=k; } */

/* method 2 */

?976?b???843????521??

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

k=a[0][i]; a[0][i]=a[2][2-i]; a[2][2-i]=k; }

k=a[1][0]; a[1][0]=a[1][2]; a[1][2]=k; for(i=0;i<3;i++) {

for(j=0;j<3;j++) printf(\ printf(\ }

printf(\}

【习题5-16】设二维数组b[5][4]中有鞍点,即b[i][j]元素值在第i行中最小,且在第j列中最大,试编写一程序找出所有的鞍点,并输出其下标值。也可能没有。

程序如下:

/*c5_16a.c*/

#include void main()

{int b[5][4],i,j,k,l,min,x,y; for(i=0;i<5;i++) for(j=0;j<4;j++)

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

{ min=b[i][0]; y=0; for(j=1;j<4;j++)

if(min>b[i][j]) {min=b[i][j];x=j;} for(k=0;k<5;k++)

if(min

printf(\ else

printf(\ } }

/*c5.16b.c*/ void main()

{ int b[5][4],i,j,min,l,k,n=0;

printf(\ for(i=0;i<5;i++) for(j=0;j<4;j++)

scanf(\

printf(\ for(i=0;i<5;i++) { for(j=0;j<4;j++)

printf(\ printf(\

}

for(i=0;i<5;i++) { min=b[i][0];n=0; for(j=1;j<4;j++) if(b[i][j]

}

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

if(min

printf(\

else

printf(\ } }

【习题5-17】按如下图案打印杨辉三角形的前10行。杨辉三角形是由二项式定理系数表组成的图型,其特点是两个腰上的数都为1,其他位置上的每一个数是它上一行相邻的两个整数之和。

1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1

. . . . . . . . . . . . . 程序如下:

/*c5_17.c*/ #include void main() {

int a[10][10]={0}; int i,j,k;

for(i=0;i<10;i++) a[i][0]=1; for(i=1;i<10;i++) for(j=1;j<=i;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<10;i++) {

for(j=0;j<10-i;j++) printf(\

for(j=0;j<=i;j++) printf(\ printf(\ } }

【习题5-18】从键盘输入一个数,然后在一个整型一维数组a[20]中,用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印“No found”。

程序如下:

/*c5_18a.c*/

#include void main()

{ int a[20],i,n=0,m=20,a; for(i=0;i<20;i++) scanf(\ scanf(\ while(n<=m) { i=(n+m)/2; if(a[i]==a)

{ printf(\ break;

}

if(a[i]a) m=i-1;

}

if(a[i]!=a) printf(\}

/*c5.18b.c*/

#include void main()

{ static int a[20]={1,2,6,24,120,720,5040,40320,4,8, 16,32,64,128,256,512,1024,2048,4096,8192}; int i,n=0,m=19,l=0,x;

printf(\ scanf(\ do

{ i=(n+m)/2; if(a[i]==x) { l=1;

printf(\ break;

}

if(a[i]x) m=i-1;

}while(n!=m&&a[i]!=x);

if(l==0) printf(\

【习题5-19】编写一个程序,求一个二维矩阵的转置矩阵,即将原矩阵行列互换的结果。 程序如下:

/*c5_19.c*/ #include #define N 7 void main() {

int a[N][N]; int i,j,k; for(i=0;i

for(j=0;j

printf(\ printf(\ }

printf(\ for(i=0;i

k=a[i][j]; a[i][j]=a[j][i]; a[j][i]=k; }

for(i=0;i

for(j=0;j

printf(\ printf(\ }

printf(\ }

【习题5-20】说明下面各数组定义的含义,并指出对各数组元素所赋的值。 (1)static char flag[4]={'T', 'R', 'U', 'E'}; (2)static char flag[ ]={\

(3)static char a[3][7]={\程序如下: /*c5_20.c*/

(略)

【习题5-21】输入一串字符,分别统计其中数字0,1,2,?,9和各字母出现的次数,

本文来源:https://www.bwwdw.com/article/fgdf.html

Top