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

数组练习题及答案讲解

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

第五章数组练习题及答案

一、选择题

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')

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]={2.0,4.0,6.0,8.0,1.0};

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数组元素不能正确引用是()

A.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 "stdio.h"

#include "string.h"

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 "stdio.h"

#include "string.h"

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 "stdio.h"

#include "string.h"

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;

scanf(“%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

{

for(I=0;I

printf(“%4d”,b[j*n+i]);

p rintf(“\n”);

}

}

11、求矩阵对角线元素之和

main()

{int a[3[3]={1,3,6,7,9,11,14,15,17},sum=0,I,j;

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

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

if((I==j)||(I+j==3)) sum=sum+a[I][j];

}

12、下面程序的功能是检查一个二维数组是否对称(即:对所有I和j 都有a[I][j]=a[j][I])。请填空。

main()

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

int I,j,found=0

数组练习题及答案

第五章数组练习题及答案 一、选择题 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;

C语言必背的典型程序设计题目 - 数组、函数-------参考答案

1、使用选择法、冒泡法对10个数进行排序,并输出排序前后的数列。 n k=0; m t=0; //用于记录出列顺序 while(t #include <> void main() { int i,j,a[6][6]; for(i=0;i<=5;i++) { a[i][i]=1; a[i][0]=1; } for(i=2;i<=5;i++) { for(j=1;j<=i-1;j++) { a[i][j]=a[i-1][j]+a[i-1][j-1]; } } for(i=0;i<=5;i++) { for(j=0;j<=i;j++) { printf("%4d",a[i][j]); } printf("\n"); } } 5、编写程序,把下面的数据输入一个二维数组中。

25 36 78 13 12 26 88 93 75 18 22 32 56 44 36 58 然后执行以下操作: ①输出矩阵两个对角线上的数; ②分别输出各行和各列的和; ③交换第一行和第三行的位置; ④交换第二列和第四列的位置; ⑤输出处理后的数组。 #include<> #define SIZE 4 void main() { int a[SIZE][SIZE]={{25,36,78,13},{12,26,88,93},{75,18,22,32},{56,44,36,58}}; int i,j,t,sum; //输出二维数组 printf("二维数组:\n"); for(i=0;i

vb控件数组的习题及答案

vb控件数组的习题及答案

电子教室学生注册时姓名文本框部分请输入:如:1411111111李四学号+姓名,中间不加空格) 实验准备: 请同学们删除d:\ex21 文件夹里面的内容 如果没有ex21文件夹,请在d:\ 下新建 ex21 文件夹 1、打开D:\下的工程文件PROJECTA4.vbp和窗体文件FORMA4.frm,按以 下要求完成程序:在窗体上创建2个列表框、2个标签、2个命令按钮。 List1用于显示可选课程、List2用于显示已选课程。单击“选课”按钮, 将List1中选定的课程名称加入到List2中显示,单击“清空”按钮,将 删除List2中的所有课程。程序运行的参考输出格式如图A-4所示,可选 课程至少包含图A-4所示的6门。最后将工程文件、窗体文件按原文件 名保存在D:\EX21文件夹下。 图A-4

2、打开D:\下的工程文件PROJECTB4.vbp和窗体文件FORMB4.frm,按以下要求完成程序:在窗体上创建1个列表框、1个图片框、2个标签、2个命令按钮。List1用于显示可选课程、Picture1用于显示已选课程。单击“选课”按钮,将List1中选定的课程名称加入到Picture1中显示,单击“清空”按钮,将删除Picture1中的所有课程。程序运行的参考输出格式如图B-4所示,可选课程至少包含图B-4所示的6门。最后将工程文件、窗体文件按原文件名保存在D:\EX21文件夹下。 图B-4

3、打开D:\下的工程文件PROJECTA41.vbp和窗体文件FORMA41.frm,按以下要求完成程序:单击窗体,能产生10个两位的随机整数并存放在一维数组中,并能在窗体中输出该10个随机整数、最大数及其在10个数中的位置,要求使用语句强制显式声明模块中的所有变量,程序运行的参考输出格式如图A-41所示。最后将工程文件、窗体文件按原文件名保存在D:\EX21文件夹下。 图A-41

数组c 习题答案解析

4 习题 一、单项选择题】a数组元素的非法引用是【 1. 若有说明int a[3][4];则 A. a[0][2*1] B. a[1][3] C. a[4-2][0] D. a[0][4]D【答案】 的列下标越界。0开始,a[0][4]【解析】数组下标从】2. 在C++语言中,引用数组元素时,其数组下标的数据类型允许是【 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 C【答案】】3. 以下不正确的定义语句是【 A. double x[5]={,,,,}; B. int y[5]={0,1,3,5,7,9}; C. char c1[]={′1′,′2′,′3′,′4′,′5′}; x8′}; D. char c2[]={′\x10′,′\xa′,′\【答案】B 【解析】初始值的个数大于数组的大小,系统会出现编译错误。 4. 对以下说明语句的正确理解是【】int a[10]={6,7,8,9,10}; a[5] a[1]至A. 将5个初值依次赋给 a[4] a[0]至将5个初值依次赋给B. a[10] 至5个初值依次赋给a[6] C. 将 D. 因为数组长度与初值的个数不相同,所以此语句不正确B 【答案】 】5. 若有说明:int a[ ][4]={0,0};则下面不正确的叙述是【 0 的每个元素都可得到初值A. 数组a1 B. 二维数组a的第一维大小为 C. 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小a[0][1]可得到初值,其余元素均得不到确定的初值D. 只有元素a[0][0]和 D【答案】 【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,,和列,所以第一维为个初值说明是21行41。元素a[0][0]a[0][1]赋初值为0 本题中,有0。其余元素初值系统默认为】进行正确的初始化的语句是【以下能对二维数组6. c }; }; }; };B【答案】 答C【解析】二维数组初始化时,行大小可以省略,列大小不可以省略,所以A答案错误。初值之间不能有空案中初始值行数多于数组大小中的行大小,也是错误的。另外初始化时,位置,故D错误。】7. 以下不能对二维数组a进行正确初始化的语句是【 A. int a[2][3]={0}; }; 6}};

