第四章 数组习题集答案

第四章 数组习题集答案
第四章 数组习题集答案

第四章数组习题

一、选择题

1. 如果char型变量占两个字节的存储单元,则按照如下方式定义的数组x占用的字节数

是【】。

char x[50]={2,4,6,8,10};

A)50 B)100 C)10 D) 5

2. 下面关于数组的定义正确的是【】。

A)

int n=10;

float a[n]={1.0,2.1,3.2};

B)

#define N 10

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

C)

int n;

scanf("%d", &n);

int a[n];

D)

#define N 10;

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

3. 若有说明int a[5][4]; 则对其数组元素的正确引用是【】。

A)a[3+1][2] B)a(2)(3) C)a[0,2]D)a[3][5]

4. 若定义了数组int k[][4]={{1},{1,2,3},{5,6}};则数组共有【】元素。

A)6 B)9 C)10 D)12

5. 要将20,30,40,50 存入数组b中, 下列正确的程序段是【】。

A)

int i,b[4];

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

b[i]=(i+2)*10;

B)

int b[4];

b={20,30,40,50};

C)

int b[4];

b[1]=20,b[2]=30,b[3]=40,b[4]=50;

D)

int b[4];

b[4]={20,30,40,50};

6. 下列二维数组初始化语句中正确且与语句float a[]={0,1,2,0,4,0}等价的是【】。

A)float a[6]={0,1,2,0,4}; B)float a[]={0,1,2,0,4};

C)float a[7]={0,1,2,0,4,0}; D)float a[5]={0,1,2,0,4};

7. printf("%d \n ", strlen ("ATS\n012\1\\" )) ; 程序段的输出结果是【】。

A)11 B)10 C)9 D)8

8. 如果有char s[10]和int i,那么下面能够把输入的字符串存入数组s的选项是【】。

A)scanf("%s",&s);

B)gets(s);

C)for(i=0;i<10;i++) scanf("%c",s[i]);

D)for(i=1;i<10;i++) getc(s[i]);

9. 若有说明char s1[]=”good”,s2[]=”idea”, 则下列输出语句中正确的是【】。

A)printf("%s%s",&s1[0],&s2[0]);

B)printf("%c%c",s1,s2);

C)putc(s1);putc(s2);

D)puts(s1,s2);

10. 若有定义char str[7]; 要将键盘输入的字符串"a book" 赋给str,应使用【】。

A)gets(str); B)scanf("%s",str); C)str="a pear"; D)getchar(str); 11. 若有说明char s1[5],s2[7];,要将字符串存储到s1和s2中,下列语句中正确的是【】。

A)scanf("%s%s",&s1, &s2); B)gets(s1, s2);

C)scanf("%s%s", s1, s2); D)s1=getchar( ); s2=getchar( );

12. 下面程序段运行后,输出结果是【】。

main()

{

char s[20]="1234\0abcd";

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

}

A)4,20 B)5,20 C)9,10 D)10,10

13. 下列一维数组说明中,不正确的是【】。

A)float a[5+6];

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

C)#define M 10

int a[M+5] ;

D)float a[10], b[9] ;

14. 定义如下变量和数组:

int i;

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

则下面语句输出结果是【】。

for(i=0;i<3;i++) printf("%d",x[i][2-i]);

A) 1 4 7 B) 3 5 7 C) 3 6 9 D) 1 5 9

15. 下面程序段的运行结果是【】。

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

printf(“%s”,c);

A)?a?…b?B)ab C)ab c D)ab

16. 运行下面程序段的输出结果是【】。

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

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

A)0 B)5 C)3 D)不确定数

17. 要将字符串str2连接到字符串str1后,应使用的函数是【】。

A)strcpy(str1,str2);

B)strcat(str2,str1);

C)strcat(str1,str2);

D)strcmp(str2,str1);

18. 下列二维数组说明中,正确的是【】。

A)int n=5; float a[n][5];

B)int a[][9];

C)#define L1 7

#define L2 8

float a[L1][L2];

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

19. 若int data[5][6];且数组的起始地址为100(十进制), 则元素data[3][2]的地址为【】。

A)120 B)113 C)140 D)126

20. 若已有定义char s[10]; int i;下列输入函数调用中错误的是【】。

A)for (i=0; i<10; ++i) s[i]=getchar( ) ;

B)for (i=0; i<10; i++) scanf("%c",s[i] );

C)scanf("%s",s);

D)gets(s);

21. 设定义char a[20] ,要想使数组a得到字符串“how are you”应使用【】

A)printf("%s",a);B)gets(a);C)a=gets();D)printf("%c",a);22. 若有说明char s1[]="good",s2[]="well";则下列输出语句中正确的是【】。

