第4章-数组c++-习题答案解析(共11页).doc

上传人:飞****2 文档编号:13401554 上传时间:2022-04-29 格式:DOC 页数:11 大小:462KB
返回 下载 相关 举报
第4章-数组c++-习题答案解析(共11页).doc_第1页
第1页 / 共11页
第4章-数组c++-习题答案解析(共11页).doc_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《第4章-数组c++-习题答案解析(共11页).doc》由会员分享,可在线阅读,更多相关《第4章-数组c++-习题答案解析(共11页).doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上习题 4一、单项选择题1. 若有说明 int a34;则a数组元素的非法引用是【 】A. a02*1 B. a13 C. a4-20 D. a04【答案】 D【解析】数组下标从0开始,a04的列下标越界。2. 在C+语言中,引用数组元素时,其数组下标的数据类型允许是【 】A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式【答案】 C3. 以下不正确的定义语句是【 】A. double x5=2.0,4.0,6.0,8.0,10.0;B. int y5=0,1,3,5,7,9;C. char c1=1,2,3,4,5;D. char c

2、2=x10,xa,x8;【答案】 B【解析】初始值的个数大于数组的大小,系统会出现编译错误。4. 对以下说明语句的正确理解是【 】int a10=6,7,8,9,10;A. 将5个初值依次赋给a1至a5B. 将5个初值依次赋给a0至a4C. 将5个初值依次赋给a6至a10D. 因为数组长度与初值的个数不相同,所以此语句不正确【答案】 B5. 若有说明:int a 4=0,0;则下面不正确的叙述是【 】A. 数组a的每个元素都可得到初值0B. 二维数组a的第一维大小为1C. 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小D. 只有元素a00和a01可得到初值,其余元素均得

3、不到确定的初值【答案】 D【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。元素a00和a01赋初值为0 ,其余元素初值系统默认为0。6. 以下能对二维数组c进行正确的初始化的语句是【 】A. int c3=3,3,4; B. int c3=3,3,4;C. int c32=3,3,4,5; D. int c3=3,3;【答案】 B【解析】二维数组初始化时,行大小可以省略,列大小不可以省略,所以A答案错误。C答案中初始值行数多于数组大小中的行大小,也是错误的。另外初始化时,初值之间不能有空位置,故D错误。7. 以下

4、不能对二维数组a进行正确初始化的语句是【 】A. int a23=0;B. int a3=1,2,0;C. int a23=1,2,3,4,5,6;D. int a3=1,2,3,4,5,6;【答案】 C8. 阅读下面程序,则程序段的功能是【 】#includeusing namespace std; int main() int c=23,1,56,234,7,0,34,i,j,t;for(i=1;i=0 & tcj) cj+1=cj;j-; cj+1=t; for(i=0;i7;i+) coutcit; putchar(n); return 0;A. 对数组元素的升序排列 B. 对数组元素

5、的降序排列C. 对数组元素的倒序排列 D. 对数组元素的随机排列【答案】 B【解析】每层外层for循环结束会增加对一个元素的排序,确定c0 ,c1的大小顺序,如图4-1所示。图4-1 第一次排序第二次将c2分别与前2两个元素比较,插入最前面,确定c0 ,c1, c2 的大小顺序,如图4-2所示。图4-2 第二次排序以此类推,外层6次循环后,将无序的数组实现大到小的降序排列。9. 下列选项中错误的说明语句是【 】A. char a=t,o,y,o,u,0;B. char a=toyou0;C. char a=toyou0;D. char a=toyou0;【答案】 D10. 下述对C+语言字符数

6、组的描述中错误的是【 】A. 字符数组的下标从0开始B. 字符数组中的字符串可以进行整体输入/输出C. 可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值D. 字符数组可以存放字符串【答案】 C11. 以下二维数组c的定义形式正确的是【 】A. int c3 B. float c3,4C. double c34 D. float c(3)(4)【答案】 C12. 已知:int c34;则对数组元素引用正确的是【 】A. c14 B. c1.50 C. c1+00 D. 以上表达都错误【答案】 C13. 若有以下语句,则正确的描述是【 】char a=toyou;char b=t,o,y,o

