当前位置:文档之家› 数组练习题及答案

数组练习题及答案

数组练习题及答案
数组练习题及答案

第五章数组练习题及答案

一、选择题

1、判断字符串a和b是否相等,应当使用()

A、if(a==b)

B、if(a=b)

C、if(strcpy(a,b))

D、

if(strcmp(a,b))

2、以下正确的定义语句是()

A、int a[1][4]={1,2,3,4,5};

B、float x[3][]={{1},{2},{3}};

C、long b[2][3]={{1},{1,2},{1,2,3}};

D、double y[][3]={0};

3、以下各组选项中,均能正确定义二维实型数组a的选项是()

A、float a[3][4]; float a[ ][4]; float a[3][ ]={{1},{0}};

B、float a(3,4); float a[3][4]; float a[ ][ ]={{0},{0}};

C、float a[3][4]; static float a[ ][4]={{0},{0}}; auto float

a[ ][4]={{0},{0},{0}};

D、float a[3][4]; float a[3][ ]; float a[ ][4];

4、下面程序的运行结果是()

1—5 DDCBA 6—10 BDABB 11—15 CCCBC 16—20 DDCBB 21—25 BBAAA 26—30 DBDDB

#include ""

main()

{ char str[]="SSSWLIA",c;

int k;

for(k=2;((c=str[k])!='\0');k++)

{ switch(c)

{case 'I':++k;break;

case 'L':continue;

default:putchar(c);continue;

}

putchar('*');

}

}

A、SSW*

B、SW*

C、SW*A

D、SW

5、下面程序段是输出两个字符串中对应相等的字符。横线处应填入()

char x[]="programming";

char y[]="Fortran";

int i=0;

while(x[i]!='\0'&&y[i]!='\0')

if(x[i]==y[i]) printf("%c",《1》);

else i++;

A、x[i++]

B、y[++i]

C、x[i]

D、y[i]

6、有下面的程序段,则()

char a[3],b[]="china";

a=b;

printf("%s",a);

A、运行后将输出China

B、运行后将输出Ch

C、运行后将输出Chi

D、编译出错

7、下面程序的运行结果是()

main()

{ char ch[7]={"12ab56"};

int i,s=0;

for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)

s=10*s+ch[i]-'0';

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

}

A、1

B、1256

C、12ab56

D、1

2

5

6

8、定义如下变量和数组:则下面语句的输出结果是()

int k;

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

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

printf("%d",a[k][2-k]);

A、3 5 7

B、3 6 9

C、1 5 9

D、1 4 7

9、下面程序段的运行结果是()

char c[5]={'a','b','\0','c','\0'};

printf("%s",c);

A、'a''b'

B、ab

C、ab c

D、abc

10、若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是()

A、2

B、3

C、4

D、无确定值

11、下面程序的运行结果是()

main()

{ int a[6],i;

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

{ a[i]=9*(i-2+4*(i>3))%5;

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

}

}

A、-4 0 4 0 4

B、-4 0 4 0 3

C、-4 0 4 4 3

D、-4 0 4 4 0

12、下面程序的运行结果是()

main()

{int a[6][6],i,j;

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

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

a[i][j]=(i/j)*(j/i);

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

{ for(j=1;j<6;j++)

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

printf("\n");

}

}

A、1 1 1 1 1

B、0 0 0 0 1

C、1 0 0 0 0

D、1 0 0 0 1

1 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 1 1 1 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1

13、下述对C语言字符数组的描述中错误的是()

A、字符数组可以存放字符串。

B、字符数组的字符串可以整体输入、输出。

C、可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值。

D、不可以用关系运算符对字符数组中的字符串进行比较。

14、判断字符串s1是否大于字符串s2,应当使用()

A、if(s1>s2)

B、if(strcmp(s1,s2))

C、if(strcmp(s2,s1)>0)

D、if(strcmp(s1,s2)>0)

15、下面程序(每行程序前面的数字表示行号):()

1 main()

2 {

3 int a[3]={3*0};

4 int i;

5 for(i=0;i<3;i++) scanf("%d",&a[i]);

6 for(i=1;i<3;i++) a[0]=a[0]+a[i];

7 printf("%d\n",a[0]);

8 }

A、第3行有错误

B、第7行有错误

C、第5行有错误

D、没有错误

16、下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。横线处应填入()

main()

{char s[80],c1,c2=' ';

int i=0,num=0;

gets(s);

while(s[i]!='\0')

{c1=s[i];

if(i==0) c2=' ';

else c2=s[i-1];

if(《1》) num++;

i++;

}

printf("%d",num);

}

A、c1==' '&&c2==' '

B、c1!=' '&&c2==' '

C、c1==' '&&c2!=' '

D、c1!=' '&&c2!=' '

17、有字符数组a[80]和b[80],则正确的输出语句是()

A、puts(a,b);

B、printf("%s,%s",a[],b[]);

C、putchar(a,b);

D、puts(a),puts(b);

18、下面描述正确的是()

A、两个字符串所包含的字符个数相同时,才能比较字符串。

B、字符个数多的字符串比字符个数少的字符串大.

C、字符串“STOP ”与“STOP”相等。

D、字符串“That”小于字符串“The”

19、有两个字符数组a、b,则以下正确的输入语句是()

A、gets(a,b);

B、scanf("%s%s",a,b);

C、scanf("%s%s",&a,&b);

D、gets("a"),gets("b");

20、以下不正确的定义语句是()

A、double x[5]={,,,,};

B、int y[5]=}{0,1,2,3,4,5,6}

C、char c1[]={'1','2','3','4','5'};

D、char c2[]={'\x10','\xa','\x8'};

21、调用函数时,若实参是一个数组名,则向函数对应的形参传送的是()

A、数组的长度

B、数组的首地址

C、数组第一个元素的值

D、整个数组元素的值

22、下面程序段的运行结果是()

char s[6]; s=”abcd”; printf(“\”%s\”\n”,s);

A、“abcd”

B、”abcd “

C、\”abcd\”\n

D、编译出错

23、(多项选择)以下不能对二维数组a进行正确初始化的语句是()

A、int a[2][]={{1,0,1},{5,2,3}};

B、.int

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

C、int a[2][4]={{1,2,3},{4,5},{6}};

D、int a[][3]={{1,0,1},{},{1,1}};

24、(多项选择)若有说明:int a[3][4];则对a数组元素不能正确引用是()

[2][4] B、a[1,3] C、a[1+1][0] D、a(2)(1)

25、(多项选择)若有说明“static int a[3][4]={0};”则下面正确的叙述是()

A、只有元素:a[0][0]可得到初值0

B、此说明语句不正确

C、数组a中各元素都可得到初值,但其值不一定为0

D、数组a中每个元素均可得到初值0

26、以下对一维整型数组的正确说明是()

A、int a(1);

B、int n=10,a[n];

C、int n;scanf(“%d”,&n);int a[n];

D、#define SIZE 10 int a[SIZE];

27、有以下程序,其输出结果是()

void swap1(int c[])

{ int t;

t=c[0];c[0]=c[1];c[1]=t;

}

void swap2(int c0,int c1)

{ int t;

t=c0;c0=c1;c1=t;

}

main( )

{ int a[2]={3,5},b[2]={3,5};

swap1(a); swap2(b[0],b[1]);

printf(“%d %d %d %d\n”,a[0],a[1],b[0],b[1]);

}

A、5 3 5 3

B、5 3 3 5

C、3 5 3 5

D、3

