2022年C语言数组试题.docx

上传人:Che****ry 文档编号:27202892 上传时间:2022-07-23 格式:DOCX 页数:64 大小:207.03KB
返回 下载 相关 举报
2022年C语言数组试题.docx_第1页
第1页 / 共64页
2022年C语言数组试题.docx_第2页
第2页 / 共64页
点击查看更多>>
资源描述

《2022年C语言数组试题.docx》由会员分享,可在线阅读,更多相关《2022年C语言数组试题.docx(64页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -第 4 章 数组4.1 内容概述本章主要介绍了数值数组和字符数组的定义、初始化、 元素引用和数组数据的输入与输出,字符数组实现字符串、字符串函数的实现与调用;指针数组与数组指针定义、元素引用;利用一维数组实现如挑数、排序、求和等实际应用问题;利用二维数组实现矩阵的应用问题;利用字符数组实现字符串的各种操作;本章学问结构如图 4.1 所示;定义数值数组初始化 元素引用数组元素输入和输出定义数组字符数组初始化元素引用数组元素输入和输出定义指针数组 初始化应用图 4.1 第 4 章学问结构图考核要求:把握一维数组、

2、二维数组、字符数组和指针数组的定义和初始化;把握数组元素储备地址运算;把握数组元素的下标法、指针法引用; 把握字符数组与字符串的区分与联系;把握有关字符串处理函数的使用方法;能利用一维数组、二维数组解决向量、矩阵等实际应用问题;重点难点:本章的重点是一维数组、二维数组和字符数组的定义、初始化、元素引用,字符串处理函数的使用;本章的难点是字符串与字符数组的区分,指针数组和数组元素的指针法引用;核心考点:数组的定义、初始化和数组元素的引用方法,一维数组、二维数组和字符数组的实际应用,字符串的处理方法;4.2 典型题解析【例 4.1 】以下对一维数组a 的定义中正确选项();A. char a10;

3、 B. int a0.100;C. int a5; D. int k=10;int ak; 解析: 一维数组定义的一般形式为:类型标识符 数组名 常量表达式 其中,常量表达式可以是任意类型,一般为算术表达式,其值表示数组元素的个数,即数组长度;答案: C 【例 4.2 】以下对一维数组的定义中不正确选项();A. double x5=2.0,4.0,6.0,8.0,10.0; 62 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 35 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - -

4、- - - - - -B. int y5=0,1,3,5,7,9; C. char ch1 =1, 2, 3, 4, 5; D. char ch2 =x10, xa, x8; 解析: 可以对一维数组的全部元素或部分元素赋初值;在对全部数组元素初始化时,数组长度可以省略;如数组长度没有省略,就初始化列表中值的个数不能超过数组的长度;答案 : B 【例 4.3 】以下对二维数组的定义中正确选项();1,2,3,4,5,6; Aint a4=1,2,3,4,5,6; B. int a3; Cint a3= 1, 2,3,4,5,6; D. int a解析: 定义二维数组时,如按一维格式初始化,就第一

5、维的长度可以省略,此时,系统 可依据初始化列表中值的个数及其次维的长度运算出省略的第一维长度,但无论如何, 其次 维的长度不能省略;没有初始化时,每一维的长度都不能省略;答案: C 【例 4.4 】假定一个int型变量占用两个字节,如有定义:int x10=0,2,4; 就数组x 在内存中所占字节数是();A. 3 B. 6 C. 10 D. 20 解析: 一维数组在内存中所占的字节数为:数组长度sizeof元素类型 ;答案: D 【例 4.5 】以下程序的输出结果是();main int a44=1,3,5,2,4,6,3,5,7; printf%d%d%d%dn,a03,a12,a21,a

6、30; 输出值不定 A. 0650 B. 1470 C. 5430 D. 解析: 定义的数组 a 为 4 行 4 列,且前三行三列元素已初始化,依据 C 语法规定,未 初始化的元素值为 0;答案: A );【例 4.6 】以下程序的输出结果是(main int m3=1,4,7,2,5,8,3,6,9;int i,j,k=2; fori=0;i3;i+ printf%d ,mki; A. 4 5 6 B. 2 5 8 C. 3 6 9 D. 7 8 9解析: 依据初始化列表中值的个数和其次维的长度,可求得第一维长度为 3;第一行的 元素值依次为 1,4,7;其次行元素值依次为 2,5,8;第三

7、行元素值依次为 3,6,9;循 3 个元素;环执行三次,依次输出行标为 2 的三个元素,即第三行的 答案: C 【例 4.7 】以下程序的输出结果是();main int b33=0,1,2,0,1,2,0,1,2,i,j,t=0; fori=0;i3;i+ forj=i;j=i;j+ t=t+bibjj; printf%dn,t; 63 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 35 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - - A. 3 B. 4

8、C. 1 D. 9 解析: 程序中, 引用的 b 数组元素的行下标为循环变量 i ,列下标为数组元素 bjj;外层循环共进行 3 次,对于每次外循环,内层循环只执行一次(即 j=i ),所以变量 t 的值为元素 b0b00、b1b11、b2b22 的和;由于数组元素 b00、b11、b22 的值分别为 0、1、2,所以 t 的值为: 0+0+1+2=3;答案: A 【例 4.8 】如有定义: int a24;,就引用数组元素正确选项();A. a03 B. a04 C. a22 D. a22+1 解析: 引用二维数组元素时,行下标范畴为 0行数 -1 ,列下标范畴为 0列数 -1 ;答案: A

9、【例 4.9 】如有定义: int aa8;,就不能代表数组元素aa1 地址的是() ;A. &aa0+1 B. &aa1 C. &aa0+ D. aa+1 解析: &aa1 、&aa0+1 和 aa+1 都是数组元素aa1 的地址; 由于 &aa0 是地址值常量,不能进行自加、自减运算,所以选项 C不能代表 aa1 地址;答案: C 【例 4.10 】以下程序执行后的输出结果是() ;main int a33, *p,i;p=&a00; fori=0;i9;i+ pi=i+1; printf%d n,a12; A. 3 B. 6 C. 9 D. 随机数解析: 二维数组的物理储备结构为一维,即

10、按行序次序储备在连续储备空间中;此题中, p 为指向数组元素的指针变量,初始时,p 指向 a00;通过指针p 实现对对二维数组元素按行依次赋值;a12即 p5 ,其值 6;答案: B 【例 4.11 】以下程序的输出结果是 ;main char a10=9,8,7,6,5,4,3,2,1,0,*p=a+5; printf%d,*-p; A. 运行出错 B. a4的地址 C. 5 D. 3 解析: 初始时, p 指向 a5 ;由于单目运算符的结合方向为右结合,所以,*-p等价于* (-p ),即先执行 -p ,p 指向 a4 ,再输出 a4 的值( 5);答案: C 【例 4.12 】如有如下定

11、义,就b 的值是();int a10=1,2,3,4,5,6,7,8,9,10,*p=&a3,b=p5; A. 5 B. 6 C. 8 D. 9 解析: p 指向 a3 ,即 p=a+3;b=p5 ,即 b=*p+5 ;因此, b=*a+8=a8=9;答案: D 【例 4.13 】如二维数组 y 有 m列,就排在 yij 前的元素个数为()A.j*m+i B.i*m+j C.i*m+j-1 D.i*m+j+1 解析:C语言中的二维数组按行储备;行标为 i 的元素前共有 i 行元素,元素个数为 i*m ,64 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - -

12、 第 3 页,共 35 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -每行列标为j 的元素前共有j 个元素;因此,yij前的元素个数为i*m+j ;答案: B 【例 4.14 】如有定义: char a10,*b=a;,就不能给数组a 输入字符串”This is a book”的语句是 ;A. getsa B. scanf%s,a C. gets&a0; D. getsb ;解析: gets 为字符串输入函数,调用该函数时需给出字符串的储备地址,以回车作为字符串输入的终止,并将回车符转换成为0 ;而 scanf 函

13、数就以回车、 空格或跳格作为串输入终止,因此 scanf 不能输入有空格的字符串;答案: B 【例 4.15 】以下程序执行后的输出结果是();A. 2 B. 3 C. 4 D. 5 #include string.h main char *p10= abc,aabdfg,dcdbe,abbd,cd; printf%dn,strlenp4; 解析:定义了一个含有10 个元素的字符指针数组p,并对前 5 个元素初始化, 其中 p4指向字符串 cd ,其串长为2;答案: A【例 4.16 】如定义一个名为 s 且初值为 123 的字符数组, 就以下定义错误选项();Achar s=1 , 2 ,3

14、 ,0 ; Bchar s=123; Cchar s=123n; Dchar s4=1,2 ,3; 解析: 字符数组中所存字符中有0 时, 字符数组才能作为字符串使用;选项 A是用字符常量对字符数组初始化,且最终一个元素的值为字符串终止标记(0 ),所以数组s 中存放的就是字符串 123 ;选项 D是用字符常量对部分元素初始化,依据 C 语言的规定,系统为第四个元素赋初值为空值,即 0,所以数组 s 中存放的也是字符串 123 ;选项 B是直接使用字符串 123 对字符数组初始化;选项 C也是使用字符串初始化,但是字符串不是123 ,而是 123 n ,数组长度为 5;答案: C 【例 4.1

15、7 】以下程序的功能是输入N个实数,然后依次输出前l 个实数和、前2 个实数和、 、前N个实数和;填写程序中缺少的语句;#define N 10 main float fN,x=0.0;int i; fori=0;iN;i+ scanf%f,&fi; fori=1;i=N;i+ ; printfsum of NO %2d-%fn,i,x; 解析: 分析程序可知, 第一个循环实现数据的输入,其次个循环实现求和并输出,程序中缺少的是运算前 i 个实数和并存入变量 x 的语句;由于每次循环的 x 值都是在前一次循环的基础上作累加,即前 i 个实数和( x)等于前 i-1 个实数和( x)加上第 i

16、个实数 fi-1,65 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 35 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -因此,处应填写:xxfi-1;答案: x=xfil ; 或 x fil; aij【例 4.18 】下面程序的功能是检查一个N N矩阵是否对称 (即判定是否全部的等于 aji);请填空;#define N 4 main int aNN=1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4; int i,j,found=0; for

17、j=0;jN-1; j+ for ;iN; i+ ifaij.=aji ; break; iffound printfNo; else printfYes; found ,初始值为 0;对于主对角线以上每个元素,分别与对称元 解析: 设置判定标志 素比较,如不相等,就将 found 置为 1 并终止比较;循环终止后,依据 found 的值确定是否 对称;答案: i=j+1 found=1【例 4.19 】编写程序,从一整型数组a 的第一个元素开头,每三个元素求和并将和值存入到另一数组中(最终一组可以不足3 个元素),最终输出所求的全部和值且每行输出5 个值;解析: 用于储备和值的数组设为 b,

18、全部元素都初始化为 0;从数组 a 的第一个元素开 始,进行累加操作 bj+=ai,累加过程中,数组 a 的下标每自加 3 次,数组 b 的下标自 加 1 次;重复此操作,直到数组 a 的全部元素累加完为止;输出时,每输出 5 个元素输出一 次换行符 n ;#define N 20 #define M N/3+1 main int aN,i,j,bM=0; fori=0;iN;i+ scanf%d,&ai; fori=0,j=0;iN;i+ bj+=ai; ifi+1%3=0 j+; ifN%3=0 j-; fori=0;i=j;i+ printf%d ,bi; ifi+1%5=0 print

19、fn; 【例 4.20 】已知数组 b 中存放 N个人的年龄,编写程序,统计各年龄段的人数并存入数66 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 5 页,共 35 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -组 d;要求把 0 至 9 岁年龄段的人数放在d0 中,把 10 至 19 岁年龄段的人数放在d1 中,把 20 至 29 岁年龄段的人数放在 都放在 d10 中;d2 中,其余依此类推, 把 100 岁 含 100 以上年龄的人数解析: 第一将数组 d 的全

20、部元素都初始化为 0,然后从数组 b 的第一个元素开头判定,假如数组 b 的元素值大于或等于 100,就数组元素 d10 加 1,否就,数组元素 d 数组 b 的元素值 /10 加 1;重复此操作,直到数组 #include #define M 11 #define N 20 main b 的最终一个元素为止; int bN=32,45,15,12,86,49,97,3,44,52,17,95,63,14,76,88,54,65,99,102; int dM,i; fori=0;iM;i+ di=0; fori=0;i=100 d10+; else dbi/10+; fori=0;iM-1;i

21、+ printf%4d-%4d :%4dn, i*10, i*10+9,di; printf over 100 :%4dn, d10; 【例 4.21 】编写程序,将一维数组 均值的数据移至数组的后部;x 中大于平均值的数据移至数组的前部,小于等于平解析: 先运算一维数组x 的平均值, 然后将大于平均值的数据存入数组y 的前部, 小于等于平均值的数据存入数组y 的后部,最终将数组y 复制到数组x;#include #define N 10 main int i,j; float av,yN,xN; fori=0;iN;i+ scanf%f,x+i; av=0; fori=0;iN;i+ av=

22、av+xi; av/=N; fori=j=0;iav yj+=xi;xi=-1; fori=0;iN;i+ ifxi.=-1 yj+=xi; fori=0;iN;i+ xi=yi;printf%5.2f ,xi; 【例 5.22 】已知一维整型数组a 中的数已按由小到大的次序排列,编写程序,删去一维数组中全部相同的数,使之只剩一个;解析: 从数组 a 的其次个元素开头,与前面保留的最终一个元素作比较,如不相等,就67 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 6 页,共 35 页 - - - - - - - - - 名师归纳总结 精品学习资料

23、- - - - - - - - - - - - - - -前移;重复此操作,直到数组 a 的最终一个元素为止;#include #define N 20 main int aN= 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10; int i,j; printfThe original data :n; fori=0;iN;i+ printf%3d,ai; forj=1,i=1;iN;i+ ifaj-1.=ai aj+=ai; printfnnThe data after deleted :n; fori=0;ij;i+ printf%3d,ai; 【例

24、4.23 】编写程序,把从键盘输入的一个数字字符串转换为一个整数并输出;例如,如输入字符串“- 1234” , 就函数把它转换为整数值-1234 ;要求:不得调用C语言供应的将字符串转换为整数的函数;解析: 设存放数字字符串的数组为 s,存放对应整型数的变量为 n(初始值为 0);如字 符串的第一个字符为- ,就从其次个字符开头,否就从第一字符开头,利用公式 n=n*10+si-0进行转换,直到0 为止;#include #include main char s10;long n=0; int i=0; printfEnter a string:n ; getss; ifs0=- i+; wh

25、ilesi n=n*10+si-0;i+; ifs0=- n=-n; printf%ldn,n; 【例 4.24 】编写程序,把 N N矩阵 A 加上矩阵 A 的转置,存放在矩阵 B中;累加到 B的元素 bij;也可 解析: 可先将 A 的转置存入 B,再将 A 的元素 aij 直接利用转置性质,bij=aij+aji;#define N 3 #include main int aNN=1,2,3,4,5,6,7,8,9,bNN; int i,j; fori=0;iN;i+ forj=0;jN;j+ 68 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - -

26、第 7 页,共 35 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - - bij=aij+aji; fori=0;iN;i+ forj=0;jN;j+ printf%4d,bij; printfn; 【例 4.25 】编写程序,将二维数组 一列,移动后的数组存到另一个二维数组aNM 中每个元素向右移一列,最右一列换到最左 b 中,原数组保持不变;例如:a456b645b 的第 1 列中,再依次将数组a 的第 i 列存入312123解析:将数组 a 的最终一列元素存入数组数组 b 的第 i+1 列 0=i=M-2 ;#d

27、efine N 3 #define M 3 main int aNM=4,5,6,1,2,3,6,7,8,bNM,i,j; fori=0;iN;i+ bi0=aiM-1; fori=0;iM-1;i+ forj=0;jN;j+ bji+1=aji; fori=0;iN;i+ forj=0;jM;j+ printf%d ,bij; printfn; 4.3 自测试题1. 单项挑选题(1)以下定义语句中,错误选项 ;char *a3; A int a=1,2; BC char s10=test; D int n=5,an; (2)以下能正确定义二维数组的是 int a3=2*3; A int a3

28、; BC int a3=; Dint a23=1,2,3,4; (3)以下程序的输出结果是 ;3 5 7 D3 6 9 A 1 5 9 B1 4 7 Cmain int i,x33=1,2,3,4,5,6,7,8,9; fori=0;i=1; forb=a-1;b=0;b- printf%d , xb; printfn; (2)main int i,n6=0; 70 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 9 页,共 35 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - -

29、- - fori=1;i=4;i+ ni=ni-1*2+1; printf%d ,ni; (3)#include #include main char c=a,t=you and me; int n,k,j; n=strlent; fork=0;kn;k+ iftk=c j=k;break; else j=-1; printf%d, j; (4)#include main char str120=China0USA, str220=Beijing; int i, k, num; i=strlenstr1; k=strlenstr2; num=ik.i:k; printf%dn, num; (5

30、)#include main static int a=1,3,5,7; int *p3=a+2,a+1,a; int *q=p; printf%dn,*p0+1+*q+2; 3. 程序填空题(1)下面程序的功能是将字符数组a 中下标值为偶数的元素从小到大排列, 其它元素不变;请填空;#include #include main char a=clanguage,t; int i,j,k; k=strlena; fori=0;i=k-2;i+=2 71 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 10 页,共 35 页 - - - - - - -

31、 - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - - forj=i+2;jk; if t=ai;ai=aj;aj=t; putsa;printfn; (2)以下程序的功能是在字符串s 中找出与字符串t 相同的子串的个数;请填空;#include main char s=fabcdabgabt,t=ab,*p,*q,*r; int n; n=0;q=s; while*q p=q;r=t; while*r if r+; p+; else break; if n+; q+; printfnThe result is: n=%dn,n; (3)下面程序的功能是把给定的字符按其矩阵格式读入数组str中,并输出行号与列号之和为 3 的数组元素;请填空;main char str43=A,b,C,d,E,f,G,h,I,j,K,l; int x,y,z; forx=0;x4;x+ for y=0; ;y+ z=x+y; if

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

当前位置:首页 > 教育专区 > 高考资料

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

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