A)printf("%s%s",&s1, &s2);B)printf("%s%s", s1[], s2[]);

C)puts(s1, s2);D)puts(s1);puts(s2);

23. 若有定义char s[]="a boy" ;则数组的长度自动定义为【】。

A) 6 B) 5 C)8 D)7

24. 在C语言中,引用数组元素时,其数组下标的数据类型允许是【】。

A)整型常量B)整型表达式

C)整型常量或整型表达式D)任何类型的表达式

25. 若有说明int a[][3]={1,2,3,4,5,6,7}; 则a数组第一维的大小是【】。

A)2 B)3 C)4 D)无确定值

26. 下面程序段的运行结果是【】。

char st[5]={…a?,?b?,?\0?,?c?,?\0?};

puts(st);

A)‘a’’b’ B)ab C)ab c D)ab

27. 下面程序段的运行结果是【】。

int i;

char st[5]={…a?,?b?,?\0?,?c?,?\0?};

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

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

A)‘a’’b’ B)ab C)ab c D)ab

28. 运行下面程序段的输出结果是【】。

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

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

A) 0 B) 5 C) 3 D)不确定数

29. 要将字符串str2复制到字符串str1,应使用的函数是【】。

A) strcpy(str1,str2); B)strcat(str2,str1);

C)strcat(str1,str2); D)strcmp(str2,str1);

30. 若已定义

char s1[]="go to bed";

s2[]="go on";

假设已经执行预编译命令

#include

则函数strcmp(s1,s2) 的值是【】。

A)0 B)-5 C) 5 D)13

31. 若已经包含头文件,且已有定义:

char s[]={…a?,?\0?,?c?,?o?,?d?,?e?,?\0?};

int i;

若要输出“a code”,应使用【】。

A)puts(s); B)for(i=0;i<6;i++) printf("%s",s[i]);

C)printf("%s",s); D)for(i=0;i<6;i++) putchar(s[i]);

32. 有下列程序段,运行时会【】。

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

a=b;

printf(“%s”,a);

A)运行后将输出tianjin B)运行后将输出ti

C)运行后将输出tian D)编译出错

33. 若已有定义char s[6]="look"; int i; 下列错误的是【】。

A)for (i=0; i<6; i++) putchar(s[i]);

B)for (i=0; i<6; i++) put(s[i]) ;

C)printf("%s",s);

D)puts(s);

34. 若有说明double b[7][6]; 对元素的非法引用是【】。

A)b[3][5] B)b[7][5] C)b[2*3][4] D)b[0][9-6]

35. 若已包含标题文件,并已有定义char s1[5],s2[]="abcd";int i;现要将字符串”

abcd”赋给s1,下述语句中错误的是【】。

A)strcpy(s1,"abcd");

B)s1=”abcd”;

C)for(i=0;i<5;i++) s1[i]=s2[i];

D)s[0]=?a?,s[1]=?b?,s[2]=?c?,s[3]=?d?;s[4]=?\0?;

36. 运行下面程序段的输出结果是【】。

char s1[6]={'d','o','\0','i','t ','\0'};

printf ("%d\n",strlen(s1));

A) 5 B) 2 C) 6 D)7

37. 定义如下变量和数组:

int i;

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

则下面语句输出结果是【】

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

A) 1 4 7 B) 3 5 7 C) 3 6 9 D) 1 5 9

38. 若有一维数组初始化语句int b[5]={1,2,3,4,5};且数组的起始地址为8050H(H表示十六

进制),则8058H是数组元素【】的起始地址(假设一个int型变量在内存占2个字节存储空间)。

A)b[1] B)b[4] C)b[0] D)b[2]

39. 设char str[4][5]; 所说明的数组在存储区的起始地址为50(十进制), 则数组元素

str[3][3]在存储区中的地址为【】。

A)62 B)86 C)63 D)68

40. 下面程序段运行后,输出结果是【】。

int i, j, x=0;

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

for (i=0,j=1; i<3 && j<4; ++i, j++ )

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

printf("%d", x);

A)8 B)11 C)10 D)不确定值

41. 下列程序运行后,输出值为【】。

main()

{

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

c=a[1]*b[2];

d=a[5]/b[4];

printf("%d,%d\n",c,D);

}

A)4,3 B)4,0 C)18,0 D)18,不确定值

42. 下面的程序用来求方阵的主对角线元素之和,请将程序填完整。

#include

main()

{

int i=0,x=0;

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

while (i<4)

{

x+= 【】;

i++;

}

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

}

A)a[3-i][3-j] B)a[i][3-i] C)a[i][i] D)a[3-i][4]

43. 下面的程序用来求方阵的次对角线元素之和,请将程序填完整。