5 5 3

28、以下程序执行后的输出结果是()

int f(int b[][4])

{ int i,j,s=0;

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

{ i=j;

if(i>2) i=3-j;

s+=b[i][j];

}

return s;

}

main( )

{int

[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}}; printf(“%d\

n”,f(a));}}

A、12

B、11

C、18

D、16

29、执行下列程序后输出的结果是()

int a[3][3]={{1},{2},{3}};

int b[3][3]={1,2,3};

main()

{printf(″﹪d \ n″,a[1][0] + b[0][0]);}

A、0

B、1

C、2

D、3

30、以下程序运行后,输出结果是()

main()

{ int y=18,i=O,j,a[8];

do { a[i]=y%2;i++; y=y/2; }

while(y>=1); for(j=i-1;j>=0;j--)

printf(“%d”,a[j]);printf(“\n”); }

A、1000

B、10010

C、00110

D、10100

二、填空题

1、设数组a中的元素均为正整数,以下程序是求a中偶数的个数和偶数的平均值。请填空。(填空时数组元素请用数组表示方法)

main()

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

int k,s,i; float ave;

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

{if(a[i]%2!=0) 《1》;

s+=《2》; k++;

}

if(k!=0) { ave=s/k; printf("%d,%f",k,ave); }

}

2、下面程序的运行结果是()

main()

{int num_list[]={6,7,8,9};

int k,j,b,u=0,m=4,w;

w=m-1;

while(u<=w)

{j=num_list[u];

k=2;b=1;

while(k<=j/2&&b) b=j%++k;

if(b) printf("%d",num_list[u++]);

else {num_list[u]=num_list[w]; num_list[w--]=j; }

}

}

3、下面程序的功能是将字符数组a[6]={'a','b','c','d','e','f'}变为a[6]={'f','a','b','c','d','e'}。请填空。(注:填空时数组元素请用数组表示方法)

main()

{char t,a[6]={'a','b','c','d','e','f'};

int i;

《1》;

for(《2》;i>0;i--) a[i]=a[i-1];

a[0]=t;

for(i=0;i<=5;i++) printf("%c",a[i]);

}

4、下面程序的运行结果是()

main()

{int i;

char a[]="Time",b[]="Tom";

for(i=0;a[i]!='\0'&&b[i]!='\0';i++)

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

if(a[i]>='a'&&a[i]<='z') printf("%c",a[i]-32); else printf("%c",a[i]+32);

else printf("*");

}

5、下面程序的运行结果是()

main()

{int i=1;n=3,j,k=3;

int a[5]={1,4,5};

while(i<=n&&k>a[i]) i++;

for(j=n-1;j>=i;j--) a[j+1]=a[j];

a[i]=k;

for(i=0;i<=n;i++) printf("%2d,",a[i]);

}

6、当从键盘输入18并回车后,下面程序的运行结果是()

main()

{int x,y,i,a[8],j,u,v;

scanf("%d",&x);

y=x;i=0;

do

{u=y/2; a[i]=y%2; i++;y=u;

}while(y>=1);

for(j=i-1;j>=0;j--) printf("%d",a[j]);

}

7、下面程序的运行结果是()

main()

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

int k,s,i;

float ave;

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

{if(a[i]%2==0)continue;

s+=a[i]; k++;}

if(k! =0) {ave=s/k; printf("The number is:%d,The average is:%f\n",k,ave); }

}

8、若有以下输入(表示回车),则下面程序的运行结果是()

3 1 2 3 2 2 2 1 1 3 0

main()

main()

{int a[4],x,i;

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

a[i]=0;

scanf("%d",&x);

while(x>0)

{a[x]+=1;scanf("%d",&x); }

for(i=1;i<=3;i++) printf("a[%d]=%d,",i,a[i]);

}

9、当运行以下程序时,从键盘输入:

BOOK

CUT

GAME

PAGE(表示回车),则下面程序的运行结果是()

#include ""

#include ""

main()

{int i;

char str[10],temp[10]="Control";

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

{gets(str);

if(strcmp(temp,str)<0) strcpy(temp,str);

}

puts(temp);

}

10、当运行以下程序时,从键盘输入

girl

boy(表示回车),则下面程序的运行结果是()

#include ""

#include ""

main()

{char a[2][80],t;

int i,j,m,n,le,max;

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

t=a[0][0];

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

{le=strlen(a[i]);

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

if(a[i][j]>t) {max=a[i][j]; m=i; n=j; }

}

printf("%c %d %d\n",max,m,n);

}

11、下面程序的功能是在三个字符串中找出最小的。请填空(注:填空时请用数组元素表示方法)。

#include ""

#include ""

main()

{char s[20],str[3][20];

int i;

for(i=0;i<3;i++) gets(str[i]);

strcpy(s, (《1》)str[0]:str[1]);

if(strcmp(str[2],s)<0) strcpy(s,str[2]);

printf("%s\n",《2》);

}

12、下面程序段的运行结果是()

char ch[]="600";

int a,s=0;

for(a=0;ch[a]>='0'&&ch[a]<='9';a++) s=10*s+ch[a]-'0'; printf("%d",s);

13、下面程序的运行结果是()

main()

{ int a[3][3],i,j;

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

for(j=1;j<3;j++) a[i][j]=(i/j)*(j/i);

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

for(j=1;j<3;j++) printf("%d,",a[i][j]));

}

14、下面程序段将输出computer,请填空。

char c[ ]="It's a computer";

for(i=0;i<=《1》 ;i++)

printf("%c",c[i《2》]);

15、下面程序的运行结果是()

main()

