习题九数组的定义和使用1. 有以下程序void f (int b[]){ int i;for(i=2;i<6;i++) b[i]* =2;}main(){ int a[10]={1,2,3,4,5,6,7,8,9,10},i;f(a);for(i=0;i<10;i++) printf("%d,",a[i]);}程序运行后的输出结果是______。
A、1,2,3,4,5,6,7,8,9,10,B、1,2,6,8,10,12,7,8,9,10,C、1,2,3,4,10,12,14,16,9,10,D、1,2,6,8,10,12,14,16,9,10,解析:本题在调用函数时,实参是&a[0]的地址,即把a[0]的地址传给形参,由条件i=2且i<6得出函数将对a[2]开始的4个元素(3,4,5,6)进行乘以2操作,结果分别为:a[2]=6,a[3]=8,a[4]=10,a[5]=12。
a[0]、a[1]、a[6]、a[7]、a[8]、a[9]的值并没有发生变化,所以最后的输出结果为:1,2,6,8,10,12,7,8,9,10,。
故本题答案选B。
2. 有以下程序main(){ int a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t;for(i=0;i<4;i++)for(j=0;j<3;j++)for(k=j+1;k<4;k++)if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;} /*按列排序*/for(i=0;i<4;i++) printf("%d,",a[i][i]);}程序运行后的输出结果是______。
A、1,6,5,7,B、8,7,3,1,C、4,7,5,2,D、1,6,2,1,解析:本题首先定义了一个4行4列的二维数组a,并用了三层循环来进行按列由小到大排序操作。
外层循环变量i表示数组的列,第二层循环变量j表示数组的行,第三层循环用于求第i列第j行的最小值,其中通过if语句对相关数值进行比较和交换。
然后再通过for语句对排序数组对角线上的值进行输出,即输出a[0][0]、a[1][1]、a[2][2]、a[3][3]。
故本题答案选A。
3. 有以下程序main(){ int i,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++) printf("%d ",t[2-i][i]);}程序执行后的输出结果是______。
A、7 5 3B、3 5 7C、3 6 9D、7 5 1解析:本题考查的是二维数组的应用。
将初始值放在一对大括号内,按数组元素排列的顺序对各元素赋值,二维数组中行下标可以省略,但列下标必须要指定,由此题可以看出数组t是一个三行三列的二维数组,执行for循环语句t[2-i][i]分别为t[2][0],t[1][1],t[0][2],得出输出结果为3 5 7。
故本题答案为B。
4. 有以下程序#include <string.h>main(){ char p[]={'a','b','c'},q[10]={'a','b','c'};printf("%d %d\n",strlen(p),strlen(q)); }以下叙述中正确的是______。
A、在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3B、由于p数组中没有字符串结束符,长度不能确定;但q数组中字符长度为3C、由于q数组中没有字符串结束符,长度不能确定;但p数组中字符长度为3D、由于p和q数组中没有字符串结束符,故长度都不能确定解析:strlen是计算以"\0"结束的字符串的长度的函数,函数的值为字符串中实际长度,不包括"\0"。
题中"q[10]={'a','b','c'}"虽然给出了数组大小,即数组实际分配的存储空间,但此字符串只占用前3个存储单元,其余存储单元系统自动加上"\0",故数组q的长度为3;由于p数组中没有字符串结束符,故字符串的长度不能确定。
故本题答案为B。
5. 有以下程序void sort(int a[],int n){int i,j,t;for(i=0;i<n;i++)for(j=i+1;j<n;j++)if(a[i]<a[j]){ t=a[i]; a[i]=a[j]; a[j]=t; }}main(){ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(aa+2, 5);for(i=0;i<10;i++) printf("%d,",aa[i]);printf("\n");}程序运行后的输出结果是______。
A、1,2,3,4,5,6,7,8,9,10,B、1,2,7,6,3,4,5,8,9,10,C、1,2,7,6,5,4,3,8,9,10,D、1,2,9,8,7,6,5,4,3,10,解析:程序中sort函数的作用是将指定的数由大到小排序。
主调函数"sort(aa+2, 5);"中的实参aa+2是指aa[2]的地址,将其传给了形参a[],使得形参中a[0]的值为主函数中aa[2]的值,即3;实参中的5传给形参中的n,在sort函数中起着限制循环次数的作用,即使得参加排序的只有5个数,从aa[2]到aa[6],所以本题输出的结果是1,2,7,6,5,4,3,8,9,10,。
故本题答案为C。
6. 有以下程序main(){char p[]={'a','b','c'},q[]="abc";printf("%d %d\n",sizeof(p),sizeof(q)); }程序运行后的输出结果是______。
A、4 4B、3 3C、3 4D、4 3解析:本题考查的是字符数组。
字符数组有两种定义方式:一种是逐个字符赋给数组中各元素,如本题中"p[]={'a','b','c'}"的定义,由于定义时没有给出数组大小,此时字符个数就是数组的长度;另一种是将字符串作为字符数组来处理,如题中"q[]="abc""的定义形式。
C语言规定,字符串以'\0'作为结束符,并占用一个存储空间。
sizeof()函数是计算变量或数组所分配到的内存空间的大小,故本题的输出结果是3 4。
故本题答案为C。
7. 已有定义:char a[]="xyz",b[]={'x','y','z'};,以下叙述中正确的是______。
A、数组a和b的长度相同B、a数组长度小于b数组长度C、a数组长度大于b数组长度D、上述说法都不对解析:本题考查的是数组定义。
C语言规定'\0'为字符串结束标志,系统对字符串常量自动加一个'\0'为结束符。
所以a数组长度为4,而b数组长度为3(此处的数组长度与strlen函数所求的长度不同,此处的长度是指数组占内存空间的大小),故a数组长度大于b数组长度。
故本题答案为C。
8. 以下叙述中错误的是______。
A、对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B、数组名代表的是数组所占存储区的首地址,其值不可改变C、当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出"下标越界"的出错信息D、可以通过赋初值的方式确定数组元素的个数解析:本题考查的是数组的概念。
在C语言中,如果出现下标越界的情况,系统不管在编译还是执行时都不会给出"下标越界"的错误提示。
故本题答案为C。
9. 以下能正确定义一维数组的选项是______。
A、int a[5]={0,1,2,3,4,5};B、char a[]={0,1,2,3,4,5};C、char a={'A','B','C'};D、int a[5]="0123";解析:本题考查的是数组的定义。
选项A中定义的是5个数组元素,但赋值的时候赋的是6个元素,所以出错;选项C不符合数组定义形式,数组名后应加上"[]";选项D的类型说明符错误,如果用char定义就对了;选项B中的0,1,2,3,4,5分别表示对应字符的ASCII码,所以选项B是正确的。
故本题答案为B。
10.以下能正确定义二维数组的是______。
A、int a[][3];B、int a[][3]={2*3};C、int a[][3]={};D、int a[2][3]={{1},{2},{3,4}};解析:本题考查的是二维数组的定义。
选项B不符合二维数组的定义规范,选项C中不能赋空值,选项D中a[2][3]表示a是一个2行3列的数组,而后面赋值却赋了3行,故本题答案为A。
11.有以下程序main(){ int x[]={1,3,5,7,2,4,6,0},i,j,k;for(i=0;i<3;i++)for (j=2;j>=i;j--)if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}for (i=0;i<3;i++)for(j=4;j<7-i;j++)if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}for (i=0;i<8;i++) printf("%d",x[i]);printf("\n");}程序运行后的输出结果是______。
A、75310246B、01234567C、76310462D、13570246解析:本题考查的是排序算法。
故本题答案为A。
12.有以下程序:void sort(int a[],int n){ int i,j,t;for(i=0;i<n-1;i+=2)for(j=i+2;j<n;j+=2)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}}main(){ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(aa,10);for(i=0;i<10;i++) printf("%d,",aa[i]);printf("\n");}其输出结果是______。