第4章_数组c++_习题答案解析

合集下载

C语言习题集合4(数组)

C语言习题集合4(数组)

第四部分数组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中的值为( )。

程序设计基础-c语言-第四章数组-教材答案-科学出版社

程序设计基础-c语言-第四章数组-教材答案-科学出版社

程序设计基础-c语言-第四章数组-教材习题及其答案1.0编程将一个一维数组的值按逆序重新存放#include<stdio.h>void main(){int i_data[10];int m,i_temp;printf("给定10个数,用空格分隔:");scanf("%d %d %d %d %d %d %d %d %d %d",&i_da ta[0],&i_data[1],&i_data[2],&i_data[3],&i_data[4],&i_d ata[5],&i_data[6],&i_data[7],&i_data[8],&i_data[9]);for(m=1;m<=10/2;m++) //有意写成10/2 已解决任意一维数组的逆序问题,为什么此处用m=1;m<=10/2,而不能m=0;m<10/2{ i_temp=i_data[m-1]; //下面三条语句是典型的两数交换的方法i_data[m-1]=i_data[10-m];i_data[10-m]=i_temp;}for(m=0;m<10;m++){ printf("%d ",i_data[m]);}printf("\n");}2.0 编程求Fibonacci数列的前二十项。

FIBONACCI数列的定义F0=0,F1=1,Fn=Fn-1+Fn-2#include<stdio.h>void main(){int F[20];int m,n,i_blanknum;for(m=0;m<20;m++){ switch(m){ case 0:F[0]=0;break;case 1:F[1]=1;break;default: F[m]=F[m-1]+F[m-2];}}printf("Fibonacci数列的前20项是:\n"); for(m=0;m<20;m++){ printf("%d ",F[m]);}printf("\n");//下面输出项,这是我加的效果for(m=0;m<20;m++){ printf("%d",m+1); //输出项的编号//计算该项数据占几位i_blanknum=1;//每个数据间占一个空格n=F[m];do{ i_blanknum=i_blanknum+1;n=n/10;}while(n!=0);//减去该项编号数据占的位数n=m+1;do{ i_blanknum=i_blanknum-1;n=n/10;}while(n!=0);//输出空格while(i_blanknum>0){ printf(" ");i_blanknum--;}}printf("\n");}2.0在一个从小到大排列的数组中查找X,若x存在就将其测出,若不存在将其添加。

C++程序设计__第4章_数组

C++程序设计__第4章_数组

cin>>a[i][j]; }
2008-2009-2 C++程序设计
16
例题
例4.6
实现
程序代码(续上)
for(i=0;i<4;i++) { isum=0; for(j=0;j<5;j++) isum+=a[i][j]; a[i][5]=isum/5;} cout<<"输出四个学生五门课程的成绩和平均分:"<<endl; for(i=0;i<4;i++) { for(j=0;j<6;j++) cout<<a[i][j]<<'\t'; cout<<endl;} cout<<endl; }
问题: <iostream.h> #include
1202年,意大利数学家斐波那契出版了他的「算盘全书」。 void main() { 他在书中提出了一个关于兔子繁殖的问题: int i,f[20]={1,1}; 如果一对兔子每月能生一对小兔(一雄一雌),而每对小兔在出生 for(i=2;i<20;i++) 后的第三个月里,又能开始生一对小兔,假定在不发生死亡的情况 f[i]=f[i-2]+f[i-1]; 下,由一对出生的小兔开始,50个月后会有多少对兔子? for(i=0;i<20;i++) 分析: { if(i%5==0) 发现有规律的数列1、1、2、3、5、…… cout<<endl; 从第3项开始,每一项都是前两项之和 cout<<'\t'<<f[i]; } 1 (n=1,n=2) cout<<endl; Fn = }

数据结构答案第4章