{ int a[9]={0,6,12,18,42,44,52,67,94};

int x=52,i,n=9,m;

i=n/2+1; m=n/2;

while(m!=0)

{if(x

else if(x>a[i]) {i=i+m/2+1;m=m/2;}

else break;

}

printf("%d",i);

}

三、判断题

1、有以下说明语句:int a[10]={6,7,8,9,10};则将5个初值依次赋给a[1]至a[5]。()

2、若有说明:int a[][4]={0,0};则只有元素a[0][0]和a[0][1]可得到初值0。()

3、int a[]={0};是对一维数组a进行正确初始化的语句。()

4、有以下语句是正确的。char s[10]; s="China";()

5、若有说明:int a[3][4]={0};则数组a中每个元素均可得到初值0。()

6、float a[3,4];是对二维数组a的正确定义。()

7、在C语言中,引用数组元素时,其数组下标的数据类型允许是整型常量或整型表达式。()

8、以下是对一维整型数组a的正确定义:int n; scanf("%d",&n); int a[n]; ()

9、若有定义:int a[10];则a[10]是对a数组元素的正确引用。()

10、若有以下定义:static int a[3][4];则数组a中各元素不能得到确定的值。()

11、int a[][3]={{1,2},{3}};是能对二维数组a进行正确的初始化的语句。()

12、有以下定义和语句:char s1[10]="China"; printf("%d",strlen(s1));输出结果为5。()

四、程序填空

1、将一个数列头尾颠倒。设该数列为1,3,5,7,9,11,13,15,17,19。要求19,17,15,13,11,9,7,5,3,1次序存放并输出。要求写一函数实现对包含任意个数据的颠倒处理。

void f2(char a[],int n)

{int i,t;

for(《1》;i

{ t=a[i]; a[i]=a[n-i]; a[n-i]=t; }

}

2、编写串连接函数strcat。(注:填空请用数组表示方法)

void strcat(char s1[],char s2[])

{int i,j;

for(i=0;《1》;i++);

for(j=0;《2》;j++) s1[i+j]=s2[j];

s1[i+j]=《3》

}

3、下面程序用“两路合并法”把两个已按升序排列的数组合并成一个升序数组。请填空。(注:填空请用数组表示方法)

main()

{int a[3]={5,9,19};

int b[5]={12,24,26,37,48};

int c[10],i=0,j=0,k=0;

while(i<3&&j<5)

if(a[i]>b[j]) {《1》;k++;j++;}

else{《2》;k++;i++;}

while(i<3) {《3》;i++;k++;}

while(j<5) {《4》;k++;j++;}

}

4、用冒泡法进行排序函数如下,请填空。

void bubble(int a[ ],int n)

{int i,j,t,temp;

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

{t=n《2》;

for(j=0;j<=t-1;j++)

if(a[j]>a[j+1]) {temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; }

}

}

5、下面程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把二者对调,然后输出调整后的5个数。请填空。

main()

{int a[5],max,min,i,j,k;

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

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

《1》a[0];

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

if(a[i]

《3》a[0];

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

if(a[i]>max){max=a[i];《4》;}

a[k]=max;a[j]=min;

printf("\nThe position of min is :%d\n",k);

printf("The position of max is :%d\n",j);

for(i=0;i<5;i++) printf("%5d",a[i]);

}

6、有三行文字,找出其中共有多少个空格、多少个单词。规定单词间以一个或多个空格相隔。如果一个单词恰好在行末结束,则下一行开头应有空格。句号或逗号后面

亦应有空格。(注:填空请用数组表示方法)

main()

{char a[3][80];

int i,j,wd=0,bk=0,《1》;

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

for(j=0;j<80;j++) scanf("%c",&a[i][j]);

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

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

{ if((a[i][j]>='a'&&a[i][j]<='z')||(a[i][j]>='A'&&a[i][j]<='Z')&&(《2》))

{wd=wd+1;flag=1;}

if(《3》) {bk=bk+1;flag=0;}

}

}

7、删除一个字符串中的第n个字符。(注:填空请用数组表示方法)

void del_str(char a[],int n)

{《1》;

}

8、下面程序可求出矩阵a的两条对角线上的元素之和,请填空。

main()

{int a[4][4]={1,3,6,7,9,11,14,15,0,19,13,2,5,8,12,21};

int sum1=0,sum2=0,i,j;

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

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

if(i《1》) sum1=sum1+a[i][j];

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

for(《2》;j>=0;j--)

if(i+j==《3》) sum2=sum2+a[i][j];

printf("%d,%d",sum1,sum2);

}

9、下面程序的功能是检查一个二维数组是否对称,(即:对所有i和j都有

a[i][j]=a[j][i])。请填空。

main()

{int a[4][4],i,j,found=0;

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

for(j=0;j<4;j++) scanf("%d",&a[i][j]);

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

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

if(a[i][j]《1》) {《2》;break;}

if(found==1) printf("Yes");

else printf("No")

}

10、设计一个函数,有一个数组有n个数据,已按由小到大排序好,要求输入一个数,把它插入到原有数列中,而且仍然保持有序。

void f3(char a[],int n,int x)

{int i=0,j,flag=0;

while((i

{if(a[i]>x) 《1》;

i++;

}

if(flag==1) for(j=《2》;j<=《3》;j--) a[j+1]=a[j];

else a[n]=x;

}

11、下面函数是用折半查找方法在数组a中查找x。

void binary_search(int a[],int n,int x)

{int mid,top,bot,i,find;

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

do

{mid=(top+bot)/2;

if(x==a[mid]) 《1》;

else if(x

else if(x>a[mid]) 《3》=mid+1;

}while((top<=bot)&&(find==0));

if(find==1) printf("been found");

else printf("not been found");

}

12、下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中,请填空。

main()

{int a[2][3]={{1,2,3},{4,5,6}}, b[3][2],i,j;

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

for(j=0;j<=2;j++)《1》;

for(i=0;i

{ for(j=0;j

printf(“\n”);

}

14、有n个串,要求按字母先后顺序排列,并按序输出。(注:填空请用数组表示方法)

main()

{char c[10][80];

int n,i,j,p;

scanf("%d",&n);

for(i=0;i

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

{《2》;

for(j=i《3》;j

if(《4》>0) p=j;

if(p!=i)

{strcpy(t,c[p]);

strcpy(c[p],c[i]);

strcpy(c[i],t);

}

}

for(i=0;i

}

五、综合应用

1、插入法:有n个数,已按由小到大顺序排列好,要求输入一个数据,把它插入到原有数列中,而仍然保持有序。

void f(int a[ ],int n,int x)

{int I,j;

while(a[i]<=x && i

i++;

If(a[i]>x)

{for(j=n-1;j>=I;j--)

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

a[i]=x;

}

else

a[i]=x;

}

改写:

void f(int a[ ],int n,int x)

{int I,j;

while(a[i]<=x && i

i++;

for(j=n-1;j>=I;j--)

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

a[i]=x;

}

2、插入法:下面程序的运行结果是()。main()

{ int I=0,n=3,j,k=3;

int a[5]={1,4,5};

while(I<=n&&k>a[I]) I++;

for(j=n-1;j>=I;j--)

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

a[i]=k;

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

printf(“%3d”,a[i]);

}

3、插入法:若有以下程序段:

…………..

int a[]={4,0,2,3,1},I,j,t;

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

{t=a[i];j=I-1;

while(j>=0&&t

{a[j+1]=a[j];j--;}

a[j+1]=t;

}

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

printf(“%d ”,a[i]);

…………

则该程序段的输出结果是()。

4、下面程序用“两路合并法”把两个已按升序排列的数组合并成一个升序数组。请填空。

main()

{ int a[3]={5,9,19};

int b[5]={12,24,26,37,48};

int c[10],I=0,j=0,k=0;

while(I<3&&j<5)

if(__________)

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

else

{c[k]=a[i];k++;I++;}

while(________)

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

while(________)

{ c[k]=a[i];k++;I++;}

for(I=0;I

printf(“%3d”,c[i]);

}

5、下面程序用“顺序查找法”查找数组a中是否存在某一关键字。请填空。

main()

{int a[8]={25,57,48,37,12,92,86,33};

int I,x;

sca nf(“%d”,&x);

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

if(x==a[I])

{printf(“Found! The index is :%d\n”,--i);____________;}

if(____________)

printf(“Can’t found!”);

}

6、要求写一函数,实现对包含任意个数据的数列实现头尾颠倒。

void f(int a[ ],int n)

{int I,t;

for(I=0;I

{

t=a[i];a[i]=a[n-i];a[n-i]=t;

}

}

7、下面程序的运行结果是()。

main()

{int a[10]={1,2,2,3,4,3,4,5,1,5};

int n=0,I,j,c,k;

for(I=0;I<10-n;I++)

{c=a[i];

for(j=I+1;j<10-n;j++)

if(a[j]==c)

{for(k=j;k<10-n;k++)

a[k]=a[k+1];

n++;

}

}

for(I=0;I<10-n;I++)

printf(“%d”,a[i]);

}

8、当从键盘输入18并回车后,下面程序的运行结果是()。

main()

{

int x,y,I,a[8],j,u,v;

scanf(“%d”,&x);

y=x;I=0;

do

{ u=y/2;

a[i]=y%2;

I++;y=u;

}while(y>=1);

for(j=I-1;j>=0;j--)

printf(“%d”,a[j]);

}

9、有17个人围成一圈,编号为0—16,从第0号的人开始从1报数,凡报到3的倍数离开圈子,然后再数下去,直到最后只剩下一个人为止,问此人原来的位置是多少号。

main()

{int a[17],I,t=0,s=0;

for(I=0;I<17;I++)

a[i]=1;

while(t<=16)

{ for(I=0;I<17;I++)

if(a[i]==0) {s=s+1;

if(s%3==0) {a[i]=0;t=t+1;}

}

}

for(I=0;I<17;I++)

if(a[i]==1) printf(“%d”,i);

}

10、将一个二维数行、列互换后输出。

Void f(int a[ ],int n,int m ,int b[ ])

{int I,j;

for(I=0;I

for(j=0;j

b[j*n+i]= a[I*m+j];

for(j=0;j

{

c语言复习题(有答案)●

思考题 不仅要会做这些题,更重要的是要掌握其相关知识点一、一般填空题 1-1、调用fopen函数打开一文本文件,在“打开模式”这一项中,为输出(写)而打开需填入【1】. 1-2、调用fopen函数打开一文本文件,在“打开模式”这一项中,为追加而打开需填入【1】. 1-3、fopen函数的原形在头文件【1】中. 1-4、getchar函数的原形在头文件【1】中. 1-5、sqrt函数的原形在头文件【1】中. 1-6、如果函数不要求带回值,可用【1】来定义函数返回值为空. 答案:w或w+;a或a+;stdio.h ; stdio.h ; math.h ;void . 2-1、字符串“\1011234\\at”的长度(字符数)是【1】. 2-2、字符串“abc\103\\bcd”的长度(字符数)是【1】. 2-3、字符串“1\\t\x43\abx44”的长度(字符数)是【1】. 2-4、“a“在内存中占【1】个字节. 2-5、‘a’在内存中占【1】个字节. 2-6、“\71“在内存中占【1】个字节. 2-7、一维数组下标的最小值是【1】;数组char a[]=“china” ;在内存应占【1】个字节。 答案:8; 8; 9; 2;1;2 ;0;6. 3-1、设x=(5>1)+2, x的植为【1】. 3-2、表达式‘B’+15+‘\x41’+011+0x10的值是【1】. 3-3、表达式‘b’+5+‘\x42’+011+0x10的值是【1】. 答案:3;171;194; 4-1、假设所有变量都为整型,表达式(a=2,b=5,a>b?a++:b++,a+b)的值是【1】. 4-2、if(!a)中的表达式!a等价于【1】. 4_3、已知a=1,b=2,c=3,执行if(a>b>c) b=a;else b=c;a=4;b=8;后,b的值是【1】. 答案:8;a==0;8; 5-1、若所用变量都已定义,下列程序段的执行结果是【1】. for(i=1;i<=5;i++);printf(“OK\n”); 5-2、执行语句char s[3]=”ab”,*p;p=s;后,*(p+2)的值是【1】. 5-3、若有以下定义和语句:int a[4]={0,1,2,3},*p; p=&a[2]; ,则*--p的值是【1】. 5-4、下列程序的输出结果是【1】,main(){int a=011;printf(“%d\n”,++a);} 答案:OK;’\0’;1;10 6-1、若宏定义为:#define y(x) 2+x, 则表达式a=3*y(3)的值为【1】. 6-2、若宏定义为:#define y(x) 2+x, 则表达式a=4*y(2)的值为【1】. 6-3、若宏定义为:#define y(x) 2/x, 则表达式a=4+3*y(3)的值为【1】. 答案:9;10;6 . 二、单项选择题 1-1、若以"a+"方式打开一个已存在的文件,则以下叙述正确的是()。 A:文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作 B:文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作 C:文件打开时,原有文件内容被删除,只可作写操作 D:以上各种说法皆不正确 1-2、若执行fopen函数时发生错误,则函数的返回值是()。

数组和广义表习题

一、填空题 1.通常采用___________存储结构来存放数组。对二维数组可有两种存储方法:一种是以___________为主序的存储方式,另一种是以___________为主序的存储方式。 2. 用一维数组B与列优先存放带状矩阵A中的非零元素A[i,j] (1≤i≤n,i-2≤j≤i+2),B 中的第8个元素是A 中的第_ _行,第_ _列的元素。 3.设n行n列的下三角矩阵A已压缩到一维数组B[1..n*(n+1)/2]中,若按行为主序存储,则A[i,j]对应的B中存储位置为_______。 4. 所谓稀疏矩阵指的是_ 。 5. 广义表简称表,是由零个或多个原子或子表组成的有限序列,原子与表的差别仅在于____ 。为了区分原子和表,一般用 ____表示表,用 _____表示原子。一个表的长度是指 __,而表的深度是指__ __ 6、设数组a[1..50,1..80]的基地址为2000,每个元素占2个存储单元,若一行序为主序顺序存储,则元素a[45,68]的存储地址为;若以列序为主序存储,则元素a[45,68]的存储地址为。 7、有一个8ⅹ8的下三角矩阵A,若采用行序为主序顺序存储于一维数组a[1..n],则n的值为。 8、三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素 的、和。 9、已知广义表A=(((a))),则A的表头为:,A的表尾为:。 10、求下列广义表操作的结果: (1)Head ((a,b),(c,d)) == ; //头元素不必加括号 (2)Head(Tail((a,b),(c,d)))== ; (3)Head(Tail(Head((a,b),(c,d))))== ; (4)Tail(Head(Tail((a,b),(c,d))))== ; 11、设W为一个二维数组,其每个数据元素占用4个字节,行下标i从0到7 ,列下标j从0到3 ,则二维数组W的数据元素共占用_______个字节。W中第6 行的元素和第4 列的元素共占用_________个字节。若按行顺序存放二维数组W,其起始地址为100,则二维数组元素W[6,3]的起始地址为__________。 12、广义表A= (a,(a,b),((a,b),c)),则它的深度为____________,它的长度为____________。 13、设有一个n阶的下三角矩阵A,如果按照行的顺序将下三角矩阵中的元素(包括对角线上元素)存放在n(n+1)个连续的存储单元中,则A[i][j]与A[0][0]之间有_______个数据元素。 14、广义表的深度是__表展开后所含括号的层数 ____ 二、选择题 1、一个nⅹn的对称矩阵,如果以行或列为主序放入内存,则其容量为( )。 A、n*n B、n*n/2 C、(n+1)*n/2 D、(n+1)*(n+1)/2 2、对数组经常进行的两种基本操作是( ) 。

C语言练习3(数组)=参考答案

C语言(数组) 一、选择题 1. 设有程序: main() { int i,a[11]; printf("给数组赋值:\n"); for (i=0;i<=10;i++) scanf("%d",( )); ... ... printf("输出数组:\n"); for(i=0;i<=10;i++) printf("%d,",( )); } 则在程序中的两个园括号中分别应填入:C A) &a[i]和&a[i] B) a[i]和&a[i] C) &a[i]和a[i] D) a[i]和a[i] 2. 设已定义:int a[15]; 则数组a占用的内存单元数是( C ). A) 15 B) 16 C) 30 D) 32 3. 阅读程序: main() { int a[2]={0},i,j,k=2; for(i=0;i

return r; } main() { int x,a[]={2,3,4,5,6,7,8,9}; x=f(a,3); printf("%d\n",x); } 以上程序的输出结果是( D ). A) 720 B) 6 C)24 D) 120 5. 以下定义语句中,错误的是( B ). A) int a[ ] = {6,7,8}; B) int n=5, a[n]; C) char a[ ]= "string"; D) char a[5 ]={'0','1','2','3','4'}; 6. 以下描述中正确的是( D ). A) 数组名后面的常量表达式用一对圆括弧括起来 B) 数组下标从1开始 C) 数组下标的数据类型可以是整型或实型 D) 数组名的规定与变量名相同 7. 若定义数组并初始化char a[10]={'0','1 ','2','3','4','5','6','7','8','9'};指出以下错误语句( AB ). A) scanf("%c",a[0]); B) scanf("%s",&a); C) printf("%c",a[3]); D) printf("%s",a); 8.若定义数组int a[10] ,其最后一个数组元素为( C ). A) a[0] B) a[1] C) a[9] D) a[10] 9. 若定义数组并初始化int a[10]={ 1,2,3,4},以下语句哪一个不成立( B )? A) a[8] 的值为0 B) a[1] 的值为1 C) a[3] 的值为4 D) a[9] 的值为0 10. 指出以下错误语句( A ).

