数组 习题答案
第5章《数组》复习题

第5章数组一、选择题1、下列关于数组的描述正确是:()A) 数组的长度是固定的,而其中元素的数据类型可以不同B) 数组的长度是固定的,而其中元素的数据类型必须相同C) 数组的长度是可变的,而其中元素的数据类型可以不同D) 数组的长度是可变的,而其中元素的数据类型必须相同2、在C++语言中引用数组元素时,下面关于数组下标数据类型的说法错误的是:()A) 整型常量 B) 整型表达式C) 整型常量或整型表达式 D) 任何类型的表达式3、要定义数组A,使得其中每个元素的数据分别依次为:3、9、4、8、0、0、0,错误的定义语句是:()A) int A[]={3,9,4,8,0,0,0}; B) int A[9]={3,9,4,8,0,0,0};C) int A[]={3,9,4,8}; D) int A[8]={3,9,4,8};4、有如下数组声明:int value[30];,下标值引用错误的是:()A) value[30] B) value[0] C) value[10] D) value[20]5、以下叙述中错误的是:()A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统自动扩展数组长度D)可以通过赋初值的方式确定数组元素的个数6、在C++语言中,一维数组的定义方法为:()。
类型说明符数组名A)[常量表达式] B)[整型常量] C)[整型变量] D)[整型常量]或[整型表达式]7、对以下说明语句的正确理解是()。
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)因为数组长度与初值的个数不相同,所以此语句不正确8、假定short类型变量占用两个字节,其有定义:short x[10]={0,2,4};,则数组x在内存中所占字节数是()。
C语言习题集合(数组)

C语言习题集合(数组)第四章数组4.1 选择题1. 以下关于数组的描述正确的是( )。
A. 数组的大小是固定的,但可以有不同的类型的数组元素B. 数组的大小是可变的,但所有数组元素的类型必须相同C. 数组的大小是固定的,所有数组元素的类型必须相同D. 数组的大小是可变的,可以有不同的类型的数组元素2. 以下对一维整型数组a的正确说明是( )。
A.int a(10);B. int n=10,a[n];C.int n;D. #define SIZE 10 scanf("%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类型变量占用两个字节,其有定义:intx[10]={0,2,4};,则数组x在内存中所占字节数是( )。
A. 3B. 6C. 10D.207. 若有以下说明: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. 以下程序段给数组所有的元素输入数据,请选择正确答案填入( )。
数据结构第三四章习题答案