数据结构答案第4章
【解答】设稀疏矩阵为m行n列,如果采用二维数组存储,其空间复杂度为O(m×n);因为要将所有的矩阵元素累加起来,所以,需要用一个两层的嵌套循环,其时间复杂度亦为O(m×n)。如果采用三元组顺序表进行压缩存储,假设矩阵中有t个非零元素,其空间复杂度为O(t),将所有的矩阵元素累加起来只需将三元组顺序表扫描一遍,其时间复杂度亦为O(t)。当t<<m×n时,采用三元组顺序表存储可获得较好的时、空性能。
⑴二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,则存放A至少需要()个字节,A的第8列和第5行共占()个字节,若A按行优先方式存储,元素A[8][5]的起始地址与当A按列优先方式存储时的()元素的起始地址一致。
A 90 B 180 C 240 D 540 E 108 F 114 G 54
⑵二维数组A中行下标从10到20,列下标从5到10,按行优先存储,每个元素占4个存储单元,A[10][5]的存储地址是1000,则元素A[15][10]的存储地址是()。
【解答】1140
【分析】数组A中每行共有6个元素,元素A[15][10]的前面共存储了(15-10)×6+5个元素,每个元素占4个存储单元,所以,其存储地址是1000+140=1140。
Head(Tail(Tail(Head(ST))))=奖金
⑵工资表ST的头尾表示法如图4-7所示。7.若在矩阵A中存在一个元素ai,j(0≤i≤n-1,0≤j≤m-1),该元素是第i行元素中最小值且又是第j列元素中最大值,则称此元素为该矩阵的一个马鞍点。假设以二维数组存储矩阵A,试设计一个求该矩阵所有马鞍点的算法,并分析最坏情况下的时间复杂度。
⑵因为k和i, j之间是一一对应的关系,k+1是当前非零元素的个数,整除即为其所在行号,取余表示当前行中第几个非零元素,加上前面零元素所在列数就是当前列号,即:

C 课后习题答案第四章