C语言练习题(带答案)

一、单项选择题 1.(A)是构成C语言程序的基本单位。 A、函数 B、过程 C、子程序 D、子例程 2.C语言程序从C开始执行。 A) 程序中第一条可执行语句B) 程序中第一个函数 C) 程序中的main函数D) 包含文件中的第一个函数 3、以下说法中正确的是(C)。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是(B )。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C)。 A.-a1 B.a[i] C.a2_i D.int t 6.下列C语言用户标识符中合法的是(B)。 A)3ax B)x C)case D)-e2 E)union 7.下列四组选项中,正确的C语言标识符是(C)。 A)%x B)a+b C)a123 D)123 8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# His.age 9.C语言中的简单数据类型包括(D)。 A、整型、实型、逻辑型 B、整型、实型、逻辑型、字符型 C、整型、字符型、逻辑型 D、整型、实型、字符型 10.在C语言程序中,表达式5%2的结果是C。 A)2.5 B)2 C)1 D)3 11.如果int a=3,b=4;则条件表达式"a

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'};

数组习题及参考答案

第七章数组 一、单项选择题 1.若有说明“int a[3][4]={0};”,则下面正确的是_____。 A.只有元素a[0][0]可得到初值0 B. 此说明语句不正确 C. 数组a各元素都可得到初值,但其值不一定是0 D. 数组a中每个元素均可得到初值0 2.以下不能正确定义二维数组的选项是_____。 A. int a[2][2]={{1},{2}} B. int a[2][2]={{1},2,3} C. int a[2][]={{1,2},{3,4}} D. int a[][2]={1,2,3,4} 3.在下列对字符数组进行初始化中正确的是_____。 A.char s1[]=”abcd” B.char s2[3]=”xyz” C.char s3[][]={…a?,?x?,?y?} D.char s4[2][3]={“xyz”,”mnp”} 二、写出下列程序的运行结果 有以下程序: 1. #include int main () {

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]) { a[j+1]=a[j]; a[j]=t; j--; } } for(i=0;i<5;i++) { cout<

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}; 规定,定义字符型数组时不允许直接使用 "字符常量"的方式赋初值,所以备选答案②也就是错误的。 备选答案③符合题意。【答案】③ 6定义一个名为"s"的字符型数组,并且赋初值为字符串"123"的错误语句就是() ① char s[]={ '1','2','3',' \0 '}; ② char s 「」={"123"}; ③ char s[]={"123\n"}; ④ char s[4]={'1','2','3'}; 【分析】备选答案①中省略了数组长度 ,所以每个元素都赋了初值,共计4个元素,初值依次为T '3'、’ \0',最后一个元素的值为字符串结束标记 ,所以数组S 中存放的就是字符串"123",该答案不符合 题意(即正确的);备选答案③中直接赋予字符串作为初值所以数组 s 的长度为4,其中的初值就是字符串 "123",不符合题意(即正确的);备选答案③中也就是给数组 s 赋予字符串的初值,但就是字符串不就是 方法三: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 较,小者调上;该操作反复执行 n- k 次。现在假设有 则利用"冒泡排序法"执行第2步后的结果就是 【分析】开始排序前的排列执行第 4 1 - 3 : (不能直接赋予字符常量,必须用花括号括住),所 步。其中第k 步的任务就是:自下而上,相邻两数比 4个数据:4、l 、3、2要排序,假定4为上、2为下, O 1步后的排列执行第 2步后的排列 1 2 4 2 【答案】l 、2、4、 3 4用"选择排序法"对n 个数据排序,需要进行n-1 据中寻找最小数,与第k 个数据交换。现在假设有 行第2步后的结果就是 ____________________ 【分析】 开始排序前的排列为: 4 执行第1步后的排列为: 执行第2步后的排列为: 【答案】1、2、3、4 5下列数组定义语句中,正确的就是() ① int a[][]={1,2,3,4,5,6}; ② char a[2] ③ int a[][3]= {1,2,3,4,5,6}; ④ static int a[][] 【分析】C 语言规定,二维数组定义时不允许省略第二维的长度 步。其中第k 步的任务就是:在第k 个数据到第n 个数 4个数据:4、 1、 3、2要排序,则利用"冒泡排序法"执 「3] = 'a','b'; ={{1,2,3},{4,5,6}}; ,所以备选答案①④就是错误 C 语言还 显然 、'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

