C语言习题集合4(数组)

更新时间:2023-12-27 06:19:01 阅读量: 教育文库 文档下载

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

第四部分 数 组 ·1·

第四部分 数组

4.1 选择题

1. 以下关于数组的描述正确的是(c )。

A. 数组的大小是固定的,但可以有不同的类型的数组元素 B. 数组的大小是可变的,但所有数组元素的类型必须相同 C. 数组的大小是固定的,所有数组元素的类型必须相同 D. 数组的大小是可变的,可以有不同的类型的数组元素 2. 以下对一维整型数组a的正确说明是( D)。

A.int a(10); B. int n=10,a[n]; C.int n; D. #define SIZE 10 scanf(\

int a[n];

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

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

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

4. 以下对一维数组m进行正确初始化的是( )。

A. int m[10]=(0,0,0,0) ; B. int m[10]={ }; C. int m[ ]={0}; D. int m[10]={10*2}; 5. 若有定义:int bb[ 8];。则以下表达式中不能代表数组元bb[1]的地址的是( )。 A. &bb[0]+1 B. &bb[1] C. &bb[0]++ D. bb+1

6. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中

所占字节数是( )。

A. 3 B. 6 C. 10 D. 20

7. 若有以下说明: int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g;

则数值为4的表达式是( )

A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c] 8. 以下程序段给数组所有的元素输入数据,请选择正确答案填入( )。 #include

