数组习题及参考答案
- 格式:doc
- 大小:44.50 KB
- 文档页数:5
c语言数组练习题及答案第一题:在数组a中,存放有n个学生的成绩.试编一函数:将低于平均分的学生人数m由函数值返回,将低于平均分的分数由数组b带回. int fun(int a[],int n,int b[]) {int i,m=0,aver=0;for(i=0;i<n;i++) aver+=a[i];aver/=n;for(i=0;i<n;i++)if(a[i]<aver) b[m++]=a[i];return m;}第二题:试编一函数:求出1000之间能被7或11整除,但不能同时被7或11整除的所有整数的个数n由函数值返回,并将符合条件的数放在数组a中带回. int fun(int a[]){int i,n=0;for(i=1;i<1000;i++)if((i%7==0&&i%11!=0)||(i%7!=0&&i%11==0)) a[n++]=i;return n;}第三题:试编一函数:将大于整数m且紧靠m的k个素数存入数组a中. void fun(int m,int k,int a[]) {int i,n,data,flag;data=m+1; n=0;while(n<k){flag=1;for(i=2;i<=data/2;i++)if(data%i==0){flag=0; break;}if(flag) a[n++]=data;data++;}}第四题:试编一函数:在数组a中有n个整数,要求把下标从0到p(p小于等于n-1)的数平移到数组的最后.如:原始内容: 1,2,3,4,5,6,7,8,9,10; 当p=4时:移后内容: 6,7,8,9,10,1,2,3,4,5void fun(int a[],int n,int p) {int i,j,t;for(i=0;i<=p;i++){t=a[0];for(j=1;j<n;j++) a[j-1]=a[j];a[n-1]=t;}}第五题:试编一函数:在具有n个数据的数组a中,求出次最大值的下标并由函数值返回.int fun(int a[],int n){int i,j,max,may;if(a[0]>a[1]){max=0; may=1;}else {max=1; may=0;}for(i=2;i<n;i++)if(a[i]>a[max]){may=max;amx=i;}else if(a[i]>a[may]) may=i;return may;}第六题:在数组a中有n个四位数.试编一函数,要求按每个数的后三位的大小进行升序排列,当后三位等相同时,则对这些数值按原始四位数据进行降序排序.将排序后的前10个数存入数组b中.(提示:可采用选择排序)int fun(int a[],int n,int b[]) {int i,j,k,t,m=10;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(a[j]%1000<a[k]%1000) k=j;else if(a[j]%1000==a[k]%1000 && a[j]>a[k]) k=j;if(k!=i){t=a[i]; a[i]=a[k]; a[k]=t;}}for(i=0;i<m;i++) b[i]=a[i];return m;}第七题:在三位数(100至999)中寻找符合下面条件的整数.它即是完全平方数,又有两位数字相同.(如:144,676;)并将符合条件数的个数n由函数值返回,符合条件的数存入数组a中返回.int fun(int a[]){int i,j,hun,ten,data,n=0;for(i=10;i<32;i++){j=i*i;if(j>=100&&j<=999){hun=j/100;ten=j%100/10;data=j%10;if(hun==ten||ten==data||data==hun) a[n++]=j;}}return n;}第八题:判断一个长整型数是否为回文数(回文数是指其数字左右对称的整数).当该数是回文数时,函数值返回1,否则返回0.(提示:利用逻辑量flag进行操作). intfun(long m){int i=0,n=0,flag=1,a[20];while(m){a[n]=m%10; m=m/10; n++;}while(i<=n/2 && flag)if(a[i]!=a[--n] flag=0;else i++;return flag;}第九题:在数组a中存有n个数据,试编一函数:依次从数组中取出一个数据,如查该数连续大于该数以后的5个数且该数是奇数,统计出满足此条件数的个数m由函数值返回,并把这些数按从小到大的顺序存入数组b中.int fun(int a[],int n,int b[]) {int i,j,flag,m=0;for(i=0;i<n-5;i++){for(j=i+1;j<=i+5;j++)if(a[i]>a[j]) flag=1;else {flag=0; break;}if(flag==1 && a[i]%2==1) b[m++]=a[i];}for(i=0;i<m-1;i++)for(j=0;j<m-1-i;j++)if(b[j]>b[j+1]){flag=b[j]; b[j]=b[j+1]; b[j+1]=flag;}return m;}第十题:在数组a中有n个四位数,试编一函数:求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数m由函数值返回,再把所有满足此条件的四位数依次存入数组b中,然后对数组b中的四位数按从小到大的顺序排序.int fun(int a[],int n,int b[]) {int i,j,m,thou,hun,ten,data;for(i=0;i<n;i++){thou=a[i]/1000;hun=a[i]%1000/100;ten=a[i]%100/10;data=a[i]%10;if(thou+data==hun+ten) b[m++]=a[i];}for(i=0;i<m-1;i++)for(j=0;j<m-1-i;j++)if(b[j]<b[j+1]){data=b[j]; b[j]=b[j+1]; b[j+1]=data;}}第十一题:在数组a中有n=100个人围坐一圈并按顺时针方向从1到n编号,从第s=1个人开始进行从1到m=10的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止,现要求将出圈次序重新存入数组a中.void fun(int a[],int n,int s,int m) {int i,j,k,l,x;i=s-1; k=0; l=n;while(l>0){k++;if(k==m){x=a[i];for(j=i+1;j<n;j++) a[j-1]=a[j];a[n-1]=x;k=0; l--;}else i++;if(i==l) i=0;}}。
Java数组练习题(带答案)一填空题1)数组的元素通过下标来访问,数组Array的长度为Array、length 。
2)数组复制时,"="将一个数组的引用传递给另一个数组。
3)JVM将数组存储在栈(堆或栈)中。
4)数组的二分查找法运用的前提条件就是数组已经排序。
5)Java中数组的下标的数据类型就是整型。
6)数组最小的下标就是0 。
7)arraycopy()的最后一个参数指明复制元素的个数。
8)向方法传递数组参数时,传递的就是数组的引用。
9)数组初始化包括数组的申明,创建与初始化。
10)数组下标访问超出索引范围时抛出数组越界异常11)浮点型数组的默认值就是0、0f 。
12)数组创建后其大小不能改变。
二选择题1.下面错误的初始化语句就是_ABD__A、char str[]="hello";B、char str[100]="hello";C、char str[]={'h','e','l','l','o'};D、char str[]={'hello'};2.定义了一维int型数组a[10]后,下面错误的引用就是_B__A、a[0]=1;B、a[10]=2;C、a[0]=5*2;D、a[1]=a[2]*a[0];3.下面的二维数组初始化语句中,正确的就是____A、float b[2][2]={0、1,0、2,0、3,0、4};B、int a[][]={{1,2},{3,4}};C、int a[2][]= {{1,2},{3,4}};D、float a[2][2]={0};4.引用数组元素时,数组下标可以就是_D___A、整型常量B、整型变量C、整型表达式D、以上均可5.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为____A、24B、25C、18D、176.下列初始化字符数组的语句中,正确的就是__B__A、char str[5]="hello";B、char str[]={'h','e','l','l','o','\0'};C、char str[5]={"hi"};D、char str[100]="";7.数组在Java中储存在 C 中A、栈B、队列C、堆D、链表8.下面程序的运行结果就是____main() {int a[][]={{1,2,3},{4,5,6}};System、out、printf("%d", a[1][1]);}A、3B、4C、5D、69.下面程序的运行结果就是_C___main() {int x=30;int[] numbers=new int[x];x=60;System、out、println(numbers、length); }A、60B、20C、30D、5010.下面程序的运行结果就是__BDF__ main() {char s1[]="ABCDEF"、toCharArray();int i=0;while(s1[i++]!='\0')System、out、println(s1[i++]);}A、ABCDEFB、BDFC、ABCDED、BCDE11.下面不就是创建数组的正确语句CA、float f[][]=new float[6][6];B、float f[]=new float[6];C、float f[][]=new float[][6];D、float [][]f=new float[6][];12.下面不就是数组复制方法的就是(C)A、用循环语句逐个复制数组B、用方法arraycopyC、用"="进行复制D、用clone方法13.数组a的第三个元素表示为DA、a(3)B、a[3]C、a(2)D、a[2]14.当访问无效的数组下标时,会发生BA、中止程序B、抛出异常C、系统崩溃D、直接跳过15.使用arraycopy()方法将数组a复制到b正确的就是AA、arraycopy(a,0,b,0,a、length)B、arraycopy(a,0,b,0,b、length)C、、arraycopy(b,0,a,0,a、length)D、arraycopy(a,1,b,1,a、length)16.关于数组默认值,错误的就是BA、char--'"u0000'B、Boolean--trueC、float--0、0fD、int-- 017.关于数组作为方法的参数时,向方法传递的就是AA、数组的引用B、数组的栈地址C、数组自身D、数组的元素18.关于数组复制,下列说法错误的就是ACA、"="可以实现数组复制B、运用循环语句进行数组复制必须两个数组长度相同C、arraycopy()方法没有给目标数组分配内存空间D、数组复制就是数组引用的传递19.下列语句会造成数组new int[10]越界就是DA、a[0] += 9;B、a[9]=10;C、—a[9]D、for(int i=0;i<=10;i++) a[i]++;20.在JDK环境下编译JAVA源程序使用的命令就是(B )A、javaB、javacC、jvmD、tomcatD、子类不能使用父类的构造方法21.main方法就是java Application 程序执行的入口点。
第四部分数组4.1 选择题1. 以下关于数组的描述正确的是( )。
A. 数组的大小是固定的,但可以有不同的类型的数组元素B. 数组的大小是可变的,但所有数组元素的类型必须相同C. 数组的大小是固定的,所有数组元素的类型必须相同D. 数组的大小是可变的,可以有不同的类型的数组元素2. 以下对一维整型数组a的正确说明是( )。
<a(10); B. int n=10,a[n];n; D. #define SIZE 10scanf("%d",&n); int a[SIZE];int a[n];3. 在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]+1B. &bb[1]C. &bb[0]++D. bb+16. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是( )。
A. 3B. 6C. 10D. 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("%d",________ );┇}A. a+(i++)B. &a[i+1]C. a+iD. &a[++i]9. 执行下面的程序段后,变量k中的值为( )。
1.以下对一维整型数组a的定义,正确的是_。
(2分)A.int a(10) ;B.int n = 10 , a[n] ;C.int n ;scanf( "%d" , &n ) ;int a[n] ;D.int a[10] ;2.若有定义:int a[10] ;,则对a数组元素的正确引用是_。
(2分)A.a[10]B.a[3.5]C.a(5)D.a[10-10]3.对定义int a[10] = {6 , 7 , 8 , 9 , 10} ; 的正确理解是_。
(2分)A.将5个初值依次赋给a[1]--a[5]B.将5个初值依次赋给a[0]--a[4]C.将5个初值依次赋给a[6]--a[10]D.因为数组长度与初值个数不相同,所以此语句不正确4..若有定义:int a[3][4]; , 则对a数组元素的正确引用是_。
(2分)A.a[3][4]B.a[1,3]C.a[1+1][0]D.a(2)(1)5.以下对二维数组a初始化正确的语句是_。
(2分)A.int a[2][ ]={{0 , 1 , 2}, {3 , 4 , 5}};B.int a[ ][3]={{0, 1, 2}, {3, 4, 5}};C.int a[2][4]={{0, 1 , 2}, {3 , 4}, {5}};D.int a[ ][3]={{0, 1, 2}, { }, {3, 4}};6.对二维数组a进行如下初始化:int a[ ][3]={0 , 1 , 2 , 3 , 4 , 5};则a[1][1]的值是_。
(2分)A.0B.3C.4D.17.下面程序段的运行结果是_。
(2分)#include<stdio.h>int main( ){int i , x[3][3] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9} ;for( i = 0 ; i < 3 ; i++ )printf( "%2d" , x[i][2-i] ) ;return 0 ;}A.1 5 9B.1 4 7C.3 5 7D.3 6 98.以下对数组s的初始化,错误的是_。
第五章数组练习题及答案一、选择题1、判断字符串a和b是否相等,应当使用()A、if(a==b)B、if(a=b)C、if(strcpy(a,b))D、if(strcmp(a,b))2、以下正确的定义语句是()A、int a[1][4]={1,2,3,4,5};B、float x[3][]={{1},{2},{3}};C、long b[2][3]={{1},{1,2},{1,2,3}};D、double y[][3]={0};3、以下各组选项中,均能正确定义二维实型数组a的选项是()A、float a[3][4]; float a[ ][4]; float a[3][ ]={{1},{0}};B、float a(3,4); float a[3][4]; float a[ ][ ]={{0},{0}};C、float a[3][4]; static float a[ ][4]={{0},{0}}; auto float a[ ][4]={{0},{0},{0}};D、float a[3][4]; float a[3][ ]; float a[ ][4];4、下面程序的运行结果是()1—5 DDCBA 6—10 BDABB 11—15 CCCBC 16—20 DDCBB 21—25 BBAAA 26—30 DBDDB#include "stdio.h"main(){ char str[]="SSSWLIA",c;int k;for(k=2;(c=str[k]!='\0');k++){ switch(c){case 'I':++k;break;case 'L':continue;default:putchar(c);continue;}putchar('*');}}A、SSW*B、SW*C、SW*AD、SW5、下面程序段是输出两个字符串中对应相等的字符。
习题4一、单项选择题1.若有说明inta[3][4];则a数组元素的非法引用是【】A.a[0][2*1]B.a[1][3]C.a[4-2][0]D.a[0][4]【答案】D【解析】数组下标从0开始,a[0][4]的列下标越界。
2.在C++语言中,引用数组元素时,其数组下标的数据类型允许是【】A.整型常量B.整型表达式C.整型常量或整型表达式D.任何类型的表达式【答案】C3.以下不正确的定义语句是【】A.doublex[5]={2.0,4.0,6.0,8.0,10.0};B.inty[5]={0,1,3,5,7,9};C.charc1[]={′1′,′2′,′3′,′4′,′5′};D.charc2[]={x1′0′x,a′′x,8′′};【答案】B【解析】初始值的个数大于数组的大小,系统会出现编译错误。
4.对以下说明语句的正确理解是【】inta[10]={6,7,8,9,10};A.将5个初值依次赋给a[1]至a[5]B.将5个初值依次赋给a[0]至a[4]C.将5个初值依次赋给a[6]至a[10]D.因为数组长度与初值的个数不相同,所以此语句不正确【答案】B5.若有说明:inta[][4]={0,0};则下面不正确的叙述是【】A.数组a的每个元素都可得到初值0B.二维数组a的第一维大小为1C.当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小D.只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值【答案】D【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。
元素a[0][0]和a[0][1]赋初值为0,其余元素初值系统默认为0。
6.以下能对二维数组c进行正确的初始化的语句是【】A.intc[3][]={{3},{3},{4}};B.intc[][3]={{3},{3},{4}};C.intc[3][2]={{3},{3},{4},{5}};D.intc[][3]={{3},{},{3}};【答案】B【解析】二维数组初始化时,行大小可以省略,列大小不可以省略,所以A答案错误。
习题 4一、单项选择题1. 若有说明int a[3][4];则a数组元素的非法引用是【】A. a[0][2*1]B. a[1][3]C. a[4-2][0]D. a[0][4]【答案】D【解析】数组下标从0开始,a[0][4]的列下标越界。
2. 在C++语言中,引用数组元素时,其数组下标的数据类型允许是【】A. 整型常量B. 整型表达式C. 整型常量或整型表达式D. 任何类型的表达式【答案】C3. 以下不正确的定义语句是【】A. double x[5]={2.0,4.0,6.0,8.0,10.0};B. int y[5]={0,1,3,5,7,9};C. char c1[]={′1′,′2′,′3′,′4′,′5′};D. char c2[]={′\x10′,′\xa′,′\x8′};【答案】B【解析】初始值的个数大于数组的大小,系统会出现编译错误。
4. 对以下说明语句的正确理解是【】int a[10]={6,7,8,9,10};A. 将5个初值依次赋给a[1]至a[5]B. 将5个初值依次赋给a[0]至a[4]C. 将5个初值依次赋给a[6]至a[10]D. 因为数组长度与初值的个数不相同,所以此语句不正确【答案】B5. 若有说明:int a[ ][4]={0,0};则下面不正确的叙述是【】A. 数组a的每个元素都可得到初值0B. 二维数组a的第一维大小为1C. 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小D. 只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值【答案】D【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。
元素a[0][0]和a[0][1]赋初值为0 ,其余元素初值系统默认为0。
6. 以下能对二维数组c进行正确的初始化的语句是【】A. int c[3][]={{3},{3},{4}};B. int c[][3]={{3},{3},{4}};C. int c[3][2]={{3},{3},{4},{5}};D. int c[][3]={{3},{},{3}};【答案】B【解析】二维数组初始化时,行大小可以省略,列大小不可以省略,所以A答案错误。
第7章数组习题A卷1. 单项选择题(1) int a[4]={5,3,8,9};其中a[3]的值为(D )。
D A. 5 B. 3 C. 8 D. 9(2) 以下4 个字符串函数中,( A)所在的头文件与其他3 个不同。
A. getsB. strcpyC. strlenD. strcmp(3) 以下4 个数组定义中,( D)是错误的。
A. int a[7];B. #define N 5 long b[N];C. char c[5];D. int n,d[n];(4) 对字符数组进行初始化,(B )形式是错误。
A. char c1[ ]={'1', '2', '3'};B. char c2[ ]=123;C. char c3[ ]={ '1', '2', '3', '\0'};D. char c4[ ]="123";(5) 在数组中,数组名表示(A )。
A. 数组第1 个元素的首地址B.数组第2 个元素的首地址C. 数组所有元素的首地址D.数组最后1 个元素的首地址(6) 若有以下数组说明,则数值最小的和最大的元素下标分别是(B )int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12};A. 1,12B. 0,11C. 1,11D. 0,12(7) 若有以下说明,则数值为4 的表达式是(D )。
int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12};char c=’a’, d, g ;A. a[g-c]B. a[4]C. a['d'-'c']D. a['d'-c](8) 设有定义:char s[12] = "string" ;则printf( "%d\n",strlen(s)); 的输出是( A)。
一、单选题1、若有定义 char s[10];则在下面表达式中不表示s[1]的地址的是()。
A.s++B.&s[0]+1C.&s[1]D.s+1正确答案:A2、若有定义int a[5],*p=a;则对a数组元素的正确引用是()。
A.a+2B.*(a+2)C.*&a[5]D.*(p+5)正确答案:B3、若有定义int a[5],*p=a;则对a数组元素地址的正确引用是()。
A.p+5B.&a+1C.*a+1D.&a[0]正确答案:D4、若要对a进行合法的自减运算,则之前应有下面()的说明。
A.int b[10];int *a=b+1;B.int k;int *a=&k;C.int p[3];int *a=p;D.char *a[3];正确答案:A5、若有定义int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是()。
A.p1=x+3,*p1++B.x[3]C.p1=x+2,*++p1D.p1=x+2,*(p1++)正确答案:D6、设int x[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0},*p=x,k;且0≤k<10, 则对数组元素x[k]的错误引用是()。
A.x[p-x+k]B.p+kC.*(&x[k])D.*(x+k)正确答案:B7、设double *p[6];则()。
A.p是指针数组,其元素是指向double型变量的指针B.p是指向double型变量的指针C.p是double型数组D.p是数组指针,指向double型数组正确答案:A8、若有定义int x[6]={2,4,6,8,5,7},*p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是()。
A.for(i=0;i<6;i++) printf("%2d",*p++);B.for(i=0;i<6;i++) printf("%2d",*(p+i));C.for(i=0;i<6;i++) printf("%2d",*(p++));D.for(i=0;i<6;i++) printf("%2d",(*p)++);正确答案:D9、下面程序执行后的输出结果是()。
1、以行序优先顺序存储数组A[5][5];假定A[0][0]的地址为1000, 每个元素占4个字节,下标变量A[4][3]的地址是____。
A.1069B.1092C.1023D.1046正确答案:B2、数组a[1..6][1..5] (无0行0列)以列序优先顺序存储,第一个元素a[1][1]的地址为1000,每个元素占2个存储单元,则a[3][4]的地址是____。
A.1040B.1026C.1046D.1038正确答案:A3、设有一个5行4列的矩阵A,采用行序优先存储方式,A[0][0]为第一个元素,其存储地址为1000,A[2][2]的地址为1040,则A[3][0]的地址为_________。
A.1048B.1024C.1096D.1060正确答案:A4、设有一个10行10列的矩阵A,采用行序优先存储方式,存储全部数据需要400个字节的空间。
如果A[0][0]为第一个元素,其存储地址为1000,则A[3][6]的地址为_________。
A.1036B.1144C.1014D.10565、设有一个10行10列的矩阵A,采用行序优先存储方式。
如果A[0][0]为第一个元素,其存储地址为1000,A[2][3]的存储地址为1069,则存储一个元素需要的单元数是_________。
A.4B.1C.2D.3正确答案:D6、不能够对数据元素进行随机访问的物理结构是_________。
A.三元组顺序表B.对称矩阵的压缩存储C.三对角矩阵的压缩存储D.数组的顺序存储正确答案:A7、对特殊矩阵采用压缩存储的目的主要是_________。
A.表达变得简单B.去掉矩阵中的多余元素C.对矩阵元素的存储变得简单D.减少不必要的存储空间正确答案:D8、对n*n的对称矩阵进行压缩存储,需要保存的数据元素的个数是_________。
A.nB.n(n+1)/2C.n2D.n(n+1)9、设10*10的对称矩阵下三角保存SA[1..55]中,其中A[1][1]保存在SA[1]中,A[5][3] 保存在SA[k]中,这里k等于_________。
一、单选题1、下列描述中不正确的是()A.字符串的结束符是'\0'。
B.可以对字符型数组进行整体输入、输出。
C.字符型数组中能存放字符串。
D.字符串函数声明在ctype.h中。
正确答案:D2、下面是有关C语言字符数组的描述,其中错误的是()A.不可以用赋值语句给字符数组名赋字符串B.可以用输入语句把字符串整体输入给字符数组C.字符数组只能存放字符串D.字符数组中的内容不一定是字符串正确答案:C3、下面是对数组s的初始化操作,其中不正确的是()A.char s[5]= " ";B.char s[5]={'a'};C.char s[5]={"a"};D.char s[5]= "abcdef";正确答案:D4、下面叙述正确的是()A.字符串"123 "与"123"相等。
B.字符串"123"小于字符串"2"。
C.两个字符串所包含的字符个数不相同时,才能进行大小比较。
D.字符个数多的字符串比字符个数少的字符串大。
正确答案:B5、下面程序段的输出结果是()char a[7]=“123456”;char b[4]=”ABC”;strcpy(a,b);printf(“%c”,a[5]);A.\0B.C.5D.6正确答案:D6、以下对二维数组a的正确说明是__。
A.double a[1][4];B.float a(3)(4);C. floatf a(3,4);D. int a[3][];正确答案:A7、以下能对二维数组a进行正确初始化的语句是__。
A. int a[][3]={{1,2,3},{4,5,6}};B.int a[2][]={{1,0,1},{5,2,3}};C.int a [2][4]={{1,2,3},{4,5},{6}};D. int a[][3={{1,0,1},{},{1,1}};正确答案:A8、若有说明: int a[3][4]={0};则下面正确的叙述是__。
习题3 参考答案一、选择题3.1 C 分析:本题考查程序和数组的基本概念。
3.2 A 分析:字符串比较大小是以第1个不相同字符的大小为标准的,跟长度没有关系,B选项不正确;字符串比较大小除了使用库函数strcn3()以外,就只能靠自己写代码来实现了,而不能通过关系运算符来比较大小。
因为字符串在表达式中相当于const char*,即常字符指针,代表的是字符串的首地址,关系运算符会将两个字符串的首地址值比较大小,这是毫无意义的。
C选项不正确。
C语言中只有字符串常量而没有字符串变量,D选项描述不正确;空串的长度为0,而以空格打头的字符串的长度至少为1,因此A选项是正确。
3.3 A 分析:如果第一维的长度没有指定,则定义的同时需要完成初始化,否则不知道分配多大的内存空间给它,所以选项B、C错误;二维数组a[2][3]中只有两个元素,都是一维数组,一维下标最大只能是a[1],所以选项D错误;若完成初始化的二维数组,第一维的长度没有指定,则第一维的大小按如下规则确定:若初值个数能被第二维大小整除,所得的商就是第一维的大小,若不能整除,则所得的商加1作为第一维的大小,所以选项A相当于:double a[1][3] = {6};其中a[0][0]=6,其他元素赋值0,选项A正确,答案为A。
3.4 D 分析:本题考察的知识点是:字符串常量。
在C语言中,字符串常量是以双引号括起来的字符序列。
因此B选项和C选项不正确。
字符序列中可包含一些转义字符,转义字符都是以"\"开头的。
A选项中包含了三个"\",前两个(\\)代表了一个"\"字符,后面一个和"""一起(\")被看作一个""",所以该字符串缺少一个结束的""",因此不正确。
D选项的两个"""之间没有任何字符,代表的是一个空串,是合法的字符串常量,因此D选项正确。
数组练习题及答案问题1:数组的基本操作题目:编写一个程序,实现以下功能:1. 初始化一个整型数组,大小为10,所有元素初始化为0。
2. 将数组中的元素依次设置为1到10。
3. 输出数组中的所有元素。
答案:```c#include <stdio.h>int main() {int arr[10] = {0};for (int i = 0; i < 10; i++) {arr[i] = i + 1;}for (int i = 0; i < 10; i++) {printf("%d ", arr[i]);}return 0;}```问题2:数组的反转题目:编写一个函数,实现对整数数组的反转。
答案:```cvoid reverseArray(int arr[], int size) {int start = 0;int end = size - 1;while (start < end) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp;start++;end--;}}```问题3:数组的查找题目:编写一个函数,实现在数组中查找特定元素的索引,如果找到返回该元素的索引,如果未找到返回-1。
答案:```cint findElement(int arr[], int size, int element) {for (int i = 0; i < size; i++) {if (arr[i] == element) {return i;}return -1;}```问题4:数组的排序题目:使用冒泡排序算法对整数数组进行排序。
答案:```cvoid bubbleSort(int arr[], int size) {for (int i = 0; i < size - 1; i++) {for (int j = 0; j < size - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}```问题5:数组的动态扩展题目:编写一个函数,实现对数组的动态扩展,使其能够存储更多的答案:```cvoid dynamicArrayExpansion(int *arr, int *size, int capacity, int newElement) {if (*size >= capacity) {int newCapacity = capacity * 2;int *newArr = (int *)malloc(newCapacity *sizeof(int));for (int i = 0; i < *size; i++) {newArr[i] = arr[i];}free(arr);arr = newArr;capacity = newCapacity;}arr[(*size)++] = newElement;}```结束语:这些练习题涵盖了数组的基本操作、查找、排序和动态扩展等常见问题,希望能够帮助您更好地理解和掌握数组的使用。
一、选择题1. 将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。
供选择的答案:A. 198B. 195C. 1972. 二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。
从供选择的答案中选出应填入下列关于数组存储叙述中()内的正确答案。
(1)存放A至少需要(E)个字节;(2)A的第8列和第5行共占(B)个字节;(3)若A按行存放,元素A[8,5]的起始地址与A按列存放时的元素( B )的起始地址一致。
供选择的答案:(1)A. 90 B. 180 C. 240 D. 270 E. 540(2)A. 108 B. 114 C. 54 D. 60 E. 150(3)A. A[8,5] B. A[3,10] C. A[5,8] D. A[0,9]3. 设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij(1≤i,j≤n,且i≤j)在B中的位置为( A )。
A. i(i-l)/2+jB. j(j-l)/2+iC. j(j-l)/2+i-1D. i(i-l)/2+j-14. A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是(B)。
A. i(i-1)/2+jB. j(j-1)/2+iC. i(j-i)/2+1D. j(i-1)/2+15. 设二维数组A[1.. m,1..n](即m行n列)按行存储在数组B[1.. m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为( A)。
A.(i-1)*n+jB.(i-1)*n+j-1C. i*(j-1)D. j*m+i-16.有一个二维数组A,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储。
构造数据对象——数组一、填空题1.数组是一组相同的集合。
2.数组名代表数组的。
3.数组元素在数组中的位置序号称为它是从开始整数。
4.有int a[ ]={4,6,2,12,435,-9,76,0,0};该数组元素值最大的下标为。
5.定义数组tw,其能存储23个长整形数的语句为。
6.有说明语句int a[10]={1,2,3,4,5,6};则元素a[9]的值为。
7.数组char c[ ]=”abcd”中有个元素,最后一个元素是。
8.”a”在内存中占个存储单元。
9.定义一个能存放下字符串Vocation的字符数组enm的语句为。
10.定义一个可保存100个整型数的数组pn,并把每个元素初值设为0的语句是。
11.与puts(ss)等价的printf函数调用是。
二、选择题1.下面关于数组的说法,不正确的是()A.数组总为一个整体,可以参加算术运算B.数组中的数组元素相当于一个简单变量C.数组可以用来保存字符串D.数组是一组连续的,类型相同的数据集合2.下列说法不是数组特性的是()A.数组元素类型相同B.数组长度固定C.数组占用连续的内存空间D.数组可作为一个整体参与运算3.定义一个具有8个元素的整形数组,应使用语句()A.int a[8]; B.int a[2,4];C.int a[ ]; D.int *a[8];4. 以下能正确定义一维数组的选项是()A.int num[ ];B.#define N 100 int num[N];C.int num[0..100];D.int N=100;5.下面对s的初始化,不正确的是()A.char s[5]={“abcd”};B.char s[5]={‘a’,’b’,’c’};C.char s[5]=””;D.char s[5]=”abcd”;6.对以下说明语句正确的理解是()int a[10]={6,7,8,9,10,12};A.将6个初值依次赋值给a[1]至a[5];B.将6个初值依次赋值给a[0]至a[5];C.将6个初值依次赋值给a[5]至a[10];D.因数组长度和初值的个数不同,所以此语句不正确7.用scanf语句为数组a中的第二个数组元素输入数据,格式正确的是()A.scanf(“%d”,a[2]);B.scanf(“%d”,&a[2]);C.scanf(“%d”,&a[1]);D.scanf(“%d”,a(1));三、判断题1.数组在内存中占用的空间是不连续的。
C语言习题六(数组部分)习题及答案习题六一.选择题1.在C语言中,引用数组元素时,其数组下标的数据类型允许是c 。
A)整型常量B)整型表达式C)整型常量或整型表达式C)任何类型的表达式2.以下对一维整型数组a的正确说明是DA)int a(10) ; B)int n=10,a[n];C)int n; D)#define SIZE 10scanf(“%d”,&n);int a[SIZE];int a[n];3.若有定义:int a[10],则对数组a元素的正确引用是 D 。
A)a[10] B)a[3.5] C)a(5) D)a[10-10]4.以下不能对一维数组a进行正确初始化的语句是B 。
A)int a[10]={0,0,0,0,0}; B)int a[10]={} ;C)int a[ ] = {0} ; D)int a[10]={10*1} ;5.若有定义:int a[3][4],则对数组a元素的正确引用是。
AA)a[2][3] B)a[1,3] C)a(5) D)a[10-10]6.以下能对二维数组a进行正确初始化的语句是B。
A)int a[2][]={{1,0,1},{5,2,3}} ;B)int a[][3]={{1,2,3},{4,5,6}} ;C)int a[2][4]={{1,2,3},{4,5},{6}} ;D)int a[][3]={{1,0,1},{},{1,1}} ;7.以下不能对二维数组a进行正确初始化的语句是。
CA)int a[2][3]={0} ;B)int a[][3]={{1,2},{0}} ;C)int a[2][3]={{1,2},{3,4},{5,6}} ;D)int a[][3]={1,2,3,4,5,6} ;8.若有说明:int a[3][4]={0};则下面正确的叙述是D。
A)只有元素a[0][0]可得到初值0B)此说明语句不正确C)数组a中各元素都可得到初值,但其值不一定为0D)数组a中每个元素均可得到初值09.若有说明:int a[][4]={0,0};则下面不正确的叙述是D。
第七章数组
一、单项选择题
1.若有说明“int a[3][4]={0};”,则下面正确的是_____。
A.只有元素a[0][0]可得到初值0
B. 此说明语句不正确
C. 数组a各元素都可得到初值,但其值不一定是0
D. 数组a中每个元素均可得到初值0
2.以下不能正确定义二维数组的选项是_____。
A. int a[2][2]={{1},{2}}
B. int a[2][2]={{1},2,3}
C. int a[2][]={{1,2},{3,4}}
D. int a[][2]={1,2,3,4}
3.在下列对字符数组进行初始化中正确的是_____。
A.char s1[]=”abcd”
B.char s2[3]=”xyz”
C.char s3[][]={…a‟,‟x‟,‟y‟}
D.char s4[2][3]={“xyz”,”mnp”}
二、写出下列程序的运行结果
有以下程序:
1. #include <iostream.h>
int main ()
{
int a[]={4,0,2,3,1},i,j,t;
for(i=1;i<5;i++)
{
t=a[i];j=i-1;
while(j>=0&&t>a[j])
{
a[j+1]=a[j];
a[j]=t;
j--;
}
}
for(i=0;i<5;i++)
{
cout<<a[i]<<‟…;
}
return 0;
}
三、编程题
1. 任意输入15个正整数,将这15个数排成一圈,编程找出其中的连续4个数,使得它们的和最大(不小于任意其他连续4个数的和)。
2. 设有4行4列队数组b,其元素为b[i][j]=i+j+1(i,j=0,1,2,3)。
编程实现:
(1)求第二列元素之和。
(2)求第三列元素的平均值。
(3)求数组b中的最大数,最小数及主对角线元素的平方和。
第七章数组一、单项选择题
二、写出下列程序的运行结果
1. 4 3 2 1
三、编程题
1.
#include <iostream.h>
void main()
{
const int n=15;
int i,a[n];
cout<<"Input"<<n<<"positive integers:"<<endl;
for(i=0;i<n;i++)
cin>>a[i];
int max4=0,s4,start,t1,t2,t3,t4;
for(i=0;i<n;i++)
{
t1=i%n;
t2=(i+1)%n;
t3=(i+2)%n;
t4=(i+3)%n;
s4=a[t1]+a[t2]+a[t3]+a[t4];
if(s4>max4)
{
max4=s4;
start=i;
}
}
t1=start;
t2=(start+1)%n;
t3=(start+2)%n;
t4=(start+3)%n;
cout<<"max4="<<a[t1]<<"+"<<a[t2]<<"+"<<a[t3]<<"+"<<a[t4]<<"最大,这四个数的下标为"<<t1<<','<<t2<<','<<t3<<','<<t4<<endl;
}
输出结果:
Input 15 positive integers:
88 99 1 2 3 4 5 6 7 8 9 10 55 66 1
max4=66+1+88+99 最大,这四个数的下标为13,14,0,1
2.
#include <iostream.h>
void main()
{
int b[4][4],i,j;
/*为数组b各元素赋值*/
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
b[i][j]=i+j+1;
cout<<" "<<b[i][j];
}
cout<<endl;
}
cout<<"--The result--"<<endl;
//求第二行元素之和
int sum_line2=0;
for(j=0;j<4;j++)
sum_line2+=b[1][j];
cout<<"sum_line2="<<sum_line2<<endl;
//求第三行元素之平均值
int sum_col3=0;
for(i=0;i<4;i++)
sum_col3+=b[i][2];
cout<<"ave_col3="<<sum_col3/4.0<<endl;
//求最大数,最小数及主对角线元素之平方和
int max_elem=b[0][0],min_elem=b[0][0],sum_diag=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(b[i][j]>max_elem)max_elem=b[i][j];
if(b[i][j]<min_elem)min_elem=b[i][j];
if(i==j)sum_diag+=b[i][j]*b[i][j];
}
}
cout<<"max_elem="<<max_elem<<endl;
cout<<"min_elem="<<min_elem<<endl;
cout<<"sum_diag="<<sum_diag<<endl;
}
输出结果:
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
--the result—
sum_line2=14
ave_col3=4.5
max_elem=7
min_elem=1
sum_diag=84。