4. 阅读程序: f(int b[],int n) { int i,r=1; for(i=0;i<=n;i++) r=r*b[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]

数组典型例题及参考答案

第7章数组 7-1输入一个正整数n(1≤n≤10),再输入n个整数 (1)输出最大数和最小数,并输出平均值。 (2)将最小数与第一个数交换,最大数与最后一个数交换,然后输出交换后的结果。 (3)输出所有比平均值大的数。 (4)找到最接近平均值的数。(提示:考虑差的绝对值)

/* 将最小数与第一个数交换,最大数与最后一个数交换*/ t=a[0]; a[0]=a[q]; a[q]=t; t=a[N-1]; a[N-1]=a[p]; a[p]=t; printf("After exchange: "); for(i=0; iave) printf("%d ", a[i]); /* 找到最接近平均值的数*/ printf("\nThe number closest to the average is: "); sub = a[0]>ave? a[0]-ave: ave-a[0]; p=0; for(i=1; iave? a[i]-ave: ave-a[i]) < sub ) { sub = a[i]>ave? a[i]-ave: ave-a[i]; p=i; } } printf("%d.", a[p]); } Output Please input 10 integers: 17 34 -11 2 5 10 7 -9 0 25 /* input */ The maximum is: 34, the minimum is: -11, the average is 8.00 After exchange: -11 25 17 2 5 10 7 -9 0 34 Larger than the average: 25 17 10 34 The number closest to the average is: 7 7-2输入一个日期(按照year-month-day格式),计算该日期为当年的第几天。 (提示:注意闰年)