第3章栈和队列习题1.选择题(1)若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在()种情况。
A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1(2)若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为()。
A.i B.n-i C.n-i+1 D.不确定(3)数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为()。
A.r-f B.(n+f-r)%n C.n+r-f D.(n+r-f)%n (4)链式栈结点为:(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。
A.x=top->data;top=top->link; B.top=top->link;x=top->link;C.x=top;top=top->link; D.x=top->link;(5)设有一个递归算法如下int fact(int n) { 线性表的链式存储结构 D. 栈(11)用链接方式存储的队列,在进行删除运算时()。
A. 仅修改头指针B. 仅修改尾指针C. 头、尾指针都要修改D. 头、尾指针可能都要修改(12)循环队列存储在数组A[0..m]中,则入队时的操作为()。
A. rear=rear+1B. rear=(rear+1)%(m-1)C. rear=(rear+1)%mD. rear=(rear+1)%(m+1)(13)最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。
A. (rear+1)%n==frontB. rear==frontC.rear+1==front D. (rear-l)%n==front(14)栈和队列的共同点是()。
第4章_数组c++_习题答案解析

习题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答案错误。
数据结构(第二版)课后习题答案(王红梅主编)

第 1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
【解答】数据元素⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。
【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。
⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。
【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。
【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。
【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。
【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺在一般情况下,一个算法的时间复杂度是()的函数。
【解答】问题规模⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。
【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。
2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。
A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。
⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是()。
数组c习题答案解析

习题 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答案错误。
c语言数组习题集

第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)。
数据结构(第二版)习题谜底第4章[基础]
![数据结构(第二版)习题谜底第4章[基础]](https://img.taocdn.com/s3/m/be11a913cd1755270722192e453610661fd95a55.png)
数据结构(第二版)习题答案第4章第4章字符串、数组和特殊矩阵4.1稀疏矩阵常用的压缩存储方法有(三元组顺序存储)和(十字链表)两种。
4.2设有一个10 × 10的对称矩阵 A采用压缩方式进行存储,存储时以按行优先的顺序存储其下三角阵,假设其起始元素 a00的地址为 1,每个数据元素占 2个字节,则 a65的地址为( 53 )。
4.3若串S =“software”,其子串的数目为( 36 )。
4.4常对数组进行的两种基本操作为(访问数据元素)和(修改数组元素)。
4.5 要计算一个数组所占空间的大小,必须已知(数组各维数)和(每个元素占用的空间)。
4.6对于半带宽为 b的带状矩阵,它的特点是:对于矩阵元素 aij,若它满足(|i-j|>b),则 aij = 0。
4.7字符串是一种特殊的线性表,其特殊性体现在(该线性表的元素类型为字符)。
4.8试编写一个函数,实现在顺序存储方式下字符串的 strcompare (S1,S2)运算。
【答】:#include <stdio.h>#include <string.h>#define MAXSIZE 100typedef struct{char str[MAXSIZE];int length;}seqstring;/* 函数 strcompare()的功能是:当 s1>s2时返回 1,当 s1==s2时返回 0,当 s1<s2时返回-1*/int strcompare(seqstring s1,seqstring s2){ int i,m=0,len;len=s1.length<s2.length ?s1.length:s2.length;for(i=0;i<=len;i++)if(s1.str[i]>s2.str[i]){m=1;break;}else if(s1.str[i]<s2.str[i]){m=-1;break;}return m;}int main(){ seqstring s1,s2;int i,m;printf("input char to s1:\n");gets(s1.str);s1.length=strlen(s1.str);printf("input char to s2:\n");gets(s2.str);s2.length=strlen(s2.str);m=strcompare(s1,s2);if(m==1) printf("s1>s2\n");else if(m==-1) printf("s2>s1\n");else if(m==0) printf("s1=s2\n");}4.9试编写一个函数,实现在顺序存储方式下字符串的replace(S,T1,T2)运算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1: /*编写程序,用筛选法求100 之内的素数。
*/ #include <>void main (){int i,j;for (i=2; i<100; i++){for (j=2; j<i; j++){if (i%j== 0)break;}if (j == i)printf("%d\t", i);}}2/*输入一整数,并能逐位正序或反序输出。
*/#include <>void main(){int num,a,i=0;printf("输入一个数字\n");scanf("%d",&num);printf("正序输出则输入1 反序输出输入0\n"); scanf("%d",&a);switch(a){case 1:printf("%d",num); break;case 0:while(0!=num){i=i*10+num%10;num=num/10;}printf("%d",i);break;default:printf("请输入0 和1!!\n");break;}}3/*对于一个4X4 矩阵逆时针旋转90 度*/#include <>void main(){int a[4][4],i,j,b[4][4];for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);for(i=0;i<4;i++)for(j=0;j<4;j++){b[3-j][i]=a[i][j];}printf("逆时针旋转90 度后:\n");for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d ",b[i][j]);}printf("\n");}}4: /*将一个数组中的数据奇数放到前面,偶数放到后面。
*/ #include <>void main (){int a[9],b[9],i,j=0,m=0;for(i=0;i<9;i++)scanf("%d",&a[i]);for(i=0;i<9;i++){if(a[i]%2!=0){b[j]=a[i];j++;}else{b[8-m]=a[i];m++;}}printf("%d",b[i]);}5: /*输入一个4X4 的矩阵,求四个边上元素的和。
*/#include <>void main (){int i,j,a[4][4],sum;printf("输入一个4 阶方阵:\n");for (i=0;i<4;i++)for (j=0;j<4;j++)scanf("%d",&a[i][j]);sum=a[0][0]+a[0][3]+a[3][0]+a[3][3];printf("四个边上元素的和为%d\n",sum);}6:/*输入9 个10 以内的自然数,将它们组成两个整数,求如何组合得到两个数的成绩最大或最小。
*/#include <>#include <>void main (){int j,k;int i;int t;int a=0,b=0;int flag=1;int num[9];int max,max_a,max_b;int min,min_a,min_b;printf("输入9 个10 以内的自然数:");for(j=0;j<9;j++)scanf("%d",&num[j]);for(j=0;j<8;j++)for(k=0;k<8-j;k++)if(num[k]>num[k+1]){t=num[k+1];num[k+1]=num[k];num[k]=t;}for(i=1;i<511;i++){{if((i&(int)pow,j))==0)a=a*10+num[j];elseb=b*10+num[j]; }if(flag){max=a*b;max_a=a;max_b=b;flag=0;}if(max<a*b){max=a*b;max_a=a;max_b=b;}a=0;b=0;}flag=1;for(j=0;j<8;j++)for(k=0;k<8-j;k++)if(num[k]<num[k+1]){t=num[k+1];num[k+1]=num[k]; num[k]=t;}for(i=1;i<511;i++){for(j=8;j>=0;j--){if((i&(int)pow,j))==0)a=a*10+num[j];elseb=b*10+num[j]; }if(flag){min=a*b;min_a=a;min_b=b;flag=0;}if(min>a*b){min=a*b;min_a=a;min_b=b;}a=0;b=0;}printf("最小的数为%d x %d = %d\n",min_a,min_b,min);printf("最大的数为%d x %d = %d\n",max_a,max_b,max);}7: /*输入一个数组,输出它的区间范围,例如输入1,2,3,4,5,6,7,8,20,21,22,23,输出1-8,20-23。
*/#include <>void main ()#define M 5{int a[M],i,j,t,m,k;for(i=0;i<M;i++)scanf("%d",&a[i]);/* 把数组从小到大排列*/for(i=0;i<M-1;i++){for(j=0;j<M-1-i;j++){if(a[j]>a[j+1]){t=a[j+1];a[j+1]=a[j];a[j]=t;}}}j=0;for(i=0;i<M;i++){while(a[j]+1==a[j+1]){j++;}if(j-i!=0){printf("%d-%d\n",a[i],a[j]);i=j;j++;}if(j-i==0){printf("%d\n",a[i]);i=j;j++;}}}8:/*输入一个区间范围,输出数组,例如输入1-8,20-23,输出1,2,3,4,5,6,7,8,20,21,22,23。
*/#include<>void main(){int a, c;char b, d;int i;printf("输入区间以'.'结束以','分隔,例如1-8,22-30:");do{scanf("%d%c%d%c", &a, &b, &c, &d);for (i = a; i <= c; i++)printf("%d ", i);}while (d != '.');}10: /*输入一篇文章,该文章小于1000 字符,统计单词的个数,单词是连续的大小写字母组成*/#include <>void main(){char text[1000];int count=0,i=0;printf("输入一段文章:");gets(text);while(text[i]!=0){if( (text[i]>='a'&&text[i]<='z') ||(text[i]>='A'&&text[i]<='Z') ){i++;continue;}else{i++;count++;}}printf ("有%d 个单词",count+1)}11:/*输入一片文章,该文章小于1000 字符,对文中内容进行加密,加密方法是A->Z,B->Z…Z->A,a->z…z->a。
*/#include <>void main (){char i,sum=0,text[1000];printf("请输入一段文字:\n");gets(text);for(i=0;text[i]!=0;i++){if(text[i]>=65&&text[i]<=90)text[i]=155-text[i];if(text[i]>=97&&text[i]<=122)text[i]=219-text[i];}puts(text);}12: /* 编写一个程序,判断输入的数字是否在指定范围内,范围也由用户输入,例如“100-100000,220000,250000,300000-600000”。
*/#include <>void main (){int a,b,c;printf("请输入:下限-上限,需要判断的数\n");scanf("%d-%d,%d",&a,&b,&c);if (c<=b&&c>=a)printf("%d 在范围内",c);elseprintf("%d 不在范围内",c);}13:/*编写一个程序,输入一篇文章,该文章小于1000 字符,从中将指定字符串换成另外一个。
*/#include <>void main (){char i,a,b,text[1000];printf("请输入需要被替换的字符-替换后的字符\n");scanf("%c-%c",&a,&b);printf("请输入一段文字\n");getchar();gets(text);for(i=0;text[i]!=0;i++)if(text[i]=='a')text[i]='b';puts(text);}14:/*读入一个字符串,判断它是否是回文,所谓回文即正序和逆序内容相同的字符串。