第六章数组习题答案

第六章数组习题答案 一、单项选择题 1. C语言中,一维数组下标的最小值是(B )。 A)1 B) 0 C) 视说明语句而定D) 无固定下限 2. 若有定义语句:int a[3][6];,按在内存中的存放顺序,a数组的第10个元素是( B )。A)a[0][4] B) a[1][3] C) a[0][3] D) a[1][4] 3. 设有数组定义:char str[ ]=”China0”,则数组str所占的空间为( D )字节。 A)4个B) 5个C) 6个D) 7个 4. 若有定义语句:char str[ ]=”ab\n\012\\\n”; 则执行语句:printf(“%d”,strlen(str));后,输出结果是( A )。 A)3 B) 4 C) 6 D) 12 5. 下列描述中不正确的是( C )。 A)字符型数组中可以存放字符串 B)可以对字符型数组进行整体输入、输出 C)可以对整型数组进行整体输入、输出 D)不能在赋值语句中通过赋值运算符”=”对字符型数组进行整体赋值 6. 当用户要求输入的字符串中含有空格时,应使用的输入函数是( C )。 A)scanf( ) B)getchar( ) C) gets( ) D) getc( ) 7. 有以下程序 #include main( ) { int i,x[3][2]={0}; for(i=0;i<3;i++) scanf(“%d”,x[i]); printf(“%3d%3d%3d\n”,x[0][0], x[0][1], x[1][0]); } 程序运行后的输出结果是()。 A)2 0 0 B) 2 0 4 C) 2 4 0 D) 2 4 6 8. 有以下程序 #include #include main( ) { char p[20]={‘a’,’b’,’c’,’d’},q[ ]=”abc”,r[ ]=”abcde”; strcpy(p+strlen(q),r); strcat(p,q); printf(“%d %d\n”,sizeof(p),strlen(p)); } 程序运行后的输出结果是( C )。 A)20 9 B) 9 9 C) 20 11 D) 11 11 9. 有以下程序 #include #include main( )