C语言数组编程题

实验4 数组 一.实验目的: 1.掌握一维数组的定义、赋值和输入输出的方法; 2.掌握字符数组定义、初始化、赋值的方法; 3.了解常见的字符串函数功能及其使用方法; 4.掌握二维数组的定义与引用。 二.实验内容: 1.编写程序,输入10个整数存入一维数组,统计输出其中的正数、负数和零的个数。 2.编写程序,输入10个整数存入一维数组,再按逆序重新存放后再输出。 3.编写程序,输入10个整数存入一维数组,对其进行升序排序后输出。 4.编写程序,求二维数组中元素的最大值和最小值。 5.编写程序,求一个4×4矩阵中所有元素之和。 6.编写程序:从键盘上输入一字符串,统计输出该字符串中的字母字符、数字字符、空格以及其他字符的个数。 7.编写程序:从键盘上输入一字符串,并判断是否形成回文(即正序和逆序一样,如“abcd dcba”)。 8. 产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。 9. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,按原来的规律将其插入并输出。 页脚内容1

10. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,要求找出该数是数组中的第几个元素,如果不在数组中,则输出找不到。 11. 找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列最小。可能没有鞍点。 12. 编程输出杨辉三角。(要求输出10行)(杨辉三角:每行端点与结尾的数为1.每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大) 13. 输入一行字符,统计大写字母、小写字母、数字、空格以及其它字符个数。 14. 编写程序,将两个字符串连接起来,不用strcat。 15. 编写程序实现strcpy函数功能。 16. 编程实现strlen函数功能。 17. 编程求2-4+6-8…-100+102的值。 18. 假设某人有100,000现金。每经过一次路口需要进行一次交费。交费规则为当他现金大于50,000时每次需要交5%如果现金小于等于50,000时每次交5,000。请写一程序计算此人可以经过多少次这个路口。 19. 输入若干个正整数,以0结束,将其中大于平均值且个位为5的数排序后输出。(按由大到小的顺序排序) 20. 输入一个字符串,将其中ASCII码值为基数的字符排序后输出。(按由小到大的顺序) 21. 输入一个以回车结束的字符串(少于80个字符),滤去所有的非16进制字符后,组成一个新字符串(16进制形式),然后将其转换为10进制数后输出。 22. 读入一个正整数n(1<=n<=6),再读入n阶矩阵,计算该矩阵除副对角线、最后一行、最后一列 页脚内容2

数据结构练习题第三章栈、队列和数组习题及答案