#include

main( )

{

int i=0,x=0;

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

while (i<4)

{

x+=【】;

i++;

}

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

}

A)a[3-i][3-j] B)a[i][3-i] C)a[i][i] D)a[3-i][4] 44. 运行下面的程序段,输出结果是【】。

int i=0;

char s1[10]="abc", s2[10]="efg";

strcat(s1,s2);

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

{i++;s2[i]=s1[i];}

puts(s2);

A)abcefg B)efgabc C)ebcefg D)afgabc 45. 下面程序的运行结果是【】。

main( )

{

int i, j=20, a[]={3, 5, 8, 9, 10};

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

j-=a[i];

printf("%d\n", j); }

A)20 B)15 C)7 D)8

46. 下面程序运行后,输出结果是【】。

#include

main( )

{

char s[]="after",c=0;

int i;

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

if (s[i]

printf("%d", c);

}

A) 2 B) 1 C) 3 D) 5

47. 下面程序运行后,输出结果是【】。

#include

main( )

{

char s[]="abcde", c;

int j=3;

s[j]=s[5];

printf("%s", s);

}

A)abcde B)abcd C)eabcd D)abc

48. 下面的程序运行后, 输出结果是【】。

main( )

{

int i, j, a[5][5], x=0;

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

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

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

x+=a[i][i];

printf("%d", x);

}

A)4 B) 6 C)0 D)不确定值

49. 运行下面的程序段,输出结果是【】。

int i;

char s[][5]={"12","34","56","78"};

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

printf("%s",s[i]);

A)123456 B)456789abc C)47aD)456789 50. 设已包含标题文件,下面程序段的输出结果是【】。

char s1[20]="135",s2[15]={"24"};

strcpy(s1,s2);

printf("%d\n",strlen(s1));

A) 5 B) 4 C) 1 D) 2

51. 下面程序的结果是【】。

main( )

{

int i=1,x=0;

char a[][4]={"1203","0340","4567","6522"};

while (i<4)

{

x+=a[i][i];

i++;

}

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

}

A)155 B)13 C)158 D)159

52. 运行下面程序段的输出结果是【】。

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

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

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

s+=a[i][j];

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

A)11 B)10 C)21 D)不确知数

53. 下面的程序运行后输出结果是【】。

main( )

{

int i, s=90, a[]={3, 5, 7, 9, 11};

for (i=1;i<5;i+=2) s-=a[i];

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

}

A)74 B)76 C)72 D)68

54. 运行下面的程序段,输出结果是【】。

int i;

char s1[10]="abc", s2[10]="efg";

strcat(s1,s2);

i=1;

while (s1[i-1]!='\0')

{

s2[i]=s1[i];

i++;

}

puts(s2);

A) abcefg B)efgabc C)ebcefg D)afgabc

55. 下面程序段运行后,输出结果是【】。

int i, j, x=0;

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

for (i=1,j=1; i<3 && j<4; ++i, j++ )

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

printf("%d", x);

A) 8 B)10 C)11 D)不确定值

56. 下面的程序段运行后,输出结果是【】。

int i, j, x=0;

int a[7][7]={0};

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

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

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

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

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

printf("%d", x);

A) 6 B)16 C)0 D)不确定值

57. 运行下面程序段的输出结果是【】。

#include

main( )

{

int i=0,j=0,x=0;

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

while(i<4 && j<4)

{

x+= a[3-i][j];

i++;

j++;

}

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

}

A)18 B)9 C)20 D)19

58. 运行下面的程序段,输出结果是【】。

int i;

char s[][5]={"123","456","789","abc"};

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

printf("%s",s[i]);

A)123456789 B)456789abc C)47aD)456789 59. 下面的程序用来输出两个字符串中对应相等的字符, 请将程序填完整。

#include

main( )

{

char s1[]="look", s2[]="for";

int i;

for (i=0; s1[i]!='\0' && s2[i]!='\0'; i++)

if(s1[i]==s2[i])

【】;

}

A)printf("%s",s1[i]) B)printf("%c",s2[i])

C)putchar("%c",s1[i]) D)puts(s2[i])

60. 下面的程序段运行后, 输出结果是【】

int i, j, x=0;

int a[7][7]={0};

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

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

a[i][j]=2*(j+1)-1;

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

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

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

printf("%d", x);

A)0 B)16 C)9 D)不确定值

61. 下列程序的输出结果是【】

#include"stdio.h"

main()

{

char s[]="father";

int i,j=0;

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

if(s[j]>s[i]) j=i;

s[j]=s[6];

printf("%s",s);

}

A)frther B)father C) f D)fath

62. 下面的程序用来求二维数组的最大元素及其位置,请选择合适答案填空。

