
C语言数组试题.pdf
35页62 第 4 章 数组4.1 内容概述本章主要介绍了数值数组和字符数组的定义、初始化、 元素引用和数组数据的输入与输出,字符数组实现字符串、字符串函数的实现与调用指针数组与数组指针定义、元素引用利用一维数组实现如挑数、排序、求和等实际应用问题利用二维数组实现矩阵的应用问题利用字符数组实现字符串的各种操作本章知识结构如图4.1 所示图 4.1 第 4 章知识结构图考核要求:掌握一维数组、二维数组、字符数组和指针数组的定义和初始化;掌握数组元素存储地址计算;掌握数组元素的下标法、指针法引用; 掌握字符数组与字符串的区别与联系;掌握有关字符串处理函数的使用方法;能利用一维数组、二维数组解决向量、矩阵等实际应用问题重点难点:本章的重点是一维数组、二维数组和字符数组的定义、初始化、元素引用,字符串处理函数的使用本章的难点是字符串与字符数组的区别,指针数组和数组元素的指针法引用核心考点:数组的定义、初始化和数组元素的引用方法,一维数组、二维数组和字符数组的实际应用,字符串的处理方法4.2 典型题解析【例 4.1 】以下对一维数组a 的定义中正确的是() A. char a(10); B. int a0.100;C. int a5; D. int k=10;int ak; 解析: 一维数组定义的一般形式为:类型标识符数组名 常量表达式 其中,常量表达式可以是任意类型,一般为算术表达式,其值表示数组元素的个数,即数组长度。
答案: C 【例 4.2 】以下对一维数组的定义中不正确的是() A. double x5=2.0,4.0,6.0,8.0,10.0; 数组数值数组定义初始化元素引用数组元素输入和输出指针数组定义初始化应用字符数组定义初始化元素引用数组元素输入和输出精品p d f 资料 - - - 欢迎下载 - - - - - - - - - - - - - - -欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 35 页 - - - - - - - - - - 63 B. int y5=0,1,3,5,7,9; C. char ch1 =1, 2, 3, 4, 5; D. char ch2 =x10, xa, x8; 解析: 可以对一维数组的全部元素或部分元素赋初值在对全部数组元素初始化时,数组长度可以省略若数组长度没有省略,则初始化列表中值的个数不能超过数组的长度答案 : B 【例 4.3 】以下对二维数组的定义中正确的是() Aint a4=1,2,3,4,5,6; B. int a3; Cint a3= 1, 2,3,4,5,6; D. int a1,2,3,4,5,6; 解析: 定义二维数组时,若按一维格式初始化,则第一维的长度可以省略,此时,系统可根据初始化列表中值的个数及第二维的长度计算出省略的第一维长度,但无论如何, 第二维的长度不能省略。
没有初始化时,每一维的长度都不能省略答案: C 【例 4.4 】假定一个int型变量占用两个字节,若有定义:int x10=0,2,4; 则数组x 在内存中所占字节数是() A. 3 B. 6 C. 10 D. 20 解析: 一维数组在内存中所占的字节数为:数组长度sizeof(元素类型 ) 答案: D 【例 4.5 】以下程序的输出结果是() main() int a44=1,3,5,2,4,6,3,5,7; printf(%d%d%d%dn,a03,a12,a21,a30); A. 0650 B. 1470 C. 5430 D. 输出值不定解析: 定义的数组a 为 4 行 4 列,且前三行三列元素已初始化,根据C 语法规定,未初始化的元素值为0答案: A 【例 4.6 】以下程序的输出结果是() main() int m3=1,4,7,2,5,8,3,6,9;int i,j,k=2; for(i=0;i3;i+) printf(%d ,mki); A. 4 5 6 B. 2 5 8 C. 3 6 9 D. 7 8 9解析: 根据初始化列表中值的个数和第二维的长度,可求得第一维长度为3。
第一行的元素值依次为1,4,7;第二行元素值依次为2,5,8;第三行元素值依次为3,6,9循环执行三次,依次输出行标为2 的三个元素,即第三行的3 个元素答案: C 【例 4.7 】以下程序的输出结果是() main() int b33=0,1,2,0,1,2,0,1,2,i,j,t=0; for(i=0;i3;i+) for(j=i;j=i;j+) t=t+bibjj; printf(%dn,t); 精品p d f 资料 - - - 欢迎下载 - - - - - - - - - - - - - - -欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 35 页 - - - - - - - - - - 64 A. 3 B. 4 C. 1 D. 9 解析: 程序中, 引用的 b 数组元素的行下标为循环变量i ,列下标为数组元素bjj外层循环共进行3 次,对于每次外循环,内层循环只执行一次(即j=i ) ,所以变量t 的值为元素b0b00、b1b11、b2b22的和由于数组元素b00、b11、b22的值分别为0、1、2,所以 t 的值为: 0+0+1+2=3答案: A 【例 4.8 】若有定义:int a24;,则引用数组元素正确的是() 。
A. a03 B. a04 C. a22 D. a22+1 解析: 引用二维数组元素时,行下标范围为0行数 -1 ,列下标范围为0列数 -1 答案: A【例 4.9 】若有定义:int aa8;,则不能代表数组元素aa1 地址的是() A. &aa0+1 B. &aa1 C. &aa0+ D. aa+1 解析: &aa1 、&aa0+1 和 aa+1 都是数组元素aa1 的地址 由于 &aa0 是地址值常量,不能进行自加、自减运算,所以选项C不能代表aa1 地址答案: C 【例 4.10 】下列程序执行后的输出结果是() main() int a33, *p,i;p=&a00; for(i=0;i9;i+) pi=i+1; printf(%d n,a12); A. 3 B. 6 C. 9 D. 随机数解析: 二维数组的物理存储结构为一维,即按行序顺序存储在连续存储空间中本题中, p 为指向数组元素的指针变量,初始时,p 指向 a00通过指针p 实现对对二维数组元素按行依次赋值a12即 p5 ,其值 6答案: B 【例 4.11 】下列程序的输出结果是( )main() char a10=9,8,7,6,5,4,3,2,1,0,*p=a+5; printf(%d,*-p); A. 运行出错 B. a4的地址 C. 5 D. 3 解析: 初始时, p 指向 a5 。
由于单目运算符的结合方向为右结合,所以,*-p等价于* (-p ) ,即先执行 -p ,p 指向 a4 ,再输出a4 的值( 5) 答案: C 【例 4.12 】若有如下定义,则b的值是() int a10=1,2,3,4,5,6,7,8,9,10,*p=&a3,b=p5; A. 5 B. 6 C. 8 D. 9 解析: p 指向 a3 ,即 p=a+3;b=p5 ,即 b=*(p+5) 因此, b=*(a+8)=a8=9答案: D 【例 4.13 】若二维数组y 有 m列,则排在yij前的元素个数为()A.j*m+i B.i*m+j C.i*m+j-1 D.i*m+j+1 解析: C语言中的二维数组按行存储行标为 i 的元素前共有i 行元素,元素个数为i*m ,精品p d f 资料 - - - 欢迎下载 - - - - - - - - - - - - - - -欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 35 页 - - - - - - - - - - 65 每行列标为j 的元素前共有j 个元素因此,yij前的元素个数为i*m+j 答案: B 【例 4.14 】若有定义: char a10,*b=a;,则不能给数组a 输入字符串”This is a book”的语句是 ( )。
A. gets(a) B. scanf(%s,a) C. gets(&a0); D. gets(b) ;解析: gets为字符串输入函数,调用该函数时需给出字符串的存储地址,以回车作为字符串输入的结束,并将回车符转换成为0 而 scanf 函数则以回车、 空格或跳格作为串输入结束,因此scanf 不能输入有空格的字符串答案: B 【例 4.15 】以下程序执行后的输出结果是() A. 2 B. 3 C. 4 D. 5 #include string.h main( ) char *p10= abc,aabdfg,dcdbe,abbd,cd; printf(%dn,strlen(p4); 解析:定义了一个含有10 个元素的字符指针数组p, 并对前 5 个元素初始化, 其中 p4指向字符串 cd ,其串长为2答案: A【例 4.16 】若定义一个名为s 且初值为 123 的字符数组, 则下列定义错误的是() Achar s=1 ,2 ,3 ,0 ; Bchar s=123; Cchar s=123n; Dchar s4=1,2 ,3; 解析: 字符数组中所存字符中有0 时,字符数组才能作为字符串使用。
选项 A是用字符常量对字符数组初始化,且最后一个元素的值为字符串结束标记(0 ) ,所以数组s 中存放的就是字符串123 ;选项 D是用字符常量对部分元素初始化,根据 C 语言的规定,系统为第四个元素赋初值为空值,即0,所以数组s 中存放的也是字符串 123 选项 B是直接使用字符串123 对字符数组初始化;选项C也是使用字符串初始化,但是字符串不是123 ,而是 123n ,数组长度为5答案: C 【例 4.17 】下列程序的功能是输入N个实数,然后依次输出前l 个实数和、前2 个实数和、前N个实数和填写程序中缺少的语句define N 10 main() float fN,x=0.0;int i; for(i=0;iN;i+) scanf(%f,&fi); for(i=1;i=N;i+) ; printf(sum of NO %2d-%fn,i,x); 解析: 分析程序可知, 第一个循环实现数据的输入,第二个循环实现求和并输出,程序中缺少的是计算前i 个实数和并存入变量x 的语句由于每次循环的x 值都是在前一次循环的基础上作累加,即前i 个实数和( x)等于前 i-1个实数和( x)加上第i 个实数 fi-1,精品p d f 资料 - - - 欢迎下载 - - - - - - - - - - - - - - -欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 35 页 - - - - - - - - - - 66 因此,处应填写:xxfi-1; 。
答案: x=xfil ; 或 x fil; 【例 4.18 】下面程序的功能是检查一个NN矩阵是否对称 (即判断是否所有的aij等于 aji) define N 4 main() int aNN=1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4; int i,j,found=0; for(j=0;jN-1; j+) for( ;iN; i+) if(aij!=aji) ; break; if(found) printf(No); else printf(Yes); 解析: 设置判断标志found ,初始值为0对于主对角线以上每个元素,分别与对称元素比较,若不相等,则将found 置为 1 并结束比较循环结束后,根据found 的值确定是否对称答案: i=j+1 found=1【例 4.19 】编写程序,从一整型数组a 的第一个元素开始,每三个元。
