1、【例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;B. int y5=0,1,3,5,7,9;C. char ch1 =1, 2345;D. char ch2 =x10xax8可以对一维数组的全部元素或部分
2、元素赋初值。在对全部数组元素初始化时,数组长度可以省略。若数组长度没有省略,则初始化列表中值的个数不能超过数组的长度。答案: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;定义二维数组时,若按一维格式初始化,则第一维的长度可以省略,此时,系统可根据初始化列表中值的个数及第二维的长度计算出省略的第一维长度,但无论如何,第二维的长度不能省略。没有初始化时,每一维的长度都不能省略。【例4.4】假定一个int型变量占用两个字节,若有定义:int x10=
3、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】以下程序的输出结果是( )。 int m3=1,4,7,2,5,8,3,6,9;int i,j,k
4、=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个元素。【例4.7】以下程序的输出结果是( )。 int b33=0,1,2,0,1,2,0,1,2,i,j,t=0;i+) for(j=i;j=i;j+) t=t+bibjj;%dn,t);A. 3 B. 4 C. 1 D. 9程序中,引用的b数组元
5、素的行下标为循环变量i,列下标为数组元素bjj。外层循环共进行3次,对于每次外循环,内层循环只执行一次(即j=i),所以变量t 的值为元素b0b00、b1b11、b2b22的和。由于数组元素b00、b11、b22的值分别为0、1、2,所以t的值为:0+0+1+2=3。【例4.8】若有定义:int a24;,则引用数组元素正确的是( )。A. a03 B. a04 C. a22 D. a22+1引用二维数组元素时,行下标范围为0行数-1,列下标范围为0列数-1。【例4.9】若有定义:int aa8;,则不能代表数组元素aa1地址的是( ) 。A. &aa0+1 B. &aa1 C. &aa0+
6、D. aa+1 &aa1、&aa0+1和aa+1都是数组元素aa1的地址。由于&aa0是地址值常量,不能进行自加、自减运算,所以选项C不能代表aa1地址。【例4.10】下列程序执行后的输出结果是( ) 。 int a33, *p,i;p=&a00;9;i+) pi=i+1;%d n,a12); A. 3 B. 6 C. 9 D. 随机数二维数组的物理存储结构为一维,即按行序顺序存储在连续存储空间中。本题中,p为指向数组元素的指针变量,初始时,p指向a00。通过指针p实现对对二维数组元素按行依次赋值。a12即p5,其值6。【例4.11】下列程序的输出结果是( )。 char a10=9,8,7,
7、6,5,4,3,2,1,0,*p=a+5;%d,*-p);A. 运行出错 B. a4的地址 C. 5 D. 3初始时,p指向a5。由于单目运算符的结合方向为右结合,所以,*-p等价于*(-p),即先执行-p,p指向a4,再输出a4的值(5)。 【例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. 9p指向a3,即p=a+3;b=p5,即b=*(p+5)。因此,b=*(a+8)=a8=9。【例4.13】若二维数组y有m列,则排在yij前的元素个数为( )A.j*m+iB.i*m+j C.
8、i*m+j-1 D.i*m+j+1C语言中的二维数组按行存储。行标为i的元素前共有i行元素,元素个数为i*m,每行列标为j的元素前共有j个元素。因此,yij前的元素个数为i*m+j。【例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不能输入
9、有空格的字符串。【例4.15】以下程序执行后的输出结果是( )。A. 2 B. 3 C. 4 D. 5#include string.hmain( ) char *p10= abc,aabdfgdcdbeabbdcd,strlen(p4);定义了一个含有10个元素的字符指针数组p,并对前5个元素初始化,其中p4指向字符串,其串长为2。【例4.16】若定义一个名为s且初值为123的字符数组,则下列定义错误的是( )。Achar s=1,0 Bchar s=Cchar s=123n Dchar s4=字符数组中所存字符中有0时,字符数组才能作为字符串使用。选项A是用字符常量对字符数组初始化,且最后
10、一个元素的值为字符串结束标记(0),所以数组s中存放的就是字符串;选项D是用字符常量对部分元素初始化,根据 C语言的规定,系统为第四个元素赋初值为空值,即0,所以数组s中存放的也是字符串 123。选项B是直接使用字符串对字符数组初始化;选项C也是使用字符串初始化,但是字符串不是,而是123n,数组长度为5。【例4.17】下列程序的功能是输入N个实数,然后依次输出前l个实数和、前2个实数和、前N个实数和。填写程序中缺少的语句。#define N 10 float fN,x=0.0;int i;N; scanf(%f,&fi); for(i=1;=N; ;sum of NO %2d-%fn,i,x
11、); 分析程序可知,第一个循环实现数据的输入,第二个循环实现求和并输出,程序中缺少的是计算前i个实数和并存入变量x的语句。由于每次循环的x值都是在前一次循环的基础上作累加,即前i个实数和(x)等于前i-1个实数和(x)加上第i个实数fi-1,因此,处应填写:xxfi-1;x=xfil; 或 xfil;【例4.18】下面程序的功能是检查一个NN矩阵是否对称(即判断是否所有的aij等于aji)。请填空。#define N 4 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;N-1; j+) for( ; i+) if(aij!=aji) ; break; if(found) printf(No); else printf(Yes设置判断标志found,初始值为0。对于主对角线以上每个元素,分别与对称元素比较,若不相等,则将fou