2022年数组典型例题分析与解答 .pdf

上传人:C****o 文档编号:38688482 上传时间:2022-09-04 格式:PDF 页数:10 大小:58.14KB
返回 下载 相关 举报
2022年数组典型例题分析与解答 .pdf_第1页
第1页 / 共10页
2022年数组典型例题分析与解答 .pdf_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《2022年数组典型例题分析与解答 .pdf》由会员分享,可在线阅读,更多相关《2022年数组典型例题分析与解答 .pdf(10页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、学习好资料欢迎下载1 定义一个名为a 的单精度实型一维数组,长度为4,所有元素的初值均为0 的数定义语句是_ 【分析】按照一般数据定义语句的格式,可以直接写出方法一(参看答案);考虑到所有元素均赋初值时可以省略数组长度,可以写出方法二(参看答案);考虑到不省略数组长度,给部分元素赋初值时,所有未赋初值的元素均有空值(对数值型数组来说,初值为0),可以写出方法三(参看答案);考虑到选用静态型,不赋初值所有元素也自动赋予。空值(对数值型数组来说,初值为0),可以写出方法四(参看答案)。【答案】方法一:float a400,00,00,00;方法二: float a 0 0,00,00,00;方法三

2、: float a4= 00 ;方法四: static float 4;2 下列数组定义语句中,错误的是() char x1 a ;auto char x1=0; static char xl; char xl;【分析】显然答案中给字符型数组赋初值的格式不对(不能直接赋予字符常量,必须用花括号括住),所以备选答案是符合题意的答案。【答案】3 用 冒泡排序法 对 n 个数据排序, 需要进行 n 一 1 步。其中第 k 步的任务是: 自下而上, 相邻两数比较,小者调上;该操作反复执行nk 次。现在假设有4 个数据: 4、l 、3、2 要排序,假定4 为上、 2 为下,则利用 冒泡排序法 执行第 2

3、 步后的结果是 _。【分析】开始排序前的排列执行第1 步后的排列执行第2 步后的排列 4 1 1 1 4 2 3 2 4 2 3 3 【答案】 l 、2、4、3 4 用 选择排序法 对 n 个数据排序, 需要进行 n1 步。其中第 k 步的任务是: 在第 k 个数据到第n 个数据中寻找最小数,和第k 个数据 交换 。现在假设有4 个数据: 4、1、3、2 要排序,则利用冒泡排序法 执行第 2 步后的结果是 _。【分析】开始排序前的排列为: 4 1 3 2 执行第 1 步后的排列为:1 4 3 2 执行第 2 步后的排列为:1 2 3 4 【答案】 1、2、3、4 5 下列数组定义语句中,正确的

4、是() int a=1, 2,3,4,5,6 ; char a2 3 a,b ; int a3= 1 ,2,3,4,5,6 ; static int a 1,2,3,4,5,6;精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 10 页学习好资料欢迎下载【分析】 C 语言 规定,二维数组定义时不允许省略第二维的长度,所以备选答案是错误的。C 语言还规定,定义字符型数组时不允许直接使用 字符常量 的方式赋初值,所以备选答案也是错误的。显然备选答案符合题意。【答案】6 定义一个名为 s 的字符型数组,并且赋初值为字符串123 的错误语句是()

5、char s=1 , 2 ,3 ,0 ;char s =123;char s=123n; char s4=1, 2 ,3;【分析】 备选答案中省略了数组长度,所以每个元素都赋了初值,共计 4 个元素, 初值依次为 l、2 、3 、 0 ,最后一个元素的值为字符串结束标记,所以数组S中存放的是字符串123 ,该答案不符合题意 (即正确的); 备选答案中直接赋予字符串作为初值所以数组s 的长度为 4, 其中的初值是字符串123 ,不符合题意 (即正确的) ; 备选答案中也是给数组s 赋予字符串的初值, 但是字符串不是123 ,而是 123n ,所以该答案符合题意(即错误的);显然答案也不符合题意(

6、即正确的)。下面来分析答案为什么是正确的,该答案给出了数组长度为4,赋初值时仅给前3 个元素赋予字符 1 、 2、3,第 4 个元素没有赋初值,按照 C 语言的规定,也有初值,且初值为空值,对字符型数组来说,空值就是 0 ,即字符率结束标记,所以数组S中存放的也是字符串 123 。【答案】7 设有下列数据定义语句,则数组元素x的值是_ 。int i 3,x4= 1 ,2,3;【分析】由于 i 的初值为 3,所以 x 就是 x3 。由于数组的下标是从 0 开始的,所以 x3实际上是数组 x的第 4个元素。从定义语句中可以看出数组 x 的前 3 个元素的初值依次为 1、2、3,第 4 个元素没有赋

7、初值,其初值自动设为空值,对整型数组来说,空值是0,显然 x3的值是 0. 【答案】0 8 设有下列数据定义语句,则 puts (s00)的输出结果是 _ ; puts (s0 输出结果是_ 。char s45=l, 0 ,23 ,345,40 ;【分析】首先分析字符型数组 s 的初值,s 的第 1 行中存放的字符串是 1 、第 2 行中存放的符串是 23 、第 3 行中存放的字符串是 345 、第 4 行中存放的字符串是 4 。puts()函数的功能是输出从 参数 处开始存放的字符串中有效字符。按照上的分析,第 1 个输出的结果是从 S00开始的字符串,这个地址对应的就是数 s 的第 1 行

8、,所以输出结果为 1;第 2 个输出的结果是从“ s ”开始的字符串,这个址对应的也是数组 s 的第 1 行,所以输出结果也为 1。【答案】1 1 9 设有下列数据定义语句:char a410=11,22 ,33 ,44 ;则 puts (strcat (a1 ,a3 )的输出结果是 _ ;putS(strcpy (a0 ,a2 )的输出结果是 _ 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 10 页学习好资料欢迎下载【分析】字符数组 a 共有 4 行,每行存放一个字符串。这 4 行的首地址依次为:a0 、a1 、a2 、a3 ,

9、从这 4个地址开始存放的字符串依次为: 11 、22 、33 、44 。strcat (a1 ,a3 )函数调用的功能是将 s3 处的字符串连接到 al 的字符串后面,所以执行该函数调用后的 al 处的字符串为 2244,而该函数的返回值就是 a1 的首地址,puts ()函数的功能就是输出这个地址存放的字符串,由此,第1个输出的结果就是: 2244。同样理由可以分析 strcpy (a0 ,a2 )的功能是将 a2 处的字符串( 33 )复制到 a0 处,返回 a0 的地址,puts() 输出的就是 a0 处的字符串,结果为: 33。【答案】2244 33 10 设有下列数据定义语句: ch

10、ar str210=abc,ABC;则 printf(d,strcmp(str1,str0 )的输出结果是 _ ;printf( d,strcmp(strlwr(str1,str0),str0)的输出结果是 _ 。【分析】字符型数组 str 中,从 str0开始存放的字符串是 abc 、从 strl开始存放的字符串是 ABC。strcmp(strl,str0)是比较 strl和 str 【0处的两个字符串的大小,由于 ABC是小于abc 的,按照 srrcmp 函数的功能可知,返回值是一个小于 0的整数,这是第 1 个空的答案。再来分析第 2 个空的答案,strlwr (strl)函数的功能是

11、将 strl处的字符串中大写字母改为小写字母,其返回值是修改后字符串的地址。 strcmp(stlwr (sir1),str0)函数的功能是比较 strl和 str0处的字符串,由于 strl处的字符串已经改为小写字母了,所以和 str0处的字符串完全相同,返回值是 0,这就是第 2个空的答案。 答案 某个小于 0 的任意整数0 11 下列程序的功能是读取 10个实数,然后依次输出前 l 个实数和、前 2 个实数和、前 9 个实数和、前 10个实数和。请填写程序中缺少的语句。main()float f10,X00; int i; for (i=0;i 10;i+) scanf ( f , f

12、); for (i=1;i =10;i+)_ printf(sum of NO 2d f n,i ,x); 【分析】浏览程序清单后,可以发现前一个次数型循环是输入 10 个实数存入数组 f中。后一个次数型循环是计算前 i 个实数和并存入变量 X中,然后再输出这个 x 的值。程序中所缺少的语句就是实现 计算前 i个实数和并存入变量 X中 的。当 i 等于 1 时,x 要等于 f0 的值,即 fil 的值;当 i 等于 2 时,x要等于 f0 fl的值,即 f0 fi 1的值,此时 f0 的值已经计算并存入变量 x 中;当 i 等于 3精选学习资料 - - - - - - - - - 名师归纳总结

13、 - - - - - - -第 3 页,共 10 页学习好资料欢迎下载时,x 要等于 f0 f1 f2 的值,即 f0 f1 fi l 的值,此时 f0 f1 的值已经计算并存入变量 x 中;由此可以推出:前 i 个值的计算公式为: xxfi 1,将这个表达式组成语句就是需要填写的内容。【答案】 x=x fi l ; 或xfi l ;12 运行下列程序的输出结果是() 111lllllllll 222 main() int a=1,2,3,4, 5 ,i; for ( i=1;i 5; i )printf( 1d , a ai一 1); 【分析】首先分析数组 a 各元素的值,由于是赋初值,很容

14、易看出: a0 1 、a1 2、a4 5。再分析次数型循环共计执行 4 次(i 1、i 2、i 3、 i 4),每次输出 1 位整数;ai 1,当 i 1 时,输出的是 211;当 i 2时,输出的是 32l ;当 i=3 时,输出的是 43l ;当 i 4 时,输出的是541。整个程序的输出结果是 1111。【答案】13 下列程序的功能是输入一个 5 行 5 列的实数矩阵,然后求出其中的最大数和最小数, 并且对调这两个数后,再输出,请填写程序中缺少的语句。main() float f 55,max , x ;int i,j ,max_l,max_J ,min_i ,min_J;for (i

15、0;i 5;i ) for (j 0;j 5;j ) scanf ( f ,x);fjx; max minf00;max_imax_imin_i min_j 0; for (i= 0 ;i 5;i ) for (j 0;j 5;j ) if(max fj) maxfj,max_ii ,max_jj ;if (minfj)_ fmax_imax_jmin; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 10 页学习好资料欢迎下载fmin_i min_j max ; for(i0;i 5;i ) printf(n);for (j 0;j

16、5;j )printf(82f ,fj); 【分析】首先宏观上阅读程序,可以看出程序的基本结构是:用双重次数型循环读取5 行 5 列矩阵的元素值存入二维数组 f 中;寻找矩阵中的最大数和最小数;交换最大数和最小数;输出交换后的矩阵元素值。需要填写的语句属于第 2 个部分。现在来仔细分析这个部分的程序。通常寻找最大数(或最小数)的算法是首先假定最前面的数是最大数 (或最小数), 并记录该数及其在数组中的下标, 然后依次处理所有元素,若当前处理的元素大于(小于)最大数(最小数),则重新记录新的最大数(最小数)及其下标。从本程序清单来看,的确是采用了这个算法,由于是同时求最大数和最小数,所以用max

17、 、max_i、max_j分别记录当前的最大数及其行列下标,用 min、min_i、min_j 分别记录当前的最小数及其行列下标。在二重循环的循环体中有两条单分支语句,前一个单分支语句的功能很清楚,判断当前的数组元素是否大于最大数,是则重新记录最大数及其行列下标(注意,这里是用一个逗号表达式完成三项赋值工作的)。循环体中的第 2 条单分支语句当然是求当前最小数的,由此分析,当条件成立(当前数组元素小于当前最小数)时,需要重新记录当前的最小数及其行列下标,所缺少的语句正是完成这项工作的,由于只能用一条语句完成三项赋值工作,所以必须使用远号表达式。对照该循环体的前一个单分支语句, 很容易写出所缺少

18、的语句。接下来阅读以后的程序,来验证所填写的语句。接下来的两条赋值语句正好完成了最大数和最小数的交换工作。前一个语句“ fmax_i max_j min;”是将找到的最小数存入对应最大数的位置( max i 是最大数的行下标,max_i是最大数的列下标, fmax_imax j 就是最大数),类似的,后一个语句“fminimin_jmax ;”是将找到的最大数存入对应最小数的位置。【答案】minfj,mini i ,minj=j ;14 阅读下列 程序,写出程序运行后的输出结果。main()int al=1,3,6,7,100,a2=2 ,4,5,8,100,a10 ,i ,j ,k;i j

19、0;for (k0;k8;k) if (a1a2j )ak a1i ; else ak a2j ;for (k 0; k 8; k ) printf(1d,ak ); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 10 页学习好资料欢迎下载【分析】程序开始用赋初值方式给数组al 和 a2的所有元素赋值。接下来是给变量 i 、j 清 0,从后面的for 循环中可以看出,变量 i 、j 是作为一维数组的下标的,所以它们的初值是从0 下标开始的。重点分析其后的次数型循环,共计循环 8次,控制变量 k 的值依次为 0、l 、7,这个控制循环的

20、变量 k 也是作为下标使用的。再分析循环体,这是一条双分支语句,控制条件是“a1aj”,即a1数组的第叶元素值小于 a2数组的第 j 个元素值。这个条件成立时,执行的操作包括: al数组的第 i 个元素存入 a 数组的第k 个元素中、同时 i 加 1,使得 a1 成为其后的元素;如果这个条件不成立(即a2 数组的第 j个元素值小于或等于 al数组的第 i 个元素值),执行的操作包括: a2 数组的第 j 个元素在入 a 数组的第 k 个地素中、同时 j 加 1,使得 a2j 成为其后的元素。综合上述的分析,可以看出,循环体的工作是将数组al 和a2 的当前元素中值小的元素复制到数组 a 中,如

21、果数组 al 的元素被复制,则其下标后移一个位置,指向al 的新元素;如果数组 a2的元素被复制,则其下标后移一个位置,指向a2 的新元素。该循环执行 8 次,恰好把数组 a1 和数组 a2中的各 4 个元素按照从小到大的顺序复制到数组a 中。最后看看输出,是一个次数型循环语句,输出的结果是数组 a 中的 8 个元素值, 而且输出格式为一位整数,结果当然是: 12345678。请读者注意,由于原来的两个数组 al 和 a2中的元素是从小到大的顺序排列的,所以合并后的数组a 的元素也必然是从小到大的。这是一种排序的算法,称为两路归并排序法 。但是,真正的两路归并排序法要考虑到某个数组的元素全部复

22、制后, 另一个数组中的剩余元素要全部复制。 本程序中没有考虑这个 临界问题, 而是采用了在两个数组的有效数据之后, 放一个最大数的方法,并且知道归并后的数据总个数。【答案】 12345678 15 阅读下列程序,写出程序运行后的输出结果。include string.h main() char s320=2345,123456,2347 ;int i, k ;for ( k 0, i 1; i 3 ; i )if (strcmp(sk ,s)0) k i :puts(sk); 【分析】该程序很简单,开始给二维字符型数组赋初值为3 个字符串,通过一个次数型循环求得变量k 的值,然后输出 sk 对

23、应的字符串。从上面的分析可知,关键是循环语句执行后变量k 的值等于多少?我们呵以用记录的方法来记录在循环中变量k 的值。执行循环语句,记录如下:k0,i 1,控制循环的条件 i 3 成立,执行循环体的单分支语句,条件 (strcmp (sk ,s)0相当于(strcmp(2345 ,123456)0,条件不成立,变量 k 值不变,i加 1 后继续循环; k 0,i 2 ,控制循环的条件 i 3 成立,执行循环体的单分支语句,条件 (strcmp (sk ,s)0相当于(strcmp(2345,2345)0,条件成立,执行 ki ,k 值为 2,i 加 1后继续循环;精选学习资料 - - - -

24、 - - - - - 名师归纳总结 - - - - - - -第 6 页,共 10 页学习好资料欢迎下载k2,i=3 ,控制循环的条件 i 3不成立,退出循环。此时变量 k 值为 2. 执行puts (sk );语句,输出的是 s2 处存放的 字符串:2347 显然该程序的主要功能是在 3 个字符串中。寻找最大字符串的【答案】 2347 16 阅读下列程序,写出程序的主要功能。 main() int i, a10 , x , flag 0 ;for (i=0; i10;i 十十) scanf ( d, a 【i 】);scanf( d, X);for (i=0;i 10;i 十十)if ( x

25、 a) flag i 十 1; break; if(flag= 0 )printf(no found! n);else printf(dn,flag ); 【分析】该程序属于比较简单的,开始定义整型数组a 以及整型变量 x、flag 和 i 。下面的次数型循环是输入 10个整数到数组 a 中, 此时可以看出变量 i 是作为循环的控制变量使用的。 接着输入一个整数到变量x 中。接下来的次数型循环执行 10次,这是标准的用单重次数型循环来依次处理一维数组元素的程序段,处理的内容是循环体中的单分支语句,即判断当前的数组元素是否等于变量x,是,则在变量师中记录 i1 后退出循环;否,则继续循环。由此可

26、以分析出,这个流环足在数组a 中寻找 x 的,找不到,则变社flag的值不会改变(注意动值为 0);如果找到,则 lleq变量的值将等于 i l ,其中的 i 是循环控制变量,也就是找到的数组元素的下标,将其加 1 后存入变量 flag ,所以此时的 flag 是对应数组元素的下标加 1 的。我们再仔细分析一下,当 i 0 时,找到的是数组元素 a0 ,此时 flag 为 1,表示是数组的第 1个元素,即在 10 个待查整数中的序号为 1 ;当 i l 时,找到的是数组元素 a1 ,此时 flag为 2,表示是数组的第 2 个元素,即在 10 个待查整数中的序号为 2. 当 i 9 时,找到的

27、是数组元素 a9 ,此时flag 为 10,表示是数组的第 1O个元素,即在 10个待查整数中的序号为 10. 所以,找到则 flag 的值为 1、2、10;找不到则为 0。循环后面的输出恰好是按照 flag 的值分别处理找到和找不到的两种情况。综上所述,可以总结出本程序的主要功能。【答案】输入 10 个整数存入数组 a,再输入一个整数 x,在数组 a 中查找 x。找到输出 x 在 10个整数中的序号(从 1 开始),找不到则输出 no found ! 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 10 页学习好资料欢迎下载17 阅

28、读下列程序,写出程序的主要功能。main() int i,sum 0 ,a 10; for (i 0;i 10;i )scanf( d ,a);for (i 9;i 0;i )if ( a 7 0 ) suma;printf(d,a); printf( nsum dn,sum ); 【分析】这是标准的次数型循环结构。第1 个循环是输入 10 个整数存入数组 a中;第 2 个循环是从后向前的顺序依次处理一维数组的元素。 具体的处理是体现在其循环体中, 它是判断当前数是否满足条件“a70”,满足条件的元素则参加累加的计算,并输出满足条件的数组元素。退出循环后,再输出这些满足条件的数组元素之和。程序

29、功能的关键是搞清楚条件 a7 0 的含义,其实很简单,这个条件就是 数组元素能被 7 整除 。综上所述,可以总结出该程序的主要功能。【答案】输入 10 个整数,按从后向前的顺序依次寻找并输出其中能被7 整除的所有整数以及能被 7 整除的这些整数的和。18 编一个程序,计算并输出下列数列的前 24 项,每行输出 4项。数列第 1 项的值 1 数列第 2 项的值 2 数列第 k 项的值=第 kl 项的值十第 k2 项的值,当 k 为奇数时,数列第 k 项的值=第 kl 项的值一第 k2 项的值,当 k 为偶数时。【分析】求数列的前 24 项可使用次数型循环结构,只要按照给出的公式计算并保存即可。按

30、每行 4 个数据的格式输出一维数组中的数据是一个标准的次数型循环。【答案】main() long int a25=0,1,2 ;int i;for (i 3;i 25;i ) if( i 2 ! 0 )aai l ai 2; else aai 一 1ai 2;for (i 1 ; i 25; i )精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 10 页学习好资料欢迎下载printf(8ld ,a);if (i 40) printf(n); 19 编一个程序,输入一个 3X3的实数矩阵,求两个对角线元素中各自的最大值。【分析】用二重次数

31、型循环解决矩阵的输入。用一重次数型循环求主对角线元素的最大数,用单分支结构求次主对角线元素中的最大数。【答案】 main() float s33 ,max1 ,max2 ,x; int i,j ; for (i 0;i 3 ;i )for (j=0 ;j 3;j+) scanf (f , x);sj x; max1s0 0 ; for (i=1 ;i 3;i 十十) if(max1 si i )max1=sii ; max2=s02 ; if (max2 s11) max2=s11 ; if (max2 s2 0)max2 s2 0 ; printf(max1 f n,max1 ); prin

32、tf(max2= f n,max2 ); 20 编一个程序,输入 3 个字符串(长度均不超过 30)存入一个二维的字符型数组中,将第 3 个字符串连接到第 2 个字符率之后,然后再连接到第 1 个字符率之后,组成新的字符率存入一维的字符型数组中,然后输出该新的字符串(说明:本题不允许使用字符串连接函数)。【分析】 两个字符率的连接算法如下,第 1 个字符串复制到某个字符数组中(注意不包括字符串结束标记),然后再将第 2 个字符串复制到字符数组中(注意包括字符率结束标记)。本题要求连接3 个字符串,可以用次数为 3的次数型循环来实现。【答案】main() char s9l,a331;int i, j , k ;scanf( sss,a0 ,al ,a2 );k0;精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 10 页学习好资料欢迎下载for (i 0;i 3;i ) for (j 0;j 31;j )if (aj 0 ) break ;else skaj ; k ; sk 0 ;printf( s , s ) ;精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 10 页

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

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

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com