数据结构 严蔚敏 清华大学出版社 习题及答案

第1章绪论 (3) 1、填空题 (3) 2、应用题 (3) 第2章线性表 (4) 1、填空题 (4) 2、选择题 (5) 3、判断题 (5) 4、程序设计题 (5) 第3章栈和队列 (8) 1、填空题 (8) 2、选择题 (8) 3、判断题 (9) 第4章串 (9) 1、选择题 (9) 2、判断题 (9) 第5章数组和广义表 (9) 1、填空题 (9) 2、选择题 (9) 3、判断题 (10) 第6章树和二叉树 (10) 1、填空题 (10) 2、选择题 (11)

4、应用题 (11) 5、读程序写结果 (18) 第7章图 (19) 1、填空题 (19) 2、选择题 (19) 3、判断题 (20) 4、应用题 (20) 5、程序设计题 (25) 第8章动态存储管理 (25) 1、填空题 (25) 2、选择题 (25) 3、判断题 (25) 4、应用题 (25) 5、程序设计题 (25) 第9章查找 (26) 1、选择题 (26) 2、判断题 (27) 3、应用题 (27) 4、程序设计题 (28) 第10章内部排序 (29) 1、填空题 (29)

3、判断题 (30) 4、应用题 (30) 第11章外部排序 (31) 第12章文件 (31) 第1章绪论1、填空题 1.常见的数据结构有_线性__结构,__树形___结构,__图形__结构等三种。 2.常见的存储结构有__顺序存储_______结构,__链式存储____结构等两种。 3.数据的基本单位是_数据元素___,它在计算机中是作为一个整体来处理的。 4.数据结构中的结构是指数据间的逻辑关系,常见的结构可分为两大类,__线性结构____和__非线性结构___。 2、应用题 1、给出以下算法的时间复杂度. void fun(int n) { int i=1,k=100; while(i

第7章数组课后作业

1、依次输入五句话,然后将它逆序输出。运行结果如图所示。 提示: 创建一个字符串数组,每句话作为字符串数組的一个元素,然后从该数组的末尾开 始循环输出。 2、某百货商场当日消费积分最高的八名顾客.他们的积分是:18、25、7、36、1 3、2、89、63。编写程序找出最低的积分及它在数组中的原始位置(下标)。 提示: > 创建数组points[],存储八名顾客的积分。 > 定义变量min存储最低枳分,定义变量index存储最低积分下标。 > 假设第一个元素为最低积分,下标为0。 > 遍历数组,将数组元素和min的值进行比较。 3、从键盘输入10个整数,合法值为1、2或3,不是这三个数则为非法数字。试编程统计每个整数和非法数字的个数。运行结果如图所示。

提示: ?创建数组nums[],长度为10,存储用户输入的数字。 ?创建数组count[],长度为4、存储三个合法数字和非法数字的个数。 ?循环输入数字,利用switch判断数字的值、根据不同的值对数组count[]中的不同元素进行累加。 4、假设有一个长度为5的数组,如下所示: int [] array = new int []{1,3,-1,5,2}; 现要创建一个新数组newArray[],要求新数组中的元素与原数组中的元素逆序,并且如果 原数组中的元素值小于0,在新数组中按0存储。试编程输出新数组中的元素,程序运行结果如图: 提示: ?利用循环从原数组最后一个元素(下标为array.length-1)开始处理,如杲该元素的值小于0,利用continue退出本次循环(整型数组中元素默认值为0)。 ?如果该元素值大于0,则将该元素复制到新数组 ?合适的位置。对于原数组下标为i的元素.在新数组中的下标为arrayJength-i-1。 ?处理完成,利用循环输出新数组中的元素 5、有一数列:8, 4, 2, 1, 23, 344, 12。编写程序,让用户输入一个整数,判断该整数在不在该数列中。运行效果如下图所示:

C语言数组作业编程题答案

1、请先用记事本创建文件original.txt,往其中写入一组已排好序的整型数,今输入一个整数,要求按原来排序的规律将它插入数中,仍写入文件。例如:原来整数依次为4、6、8、41、56、77、102(数据间的分隔符为空格)。若将42插入数中,则插入后整数依次为4、6、8、41、4 2、56、77、102。 答案: #include #include void main() { int a[100]; int ijnumber; int n; FILE *fp; fp=fopen("e:\\C语言\\original.txt""r"); if(fp==NULL) { printf("open error"); exit(0); }

i=0; while(!feof(fp)) { fscanf(fp"%d"&a[i++]); fgetc(fp); } number=i-1; //number中存最后一个数据的下标 fclose(fp); scanf("%d"&n); //以下的while循环用来找n要放的位置循环结束时正好是a[i]的位置i=0; while(n>a[i]) { i++; } //for循环的功能是将a[i]到最后一个元素全后移一个位置 for(j=number;j>=i;j--) a[j+1]=a[j]; //将n放入找到的位置

a[i]=n; number=number+1; //加入n后,元素个数增1,用来控制向文件中的写入次数 fp=fopen("e:\\C语言\\original.txt""w"); if(fp==NULL) { printf("open error"); exit(0); } //写入数据 for(i=0;i<=number-1;i++) fprintf(fp"%d "a[i]); fprintf(fp"%d"a[i]); //最后一个数据后没有空格 fclose(fp); } 2、假定整型数组中的元素值不重复。今输入一个整数,先查找,如数组中存在此元素,则删除,否则不做操作。例如:原来数组的元素依次为14、6、28、41、96、77、89、102。若将96删除,则删除后数组元素依次为14、6、28、41、77、89、102。 答案:

数据结构 第五章数组和广义表

第五章数组和广义表:习题 习题 一、选择题 1.假设以行序为主序存储二维数组A[1..100,1..100],设每个数据元素占两个存储单元,基地址为10,则LOC(A[5,5])=( )。 A. 808 B. 818 C. 1010 D. 1020 2.同一数组中的元素( )。 A. 长度可以不同B.不限C.类型相同 D. 长度不限 3.二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。从供选择的答案中选出应填入下列关于数组存储叙述中( )内的正确答案。 (1)存放A至少需要( )个字节。 (2)A的第8列和第5行共占( )个字节。 (3)若A按行存放,元素A[8]【5]的起始地址与A按列存放时的元素( )的起始地址 一致。 供选择的答案: (1)A. 90 B. 180 C. 240 D. 270 (2) A. 108 B. 114 C. 54 D. 60 (3)[8][5] B. A[3][10] [5][8] [O][9] 4.数组与一般线性表的区别主要是( )。 A.存储方面 B.元素类型方面 C.逻辑结构方面 D.不能进行插入和删除运算 5.设二维数组A[1..m,1..n]按行存储在数组B[1..m×n]中,则二维数组元素A[i,j]在一维数组B中的下标为( )。 A. (i-l)×n+j B. (i-l)×n+j-l C.i×(j-l) D. j×m+i-l 6.所谓稀疏矩阵指的是( )。 A.零元素个数较多的矩阵 B.零元素个数占矩阵元素中总个数一半的矩阵 C.零元素个数远远多于非零元素个数且分布没有规律的矩阵 D.包含有零元素的矩阵 7.对稀疏矩阵进行压缩存储的目的是( )。 A.便于进行矩阵运算 B.便于输入和输出 C.节省存储空间 D. 降低运算的时间复杂度 8.稀疏矩阵一般的压缩存储方法有两种,即( )。 A.二维数组和三维数组 B.三元组和散列 C.三元组和十字链表 D.散列和十字链表 9.有一个100×90的稀疏矩阵,非0元素有10个,设每个整型数占两字节,则用三元组表示该矩阵时,所需的字节数是( )。 A. 60 B. 66 C.18000 D.33 10. A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+I)/2] 中,则对任一上三角元素a[i][j]对应T[k]的下标k是( )。 A. i(i-l)/2+j B. j(j-l)/2+i C. i(j-i)/2+1 D. j(i-l)/2+1 11.已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出原子项t的运算是( ) A. head(tail(tail(L))) B. tail(head(head(taiI(L)))) C. head(tail(head(taiI(L)))) D. head(tail(head(tail(tail(L)))))

