C语言数组试题.docx

上传人:b****0 文档编号:1017003 上传时间:2022-10-15 格式:DOCX 页数:19 大小:41.45KB
下载 相关 举报
C语言数组试题.docx_第1页
第1页 / 共19页
C语言数组试题.docx_第2页
第2页 / 共19页
C语言数组试题.docx_第3页
第3页 / 共19页
C语言数组试题.docx_第4页
第4页 / 共19页
C语言数组试题.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C语言数组试题.docx

《C语言数组试题.docx》由会员分享,可在线阅读,更多相关《C语言数组试题.docx(19页珍藏版)》请在冰豆网上搜索。

C语言数组试题.docx

C语言数组试题

第4章数组

4.1内容概述

本章主要介绍了数值数组和字符数组的定义、初始化、元素引用和数组数据的输入与输出,字符数组实现字符串、字符串函数的实现与调用。

指针数组与数组指针定义、元素引用。

利用一维数组实现如挑数、排序、求和等实际应用问题。

利用二维数组实现矩阵的应用问题。

利用字符数组实现字符串的各种操作。

本章知识结构如图4.1所示。

 

 

图4.1第4章知识结构图

考核要求:

掌握一维数组、二维数组、字符数组和指针数组的定义和初始化;掌握数组元素存储地址计算;掌握数组元素的下标法、指针法引用;掌握字符数组与字符串的区别与联系;掌握有关字符串处理函数的使用方法;能利用一维数组、二维数组解决向量、矩阵等实际应用问题。

重点难点:

本章的重点是一维数组、二维数组和字符数组的定义、初始化、元素引用,字符串处理函数的使用。

本章的难点是字符串与字符数组的区别,指针数组和数组元素的指针法引用。

核心考点:

数组的定义、初始化和数组元素的引用方法,一维数组、二维数组和字符数组的实际应用,字符串的处理方法。

4.2典型题解析

【例4.1】以下对一维数组a的定义中正确的是()。

A.chara(10);      B.inta[0..100];

C.inta[5];D.intk=10;inta[k];

解析:

一维数组定义的一般形式为:

类型标识符数组名[常量表达式]

其中,常量表达式可以是任意类型,一般为算术表达式,其值表示数组元素的个数,即数组长度。

答案:

C

【例4.2】以下对一维数组的定义中不正确的是()。

A.doublex[5]={2.0,4.0,6.0,8.0,10.0};

B.inty[5]={0,1,3,5,7,9};

C.charch1[]={'1','2','3','4','5'};

D.charch2[]={'\x10','\xa','\x8'};

解析:

可以对一维数组的全部元素或部分元素赋初值。

在对全部数组元素初始化时,数组长度可以省略。

若数组长度没有省略,则初始化列表中值的个数不能超过数组的长度。

答案:

B

【例4.3】以下对二维数组的定义中正确的是()。

A.inta[4][]={1,2,3,4,5,6};B.inta[][3];

C.inta[][3]={1,2,3,4,5,6};D.inta[][]={{1,2,3},{4,5,6}};

解析:

定义二维数组时,若按一维格式初始化,则第一维的长度可以省略,此时,系统可根据初始化列表中值的个数及第二维的长度计算出省略的第一维长度,但无论如何,第二维的长度不能省略。

没有初始化时,每一维的长度都不能省略。

答案:

C

【例4.4】假定一个int型变量占用两个字节,若有定义:

intx[10]={0,2,4};则数组x在内存中所占字节数是()。

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

解析:

一维数组在内存中所占的字节数为:

数组长度×sizeof(元素类型)。

答案:

D

【例4.5】以下程序的输出结果是()。

main()

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

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

}

A.0650B.1470C.5430D.输出值不定

解析:

定义的数组a为4行4列,且前三行三列元素已初始化,根据C语法规定,未初始化的元素值为0。

答案:

A

【例4.6】以下程序的输出结果是()。

main()

{intm[][3]={1,4,7,2,5,8,3,6,9};inti,j,k=2;

for(i=0;i<3;i++){printf("%d",m[k][i]);}

}

A.456B.258C.369D.789

解析:

根据初始化列表中值的个数和第二维的长度,可求得第一维长度为3。

第一行的元素值依次为1,4,7;第二行元素值依次为2,5,8;第三行元素值依次为3,6,9。

循环执行三次,依次输出行标为2的三个元素,即第三行的3个元素。

答案:

C

【例4.7】以下程序的输出结果是()。

main()

{intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;

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

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

t=t+b[i][b[j][j]];

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

}

A.3B.4C.1D.9

解析:

程序中,引用的b数组元素的行下标为循环变量i,列下标为数组元素b[j][j]。

外层循环共进行3次,对于每次外循环,内层循环只执行一次(即j=i),所以变量t的值为元素b[0][b[0][0]]、b[1][b[1][1]]、b[2][b[2][2]]的和。

由于数组元素b[0][0]、b[1][1]、b[2][2]的值分别为0、1、2,所以t的值为:

0+0+1+2=3。

答案:

A

【例4.8】若有定义:

inta[2][4];,则引用数组元素正确的是()。

