收藏 分销(赏)

第4章数组c习题答案解析.doc

上传人:快乐****生活 文档编号:9797484 上传时间:2025-04-08 格式:DOC 页数:19 大小:55.54KB 下载积分:8 金币
下载 相关 举报
第4章数组c习题答案解析.doc_第1页
第1页 / 共19页
第4章数组c习题答案解析.doc_第2页
第2页 / 共19页


点击查看更多>>
资源描述
习题 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. 任何类型的表达式 【答案】 C 3. 以下不正确的定义语句是【 】 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. 因为数组长度与初值的个数不相同,所以此语句不正确 【答案】 B 5. 若有说明:int a[ ][4]={0,0};则下面不正确的叙述是【 】 A. 数组a的每个元素都可得到初值0 B. 二维数组a的第一维大小为1 C. 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小 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答案中初始值行数多于数组大小中的行大小,也是错误的。另外初始化时,初值之间不能有空位置,故D错误。 7. 以下不能对二维数组a进行正确初始化的语句是【 】 A. 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}; 【答案】 C 8. 阅读下面程序,则程序段的功能是【 】 #include<iostream> using namespace std; int main() int c[]={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'); return 0; A. 对数组元素的升序排列 B. 对数组元素的降序排列 C. 对数组元素的倒序排列 D. 对数组元素的随机排列 【答案】 B 【解析】每层外层for循环结束会增加对一个元素的排序,确定c[0] ,c[1]的大小顺序,如图4-1所示。 图4-1 第一次排序 第二次将c[2]分别与前2两个元素比较,插入最前面,确定c[0] ,c[1], c[2] 的大小顺序,如图4-2所示。 图4-2 第二次排序 以此类推,外层6次循环后,将无序的数组实现大到小的降序排列。 9. 下列选项中错误的说明语句是【 】 A. char a[]={′t′,′o′,′y′,′o′,′u′,′\0′}; B. char a[]={"toyou\0"}; C. char a[]="toyou\0"; D. char a[]=′toyou\0′; 【答案】 D 10. 下述对C++语言字符数组的描述中错误的是【 】 A. 字符数组的下标从0开始 B. 字符数组中的字符串可以进行整体输入/输出 C. 可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 D. 字符数组可以存放字符串 【答案】 C 11. 以下二维数组c的定义形式正确的是【 】 A. int 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[1.5][0] C. c[1+0][0] D. 以上表达都错误 【答案】 C 13. 若有以下语句,则正确的描述是【 】 char a[]="toyou"; char b[]={′t′,′o′,′y′,′o′,′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 a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是________。 【答案】 3 2. 设有数组定义: char array[]="China"; 则数组 array所占的空间为________个字节。 【答案】 6 3. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是________。 【答案】 20 4. 下面程序的功能是输出数组s中最大元素的下标,请填空。 #include<iostream> using namespace std; int main() { int k, p,s[]={1, -9, 7, 2, -10, 3}; for(p =0, k =p; p< 6; p++) if(s[p]>s[k]) ________ cout<< k<<endl; return 0;} 【答案】 k=p; 5. 下面程序是删除输入的字符串中字符′H′,请填空。 #include<iostream> using namespace std; int main() { char s[80]; int i,j; gets(s); for(i=j=0;s[i]!=′\0′;i++) if(s[i]!=′H′) {________} s[j]=′\0′; puts(s); return 0;} 【答案】 s[j++] =s[i]; 【解析】 此处相当于补充了2条语句,等价于s[j] =s[i]; j++;。 6. 已知:char a[20]= "abc",b[20]= "defghi";则执行cout<<strlen(strcpy(a,b));语句后的输出结果为________。 【答案】 6 7. 有如下定义语句:int aa[][3]={12,23,34,4,5,6,78,89,45};,则45在数组aa中的行列坐标各为 ________。 【答案】 2与2 8. 若二维数组a有m列,则计算任一元素a[i][j]在数组中相对位置的公式为(假设a[0][0]位于数组的第一个位置上) ________。 【答案】 i*m+j+1 9. 定义如下变量与数组: int k; int a[3][3]={9,8,7,6,5,4,3,2,1}; 则语句for(k=0;k<3;k++) cout<<a[k][k];的输出结果是________。 【答案】 951 【解析】 定义的二维数组可以描述一个方阵: 9 8 7 6 5 4 3 2 1 语句功能是实现该方阵主对角线上元素的输出。 10. 已知:char a[15],b[15]={"I love china"};则在程序中能将字符串I love china赋给数组a的语句是________。 【答案】 strcpy(a,b); 三、读程序写结果 1. 程序代码如下 #include<iostream> using namespace std; int main() char arr[2][4]; strcpy(arr[0],"you"); strcpy(arr[1],"me"); arr[0][3]='&'; cout<<arr[0]<<endl; return 0; 【答案】 you&me 2. 程序代码如下: #include<iostream> using 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 <<","<<j<<endl; return 0; 【答案】 9,8 3. 程序代码如下: #include<iostream> using namespace std; int main() int i; int a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) cout<<a[2-i][i]; return 0; 【答案】 753 【解析】 程序功能是实现一个方阵次对角线上元素的输出。 4. 程序代码如下: #include<iostream> using namespace std; int main() char a[30]="nice to meet you!"; strcpy(a+strlen(a)/2,"you"); cout<<a<<endl; return 0; 【答案】nice to you 5. 程序代码如下: #include<iostream> using namespace std; int main() int k[30]={12,324,45,6,768,98,21,34,453,456}; int count=0,i=0; while(k[i]) if(k[i]%2==0||k[i]%5==0) count++; i++; cout<< count <<","<<i<<endl; return 0; 【答案】8,10 6. 程序代码如下: #include<iostream> using namespace std; int main() char a[30],b[30]; int k; gets(a); gets(b); k=strcmp(a,b); if(k>0) puts(a); else if(k<0) puts(b); return 0; 输入loveå Chinaå 输出结果是? 【答案】love 【解析】 strcmp(a,b)函数功能是比较a与b字符串的大小,比较是逐个字符的比较,比较方法是ASCII码值做减法,k='l'-'C'>,所以结果输出字符串a。 四、编程题 1.编程实现功能:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如,若一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10 删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。 思路:fun函数的2个形式参数,分别接收数组名,即数组的首地址,与数组中存放的原始数据的个数,fun函数对原始数组按题目处理后,在主函数中输出的数组a就是处理后的数组,这里函数之间参数传递属于地址传递。 程序代码如下: #include<iostream> using namespace std; const N=80; int fun(int a[], int n) { int i,j=1; for(i=1;i<n;i++) if(a[j-1]!=a[i]) a[j++]=a[i]; return j; int main() { int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10}, i, n=19; cout<<"原始数组中的数据是:"<<endl; for(i=0;i<19;i++) cout<<a[i]<<" "; n=fun(a,n); cout<<"\n删除后,数组中的数据是:"<<endl; for(i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; return 0; 2.编程实现功能:从键盘上输入若干个学生的成绩,当输入负数时表示输入结束,计算学生的平均成绩,并输出低于平均分的学生成绩。 思路:使用循环输入学生的成绩,注意循环条件有2个,分别是输入成绩个数大于数组的大小与输入成绩为负数时结束,同时记录输入成绩的个数n。结束输入后,计算平均值与筛选小于60分的成绩并输出。 程序代码如下: #include<iostream> using namespace std; int main( ) { const N=800; float x[N],sum=0,ave,a; int n=0,i; cout<<"输入学生成绩:"<<endl; cin>>a; while (a>=0 && n<N) { sum+=a; x[n]=a; n++; cin>>a; cout<<"输入的"<<n<<"名学生成绩为:"; for (i=0; i<n; i++) cout<<x[i]<<" "; cout<<endl; ave=sum/n; cout<<"平均分:"<<ave<<endl; cout<<"低于平均分的成绩:"; for (i=0; i<n; i++) if (x[i]<ave) cout<<x[i]<<" "; cout<<endl; return 0; 3.编程实现功能:对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码值之差。例如:输入的两个字符串分别为abcdefg与abceef,则输出为-1。 思路:题目要求实现的功能,相当于字符串处理函数strcmp的功能,即: 图4-3 字符串比较示意图 使用循环逐个比较两个字符串的每个字符,当字符出现不相等时,跳出循求不相同的两个字符的ASCII码值的差输出。 程序代码如下: #include<iostream> using namespace std; #include "string.h" int main( ) { char str1[80], str2[80],c; int i=0,s; gets (str1); gets (str2); while ((str1[i]==str2[i]) && (str1[i]!= '\0')) i++; s= str1[i]-str2[i]; cout<<s<<endl; return 0; 4.编程实现功能:求二维数组周边元素之与。 思路:二维数组中的数据可以看成一个二维矩阵,例如下面的二维数组,输出周边元素之与为:sum=48,用两个并列的for循环实现求累加与。 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 7 程序代码如下: #include<iostream> using namespace std; #include "string.h" const M=4; const N=4; int main( ) { int a[M][N],i,j,sum=0; for (i=0; i<M; i++) for (j=0; j<N; j++) cin>>a[i][j]; for (i=0; i<N; i++) /*求第1行与第4行元素与*/ { sum+=a[0][i]; sum+= a[M-1][i]; for (i=1; i<M-1; i++) /*求第1列与第4列元素与, 但不包括a[0][0], a[3][0], a[0][3], a[3][3]四个角上的元素*/ { sum+=a[i][0]; sum+= a[i][N-1]; cout<<"二维数组周边元素之与为:"<<sum<<endl; return 0; 5. 编程求出3阶方阵的两条对角线上元素之与。 程序代码如下: #include<iostream> using namespace std; int main() { int arr[3][3]={0,2,2,3,4,4,5,6,6},a=0,b=0,i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) /*求主对角线上元素与*/ if(i==j) a=a+arr[i][j]; for(i=0;i<3;i++) /*求次对角线上元素与*/ for(j=2;j>=0;j--) if(i+j==2 ) b=b+ arr[i][j]; cout<<"主对角线元素与为:"<<a<<endl; cout<<"次对角线元素与为:"<<b<<endl; return 0; 6.编程序求Fibonacci数列的前10项,并按每行3个数的格式输出该数列。Fibonacci数列的定义为: 1 (n=1) 1 (n=2) fn-1+fn-2 (n>2) fn= 程序代码如下: #include<iostream> #include<iomanip> using namespace std; int main( ) { int i; long f[10]={1,1}; for (i=2; i<30; i++) f[i]=f[i-2]+f[i-1]; for (i=0; i<10; i++) { if(i%3==0) cout<<"\n"; cout<<setw(12)<<f[i]; cout<<endl; return 0; 第 19 页
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服