数组练习题及答案

第五章数组练习题及答案 一、选择题 1、判断字符串a和b是否相等,应当使用() A、if(a==b) B、if(a=b) C、if(strcpy(a,b)) D、if(strcmp(a,b)) 2、以下正确的定义语句是() A、int a[1][4]={1,2,3,4,5}; B、float x[3][]={{1},{2},{3}}; C、long b[2][3]={{1},{1,2},{1,2,3}}; D、double y[][3]={0}; 3、以下各组选项中,均能正确定义二维实型数组a的选项是() A、float a[3][4]; float a[ ][4]; float a[3][ ]={{1},{0}}; B、float a(3,4); float a[3][4]; float a[ ][ ]={{0},{0}}; C、float a[3][4]; static float a[ ][4]={{0},{0}}; auto float a[ ][4]={{0},{0},{0}}; D、float a[3][4]; float a[3][ ]; float a[ ][4]; 4、下面程序的运行结果是() 1—5 DDCBA 6—10 BDABB 11—15 CCCBC 16—20 DDCBB 21—25 BBAAA 26—30 DBDDB #include "stdio.h" main() { char str[]="SSSWLIA",c; int k; for(k=2;((c=str[k])!='\0');k++) { switch(c) {case 'I':++k;break; case 'L':continue; default:putchar(c);continue; } putchar('*'); } } A、SSW* B、SW* C、SW*A D、SW 5、下面程序段是输出两个字符串中对应相等的字符。横线处应填入() char x[]="programming"; char y[]="Fortran"; int i=0; while(x[i]!='\0'&&y[i]!='\0')

vb课后练习答案习题解答 (5)

第5章数组与记录 5.1 填空题 1.若要定义一个包含10个字符串元素,且下界为1的一维数组s,则数组说明语句为()。 答案:Dim s(1 To 10) As String 2.若要定义一个元素为整型数据的二维数组a,且第一维的下标从0到5,第二维下标从-3到6,则数组说明语句为()。 答案:Dim a(0 To 5,-3 To 6) As Integer 3.如果数组元素的下标值为实数,则VB系统会按()进行处理。 答案:四舍五入原则 4.数组元素个数可以改变的数组称为();数组元素可以存放不同类型数据的数组称为()。 答案:可调数组、可变类型数组 5.数组刷新语句用于()。若被刷新的数组是数值数组,则把所有元素置();若被刷新的数组为字符串数组,则把所有元素置()。 答案:清除指定数组内容、0、空字符串 10.控件数组是由一组类型和()相同的控件组成,共享()。 答案:名字、同一个事件过程 11.控件数组中的每一个控件都有唯一的下标,下标值由()属性指定。 答案:Index 12.建立控件数组有两种方法:()和()。 答案:在设计阶段通过相同Name属性值来建立、在程序代码中使用Load方法 5.2 选择题 1.下列一维数组说明语句错误的是()。 a) Dim b(100) AS Double b) Dim b(-5 To 0) AS Byte c) Dim b(-10 To –20) AS Integer d) Dim b(5 To 5) AS String 答案:c 2.若有数组说明语句为:Dim a(-3 To 8),则数组a包含元素的个数是()。 a) 5 b) 8 c) 11 d) 12 答案:d 3.设有数组说明语句:Dim c(1 To 10),则下面表示数组c的元素选项中()是错误的。 a) c(i-1) b) c(5+0.5) c) c(0) d) c(10) 答案:c 4.下列数组说明语句中正确的是()。 a) Dim a(-1 To 5,8)AS String b) Dim a(n,n)AS Integer c) Dim a(0 To 8,5 To –1)AS Single d) Dim a(10,-10)AS Double

c语言数组典型试题设计含答案