A.a[0][3] B.a[0][4] C.a[2][2] D.a[2][2+1]

解析:

引用二维数组元素时,行下标范围为0~行数-1,列下标范围为0~列数-1。

答案:

A

【例4.9】若有定义:

intaa[8];,则不能代表数组元素aa[1]地址的是()。

A.&aa[0]+1B.&aa[1]C.&aa[0]++D.aa+1

解析:

&aa[1]、&aa[0]+1和aa+1都是数组元素aa[1]的地址。

由于&aa[0]是地址值常量,不能进行自加、自减运算,所以选项C不能代表aa[1]地址。

答案:

C

【例4.10】下列程序执行后的输出结果是()。

main()

{inta[3][3],*p,i;p=&a[0][0];

for(i=0;i<9;i++)p[i]=i+1;

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

}

A.3B.6C.9D.随机数

解析:

二维数组的物理存储结构为一维,即按行序顺序存储在连续存储空间中。

本题中,p为指向数组元素的指针变量,初始时,p指向a[0][0]。

通过指针p实现对对二维数组元素按行依次赋值。

a[1][2]即p[5],其值6。

答案:

B

【例4.11】下列程序的输出结果是()。

main()

{chara[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;

printf("%d",*--p);

}

A.运行出错B.a[4]的地址C.5D.3

解析:

初始时,p指向a[5]。

由于单目运算符的结合方向为右结合,所以,*--p等价于*(--p),即先执行--p,p指向a[4],再输出a[4]的值(5)。

答案:

C

【例4.12】若有如下定义,则b的值是()。

inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b=p[5];

A.5B.6C.8D.9

解析:

p指向a[3],即p=a+3;b=p[5],即b=*(p+5)。

因此,b=*(a+8)=a[8]=9。

答案:

D

【例4.13】若二维数组y有m列,则排在y[i][j]前的元素个数为()

A.j*m+i    B.i*m+jC.i*m+j-1   D.i*m+j+1

解析:

C语言中的二维数组按行存储。

行标为i的元素前共有i行元素,元素个数为i*m,每行列标为j的元素前共有j个元素。

因此,y[i][j]前的元素个数为i*m+j。

答案:

B

【例4.14】若有定义:

chara[10],*b=a;,则不能给数组a输入字符串”Thisisabook”的语句是()。

A.gets(a)B.scanf("%s",a)C.gets(&a[0]);D.gets(b);

解析:

gets为字符串输入函数,调用该函数时需给出字符串的存储地址,以回车作为字符串输入的结束,并将回车符转换成为’\0’。

而scanf函数则以回车、空格或跳格作为串输入结束,因此scanf不能输入有空格的字符串。

答案:

B

【例4.15】以下程序执行后的输出结果是()。

A.2B.3C.4D.5

#include"string.h"

main()

{char*p[10]={"abc","aabdfg","dcdbe","abbd","cd"};

printf("%d\n",strlen(p[4]));

}

解析:

定义了一个含有10个元素的字符指针数组p,并对前5个元素初始化,其中p[4]指向字符串"cd",其串长为2。

答案:

A

【例4.16】若定义一个名为s且初值为"123"的字符数组,则下列定义错误的是()。

A.chars[]={’1','2','3','\0'};B.chars[]={"123"};

C.chars[]={"123\n"};D.chars[4]={'1','2','3'};

解析:

字符数组中所存字符中有’\0’时,字符数组才能作为字符串使用。

选项A是用字符常量对字符数组初始化,且最后一个元素的值为字符串结束标记(’\0’),所以数组s中存放的就是字符串"123";选项D是用字符常量对部分元素初始化,根据C语言的规定,系统为第四个元素赋初值为空值,即'\0',所以数组s中存放的也是字符串"123"。

选项B是直接使用字符串"123"对字符数组初始化;选项C也是使用字符串初始化,但是字符串不是"123",而是"123\n",数组长度为5。

答案:

C

【例4.17】下列程序的功能是输入N个实数,然后依次输出前l个实数和、前2个实数和、…、前N个实数和。

填写程序中缺少的语句。

#defineN10

main()

{floatf[N],x=0.0;inti;

for(i=0;i

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

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

{①;

printf("sumofNO%2d---------%f\n",i,x);

}

}

解析:

分析程序可知,第一个循环实现数据的输入,第二个循环实现求和并输出,程序中缺少的是计算前i个实数和并存入变量x的语句。

由于每次循环的x值都是在前一次循环的基础上作累加,即前i个实数和(x)等于前i-1个实数和(x)加上第i个实数f[i-1],因此,①处应填写:

x=x+f[i-1];。

答案:

x=x+f[i-l];或x+=f[i-l];

【例4.18】下面程序的功能是检查一个N×N矩阵是否对称(即判断是否所有的a[i][j]等于a[j][i])。

请填空。

  #defineN4

main()

{inta[N][N]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4};

inti,j,found=0;

for(j=0;j

for(①;i

if(a[i][j]!

=a[j][i])

{②;

break;

}

if(found)printf("No");

elseprintf("Yes");

}

解析:

设置判断标志found,初始值为0。

对于主对角线以上每个元素,分别与对称元素比较,若不相等,则将fou

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1