C  课后习题答案第四章
case 'b' : cout << '$' ; break ;
case 'c' : cout << '*' ; break ;
case 'd' : continue ;
}
cout << '#' << endl ;
}
}
答案:
$#
*#
*#
%
7.#include <iostream.h>
void main()
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int isPrime(int);
void createAry(int[], int);
void outAry(const int[], int);
void main()
cout << f( a, 3, 3 ) << endl ;
}
int f( int a[][3], int row, int col )
{int i, j, t=1 ;
for( i=0; i<row; i ++ )
for( j=0; j<col; j++ )
{a[i][j] ++ ;
if( i == j ) t*= a[i][j] ;
}
void createAry(int a[], int n)
{ srand( time(0) );

数组c习题答案解析

数组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语言版)第三四章习题答案解析

数据结构(C语言版)第三四章习题答案解析

第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) { //n大于等于0if(n<=0) return 1;else return n*fact(n-1); } 则计算fact(n)需要调用该函数的次数为()。

A.n+1 B.n-1 C. nD. n+2(6)栈在()中有所应用。

A.递归调用 B.函数调用 C.表达式求值 D.前三个选项都有(7)为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。

主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。

该缓冲区的逻辑结构应该是()。

A.队列 B.栈 C.线性表 D.有序表(8)设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是()。

C程序设计(第五版)-第4章选择结构程序设计课后习题答案

C程序设计(第五版)-第4章选择结构程序设计课后习题答案

C程序设计(第五版)-第4章选择结构程序设计课后习题答案1. 什么是算术运算?什么是关系运算?什么是逻辑运算?【答案解析】算熟运算:算术运算即“四则运算”,是加法、减法、乘法、除法、乘⽅、开⽅等⼏种运算的统称。

其中加减为⼀级运算,乘除为⼆级运算,乘⽅、开⽅为三级运算。

在⼀道算式中,如果有多级运算存在,则应先进⾏⾼级运算,再进⾏低⼀级的运算。

C语⾔中的算熟运算符包括:+、-、*、/、++、--、%等种类。

如果只存在同级运算;则从左⾄右的顺序进⾏;如果算式中有括号,则应先算括号⾥边,再按上述规则进⾏计算。

⽰例:$ (1 + 1)^{2} * 4+5 * 3$解析:1. 先进⾏括号内运算1+1,然后进⾏乘⽅运算得到结果4.2. 接下来与4相乘,得到结果163. 因为乘法优先级⼤于加法,因此先进⾏5*3,得到结果154. 最终相加得到结果31结果:31关系运算:关系的基本运算有两类:⼀类是传统的集合运算(并、差、交等),另⼀类是专门的关系运算(选择、投影、连接、除法、外连接等),⽽在C语⾔中,关系运算通常被认为是⽐较运算,将两个数值进⾏⽐较,判断⽐较结果是否符合给定的条件。

常见的关系运算符包括:<、<=、>、>=、==、!=等种类。

其中,前4种关系运算符(<、<=、>、>= )的优先级别相同,后2种(==、!=)也相同。

⽽前4种⾼于后2种。

例如, >优先于==。

⽽>与<优先级相同。

并且,关系运算符的优先级低于算术运算符,关系运算符的优先级⾼于赋值运算符(=)。

逻辑运算:在逻辑代数中,有与、或、⾮三种基本逻辑运算。

表⽰逻辑运算的⽅法有多种,如语句描述、逻辑代数式、真值表、卡诺图等。

⽽在C语⾔中,逻辑运算通常⽤于使⽤逻辑运算符将关系表达式或其它逻辑量连接起来组成逻辑表达式⽤来测试真假值。

常见的逻辑运算符包括:&&、||、!等种类&&:与是双⽬运算符,要求有两个运算对象,表⽰两个运算对象都成⽴,则结果为真,否则结果为假。

《c++程序设计》第4章 数组

《c++程序设计》第4章 数组
; (2)字符数组1必须足够大,以便容纳被复制的字符串; (3)字符串2后的'\0'也一起复制到字符数组1中; (4)在赋值运算符“=”没有重载之前,不能用赋值语句将一个字符串常量或字符数组
赋给另一个字符数组,只能用字符串复制函数来处理。例如下面操作是非法的: str2="C++ program"; str1=str2;
4.1 数组的定义与使用
4.1.1 一维数组的定义和使用
1.一维数组的定义与初始化赋值 (1)一维数组的定义
定义格式为:
〔存储类型〕 <类型> <数组名>[<常量表达式>]; 例:int a[10];
表示定义一个名为a的整型数组,有10个元素,分别为a[0]、a[1]、 a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9] 。
int a[ ][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
二维数组的初始化赋值
② 给数组的部分元素赋初值 给数组的部分元素赋初值的方法与给数组的所有元素赋初值的方法 类似。
3.字符串连接函数strcat()
格式:strcat(<字符数组1>,<字符串2>) 功能:将字符串2连接到字符数组1中的字符串后,其结果存放在字符数组1中。 例如:
char str1[30]="I am a "; char str2[]="student."; strcat(str1,str2); 则字符数组1的内容为"I am a student."。 说明: (1)字符数组1必须是字符数组名,字符串2可以是字符数组名,也可以是字符串常量; (2)字符数组1必须足够大,以便容纳连接后的新字符串; (3)连接时字符串1之后的'\0'取消,只在新字符串最后保留一个'\0'。

第4章数组习题(C语言程序设计)

第4章数组习题(C语言程序设计)

puts(strcpy(a[0],a[2]);的输出结果是__2_3____
第4章 数组
三、写出程序运行结果
第4章 数组
1. main() { int a[]={2,4,6,8,10};
int y=1,j;
y
j
1
0
for(j=0;j<3;j++)
1
y+=a[j+1];
2
y=y+a[1]+a[2]+a[3]
第4章 数组
程序设计基础—C语言
第4章 数组
第4章 数组
一、单项选择题 (第107页)
第4章 数组
1、定义数组时,表示数组长度的不能是 (A )
存储类型 数据类型 数组名[ 数组长度 ]
√A. 整型变量 int x=6 ; int a[x];
B. 符号常量 #define N 5 C. 整型常量 char b[ 5];
}
1 2 34 5678 9 13 15
则字符串s所占的字节数是(

字符串s的字节数=长度+1 sizeof(s)= strlen(s)+1
A. 19 C. 15
B. 18
√D. 16
第4章 数组
二、填空题
第4章 数组
1.若定义int a[10]={1,2,3};则a[2]的值__3___;
2.若定义char string[] =“You are a student!”;
s=10*6+’5’-’0’=65
s=10*65+’2’-’0’=652
s=10*652+’1’-’0’=6521
printf(“%d\n”,s); }

数据结构(C语言版)习题及答案第四章

数据结构(C语言版)习题及答案第四章

习题4.1选择题1、空串与空格串是(B)。

A、相同B、不相同C、不能确定2、串是一种特殊的线性表,其特殊性体现在(B)。

A、可以顺序存储B、数据元素是一个字符C、可以链式存储D、数据元素可以是多个字符3、设有两个串p和q,求q在p中首次出现的位置的操作是(B)。

A、连接B、模式匹配C、求子串D、求串长4、设串s1=“ABCDEFG”,s2=“PQRST”函数strconcat(s,t)返回s和t串的连接串,strsub(s,i,j)返回串s中从第i个字符开始的、由连续j个字符组成的子串。

strlength(s)返回串s的长度。

则strconcat(strsub(s1,2,strlength(s2)),strsub(s1,strlength(s2),2))的结果串是(D)。

A、BCDEFB、BCDEFGC、BCPQRSTD、BCDEFEF5、若串s=“software”,其子串个数是(B)。

A、8B、37C、36D、94.2简答题1、简述空串与空格串、主串与子串、串名与串值每对术语的区别?答:空串是指长度为0的串,即没有任何字符的串。

空格串是指由一个或多个空格组成的串,长度不为0。

子串是指由串中任意个连续字符组成的子序列,包含子串的串称为主串。

串名是串的一个名称,不指组成串的字符序列。

串值是指组成串的若干个字符序列,即双引号中的内容。

2、两个字符串相等的充要条件是什么?答:条件一是两个串的长度必须相等条件二是串中各个对应位置上的字符都相等。

3、串有哪几种存储结构?答:有三种存储结构,分别为:顺序存储、链式存储和索引存储。

4、已知两个串:s1=”fg cdb cabcadr”, s2=”abc”, 试求两个串的长度,判断串s2是否是串s1的子串,并指出串s2在串s1中的位置。

答:(1)串s1的长度为14,串s2的长度为3。

(2)串s2是串s1的子串,在串s2中的位置为9。

5、已知:s1=〃I’m a student〃,s2=〃student〃,s3=〃teacher〃,试求下列各操作的结果:strlength(s1);答:13strconcat(s2,s3);答:”studentteachar”strdelsub(s1,4,10);答:I’m6、设s1=”AB”,s2=”ABCD”,s3=”EFGHIJK,试画出它们在各种存储结构下的结构图。

数组c习题答案解析

数组c习题答案解析

数组c习题答案解析 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】习题 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]={,,,,};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。

第4章习题解答 c++课后习题答案

第4章习题解答 c++课后习题答案
答:改写一小段算法如下。
for (j=1; j<=m; j++)
{
ptr=rtr;
rtr=rtr->Next;
free(ptr);
}
7.编写一个算法,功能是复制一个链串。
答:复制一个完整的链串,是一件比较容易的事情。其算法起名为Copy_Lt(),参数为Lt1。具体编写如下。
Copy_Lt(Lt1)
cij= aij+ bij(1≤i≤m,1≤j≤n)
答:算法名为Add_Mt(),参数为A,B,C。
Add_Mt(A, B, C)
{
for (i=1; i<=m; i++)
for (j=1; j<=n; j++)
C[i][j] = A[i][j] + B[i][j];
}
A.BCDEFB.BCDEFGC.BCPQRSTD.BCDEFEF
4.设有一个8阶的对称矩阵A,采用以行优先的方式压缩存储。a11为第1个元素,其存储地址为1,每个元素占一个地址空间。试问元素a85的地址是A。
A.33B.30C.13D.23
5.一个m*m的对称矩阵,如果以行优先的方式压缩存入内存。那么所需存储区的容量应该是C。
答:按照这样的设计,算法4-2的描述如下。
Equal_St(St1, St2)
{
i=1;
while (St1[i] !=“\0”)/*两串进行比较*/
{
if (St1[i] == St2[i])/*相等,继续比较*/
i++;
else/*不等,强制退出*/
black;
}
if (St1[i] != St2[i])/*比较是由于相应位置上的字符不同而结束*/

《数据结构及其应用》笔记含答案 第四章_串、数组和广义表

《数据结构及其应用》笔记含答案 第四章_串、数组和广义表

第4章串、数组和广义表一、填空题1、零个或多个字符组成的有限序列称为串。

二、判断题1、稀疏矩阵压缩存储后,必会失去随机存取功能。

(√)2、数组是线性结构的一种推广,因此与线性表一样,可以对它进行插入,删除等操作。

(╳)3、若采用三元组存储稀疏矩阵,把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算。

(╳)4、若一个广义表的表头为空表,则此广义表亦为空表。

(╳)5、所谓取广义表的表尾就是返回广义表中最后一个元素。

(╳)三、单项选择题1、串是一种特殊的线性表,其特殊性体现在(B)。

A.可以顺序存储B.数据元素是一个字符C.可以链式存储D.数据元素可以是多个字符若2、串下面关于串的的叙述中,(B)是不正确的?A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储解释:空格常常是串的字符集合中的一个元素,有一个或多个空格组成的串成为空格串,零个字符的串成为空串,其长度为零。

3、串“ababaaababaa”的next数组为(C)。

A.012345678999 B.012121111212 C.011234223456 D.01230123223454、串“ababaabab”的nextval为(A)。

A.010104101B.010102101 C.010100011 D.0101010115、串的长度是指(B)。

A.串中所含不同字母的个数B.串中所含字符的个数C.串中所含不同字符的个数D.串中所含非空格字符的个数解释:串中字符的数目称为串的长度。

6、假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=(B)。

A.808 B.818 C.1010 D.1020解释:以行序为主,则LOC[5,5]=[(5-1)*100+(5-1)]*2+10=818。

C++程序设计语言习题及实验指导4章_数组习题参考答案

C++程序设计语言习题及实验指导4章_数组习题参考答案

C++程序设计语言习题及实验指导第4章数组4.3 习题4.3.1 选择题4.3.2 填空题1.(1) 3 (2) 242.首地址3.(1) i (2) i+j (3) i/7 (4) i%7 (5) i*7+j4.(1) 7 (2) 8 (3) 7 (4) 505.(1) 字符(2) cin.getline(str,80);6.1234567.(1) a:5 d:1 e:4 f:1 g:1(2) i:1 l:1 m:1 o:3 r:3(3) s:2 u:1 y:38.(1) It is 4:30 pm. (2) I (3) 4309.(1) <100: 3 (2) <200: 2 (3) <300: 5 (4) <400: 2 (5) <500: 3 10.D8011.(1) 500 (2) 800 (3) 90012.(1) 26 (2) 2013.(1) s2+31 (2) n (3) t%2+'0' (4) !strcmp(s1,p2) 14.(1) num[i++] (2) s=0 (3) flag=1 (4) j<=k 15.(1) i<len1 (2) j>=len2 (3) b[k]=b[k-1] (4) ++i%5==0 16.(1) pa>=a&&pb>=b (2) j+k+carry (3) ps++ (4) p<ps 17.(1) t[n++] (2) continue (3) t[k+1]=t[k] (4) n++ 18.(1) *p1 (2) *p1++ (3) p1++,p2++ (4) *p1='\0' 19.(1) n/10%10 (2) i==j||j==k||i==k (3) i*i==n (4) (i+1)%5==0 20.(1) char *p3 (2) *p1>='A'&&*p1<='Z'||*p1>='a'&&*p1<='z'(3) p2++ (4) char (*p4)[20]4.3.3 编程题1.交换一维数组中的最大元素与最小元素的位置#include<iostream.h>void main(void ){int a[6]={18,16,19,15,11,8};int i,max,min,j,k,t;cout<<"原数组为:\n";for(i=0;i<6;i++)cout<<a[i]<<'\t';cout<<endl;for(j=k=0,max=min=a[0],i=1;i<6;i++){if(max<a[i])max=a[i],j=i;if(min>a[i])min=a[i],k=i;}t=a[j],a[j]=a[k],a[k]=t;cout<<"交换后的数组为:\n";for(i=0;i<6;i++)cout<<a[i]<<'\t';cout<<endl;}2.二维数组右移一列#include<iostream.h>#define ROW 3#define COL 4void main(void){int a[ROW][COL]={1,2,3,4,5,6,7,8,9,10,11,12},i,j,t;cout<<"移动前的数组为:\n";for(i=0;i<ROW;i++){for(j=0;j<COL;j++)cout<<a[i][j]<<'\t';cout<<'\n';}for(i=0;i<ROW;i++){t=a[i][COL-1];for(j=COL-1;j>0;j--)a[i][j]=a[i][j-1];a[i][j]=t; // a[i][0]=t;}cout<<"移动后的数组为:\n";for(i=0;i<ROW;i++){for(j=0;j<COL;j++)cout<<a[i][j]<<'\t';cout<<'\n';}}3.统计字符串中种类字符的个数#include<iostream.h>void main(){char str[50],*p=str;int con=0,num=0,eng=0,oth=0;cout<<"请输入一个字符串:";cin.getline(str,50);while(*p){if(*p<32)con++;else if(*p>='0'&&*p<='9')num++;else if(*p>='A'&&*p<='Z'||*p>='a'&&*p<='z')eng++;else oth++;p++;}cout<<str<<"中有控制字符"<<con<<"个,数字字符"<<num<<"个,英文字母"<<eng<<"个,其它字符"<<oth<<"个。

第4章_数组c_习题答案解析

第4章_数组c_习题答案解析
23
1
56
234 7
0
34
1<<56\
23
1
1
234
7 0
34]
37
23<56
23
23
1
234
7 0
134i

t=56
56
23
1
234
7 0
34
图4-2第二次排序
以此类推,外层6次循环后,将无序的数组实现大到小的降序排列。
9.下列选项中错误的说明语句是【】
A.char a[]={'t',‘00'y',‘o',‘u',‘
B.
整型表达式
C.
整型常量或整型表达式
D.
任何类型的表达式
【答案】
C
3.以下不正确的定义语句是【】
A.double x[5]={,,,,};
B.i nt y[5]={0,1,3,5,7,9};
C.char c1[]={'1','2','3','4','5'};
D.char c2[]={ x10''xa''x8''};
D.字符数组可以存放字符串
【答案】C
11•以下二维数组c的定义形式正确的是【】
A.i nt c[3][]
B.float c[3,4]
C.double c[3][4]
D.float c(3)(4)
【答案】C
12.已知:int c[3][4];则对数组元素引用正确的是【】
A.c[1][4]
B.c[][0]

第4章 串与数组 习题参考答案

第4章 串与数组 习题参考答案

习题四参考答案一、选择题1.下面关于串的叙述中,哪一个是不正确的?(B )A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储2.串的长度是指( A )A. 串中包含的字符个数B. 串中包含的不同字符个数C. 串中除空格以外的字符个数D. 串中包含的不同字母个数3.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( C )A.求子串B.联接C.模式匹配D.求串长4.设主串的长度为n,模式串的长度为m,则串匹配的KMP算法时间复杂度是( C )。

A. O(m)B. O(n)C. O(n + m)D. O(n×m)5. 串也是一种线性表,只不过( A )。

A. 数据元素均为字符B. 数据元素是子串C. 数据元素数据类型不受限制D. 表长受到限制6.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主进行存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为( B )。

A. 13B. 33C. 18D. 407. 有一个二维数组A[1..6, 0..7] ,每个数组元素用相邻的6个字节存储,存储器按字节编址,那么这个数组占用的存储空间大小是(D )个字节。

A. 48B. 96C. 252D. 2888.设有数组A[1..8,1..10],数组的每个元素占3字节,数组从内存首地址BA开始以列序为主序顺序存放,则数组元素 A[5,8]的存储首地址为( B )。

A. BA+141B. BA+180C. BA+222D. BA+2259. 稀疏矩阵的三元组存储表示方法( B )A. 实现转置操作很简单,只需将每个三元组中行下标和列下标交换即可B. 矩阵的非零元素个数和位置在操作过程中变化不大时较有效C. 是一种链式存储方法D. 比十字链表更高效10. 用十字链表表示一个稀疏矩阵,每个非零元素一般用一个含有( A )域的结点表示。

C++第四章习题解答

C++第四章习题解答

第四章类与对象习题一.根本概念与根底知识自测题4.1 填空题5.1.1 引入类定义的关键字是〔1〕。

类的成员函数通常指定为〔2〕,类的数据成员通常指定为〔3〕。

指定为〔4〕的类成员可以在类对象所在域中的任何位置访问它们。

通常用类的〔5〕成员表示类的属性,用类的〔6〕成员表示类的操作。

答案:(1)class(2)公有的public(3)私有的private(4)公有的public(5)数据(6)函数4.1.2 类的访问限定符包括〔1〕、〔2〕和〔3〕。

私有数据通常由〔4〕函数来访问〔读和写〕。

这些函数统称为〔5〕。

答案:(1)public〔公有的〕(2)private〔私有的〕(3)protected〔保护的〕(4)公有的成员函数(5)类的接口4.1.3 通常在逻辑上,同一类的每个对象都有〔1〕代码区,用以存储成员函数。

而在物理上通常只有〔2〕代码区。

只有在〔3〕定义,并〔4〕的函数和加了关键字〔5〕的函数例外。

答案:(1)独立的(2)共用的(3)在类说明中(4)不包括循环等复杂结构(5)inline4.1.4 C++中支持三种域:〔1〕、〔2〕、〔3〕。

函数域被包括在〔4〕中,全局域被包括在〔5〕中。

using指示符以关键字using开头,后面是关键字〔6〕,最后是〔7〕。

这样表示以后在该名字空间中所有成员都〔8〕。

如不使用using指示符那么在使用时要加::,称为〔9〕运算符。

答案:(1)局部域〔local scope〕(2)名字空间域〔namespace scope〕(3)类域〔class scope〕(4)局部域(5)名字空间域(6)namespace(7)名字空间名(8)可以直接被使用(9)域4.1.5 引用通常用作函数的〔1〕和〔2〕。

对数组只能引用〔3〕不能引用〔4〕。

答案:(1)参数(2)返回值(3)数组元素(4)数组名本身4.1.6 构造函数的任务是〔1〕。

构造函数无〔2〕。

类中可以有〔3〕个构造函数,它们由〔4〕区分。

第四章 数组习题集答案

第四章 数组习题集答案
A)120B)113C)140D)126
20.若已有定义char s[10]; int i;下列输入函数调用中错误的是【】。
A)for (i=0; i<10; ++i) s[i]=getchar( ) ;
B)for (i=0; i<10; i++) scanf("%c",s[i] );
C)scanf("%s",s);
#include <stdio.h>
main()
{
int i=0,x=0;
int a[][4]={0,2,0,3,0,3,4,0,4,5,6,7,6,5,0,0};
while (i<4)
{
x+=【】;
i++;
}
printf("%d\n",x);
}
A)a[3-i][3-j]B)a[i][3-i]C)a[i][i]D)a[3-i][4]
printf ("%d\n",strlen(s1));
A)5B)2C)6D)7
37.定义如下变量和数组:
int i;
int x[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句输出结果是【】
for(i=0;i<3;i++) printf("%d",x[i][0]);
A)1 4 7B)3 57C)3 6 9D)1 5 9
第四
一、选择题
1.如果char型变量占两个字节的存储单元,则按照如下方式定义的数组x占用的字节数是【】。
char x[50]={2,4,6,8,10};
A)50B)100C)10D)5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