7、,u;A. a数组和b数组的长度相同 B. a数组长度小于b数组长度C. a数组长度大于b数组长度 D. a数组等价于b数组【答案】 C【解析】 a数组中存放的是字符串,数组大小为6个字节空间,分别存放t,o,y,o,u和0,b数组的长度为5个字节空间,只存放t,o,y,o,u,5个字符。 二、填空题1. 若有说明:int a3=1,2,3,4,5,6,7;则a数组第一维的大小是_。【答案】 32. 设有数组定义: char array=China; 则数组 array所占的空间为_个字节。【答案】 63. 假定int类型变量占用两个字节,其有定义:int x10=0,2,4;,则数组x在内存

8、中所占字节数是_。【答案】 204. 下面程序的功能是输出数组s中最大元素的下标,请填空。#includeusing namespace std;int main() int k, p,s=1, -9, 7, 2, -10, 3; for(p =0, k =p; psk) _ cout kendl;return 0;【答案】 k=p;5. 下面程序是删除输入的字符串中字符H,请填空。#includeusing namespace std;int main() char s80; int i,j; gets(s); for(i=j=0;si!=0;i+) if(si!=H)_sj=0;puts(

9、s);return 0;【答案】 sj+ =si;【解析】 此处相当于补充了2条语句,等价于sj =si; j+;。6. 已知:char a20= abc,b20= defghi;则执行coutstrlen(strcpy(a,b);语句后的输出结果为_。【答案】 67. 有如下定义语句:int aa3=12,23,34,4,5,6,78,89,45;,则45在数组aa中的行列坐标各为 _。【答案】 2和28. 若二维数组a有m列,则计算任一元素aij在数组中相对位置的公式为(假设a00位于数组的第一个位置上) _。【答案】 i*m+j+19. 定义如下变量和数组:int k;int a33=9

10、,8,7,6,5,4,3,2,1;则语句for(k=0;k3;k+) coutakk;的输出结果是_。【答案】 951【解析】 定义的二维数组可以描述一个方阵: 9 8 76 5 43 2 1语句功能是实现该方阵主对角线上元素的输出。10. 已知:char a15,b15=I love china;则在程序中能将字符串I love china赋给数组a的语句是_。【答案】 strcpy(a,b);三、读程序写结果1. 程序代码如下#includeusing namespace std; int main() char arr24;strcpy(arr0,you); strcpy(arr1,me

11、);arr03=&;coutarr0endl;return 0;【答案】 you&me2. 程序代码如下:#includeusing namespace std; int main() char a=a, b, c, d, e, f, g,h,0; int i,j;i=sizeof(a); j=strlen(a);cout i ,jendl;return 0;【答案】 9,83. 程序代码如下:#includeusing namespace std;int main() int i;int a33=1,2,3,4,5,6,7,8,9;for(i=0;i3;i+)couta2-ii;return

12、 0;【答案】 753【解析】 程序功能是实现一个方阵次对角线上元素的输出。4. 程序代码如下:#includeusing namespace std; int main() char a30=nice to meet you!; strcpy(a+strlen(a)/2,you); coutaendl;return 0;【答案】nice to you5. 程序代码如下:#includeusing namespace std; int main() int k30=12,324,45,6,768,98,21,34,453,456;int count=0,i=0;while(ki) if(ki%

13、2=0|ki%5=0)count+;i+;cout count ,iendl;return 0;【答案】8,106. 程序代码如下:#includeusing namespace std; int main() char a30,b30;int k;gets(a);gets(b);k=strcmp(a,b);if(k0) puts(a);else if(k,所以结果输出字符串a。四、编程题1编程实现功能:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,若一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8