#include

main()

{

int a[5][4],i,j,max,row,col;

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

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

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

max=a[0][0];

row=0;

col=0;

for【】

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

if(max

{

max=a[i][j];

row=i;

col=j;

}

printf("max=%d,row=%d,col=%d\n",max,row,col);

}

A)i=4;i>0;--i B)i=0;i<5;i++

C)i=-1;i<4;++i D)i=5;i>0;--i

63. 下面程序的运行结果是【】。

main()

{

int n[3],i,j,k;

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

n[i]=0;

k=2;

for(i=0;i

for(j=0;j

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

printf("%d\n",n[1]);

}

A)0 B) 1 C) 2 D) 3

64. 以下程序运行结果是【】。

#include

main()

{

char s[10]="abcdef",t;

int i,j;

i=0;

j=strlen(s)-1;

while(i

{

t=s[i];

s[i]=s[j];

s[j]=t;

i++;

j--;

}

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

}

A)abcdef B)fedcba C)ABCDEF D)FEDCBA 65. 下面程序的运行结果是【】。

main( )

{

char

a[ ][6]={"ABCD","EFGH","IJKL","MNOP","QRS"};

int i;

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

printf("%s",a[i]);

printf("\n");

}

A)ABCDEFGHIJKL B)AEI

C)ABCDEFGH D)ABCD

66. 下面程序的运行结果是【】。

main( )

{

int a[ ]={2,4,6,8,10};

int y=1,x;

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

y+=a[x+1];

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

}

A)19 B)17 C)20 D)18

67. 下面的程序段运行后, 输出结果是【】。

int i, j, x=0;

int a[7][7]={0};

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

for (j=0;j<3;j++) a[i][j]=2*(j+1)-1;

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

x+=a[i][j];

printf("%d", x);

A)9 B)16 C)0 D)不确定值

68. 下列程序的输出结果是【】。

#include"stdio.h"

main()

{

char s[]="father";

int i,j=0;

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

if(s[j]

s[j]=s[6];

printf("%s",s);

}

A)frther B)father C)fa D)fath

69. 下面程序运行后,输出结果是【】。

#include

main( )

{

char s[]="after",c=0;

int i;

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

if (s[i]>?a?) c++;

printf("%d", c);

}

A) 4 B) 1 C) 3 D) 5

70. 下面的程序运行后, 输出结果是(【】)。

main( )

{

int i, j,x=0;

int a[5][5]={0};

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

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

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

x+=a[i][0];

printf("%d", x);

}

A) 4 B)10 C)20 D)不确定值

71. 运行下面的程序段,输出结果是(【】)。

char s1[10]="abcd",s2[10]="efg",s3[]="hi";

strcat(strcpy(s2,s3),s1);

puts(s2);

A)hiabcd B)higabcd C)abcdhi D)abcdhig 72. 运行下面程序段的输出结果是【】。

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

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

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

s+=a[i][j];

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

A)11 B)10 C)21 D)不确知数

73. 下面的程序运行后输出结果是【】。

main( )

{

int i, s=90, a[]={3, 5, 8, 9, 10};

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

if(i%2) s-=a[i];

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

}

A)74 B)76 C)72 D)68

74. 已知字符”t”的ASCII码为116,运行下面程序段的输出结果是【】。

char s1[6]=”cut”,s2[6]=”cup”;

printf ("%d\n",strcmp(s1,s2));

A)116 B)-116 C) 4 D)-4

75. 运行下面的程序段,输出结果是【】。

int i;

char s[][5]={"123","456","789"};

int sum=0;

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

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

printf("%d",sum);

A)159 B)456 C)123 D)789

76. 判断字符串s1是否小于字符串s2, 应该使用【】。

A)if (strcmp(s1,s2) >0)

B)if (s1

C)if (strcmp(s2,s1) )

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

77. 下面字符数组初始化语句正确且与语句char c[]="string";等价的是【】。

A)char c[]={'s','t','r’,'i’,'n','g'};

B)char c[]={'s','t','r’,'i’,'n','g',’\0’};

C)char c[]={'string'};

D)char c[]='string';

78. 下面程序求Fibonacci数列1,1,2,3,5,8,13……的前40个数(数列的前两项

数均是1,从第三项开始的一个数都是它的前两项数之和)。请选择最合适答案填空。

main()

{

long int fib[40]={1,1};

int i;

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

fib[i]= fib[i-2]+【】;

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

printf("%12ld %12ld\n ",fib[i],fib[i+1]);

}

A)fib[i-1] B)fib[i-2] C)fib[i] D)fib[i+1]

79. 下面程序的功能是求一维数组中的最大值。请选择最合适答案填空。

#include

#define N 10

main()