第三章栈、队列和数组 一、名词解释: 1.栈、栈顶、栈底、栈顶元素、空栈 2.顺序栈 3.链栈 4.递归 5.队列、队尾、队头 6.顺序队 7.循环队 8.队满 9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵 二、填空题: 1.栈修改的原则是_________或称________,因此,栈又称为________线性表。在栈顶 进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________ 或________。 2.栈的基本运算至少应包括________、________、________、________、________五 种。 3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。 4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。 5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。 6.top=0表示________,此时作退栈运算,则产生“________”;top=sqstack_maxsize-1 表示________,此时作进栈运算,则产生“________”。 7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。 int InitStack(SqStackTp *sq) { ________; return(1);} 8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。 Int Push(SqStackTp *sq,DataType x) { if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);} else{________________: ________________=x; return(1);} } 9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。 Int Pop(SqStackTp *sq,DataType *x) {if(sp->top==0){error(“下溢”);return(0);} else{*x=________________; ________________; return(1);} } 10. 以下运算实现在顺序栈上判栈空,请在________________处用适当句子予以填充。 Int EmptyStack(SqStackTp *sq) {if(________________) return(1); else return(0); } 11.以下运算实现在顺序栈上取栈顶元素,请在________________处用适当句子予以填充。 Int GetTop(SqStackTp *sq,DataType *x) {if(________________) return(0);

数据结构课后习题及解

数据结构课后习题及解析第五章

第五章习题 5.1 假设有6行8列的二维数组A,每个元素占用6个字节,存储器按字节编址。已知A的基地址为 1000,计算: 数组A共占用多少字节; 数组A的最后一个元素的地址; 按行存储时元素A 36 的地址; 按列存储时元素A 36 的地址; 5.2 设有三对角矩阵A n×n ,将其三条对角线上的元素逐行地存于数组B(1:3n-2)中,使得B[k]= a ij , 求: (1)用i,j表示k的下标变换公式; (2)用k表示i,j的下标变换公式。 5.3假设稀疏矩阵A和B均以三元组表作为存储结构。试写出矩阵相加的算法,另设三元组表C存放 结果矩阵。 5.4在稀疏矩阵的快速转置算法5.2中,将计算position[col]的方法稍加改动,使算法只占用一个 辅助向量空间。 5.5写一个在十字链表中删除非零元素a ij 的算法。 5.6画出下面广义表的两种存储结构图示: ((((a), b)), ((( ), d), (e, f))) 5.7求下列广义表运算的结果: (1)HEAD[((a,b),(c,d))]; (2)TAIL[((a,b),(c,d))]; (3)TAIL[HEAD[((a,b),(c,d))]]; (4)HEAD[TAIL[HEAD[((a,b),(c,d))]]]; (5)TAIL[HEAD[TAIL[((a,b),(c,d))]]];

实习题 若矩阵A m×n 中的某个元素a ij 是第i行中的最小值,同时又是第j列中的最大值,则称此元素为该 矩阵中的一个马鞍点。假设以二维数组存储矩阵,试编写算法求出矩阵中的所有马鞍点。 第五章答案 5.2设有三对角矩阵A n×n,将其三条对角线上的元素逐行的存于数组B[1..3n-2]中,使得B[k]=a ij,求:(1)用i,j表示k的下标变换公式;(2)用k表示i、j的下标变换公式。 【解答】(1)k=2(i-1)+j (2) i=[k/3]+1, j=[k/3]+k%3 ([ ]取整,%取余) 5.4在稀疏矩阵的快速转置算法5.2中,将计算position[col]的方法稍加改动,使算法只占用一个辅助向量空间。 【解答】算法(一) FastTransposeTSMatrix(TSMartrix A, TSMatrix *B) {/*把矩阵A转置到B所指向的矩阵中去,矩阵用三元组表表示*/ int col,t,p,q; int position[MAXSIZE]; B->len=A.len; B->n=A.m; B->m=A.n; if(B->len>0) { position[1]=1; for(t=1;t<=A.len;t++) position[A.data[t].col+1]++; /*position[col]存放第col-1列非零元素的个数, 即利用pos[col]来记录第col-1列中非零元素的个数*/ /*求col列中第一个非零元素在B.data[ ]的位置,存放在position[col]中*/ for(col=2;col<=A.n;col++) position[col]=position[col]+position[col-1]; for(p=1;p

C语言数组例题

6.1.1 Fibonacci数列 /* Fibonacci数列递推求解 */ main() {int k,n; long s,f[50]; printf("求数列的第n项与前n项和,请输入n:"); scanf("%d",&n); f[1]=1;f[2]=1;s=2; /* 数组元素与和变量赋初值 */ for(k=3;k<=n;k++) {f[k]=f[k-1]+f[k-2]; /* 实施递推 */ s+=f[k];} /* 实施求和 */ printf("F数列第%d项为:%ld\n",n,f[n]); printf("F数前%d项之和为:%ld\n",n,s); } 6.1.2 幂序列 /* 幂序列程序 */ main() {int k,n; long a,b,s,f[100]; printf("求数列的第n项与前n项和,请输入n:"); scanf("%d",&n); a=2;b=3;s=0; for(k=1;k<=n;k++) {if(a

else {f[k]=b;b=b*3;} /* 用3的幂给f[k]赋值 */ s+=f[k];} printf("数列的第%d项为:%ld\n",n,f[n]); printf("数列的前%d项之和为:%ld\n",n,s); } 6.1.3 双关系递推数列 /* 双关系2x+1,3x+1递推 */ main() {int n,i,j,h,m[1500]; m[1]=1; scanf("%d",&n); for(i=1;i<=n;i++) {m[2*i]=2*m[i]+1;m[2*i+1]=3*m[i]+1; for(j=i+2;j<=2*i+1;j++) {if(m[i+1]>m[j]) /* m(i+1)与m(j)比较 */ {h=m[j]; m[j]=m[i+1];m[i+1]=h;} /* 交换,使m(i +1)最小 */ if(m[i+1]==m[j]) m[j]=20000+j;}} /* 置m(j)为一出界大数,以避免重复 */ for(i=1;i<=n;i++) {printf(" %4d",m[i]);

数组c习题答案解析

习题 4 一、单项选择题 1. 若有说明int a[3][4];则a数组元素的非法引用是【】 A. a[0][2*1] B. a[1][3] C. a[4-2][0] D. a[0][4] 【答案】D 【解析】数组下标从0开始,a[0][4]的列下标越界。 2. 在C++语言中,引用数组元素时,其数组下标的数据类型允许是【】 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 【答案】C 3. 以下不正确的定义语句是【】 A. double x[5]={2.0,4.0,6.0,8.0,10.0}; B. int y[5]={0,1,3,5,7,9}; C. char c1[]={′1′,′2′,′3′,′4′,′5′}; D. char c2[]={′\x10′,′\xa′,′\x8′}; 【答案】B 【解析】初始值的个数大于数组的大小,系统会出现编译错误。 4. 对以下说明语句的正确理解是【】 int a[10]={6,7,8,9,10}; A. 将5个初值依次赋给a[1]至a[5] B. 将5个初值依次赋给a[0]至a[4] C. 将5个初值依次赋给a[6]至a[10] D. 因为数组长度与初值的个数不相同,所以此语句不正确 【答案】B 5. 若有说明:int a[ ][4]={0,0};则下面不正确的叙述是【】 A. 数组a的每个元素都可得到初值0 B. 二维数组a的第一维大小为1 C. 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小 D. 只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值 【答案】D 【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。元素a[0][0]和a[0][1]赋初值为0 ,其余元素初值系统默认为0。 6. 以下能对二维数组c进行正确的初始化的语句是【】 A. int c[3][]={{3},{3},{4}}; B. int c[][3]={{3},{3},{4}}; C. int c[3][2]={{3},{3},{4},{5}};

c语言数组例题

#include int prime(int c) { inta,b=1; for(a=2;a int *hs(int a[3][2]) {inti,j,s[3],*p=s; s[0]=a[0][0];s[1]=s[2]=1; for(i=0;i<3;i++) for(j=0;j<2;j++) {if(s[0]

return 0; } 3.源代码为: #include voidhanshu(char *s) { while(*s) { if(*s>='A'&&*s<='Z') *s+=32; else if(*s>='a'&&*s<='z') *s-=32; *s++; } } void main() { char s[]="shaHUAHDJhhduahNBUahujJAWDhuwh8u"; hanshu(s); printf("改写后的字符串为:\n"); puts(s); } 4.源代码为: #include int add(int n) { int s=0; if(n==0) return 0; if(n==1) s=1; else s=n+add(n-1); return s; } void main() { intk,i; printf("输入一个整数:\n"); scanf("%d",&i); k=add(i); printf("%d累加的结果为:%d\n",i,k); } 测试数据为:4 运行结果为:10

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};

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