习题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答案错误。

C答案中初始值行数多于数组大小中的行大小,也是错误的。

另外初始化时,初值之间不能有空位置,故D错误。

7.以下不能对二维数组a进行正确初始化的语句是【】A.inta[2][3]={0};B.inta[][3]={{1,2},{0}};C.inta[2][3]={{1,2},{3,4},{5,6}};D.inta[][3]={1,2,3,4,5,6};【答案】C8.阅读下面程序,则程序段的功能是【】#include<iostream>usingnamespacestd;intmain(){intc[]={23,1,56,234,7,0,34},i,j,t;for(i=1;i<7;i++){t=c[i];j=i-1;while(j>=0&&t>c[j]){c[j+1]=c[j];j--;}c[j+1]=t;}for(i=0;i<7;i++)cout<<c[i]<<'\t';putchar('\n');return0;}A.对数组元素的升序排列B.对数组元素的降序排列C.对数组元素的倒序排列D.对数组元素的随机排列【答案】B【解析】每层外层for循环结束会增加对一个元素的排序,确定c[0],c[1]的大小顺序,如图4-1所示。

c[0]c[1]c[2]c[3]c[4]c[5]c[6]2315623470341<23231562347034图4-1第一次排序第二次将c[2]分别与前2两个元素比较,插入最前面,确定c[0],c[1],c[2]的大小顺序,如图4-2所示。