{

int a[N] = {66, 88, 94, 65, 98, 72, 76, 93, 79, 86};

int i,max;

max=a[0];

for(i=1;i

if(max

max=【】;

printf("Max is %d\n", max);

}

A)a[i-1] B)a[i] C)a[i+1] D)i

80. 有一个已排好序的数组a,今输入一个数x,要求按原来的顺序规律,将它插入到数组

a中。算法是:假设a中数据排列顺序为从小到大,对输入的数x,检查它在数组中哪一个数之前,然后将比这个数大的数顺序后移一个位置,在空出的位置上将该数插入。

请从给定的答案中选择一个正确的答案填入程序中对应空白处。

#include

#define N 100

main()

{

float a[N+1],x;

int i,p;

for(i=0;i

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

scanf("%f",&x);

for(i=0,p=N;i

if(x

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

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

a[p]=x;

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

{

printf("%8.2f",a[i]);

if(i%5==0)

printf("\n");

}

}

A) p=i+1 B)p=i C)P=a[i] D)p=N

二、读程序写结果

1.阅读下面程序,给出输出结果。

#include

#include

void main()

{

int i=0;

char s1[20]= "tc",s2[20]= "program";

strcat(s1,s2);

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

{

if((s1[i]>='a')&&(s1[i]<='z'))

s1[i]=s1[i]-32;

i++;

}

puts(s1);

puts(s2);

}

2. 阅读下面程序,给出输出结果。

#include

#include

void main( )

{

char s1[20]="135",s2[15]={"24"};

strcpy(s1,s2);

printf("%d,%s\n",strlen(s1),s2);

}

3.阅读下面程序,给出输出结果。

#include

# include

void main()

{

char w[ ][10]={ "abcd","efgh","ijkl","mnop"},k;

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

printf(“%s\n”,&w[k][k]);

}

4.阅读下面程序,给出输出结果。

#define N 10

#include

void main()

{

int a[N]={5,8,7,3,4,2,6,1,0,9},i,t,j,k;

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[j]

k=j;

if(i!=k)

{ t=a[i];a[i]=a[k];a[k]=t;}

}

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

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

}

5. 阅读下面程序,给出输出结果。

#include

void main()

{

int i,j,m[2]={0};

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

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

m[j]=m[i]+1;

printf("%d,%d\n", m[0], m[1]);

}

6.阅读下面程序,给出输出结果。

#include

void main()

{

char s1[]="afte", s2[]="echk";

int i;

for (i=0;s1[i]!='\0?&&s2[i]!='\0?; i++)

if(s1[i]<=s2[i])

printf("%c,%c\n",s1[i], s2[i]);

}

7.阅读下面程序,给出输出结果。

#include

void main()

{

int a[3][3]={1,2,3,4,5,6,10,8,9},i,s1=0,s2=0;

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

{

s1+=a[i][i];

s2+=a[i][2-i];

}

printf(“s1=%d,s2=%d\n”,s1,s2);

}

8.阅读下面程序,给出输出结果。

#include

#include

void main()

{

char s[20]="abcdefgh";

printf("%d,%d,%c,%s",strlen(s),sizeof(s),s[6],s);

}

9.阅读下面程序,给出输出结果。

#include

void main()

{

int a[5][5]=

{{11,12,13,14,15},

{21,22,23,24,25},

{31,32,33,34,35},

{41,42,43,44,45},

{51,52,53,54,55}};

int i;

int s1,s2;

s1=s2=0;

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

{

s1+=a[0][i];

s2+=a[i][0];

}

printf("s1=%d,s2=%d\n",s1,s2);

}

10. 阅读下面程序,给出输出结果。

#include

void main()

{

int i, j, x=0;

int a[7][7]={0};

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

for (j=0;j<3; j++) a[i][j]=2*(j+1)-1;

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

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

printf("%d%d%d%d", x,a[1][0],a[2][1],a[2][2]);

}

11.运行下面程序,从键盘输入以下数据:1、6、9、12、1、4。给出输出结果。

#include

void main()