一.选择题(2*20) 【题1】在C 语言中,引用数组元素时,其数组下标的数据类型允许是。A)整型常量B)整型表达式 C)整型常量或整型表达式D)任何类型的表达式 【题2】以下对一维整型数组a 的正确说明是。 A)int a(10); B)int n=10,a[n]; C)int n; D)#define SIZE 10 scanf(“%d”,&n); int a[SIZE]; int a[n]; 【题3】若有说明:int a[10];则对a 数组元素的正确引用是。 A)a[10] B)a[3.5] C)a(5) D)a[10-10] 【题4】在C 语言中,一维数组的定义方式为:类型说明符数组名; A)[整型常量表达式] B)[整型表达式] C)[整型常量] 或[整型表达式] D)[常量] 【题5】以下能对一维数组a 进行正确初始化的语句是。 A)int a[10]=(0,0,0,0,0); B)int a[10]={}; C)int a[]={0}; D)int a[10]=”10*1”; 【题6】以下对二维数组a 的正确说明是。 A)int a[3][]; B)float a(3,4); C)double a[1][4]; D)float a(3)(4); 【题7】若有说明:int a[3][4];则对a 数组元素的正确引用是。 A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1) 【题8】若有说明:int a[3][4];则对a 数组元素的非法引用是。 A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4] 【题9】以下能对二维数组a 进行正确初始化的语句是。 A)int a[2][]={{1,0,1},{5,2,3}}; B)int a[][3]={{1,2,3},{4,5,6}}; C)int a[2][4]={{1,2,3},{4,5},{6}}; D)int a[][3]={{1,0,1},{},{1,1}}; 【题10】以下不能对二维数组a 进行正确初始化的语句是。 A)int a[2][3]={0}; B)int a[][3]={{1,2},{0}}; C)int a[2][3]={{1,2},{3,4},{5,6}}; D)int a[][3]={1,2,3,4,5,6};

目前最完整的数据结构1800题包括完整答案 第五章 数组和广义表