c[0]c[1]c[2]c[3]c[4]c[5]c[6]2315623470341<562311234703423<56232312347034t=56562312347034图4-2第二次排序以此类推,外层6次循环后,将无序的数组实现大到小的降序排列。

9.下列选项中错误的说明语句是【】A.chara[]={′t′,′o′0,′′};y′,′o′,′u′,′B.chara[]={"toyou\0"};C.chara[]="toyou\0";D.chara[]=′t o0y′ou;【答案】D10.下述对C++语言字符数组的描述中错误的是【】A.字符数组的下标从0开始B.字符数组中的字符串可以进行整体输入/输出C.可以在赋值语句中通过赋值运算符“=对”字符数组整体赋值D.字符数组可以存放字符串【答案】C11.以下二维数组c的定义形式正确的是【】A.intc[3][]B.floatc[3,4]C.doublec[3][4]D.floatc(3)(4)【答案】C12.已知:intc[3][4];则对数组元素引用正确的是【】A.c[1][4]B.c[1.5][0]C.c[1+0][0]D.以上表达都错误【答案】C13.若有以下语句,则正确的描述是【】chara[]="toyou";charb[]={′t′,′o′,′y′,′o′,′u′};A.a数组和b数组的长度相同B.a数组长度小于b数组长度C.a数组长度大于b数组长度D.a数组等价于b数组【答案】C【解析】a数组中存放的是字符串,数组大小为6个字节空间,分别存放′t′,′o′,和′′y\0′′,,′o′,′u′b数组的长度为5个字节空间,只存放′t′,′o′,,′5y个′字,′符o。