{

int a[3][2],i,j,max,row,col;

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

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

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

max=a[0][0];

row=0;

col=0;

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

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

if(max

{

max=a[i][j];

row=i;

col=j;

}

printf("max=%d,row=%d,col=%d,%d\n",max,row,col,a[2][0]);

}

12. 阅读下面程序,给出输出结果。

#include

void main()

{

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

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

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

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

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

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

}

13. 阅读下面程序,给出输出结果。

#include

void main()

{

int i,a[8]={1,1};

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

{

if(i>=2)

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

if(i%2)

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

}

printf("\n");

}

三、填空题

1. 下面程序的功能是打印杨辉三角形的前10行,请将程序填写完整。

#include

void main( )

{

int c[10][10],i,j;

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

{

c[i][0]=1;

【1】

}

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

for(j=1;j

【2】

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

{

(for(j=0;【3】;j++)

printf("%6d",c[i][j]);

printf("\n");

}

printf("\n");

}

2. 下列程序将一个二维数组a的行和列的元素互换,存放到数组b中,并将数组b输出。

例如,

1 2 3

4 5 6

则a的行列互换后得到a的转置b为:

1 4

2 5

3 6

请将程序填写完整。

#include

void main()

{

int i,j;

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

【1】

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

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

【2】

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

for(【3】)

printf("%d%c",b[i][j],(j==1)?'\n':' ');

}

3. 将数组a中小于平均值的元素显示出来,请将程序填完整。

#define N 5

void main()

{

int i,a[N];float s=【1】,aver;

for(i=0;i

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

for(i=0;i

s+=【2】;

aver=s/N;

for(i=0;i

if(【3】)

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

}

4. 下面程序判断字符串是否是回文。所谓回文是指如果字符串正读和反读都一样。请将程

序填完整。

#include

#include

void main()

{

char s[100];

int i,n;

printf("输入字符串:\n");

gets(s);

n=【1】;

for(i=0;i

if(s[i]!= 【2】) break;

if(【3】) printf("是回文!\n");

else printf("不是回文!\n");

}

5.下面程序应用折半查找法从存有10个整数的升序数组a中对关键字m进行查找,如果找到则输出“OK”,否则输出“NO”,请填空。

#include

void main( )

{

int a[10],m,low=0,high=9,mid;

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

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

scanf("%d",&m);

while (low<=high)

{

mid=(low+high)/2;

if( m

else if (m>a[mid] ) low=【2】;

else break;

}

if (【3】) printf("OK\n");

else printf("NO\n");

}

四、编程题

1.下面程序实现将输入的无序字符串按照26个字母的顺序重新排序并输出。用选择法实现对字符串的排序,请将程序补充完整。

#include

#include

第六章数组习题答案

第六章数组习题答案 一、单项选择题 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( )

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

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

习题答案(6数组)《C语言程序设计》课后习题解答

一、单项选择题 1. D 2. D 3.A 4. B 二、程序设计题 1、 #include void main() { int math_score[10],max,min,sum=0,count=0,m,i; float average; for(i=0;i<10;i++) { printf("请输入第%d个同学的数学分数:\n",i+1); scanf("%d",&math_score[i]); } max=min=math_score[0]; for(i=0;i<10;i++) { sum+=math_score[i]; if(math_score[i]>max) max=math_score[i]; if(math_score[i]average) count++; printf("十名同学的数学成绩为:\n"); for(i=0;i<10;i++) printf("%d ",math_score[i]); printf("\n最高分为:%d",max); printf("\n最低分为:%d",min); printf("\n高于平均分的人数为:%d\n",count); } 2、 #include void main() { int a[11]={-1,3,5,6,12,34,55,67,76,88}; int number,i,j,m; printf("输入需要参入的数据:\n"); scanf("%d",&number); printf("原数组序列为:\n");

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

数据结构第六章树和二叉树习题及答案

习题六树和二叉树 一、单项选择题 1.以下说法错误的是() A. 树形结构的特点是一个结点可以有多个直接前趋 B. 线性结构中的一个结点至多只有一个直接后继 C. 树形结构可以表达(组织)更复杂的数据 D. 树(及一切树形结构)是一种”分支层次”结构 E. 任何只含一个结点的集合是一棵树 2. 下列说法中正确的是() A. 任何一棵二叉树中至少有一个结点的度为2 B. 任何一棵二叉树中每个结点的度都为2 C. 任何一棵二叉树中的度肯定等于2 D. 任何一棵二叉树中的度可以小于2 3. 讨论树、森林和二叉树的关系,目的是为了() A. 借助二叉树上的运算方法去实现对树的一些运算 B. 将树、森林按二叉树的存储方式进行存储 C. 将树、森林转换成二叉树 D. 体现一种技巧,没有什么实际意义4.树最适合用来表示() A. 有序数据元素 B .无序数据元素 C.元素之间具有分支层次关系的数据 D .元素之间无联系的数据 5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B .11 C .15 D .不确定 6. 设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1, M2和M3与森林F 对应的二叉树根结点的右子树上的结点个数是()。 A.M1 B .M1+M2 C .M3 D .M2+M3 7.一棵完全二叉树上有1001个结点,其中叶子结点的个数是() A.250 B .500 C .254 D .505 E .以上答案都不对 8. 设给定权值总数有n 个,其哈夫曼树的结点总数为() A. 不确定 B . 2n C . 2n+1 D . 2n-1 9.二叉树的第I 层上最多含有结点数为() I I-1 I-1 I A.2I B .2 I-1 -1 C .2 I-1 D .2 I -1 10.一棵二叉树高度为h, 所有结点的度或为0,或为2,则这棵二叉树最少有()结点A.2h B .2h-1 C .2h+1 D .h+1 11. 利用二叉链表存储树,则根结点的右指针是()。 A.指向最左孩子 B .指向最右孩子 C .空D .非空 12.已知一棵二叉树的前序遍历结果为为()。 A.CBEFDA B .FEDCBA 13.已知某二叉树的后序遍历序列是()。 ABCDEF中序遍历结果 为 C .CBEDFA D dabec, 中序遍历序列是 CBAEDF则后序遍历的结 果 .不定 debac , 它的前序遍历是

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. 填空题 ⑴设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。 【解答】0,n(n-1)/2,0,n(n-1) 【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。 ⑵任何连通图的连通分量只有一个,即是()。 【解答】其自身 ⑶图的存储结构主要有两种,分别是()和()。 【解答】邻接矩阵,邻接表 【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。 ⑷已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。 【解答】O(n+e) 【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。 ⑸已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。 【解答】求第j列的所有元素之和 ⑹有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。 【解答】出度 ⑺图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。 【解答】前序,栈,层序,队列 ⑻对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。 【解答】O(n2),O(elog2e) 【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。 ⑼如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。 【解答】回路 ⑽在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。 【解答】vi, vj, vk

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语言第六章数组习题

C语言第六章数组习题 第六章数组 6.1 选择题 [题]在C语言中,引用数组元素时,其数组下标的数据类型允许是_____. A)整型常量B)整型表达式 C)整型常量或整型表达式D)任何类型的表达式 [题]以下对一维整型数组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]; [题]若有说明:int a[l0];则对a数组元素的正确引用是_____。 A) a[10] B)a[3.5] C)a(5) D)a[10-10] [题]在C 语言中,一维数组的定义方式为:类型说明符数组名_____。 A)[常量表达式] B)[整型表达式] C)[整型常量]或[整型表达式] D)[整型常量] [题]以下能对一维数组a进行正确初始化的语句是_____。 A)int a[l0]=(0,0,0,0,0); B)int a[l0]={}; C)int a={0};D)int a[10]={10*1}; [题]以下对二维数组a的正确说明是_____。