main() {

int a[10],i=0;

while(i<10) scanf(\┇

}A. a+(i++) B. &a[i+1] C. a+i D. &a[++i]

第四部分 数 组 ·2·

A. a+(i++) B. &a[i+1] C. a+i D. &a[++i] 9. 执行下面的程序段后,变量k中的值为( )。 int k=3, s[2]; s[0]=k; k=s[1]*10;

A. 不定值 B. 33 C. 30 D. 10 10. 以下程序的输出结果是( )

main() {

int i, a[10]; for(i=9;i>=0;i--) a[i]=10-i;

printf(\}

A. 258 B. 741 C. 852 D. 369 11. 以下程序运行后,输出结果是( )。

main() {

int n[5]={0,0,0},i,k=2; for(i=0;i

A. 不确定的值 B. 2 C. 1 D. 0 12. 以下程序运行后,输出结果是( )。 main()

{

int y=18,i=0,j,a[8]; do

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

} while(y>=1);

for(j=i-1;j>=0;j--) printf(\ printf(\

}

A. 10000 B. 10010 C. 00110 D. 10100 13. 以下程序运行后,输出结果是( )。

main() {

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

if(a1[i]

for(k=0;k<4;k++) printf(\ }

A. 1234 B. 1324 C. 2413 D. 4321

第四部分 数 组 ·3·

14. 以下程序运行后,输出结果是( )。

main() {

int i,k,a[10],p[3]; k=5;

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

for (i=0;i<3;i++) p[i]=a[i*(i+1)]; for (i=0;i<3;i++) k+=p[i]*2; printf(\}

A. 20 B. 21 C. 22 D. 23 15. 以下程序运行后输出结果是( )。 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(\

A. 2 B. 1 C. 0 D. 3 16. 下列程序的主要功能是输入10个整数存入数组a,再输入一个整数x,在数组a中查找x。

找到则输出x在10个整数中的序号(从1开始);找不到则输出0。程序缺少的是 ( )。 main() {

int i,a[10],x,flag=0; for(i=0;i<10;i++) scanf(\scanf(\

for(i=0;i<10;i++) if _______ {flag=i+1; break;} printf(\}

A. x!=a[i] B. !(x-a[i]) C. x-a[i] D. !x-a[i] 17. 若说明:int a[2][3]; 则对a数组元素的正确引用是( ) 。

A. a(1,2) B. a[1,3] C. a[1>2][!1] D. a[2][0] 18. 若有定义:int b[3][4]={0};则下述正确的是( ) 。

A. 此定义语句不正确 B. 没有元素可得初值0 C. 数组b中各元素均为0

D. 数组b中各元素可得初值但值不一定为0 19. 若有以下数组定义,其中不正确的是( ) 。

A. int a[2][3];

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

第四部分 数 组 ·4·

C. int c[100][100]={0};

D. int d[3][]={{1,2},{1,2,3},{1,2,3,4}};

20. 若有以下的定义:int t[5][4];能正确引用t数组的表达式是( )。

A. t[2][4] B. t[5][0] C. t[0][0] D. t[0,0] 21. 在定义int m[ ][3]={1,2,3,4,5,6};后,m[1][0]的值是( )。

A. 4 B. 1 C. 2 D. 5 22. 在定义int n[5][6]后第10个元素是( )。

A. n[2][5] B. n[2][4] C. n[1][3] D. n[1][4] 23. 若二维数组c有m列,则计算任一元素c[i][j]在数组中的位置的公式为( )。

(假设c[0][0]位于数组的第一个位置)

A. i*m+j B. j*m+i C. i*m+j-1 D. i*m+j+1 24. 若有以下定义语句,则表达式“x[1][1]*x[2][2]”的值是( )。

float x[3][3]={{1.0,2.0,3.0},{4.0,5.0,6.0}};

A. 0.0 B. 4.0 C. 5.0 D. 6.0 25. 以下程序运行后,输出结果是 ( )。

main() {

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

printf(\}

A. 0650 B. 1470 C. 5430 D. 输出值不定 26. 以下程序运行后,输出结果是( )。

main() {

int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0;

for(i=0;i<4;i++) s+=aa[i][1]; printf(“%d\\n”,s); }

A. 11 B. 19 C. 13 D. 20 27. 有以下程序

main( ) {

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

for(j=0;j<=i;j++) s+=a[i][j]; printf(\}

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

A. 18 B. 19 C. 20 D. 21 28. 若定义如下变量和数组:

int i;

int x[3][3]={1,2,3,4,5,6,7,8,9}; 则下面语句的输出结果是( )。

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

第四部分 数 组 ·5·

A. 1 5 9 B. 1 4 7 C. 3 5 7 D. 3 6 9 29. 下述对C语言字符数组的描述中错误的是( )。

A. 字符数组可以存放字符串

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

C. 可以在赋值语句中通过赋值运算符\对字符数组整体赋值 D. 不可以用关系运算符对字符数组中的字符串进行比较 30. 下述对C语言字符数组的描述中正确的是 ( )。

A. 任何一维数组的名称都是该数组存储单元的开始地址,且其每个元素按照顺序连续占存储空间

B. 一维数组的元素在引用时其下标大小没有限制 C. 任何一个一维数组的元素,可以根据内存的情况按照其先后顺序以连续或非连续的方式占用存储空间

D. 一维数组的第一个元素是其下标为1的元素

31. 不能把字符串:Hello!赋给数组b的语句是( )。

A. char str[10]= {'H', 'e', 'l', 'l', 'o', '! '}; B. char str[10];str=\

C. char str[10];strcpy(str,\D. char str[10]=\32. 合法的数组定义是( )。

A. int a[]=\ B. int a[5]={0,1,2,3,4,5}; C. int s=\ D. char a[]={0,1,2,3,4,5}; 33. 下列语句中,不正确的是( )。

A. static char a[2]={1,2}; B. static char a[2]={ '1', '2'}; C. static char a[2]={ '1', '2', '3'}; D. static char a[2]={ '1'}; 34. 若给出以下定义:

char x[ ]=\

char y[ ]={'a','b','c','d','e','f','g'}; 则正确的叙述为( )。

A. 数组x和数组y等价 B. 数组x和数组y的长度相同 C. 数组x的长度大于数组y的长度 D. 数组x的长度小于数组y的长度 35. 若有数组定义: char array [ ]=\则数组 array所占的空间为( )。

A. 4个字节 B. 5个字节 C. 6个字节 D. 7个字节 36. 若有定义和语句:

char s[10];s=\则结果是(以下└┘代表空格)( )。

A. 输出abcd B. 输出a C. 输出abcd└┘└┘└┘└┘ D. 编译不通过 37. 下面程序运行后,输出结果是( )。

main() {

char ch[7]={ \int i,s=0;

for(i=0;ch[i]>= '0'&&ch[i]<= '9';i+=2) s=10*s+ch[i]- '0'; printf(\

第四部分 数 组 ·11·

main() {

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

s2=s2*a[i][i];};

printf(\ }

12. 以下程序完成功能是:计算两个3*4阶矩阵相加,并打印出结果。请填空。

#include main() {

int a[3][4]={{3,-2,1,2},{0,1,3,-2},{3,1,0,4}}; int b[3][4]={{-2,3,0,-1},{1,0,-2,3},{-2,0,1,-3}}; int i,j,c[3][4]; for(i=0;i<3;i++) for(j=0;j<4;j++) ________; for(i=0;i<3;i++) { for(j=0;j<4;j++)

printf(\printf(\} }

13. 以下程序的运行结果是________.

main() {

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

{if(i==3) a[i][j]=a[i-1][a[i-1][j]]+1; else a[i][j]=j; printf(\}

printf(\

} }

14. 阅读下列程序:

#include main() {

int i, j, row, column,m;

static int array[3][3]={{100,200,300},{28,72,-30},{-850,2,6}}; m=array[0][0];

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

第四部分 数 组 ·12·

if (array[i][j]

{ m=array[i][j]; row=i; column=j;}

printf(\}

上述程序的输出结果是 ________。

15. 若想通过以下输入语句使a中存放字符串1234,b中存放字符5,则输入数据的形式应该

是________。 : .

char a[10],b;

scanf(\ : .

16. 以下程序段的输出结果是________。

main() {

char b[]=\ b[5]=0;

printf(\}

17. 若有以下程序段,若先后输入:

English? Good?

则其运行结果是________。 main() {

char c1[60],c2[3]; int i=0,j=0; scanf(\ scanf(\

while(c1[i]!= '\\0') i++;

while(c2[j]!= '\\0') c1[i++]=c2[j++]; c1[i]= '\\0';

printf(\}

18. 从键盘输入由5个字符组成的单词,判断此单词是不是hello,并显示结果。

#include main() {

static char str[ ]={‘h’,’e’,’l’,’l’,’o’}; char str1[5];

【1】 ;

for(i=0;i<5;i++) 【2】 ; flag=0;

第四部分 数 组 ·13·

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

if 【3】 {flag=1; break;}

if(flag) printf(\else printf(\}

19. 以下程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,其它元素不变。

请填空。

#include #include main()

{

char a[]=\ int i, j, k; k=strlen(a);

for(i=0; i<=k-2; i+=2) for(j=i+2; j<=k; 【1】) if( 【2】 )

{ t=a[i]; a[i]=a[j]; a[j]=t; } puts(a); printf(\ }

20. 输入5个字符串,将其中最小的打印出来。

main() {

char str[10],temp[10]; int i; 【1】;

for(i=0;i<4;i++) {gets(str);

if (strcmp(temp,str)>0) 【2】; }

printf(\}

21. 以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不

相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdef和abceef,则输出为-1。请填空。

#include main( ) {

char str1[100],str2[100],c; int i,s;

printf(\ printf(\ i=0;

while((strl[i]==str2[i]&&(str1[i]!= 【1】)) i++;

第四部分 数 组 ·14·

s= 【2】 ;

printf(\ }

22. 设有下列程序:

#include #include main() {

int i;

char str[10], temp[10]; gets(temp);

for (i=0; i<4; i++) { gets(str);

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

printf(\}

上述程序运行后,如果从键盘上输入(在此代表回车符): C++ BASIC QuickC Ada Pascal

则程序的输出结果是 ________。

23. 以下程序功能是:统计从终端输入的字符中每个大写字母的个数。用#号作为输入结束标

志,请填空。

#include

#include main( ) {

int num[26],i; char c;

for(i=0; i<26; i++) num[i]=0;

while( 【1】 != '#') /*统计从终端输入的大写字母个数*/ if( isupper(c)) num[c-65]+=1;

for(i=0; i<26; i++) /*输出大写字母和该字母的个数*/ if(num[i]) printf(\【2】 , num[i]); }

24. 下面程序段完成功能是:输出两个字符串中对应字符相等的字符。请填空。

char x[ ]= \char y[ ]= \int i=0;

while (x[i]!= 【1】 &&y[i]!= 【2】 ) { if (x[i]==y[i]) printf(\【3】); else i++; }

第四部分 数 组 ·15·

25. 下面程序完成功能是:计算一个字符串中子串出现的次数。 #include main()

{

int i ,j, k,count;

char str1[20],str2[20]; printf(\gets(str1);

printf(\gets(str2); 【1】;

for(i=0;str1[i];i++)

for(j=i,k=0;str1[j]==str2[k];j++,k++) if ( 【2】 ) count++;

printf(\}

26. 下面程序完成以下功能:从键盘输入一行字符,统计其中有多少个单词,单词之间用空

格分隔。

#include main() {

char s[81];

int i , c, num=0,word=0;

【1】;

for(i=0;(c=s[i])!=’\\0’;i++) if(c==32) 【2】;

else if (word==0) {word=1; 【3】;}

printf(\}

27. 下面程序完成功能是:判定用户输入的正整数是否为“回文数”,所谓“回文数”是指正

读反读都相同的数。请填空。 #include main() {

int buffer[10], i,k,flag; long number ,n;

printf(\scanf(\k=0;

n=number; do

{ 【1】 ; k=k+1; n=n/10;

第四部分 数 组 ·16·

}while (n!=0);

flag=1;

for( i=0;i<=(k-1)/2;i++) if ( 【2】 ) flag=0; if(flag)

printf(\

else printf(\

}

4.3 答案及部分解析

一.选择题答案

1. C 2. D 3. C 4. C 5. C 6. D 7. D 8. A 9. A 10. C 11. D 12. B 13. A 14. B 15. D 16. B 17. C 18. B 19. D 20. C 21. A 22. C 23. D 24. A 25. A 26. B 27. A 28. C 29. C 30. A 31. B 32. D 33. C 34. C 35. C 36. D 37. C 38. D 39. C 40. A 41. C 42. A 43. C 44. A 45. A 46. B 47. D 48. A

11. 解析:程序中的for语句为n[0]和n[1]重新赋了值,但要输出的应该是n[2](n[k])值。 13. 解析:第一个for语句中当k=0时 a1[0]a2[0],

a[1]=2,j值为1;当k=2时,a1[1]a2[1] a[3]=4,j值为2第二个for语句输出a数组。

14. 解析:第一个for循环是为了将0,1,2,3,4,5,6,7,8,9分别赋给a[0]-a[9];

第二个for循环再将a[0],a[2],a[6]的值赋给p[0],p[1],p[2];第三个for循环将3个数组下标变量值*2后累加,结果为16,再和k初值5相加,最终结果为21。

27. 解析:本题考点是关于给数组赋初值时,初值的个数少于数组中元素个数。a数组实际

存储状态是a[0][2]=0,a[1][2]=0,a[2][2]=0.

35. 解析:字符串的最后一个字符应该是结束符’\\0’。

36. 解析:在程序执行语句部分,不允许把字符串赋予一个数组。

40. 解析:函数strcat()是字符串连接。gets()中输入数据时以回车符作为结束符。在纳

入内存时,输入字符串末尾的回车符自动变换成代码‘\\0’,从而使它成为C字符串。它在stdio.h中被定义,输出ss时,遇到“0”停止输出。

47. 解析:本题中strcpy(arr,”you”)函数的功能是将”you” 3个字符分别赋给

arr[0][0]、 arr[0][1] 和a[0][2];strcpy(arr[1],”me”) 函数的功能是将 “me” 分别赋给arr[1][0]和a[1][1]。

二.填空题答案 1. 答案:0 2. 答案:越界

3. 答案:初始化 静态 外部

第四部分 数 组 ·17·

4. 答案:5 4 3 2 1 5. 答案:【1】&a[i] 【2】i%4==0 【3】printf(\6. 答案:【1】a[i] 【2】i++或++i 【3】b[j] 【4】j++或++j 7. 答案:【1】a 【2】a 【3】sum/n 【4】x[i]

8. 答案:【1】2 【2】2 【3】i>=0

解析: 采用辗转相除法进行进制之间的相互转换,将结果存储在一维数组b中,最后显

示其值即可。

9. 答案:【1】&a[i] 【2】i

12. 答案: c[i][j]=a[i][j]+b[i][j]

解析: 使用两个二维数组a和b存放两个3*4阶矩阵的元素值,然后用两重for循环进

行相加求值产生二维数组c,最后显示c的各元素值。

13. 答案:0 1 2 0 1 2 0 1 2 14. 答案:-850,2,0

15. 答案:a=1234 b=5 A或a=1234b=5 16. 答案:Hello

17. 答案:EnglishGood 18. 答案: 【1】 int i,flag 【2】 str[i]=getchar( ) 【3】 str1[i]!=str[i] 19. 答案:【1】 j+=2 【2】 a[i]>a[j]

解析: 外层for循环控制i步长为2,内层for循环控制j步长为2.当i=0时,j=2,a[0]>a[2],

交换c和a;j=4,a[0]a[6], 交换a和c字符;j=8,a[2]a[6], 交换c和g字符;j=8,a[4]a[8], 交换e和g字符;输出”alancuegg”。

20. 答案:【1】 gets(temp) 【2】 strcpy(temp,str) 21. 答案:【1】 '\\0'或0 【2】 strl[i]-str2[i] 22. 答案:QuickC 23. 答案: 【1】 (c=getchar()) 注意,外层括号不得遗漏 【2】 +65 或 +'A' 24. 答案:【1】 '\\0' 【2】 '\\0' 【3】 x[i++] 25. 答案:【1】 count=0 【2】!str2[k+1] 26. 答案:【1】 gets(s) 【2】 word=0 【3】 num++ 27. 答案:【1】 buffer[k]=n 【2】 buffer[i]!=buffer[k-1-i]

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

Top