′,′u′二、填空题14.若有说明:inta[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是________。

【答案】315.设有数组定义:chararray[]="China";则数组array所占的空间为________个字节。

【答案】616.假定int类型变量占用两个字节,其有定义:intx[10]={0,2,4};,则数组x在内存中所占字节数是________。

【答案】2017.下面程序的功能是输出数组s中最大元素的下标,请填空。

#include<iostream>usingnamespacestd;intmain(){intk,p,s[]={1,-9,7,2,-10,3};for(p=0,k=p;p<6;p++)if(s[p]>s[k])________cout<<k<<endl;return0;}【答案】k=p;18.下面程序是删除输入的字符串中字符′H,′请填空。

#include<iostream>usingnamespacestd;intmain(){chars[80];inti,j;gets(s);for(i=j=0;s[i]!=0′′;i++)if(s[i]!=′H′){________}s[j]=0′′;puts(s);return0;}【答案】s[j++]=s[i];【解析】此处相当于补充了2条语句,等价于s[j]=s[i];j++;。

19.已知:chara[20]="abc",b[20]="defghi";则执行cout<<strlen(strcpy(a,b));语句后的输出结果为________。

【答案】620.有如下定义语句:intaa[][3]={12,23,34,4,5,6,78,89,45};,则45在数组aa中的行列坐标各为________。

【答案】2和221.若二维数组a有m列,则计算任一元素a[i][j]在数组中相对位置的公式为(假设a[0][0]位于数组的第一个位置上)________。

【答案】i*m+j+122.定义如下变量和数组:intk;inta[3][3]={9,8,7,6,5,4,3,2,1};则语句for(k=0;k<3;k++)cout<<a[k][k];的输出结果是________。

【答案】951【解析】定义的二维数组可以描述一个方阵:987654321语句功能是实现该方阵主对角线上元素的输出。

23.已知:chara[15],b[15]={"Ilovechina"};则在程序中能将字符串Ilovechina赋给数组a的语句是________。

【答案】strcpy(a,b);三、读程序写结果1.程序代码如下#include<iostream>usingnamespacestd;intmain(){chararr[2][4];strcpy(arr[0],"you");strcpy(arr[1],"me");arr[0][3]='&';cout<<arr[0]<<endl;return0;}【答案】you&me2.程序代码如下:#include<iostream>usingnamespacestd;intmain(){chara[]={'a','b','c','d','e','f','g','h','\0'};inti,j;i=sizeof(a);j=strlen(a);cout<<i<<","<<j<<endl;return0;}【答案】9,83.程序代码如下:#include<iostream>usingnamespacestd;intmain(){inti;inta[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++)cout<<a[2-i][i];return0;}【答案】753【解析】程序功能是实现一个方阵次对角线上元素的输出。

24.程序代码如下:#include<iostream>usingnamespacestd;intmain(){chara[30]="nicetomeetyou!";strcpy(a+strlen(a)/2,"you");cout<<a<<endl;return0;}【答案】nicetoyou25.程序代码如下:#include<iostream>usingnamespacestd;intmain(){intk[30]={12,324,45,6,768,98,21,34,453,456};intcount=0,i=0;while(k[i]){if(k[i]%2==0||k[i]%5==0)count++;i++;}cout<<count<<","<<i<<endl;return0;}【答案】8,1026.程序代码如下:#include<iostream>usingnamespacestd;intmain(){chara[30],b[30];intk;gets(a);gets(b);k=strcmp(a,b);if(k>0)puts(a);elseif(k<0)puts(b);return0;}输入loveChina输出结果是?【答案】love【解析】strcmp(a,b)函数功能是比较a和b字符串的大小,比较是逐个字符的比较,比较方法是ASCII码值做减法,k='l'-'C'>,所以结果输出字符串a。

相关文档
最新文档