14、9 9 10 10 10删除后,数组中的内容应该是:2 3 4 5 6 7 8 9 10。思路:fun函数的2个形式参数,分别接收数组名,即数组的首地址,和数组中存放的原始数据的个数,fun函数对原始数组按题目处理后,在主函数中输出的数组a就是处理后的数组,这里函数之间参数传递属于地址传递。程序代码如下:#includeusing namespace std; const N=80;int fun(int a, int n) int i,j=1; for(i=1;in;i+) if(aj-1!=ai) aj+=ai; return j;int main() int aN= 2,2,2,3,4,

15、4,5,6,6,6,6,7,7,8,9,9,10,10,10, i, n=19; cout原始数组中的数据是:endl; for(i=0;i19;i+) coutai ; n=fun(a,n); coutn删除后,数组中的数据是:endl; for(i=0;in;i+) coutai ; coutendl; return 0;2编程实现功能:从键盘上输入若干个学生的成绩,当输入负数时表示输入结束,计算学生的平均成绩,并输出低于平均分的学生成绩。思路:使用循环输入学生的成绩,注意循环条件有2个,分别是输入成绩个数大于数组的大小和输入成绩为负数时结束,同时记录输入成绩的个数n。结束输入后,计算平均

16、值和筛选小于60分的成绩并输出。程序代码如下:#include using namespace std;int main( ) const N=800; float xN,sum=0,ave,a; int n=0,i; cout输入学生成绩:a; while (a=0 & na; cout输入的n名学生成绩为:;for (i=0; in; i+) coutxi ;coutendl;ave=sum/n;cout平均分:aveendl;cout低于平均分的成绩:;for (i=0; in; i+) if (xiave) coutxi ; coutendl; return 0;3编程实现功能:对从键

17、盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码值之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。思路:题目要求实现的功能,相当于字符串处理函数strcmp的功能,即:图4-3 字符串比较示意图使用循环逐个比较两个字符串的每个字符,当字符出现不相等时,跳出循求不相同的两个字符的ASCII码值的差输出。程序代码如下:#include using namespace std;#include string.hint main( ) char str180, str280,c; int i=0,s; gets (str1); gets (

18、str2); while (str1i=str2i) & (str1i!= 0) i+; s= str1i-str2i; coutsendl;return 0;4编程实现功能:求二维数组周边元素之和。思路:二维数组中的数据可以看成一个二维矩阵,例如下面的二维数组,输出周边元素之和为:sum=48,用两个并列的for循环实现求累加和。 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 7 程序代码如下:#include using namespace std;#include string.hconst M=4;const N=4;int main( ) int aMN,i,j,sum

19、=0; for (i=0; iM; i+) for (j=0; jaij; for (i=0; iN; i+) /*求第1行和第4行元素和*/ sum+=a0i; sum+= aM-1i; for (i=1; iM-1; i+) /*求第1列和第4列元素和,但不包括a00, a30, a03, a33四个角上的元素*/ sum+=ai0; sum+= aiN-1; cout二维数组周边元素之和为:sumendl;return 0;5. 编程求出3阶方阵的两条对角线上元素之和。程序代码如下:#includeusing namespace std;int main() int arr33=0,2,

20、2,3,4,4,5,6,6,a=0,b=0,i,j; for(i=0;i3;i+) for(j=0;j3;j+) /*求主对角线上元素和*/ if(i=j) a=a+arrij; for(i=0;i=0;j-) if(i+j=2 ) b=b+ arrij; cout主对角线元素和为:aendl; cout次对角线元素和为:b2)fn= 程序代码如下:#include#includeusing namespace std;int main( ) int i; long f10=1,1; for (i=2; i30; i+) fi=fi-2+fi-1; for (i=0; i10; i+) if(i%3=0) coutn; coutsetw(12)fi; coutendl;return 0;专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