1 A)int a[3]; B)float a(3,4); C)double a[1][4]; D)float a(3)(4); [题]若有说明:int a[3][4];则对a数组元素的正确引用是_____。 A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1) [题]若有说明:int a[3][4];则对a数组元素的非法引用是_____。 A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4] [题]以下不能对二维数组a进行正确初始化的语句是_____。 A)int a[2][3]={0}; B)int a[3]={{1,2},{0}}; C)int a[2][3]={{l,2},{3,4},{5,6}}; D)int a[3]={1,2,3,4,5,6}; [题]若有说明:int a[3][4]={0};则下面正确的叙述是_____。 A)只有元素a[0][0]可得到初值0 B)此说明语句不正确 C)数组a中各元素都可得到初值,但其值不一定为0 D)数组a中每个元素均可得到初值0 [题]若有说明:int a[3][4];则数组a中各元素_____。 2

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

练习题-第六章_数组(有答案)

一、填空题 1.在C语言中,二维数组元素在内存中的存放顺序是。 2.定义了二维数组:int array[4][5],该数组所占的内存空间为______字节。 3.假设有整型数组array[100][100],其中第66行,第66列元素array[66][66]在数 组中排列的位置(位置从1开始算起)为6566 。 4.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[2][1]得到的初值是 ________。 5.下面的程序段的运行结果是____he_____。 char x[ ]=“the teacher”; int i =0; while(x[++i] != ’\0’) if(x[i-1] = = ‘t’) printf(“%c”,x[i]); 二、单项选择题 1.下面程序( B )(每行程序前面的数字表示行号)。 1 main( ) 2 { float a[10]={0.0}; 3 int i; 4 for(i=0;i<3;i++) scanf(“%d”,&a[i]); 5 for(i=1;i<10;i++) a[0]=a[0]+a[i]; 6 printf(“%f\n”,a[0]); 7 } A)没有错误B)第2行有错误 C)第4行有错误D)第6行有错误 2.下面程序中有错误的行是(D)(每行程序前面的数字表示行号)。 1main( ) 2{ 3int a[3]={1}; 4int i; 5scanf(“%d”,&a); 6for(i=1;i<3;i++) a[0]=a[0]+a[i]; 7printf(“a[0]=%d\n”,a[0]); } A. 3 B. 6 C. 7 D. 5 3.以下不能对二维数组a进行正确初始化的语句是( C )。 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};

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. 填空题 ⑴ 设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。 【解答】0,n(n-1)/2,0,n(n-1) 【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。 ⑵ 任何连通图的连通分量只有一个,即是()。 【解答】其自身 ⑶ 图的存储结构主要有两种,分别是()和()。 【解答】邻接矩阵,邻接表 【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。 ⑷ 已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。 【解答】O(n+e) 【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。 ⑸ 已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。 【解答】求第j列的所有元素之和 ⑹ 有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。 【解答】出度 ⑺ 图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。 【解答】前序,栈,层序,队列