第 5 章数组和广义表 一、选择题 1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其 存储地址为1,每个元素占一个地址空间,则a85的地址为()。【燕山大学 2001 一、2 (2分)】 A. 13 B. 33 C. 18 D. 40 2. 有一个二维数组A[1:6,0:7] 每个数组元素用相邻的6个字节存储,存储器按字节编址, 那么这个数组的体积是(①)个字节。假设存储数组元素A[1,0]的第一个字节的地址是0, 则存储数组A的最后一个元素的第一个字节的地址是(②)。若按行存储,则A[2,4]的第 一个字节的地址是(③)。若按列存储,则A[5,7]的第一个字节的地址是(④)。就一般情 况而言,当(⑤)时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。供选择的 答案:【上海海运学院 1998 二、2 (5分)】 ①-④: A.12 B. 66 C. 72 D. 96 E. 114 F. 120 G. 156 H. 234 I. 276 J. 282 K. 283 L. 288 ⑤: A.行与列的上界相同 B. 行与列的下界相同 C. 行与列的上、下界都相同 D. 行的元素个数与列的元素个数相同 3. 设有数组A[i,j],数组的每个元素长度为3字节,i的值为1 到8 ,j的值为1 到10, 数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为( )。 A. BA+141 B. BA+180 C. BA+222 D. BA+225 【南京理工大学 1997 一、8 (2分)】 4. 假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存 储单元,基地址为10,则LOC[5,5]=()。【福州大学 1998 一、10 (2分)】 A. 808 B. 818 C. 1010 D. 1020 5. 数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000 的内存单元中,则元素A[5,5]的地址是( )。【南京理工大学 2001 一、13 (1.5分)】 A. 1175 B. 1180 C. 1205 D. 1210 6. 有一个二维数组A[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址, 假设存储数组元素A[0,1]的第一个字节的地址是0,存储数组A的最后一个元素的第一个字 节的地址是(①)。若按行存储,则A[3,5]和 A[5,3]的第一个字节的地址是(②) 和(③)。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址是(④)和(⑤)。【上海海运学院 1996 二、1 (5分)】 ①-⑤:A.28 B.44 C.76 D.92 E.108 F.116 G.132 H.176 I.184 J.188 7. 将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元 素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。供选择的答案: A. 198 B. 195 C. 197 【北京邮电大学 1998 二、5 (2分)】 8. 二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈 从1到10。从供选择的答案中选出应填入下列关于数组存储叙述中()内的正确答案。(1)存放A至少需要()个字节; (2)A的第8列和第5行共占()个字节; (3)若A按行存放,元素A[8,5]的起始地址与A按列存放时的元素()的起始地

Java数组练习题(带答案)

一填空题 1)数组的元素通过下标来访问,数组Array的长度为Array.length 。 2)数组复制时,"="将一个数组的引用传递给另一个数组。 3)JVM将数组存储在栈(堆或栈)中。 4)数组的二分查找法运用的前提条件是数组已经排序。 5)Java中数组的下标的数据类型是整型。 6)数组最小的下标是0 。 7)arraycopy()的最后一个参数指明复制元素的个数。 8)向方法传递数组参数时,传递的是数组的引用。 9)数组初始化包括数组的申明,创建和初始化。 10)数组下标访问超出索引范围时抛出数组越界异常 11)浮点型数组的默认值是0.0f 。 12)数组创建后其大小不能改变。 二选择题 1.下面错误的初始化语句是_ABD__ A. char str[]="hello"; B. char str[100]="hello"; C. char str[]={'h','e','l','l','o'}; D. char str[]={'hello'}; 2.定义了一维int型数组a[10]后,下面错误的引用是_B__ A. a[0]=1; B. a[10]=2; C. a[0]=5*2; D. a[1]=a[2]*a[0]; 3.下面的二维数组初始化语句中,正确的是____ A. float b[2][2]={0.1,0.2,0.3,0.4}; B. int a[][]={{1,2},{3,4}}; C. int a[2][]= {{1,2},{3,4}}; D. float a[2][2]={0}; 4.引用数组元素时,数组下标可以是_D___ A. 整型常量 B. 整型变量 C. 整型表达式 D. 以上均可 5.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为____ A. 24 B. 25 C. 18 D. 17 6.下列初始化字符数组的语句中,正确的是__B__ A. char str[5]="hello"; B. char str[]={'h','e','l','l','o','\0'}; C. char str[5]={"hi"}; D. char str[100]=""; 7.数组在Java中储存在 C 中 A. 栈 B. 队列 C. 堆 D. 链表 8.下面程序的运行结果是____ main() { int a[][]={{1,2,3},{4,5,6}}; System.out.printf("%d", a[1][1]); } A. 3 B. 4 C. 5 D. 6 9.下面程序的运行结果是_C___ main() {

数组课后作业

1、判断一个数组{1,2,3,1,0}中是否存在相同的元素,如果存在相同的元素则输出“重复”,否则输出“不重复”。 2、编写一个程序,求出整数数组中最小元素和最大元素的下标,如果这样的元素个数不止一个,则返回最小的数的下标和最大的数的下标。 3、现在有如下一个数组:int oldArr[]={1,2,5,4,0,0,5,5,0,6,7};要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组newArr[];并输出两个数组中的所有元素值。 4、自己定义两个整型数组a[]和b[],初始化 数组a,循环输入值到数组b,然后将a,b两个数组合并为数组c,按升序(从低到高)排列。并输出数组a,b,c的值。 5、有一个数组,请按从大到小的顺序排好序,然后输入一个数,要求按原来排序的规律将它插入数组中。如:排序后的数组为:54,48,

35,23,21,12,8,4, 插入40,则应插入到48和35之间。 6、编写程序,在5行7列的二维数组中查找第一次出现的负数。 7、编写程序,定义数组int a[4][6],b[4][6],c[4][6],并完成如下操作: (1)从键盘上输入数据给数组a,b; (2)将数组a与数组b各对应元素作比较,如果相等,则数组c的对应元素为0,若前者大于后者,则数组c的对应元素为1;若前者小于后者,则数组c的对应元素为-1; (3)输出数组c各元素的值。 8、读以下程序并注释,并分析运行结果。 (1) #include int main() { int a[10],t,av,sum=0,i,j; for(i=0;i<10;i++) scanf("%d",&a[i]);

C语言数组典型例题分析与解答

数组练习解答 1 定义一个名为a的单精度实型一维数组,长度为4,所有元素的初值均为0的数定义语句是________________ 【分析】按照一般数据定义语句的格式,可以直接写出方法一(参看答案);考虑到所有元素均赋初值时可以省略数组长度,可以写出方法二(参看答案);考虑到不省略数组长度,给部分元素赋初值时,所有未赋初值的元素均有空值(对数值型数组来说,初值为0),可以写出方法三(参看答案);考虑到选用静态型,不赋初值所有元素也自动赋予。空值(对数值型数组来说,初值为0),可以写出方法四(参看答案)。 【答案】方法一:float a[4]={0.0,0.0,0.0,0.0}; 方法二:float a[]={ 0.0,0.0,0.0,0.0}; 方法三:float a[4]= {0.0}; 方法四:static float [4]; 2 下列数组定义语句中,错误的是() ①char x[1]='a';②auto char x[1]={0}; ③static char x[l];④char x[l]; 【分析】显然答案①中给字符型数组赋初值的格式不对(不能直接赋予字符常量,必须用花括号括住),所以备选答案①是符合题意的答案。 【答案】① 3 用"冒泡排序法"对n个数据排序,需要进行n一1 步。其中第k步的任务是:自下而上,相邻两数比较,小者调上;该操作反复执行n-k次。现在假设有4个数据:4、l、3、2要排序,假定4为上、2为下,则利用"冒泡排序法"执行第2步后的结果是_________________。【分析】开始排序前的排列执行第1步后的排列执行第2步后的排列 41 1 14 2 32 4 23 3 【答案】l、2、4、3 4 用"选择排序法"对n个数据排序,需要进行n-1步。其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、1、3、2要排序,则利用"冒泡排序法"执行第2步后的结果是______________________。 【分析】开始排序前的排列为:413 2 执行第1步后的排列为:143 2 执行第2步后的排列为:123 4 【答案】1、2、3、4 5 下列数组定义语句中,正确的是() ①int a[][]={1,2,3,4,5,6};②char a[2]「3]='a','b'; ③int a[][3]= {1,2,3,4,5,6};④static int a[][]={{1,2,3},{4,5,6}}; 【分析】C语言规定,二维数组定义时不允许省略第二维的长度,所以备选答案①④是错误的。C语言还规定,定义字符型数组时不允许直接使用"字符常量"的方式赋初值,所以备选答案②也是错误的。显然备选答案③符合题意。【答案】③ 6 定义一个名为"s"的字符型数组,并且赋初值为字符串"123"的错误语句是() ①char s[]={‘1','2','3','\0 '};②char s「」={"123"}; ③char s[]={"123\n"};④char s[4]={'1','2','3'};

(完整word版)数据结构第五章数组和广义表习题及答案

习题五数组和广义表 一、单项选择题 1.常对数组进行的两种基本操作是() A.建立与删除 B. 索引与修改 C. 查找与修改 D. 查找与索引2.对于C语言的二维数组DataType A[m][n],每个数据元素占K个存储单元,二维数组中任意元素a[i,j] 的存储位置可由( )式确定. A.Loc[i,j]=A[m,n]+[(n+1)*i+j]*k B.Loc[i,j]=loc[0,0]+[(m+n)*i+j]*k C.Loc[i,j]=loc[0,0]+[(n+1)*i+j]*k D.Loc[i,j]=[(n+1)*i+j]*k 3.稀疏矩阵的压缩存储方法是只存储 ( ) A.非零元素 B. 三元祖(i,j, aij) C. aij D. i,j 4. 数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( )。 A. 1175 B. 1180 C. 1205 D. 1210 5. A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是()。 A. i(i-1)/2+j B. j(j-1)/2+i C. i(j-i)/2+1 D. j(i-1)/2+1 6. 用数组r存储静态链表,结点的next域指向后继,工作指针j指向链中结点,使j 沿链移动的操作为( )。 A. j=r[j].next B. j=j+1 C. j=j->next D. j=r[j]-> next 7. 对稀疏矩阵进行压缩存储目的是()。 A.便于进行矩阵运算 B.便于输入和输出 C.节省存储空间 D.降低运算的时间复杂度 8. 已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是( )。 A. head(tail(LS)) B. tail(head(LS)) C. head(tail(head(tail(LS))) D. head(tail(tail(head(LS)))) 9. 广义表((a,b,c,d))的表头是(),表尾是()。 A. a B.() C.(a,b,c,d) D.(b,c,d) 10. 设广义表L=((a,b,c)),则L的长度和深度分别为()。 A. 1和1 B. 1和3 C. 1和2 D. 2和3 11. 下面说法不正确的是( )。 A. 广义表的表头总是一个广义表 B. 广义表的表尾总是一个广义表 C. 广义表难以用顺序存储结构 D. 广义表可以是一个多层次的结构 二、填空题 1.通常采用___________存储结构来存放数组。对二维数组可有两种存储方法:一种是以___________为主序的存储方式,另一种是以___________为主序的存储方式。 2. 用一维数组B与列优先存放带状矩阵A中的非零元素A[i,j] (1≤i≤n,i-2≤j≤i+2),B 中的第8个元素是A 中的第_ _行,第_ _列的元素。

一维数组练习题

一维数组练习题 1、以下对一维数组a进行正确初始化的是__________。 A) int a[10]=(0,0,0,0,0); B) int a[10]={ }; C) int a[ ]={0}; D) int a[10]={ 10*2}; 2、以下一维数组a的正确定义是________ 。 A) int a(10); B) int n=10,a[n]; C) int n; D) #define SIZE 10 scanf("%d",&n); int a[SIZE]; int a[n]; 3、执行下面的程序段后,变量k中的值为__________。 int k=3,s[2]; s[0]=k; k=s[1]*10; A) 不定值B) 33 C) 30 D) 10 4、下列程序执行后的输出结果是__________。 main() {int a,b[5]; a=0; b[0]=3; printf("%d,%d\n",b[0],b[1]); } A) 3,0 B) 3 0 C) 0,3 D) 3,不定值 5、已知数组a的赋值情况如下所示,则执行语句a[2]++;后a[1]和a[2]的值 分别是________。 a[0] a[1] a[2] a[3] a[4] ┌──┬──┬──┬──┬──┐ │ 10 │ 20 │ 30 │ 40 │ 50 │ └──┴──┴──┴──┴──┘ A) 20和30 B) 20和31 C) 21和30 D) 21和31 6、以下程序输出a数组中的最小值及其下标,在划线处应填入的是________。main( ) { int i,p=0,a[10]; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=1;i<10;i++) if(a[i]

相关主题
文本预览
相关文档 最新文档