⑻ 对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。 【解答】O(n2),O(elog2e) 【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。 ⑼ 如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。 【解答】回路 ⑽ 在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。 【解答】vi, vj, vk 【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。 2. 选择题 ⑴ 在一个无向图中,所有顶点的度数之和等于所有边数的()倍。 A 1/2 B 1 C 2 D 4 【解答】C 【分析】设无向图中含有n个顶点e条边,则。 ⑵ n个顶点的强连通图至少有()条边,其形状是()。 A n B n+1 C n-1 D n×(n-1) E 无回路 F 有回路 G 环状 H 树状 【解答】A,G ⑶ 含n 个顶点的连通图中的任意一条简单路径,其长度不可能超过()。 A 1 B n/2 C n-1 D n 【解答】C 【分析】若超过n-1,则路径中必存在重复的顶点。

c语言数组练习题大全

231页; 本节设计程序完成一个简单的学籍; 3管理系统的案例,学生的基本信息:学号,姓名,年龄,c 语言成绩。假设班级有10名学生,能实现以下功能: (1)输入10名学生的基本信息。 (2)输出10名学生的基本信息。 (3)输入学号、姓名,输出该学生的基本信息。 (4)按学号年龄对学生进行排序(升序),按c 语言成绩降序排序。 (5)统计优 良 不及格。 1.数据结构分析 此案例是一位数组,二维数组的综合运用。10名学生的学号,年龄,c 语言成绩可分别用长度为10的一位数组sno (long ),sage (int 型),cs (float 型)存储;10名学生的姓名可用元素长度为20个字符的一位数组,既字符型二维数组sname 存储。 2算法分析 使用模块化设计思想,进入系统主界面时有六个主要模块,输入学生的基本信息,输出学生的信息,查找学生 的基本信息,排序,统计,退出。学籍管理系统的机构功能框架,如图 5-28 所示。 图 5-28 学生管理系统的结构功能框架 5.5.2 奇数阶魔方矩阵 本节将实现技术矩魔方矩阵。 项目任务:用数组实现N 阶魔方矩阵(N 为奇数)。所谓的N 阶魔方矩阵是指把1~N*N 自然数按一定的方法排列成N*N 的矩阵,使得:任意行、任意列以及两个对角线上的数之和都为65。 5阶魔方如下: 17 24 1 8 15 输 入 学 生 的 基 本 信 息 输 出 学 生 的 信 息 查 找 学 生 的 基 本 信 息 排 序 统 计 退 出 学籍管理系统

23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 本章习题: 1.设数组int a【N】的元素全部不相等,求a中最大元素和次大元素。 2.求有10个整数的数组a中奇数的个数和平均值,以及偶数个数和平均值。 3.统计输入的一串字符(“假设以‘\n’结束”)中,大写字母A,B...Z各出现的次数。 4.数组a:“1,7,9,11,13,15,17,19”;数组b:“2,4,6,8,10”两个数组合并为数组c;按升序排列。 5.输入10个数,将10个整数按升序排列输出,并且奇数在前,偶数在后。如果输入的10个数是:10 9 8 7 6 5 4 3 2 1,则输出:1 3 5 7 8 2 4 6 8 10 (编程提示、;可利用两个数组变量,一个用来存放输入的整数,输入后,对该数组进行排序,然后将数据复制到另一个数组中,先复制奇数再复制偶数)。 6.定义一个有10个元素的一位数组count ,从键盘上输入8个整数,将其按从大到小的顺序排列,并将排列后的数组输出。 7.求数组int a【M】【N】每行元素的平均值和平均最大的行号。 8.求A【M】【N】与B【M】【N】两矩阵的和矩阵C【M】【N】和差矩阵D【M】【N】(矩阵的值由键盘输入)。 9.有n个学生,每人考m门课。 (1)找出成绩最高的学生的学号和课程号 (2)找出有不及格课程的学生的学号及其各门课的全部成绩。 (3)求全部学生全部课程的平均分。

数组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]={,,,,}; 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}};

相关文档
最新文档