c语言数组习题_第1页
c语言数组习题_第2页
c语言数组习题_第3页
c语言数组习题_第4页
c语言数组习题_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、. 0,0. 0,0. 0;方法三:float a4= 0. 0;方法四:static float 4;2下列数组定义语句中,错误的是() char x1= 'a' auto char x1=0; static char xl ; char xl ;【分析】显然答案中给字符型数组赋初值的格式不对(不能直接赋予字符常量,必须用花括号括住) 所以备选答案是符合题意的答案。【答案】n 1步。其中第k步的任务是:自下而上,相邻两数比n-k次。现在假设有4个数据:4、I、3、2要排序,假定4为上、2为2步后的结果是O1步后的排列执行第 2步后的排列12433用”冒泡排序法”对n个数据排序

3、,需要进行 较,小者调上;该操作反复执行 下,则利用”冒泡排序法”执行第4132【答案】I、2、4、34用"选择排序法”对n个数据排序,需要进行 n-1步。其中第k步的任务是:在第k个数据到第n个数 据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、执行第2步后的结果是【分析】开始排序前的排列为:执行第1步后的排列为: 执行第2步后的排列为:【答案】1、2、3、45下列数组定义语句中,正确的是() int a=1,2,3,4, 5,6; int a3= 1,2,3,4,5, 6;【分析】开始排序前的排列执行第1421、3、2要排序,则利用”冒泡排序法”3O111 char a

4、2 static int a,'b';3 = 'a'=1,2,3,4,5,6C语言还【分析】 O言规定,二维数组定义时不允许省略第二维的长度,所以备选答案是错误的。 规定,定义字符型数组时不允许直接使用”字符常量”的方式赋初值,所以备选答案也是错误的。显然备选答案符合题意。【答案】6定义一个名为"S"的字符型数组,并且赋初值为字符串"123"的错误语句是()char s=1','2' ,'3' ,'0 'char s ="123"char s=&q

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

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

7、数组x的第4个元素。从定义语句中可以看出数组 有赋初值,其初值自动设为空值,对整型数组来说,空值是 8设有下列数据定义语句,则 输出结果是x的前3个元素的初值依次为1、2、3,第4个元素没0,显然x3的值是0.【答案】0 puts (& s00)的输出结果是 ; puts (s0Ochar s45=T, ' 0' , "23" , "345" , "4 0"【分析】首先分析字符型数组第 3 行中存放的字符串是 "345" 、第 4 行中存放的字符串是 "4" 。 puts

8、 ()函数的功能是输出从 开始存放的字符串中有效字符。按照上的分析,第 地址对应的就是数 址对应的也是数组 【答案】 1s 的初值, s 的第 1 行中存放的字符串是 "1" 、第 2 行中存放的符串是 "23" 、 " 参数 " 处 开始的字符串,这个 开始的字符串,这个s 的第 1 行,所以输出结果为 s 的第 1 行,所以输出结果也为1 个输出的结果是从 "S00" 1;第 2个输出的结果是从“1。s ”19 设有下列数据定义语句:char a410="11", "22"

9、; ,则 puts ( strcat (a1 , a3putS(strcpy (a0 , a2 )【分析】 字符数组 a 共有 4 行,"33" , "44" ;)的输出结果是 ;的输出结果是_ 。每行存放一个字符串。 这 4 行的首地址依次为:"11" 、 "22" 、 "33" 、 "44" 。 strcata0a1al 处的字符串为 "2244" , a1 的首地址, puts ()函数的功能就是输出这个地址存放的字符串,由此,第从这 4 个地址开始

10、存放的字符串依次为:功能是将 s3 处的字符串连接到 aI 的字符串后面, 所以执行该函数调用后的 而该函数的返回值就是1 个输出的结果就是:复制到 a0 处,返回【答案】 2244、 a1 、 a2 、 a3 , , a3 )函数调用的2244。同样理由可以分析 strcpy (a0 , a2 )的功能是将 a2 处的字符串 ("33" ) a0 的地址, puts() 输出的就是 a0 处的字符串,结果为:33。3310 设有下列数据定义语句:char str210="abc", "ABC";则 printf("d&qu

11、ot;, strcmp (str1 , str0 )的输出结果是 ;printf ("d", strcmp(strIwr(str1,str0), str0 )的输出结果是 。【分析】 字符型数组 str 中,从 str0 开始存放的字符串是 "abc" 、从 strI 开始存放的字符串是 "ABC"。,str0)是比较strl 和str【0处的两个字符串的大小,由于"ABC"是小于"abc"的,0的整数,这是第 1个空的答案。再来分析第 2个空的strcmp(strI按照 srrcmp 函数的功

12、能可知,返回值是一个小于答案, strIwr ( strI )函数的功能是将 strI 处的字符串中大写字母改为小写字母,其返回值是修改 后字符串的地址。 strcmp(stIwr (sir1), str0 )函数的功能是比较 strI 和 str0由于 strI 处的字符串已经改为小写字母了,所以和 str0 处的字符串完全相同,返回值是 第 2 个空的答案。 答案 某个小于 0 的任意整数011 下列程序的功能是读取 10 个实数,然后依次输出前 I 前 10 个实数和。请填写程序中缺少的语句。个实数和、前2个实数和、前处的字符串,0 ,这就是9 个实数和、main ()float f10

13、,X= 0.0;int ifor( i=0 ;i < 10;i+)scanf(" f" ,for(i=1;i< =10;i+) fi );printf("sum of NO 2df、n", i , x);【分析】浏览程序清单后,可以发现前一个次数型循环是输入循环是计算前i个实数和并存入变量X中,然后再输出这个 x的值。程序中所缺少的语句就是实现前 i 个实数和并存入变量时, x 要等于 f0 fI 等于 3 时, x 要等于 f0 经计算并存入变量x中; 句就是需要填写的内容。X 中 " 的。当 i 等于 的值,即 f0 fi f1

14、 f2 的值, 由此可以推出:前 i10 个实数存入数组 f 中。后一个次数型" 计算1 时, x 要等于 f0 的值,即 fi l 的值;当 i 等于 2 1的值,此时f0的值已经计算并存入变量 x中;当i 即 f0 f1 fi l 的值,此时 f0 f1 的值已 个值的计算公式为:x= x + fi 1,将这个表达式组成语【答案】x=x + fi l :; 或 x + = fi l;12 运行下列程序的输出结果是() 111ll llllmain ()int a=1, 2, 3, 4, 5 , i;for ( i=1;i< 5 ; i + + )printf ("

15、 1d" , ai ai 一1 );III 222【分析】首先分析数组 a各元素的值,由于是赋初值,很容易看出: a0 = 1、a1 = 2、a4 = 5。 再分析次数型循环共计执行 4 次( i = 1 、 i = 2、 i = 3、 i = 4),每次输出 1 位整数; i ai 1 ,当 i =1时,输出的是 2- 1 = 1;当i = 2时,输出的是3- 2= l ;当i=3时,输出的是 4 3 = l ;当i = 4时, 输出的是 54= 1。整个程序的输出结果是 1111。【答案】13 下列程序的功能是输入一个 5 行 5 列的实数矩阵, 然后求出其中的最大数和最小数,

16、并且对调这两个 数后,再输出,请填写程序中缺少的语句。main () float f 55, max, x ;int i , j , max_l, max_J, min_i , min_J ;for ( i = 0; i < 5; i )for ( j = 0; j < 5; j )scanf ( " f" , x); fij= x;max= min = f00;max_i = max_i = min_i = min_j = 0;for ( i= 0 ; i < 5; i )for (j=0; j<5; j )), max_i = i , max_j

17、 = j ;)if ( max< fijmax= fij if (min > fijfmax_imax_j= mi n;fmin_i min_j = max; n");(j = 0; j < 5; j + + )printf("82f" ,fij);for(i = 0; i < 5; i + + ) printf(" for 【分析】首先宏观上阅读程序, 素值存入二维数组 f 中;寻找矩阵中的最大数和最小数;交换最大数和最小数;输出交换后的矩阵元素 值。需要填写的语句属于第 2 个部分。现在来仔细分析这个部分的程序。通常寻找最大数

18、(或最小数) 的算法是首先假定最前面的数是最大数(或最小数) ,并记录该数及其在数组中的下标,然后依次处理所 有元素,若当前处理的元素大于(小于)最大数(最小数) ,则重新记录新的最大数(最小数)及其下标。 从本程序清单来看,的确是采用了这个算法,由于是同时求最大数和最小数,所以用max、max_i、max_j分别记录当前的最大数及其行列下标,用min、 min_i 、 min_j 分别记录当前的最小数及其行列下标。在二重循环的循环体中有两条单分支语句,前一个单分支语句的功能很清楚,判断当前的数组元素是否大 于最大数,是则重新记录最大数及其行列下标(注意,这里是用一个逗号表达式完成三项赋值工作

19、的) 循环体中的第 2 条单分支语句当然是求当前最小数的,由此分析,当条件成立(当前数组元素小于当前 最小数)时,需要重新记录当前的最小数及其行列下标,所缺少的语句正是完成这项工作的,由于只能 用一条语句完成三项赋值工作,所以必须使用远号表达式。对照该循环体的前一个单分支语句,很容易 写出所缺少的语句。接下来阅读以后的程序,来验证所填写的语句。接下来的两条赋值语句正好完成了 最大数和最小数的交换工作。前一个语句 数的位置(mai是最大数的行下标, 似的,后一个语句“ 【答案】 min=fij 14 阅读下列 程序,main () int al=1 i =j=0; for ( k= 0;if可以

20、看出程序的基本结构是:用双重次数型循环读取fmin _imin_j ,min_i = i , 写出程序运行后的输出结果。5行 5列矩阵的元fmax_imax_j = min ;”是将找到的最小数存入对应最大max_i是最大数的列下标,fmax_imax _j 就是最大数),类 = max ;”是将找到的最大数存入对应最小数的位置。min_j=j ;3, 6, 7,100 ,a2=2 ,4, 5, 8, 100 , a10 ,i,j,k;k< 8; k )a1i<a2j)ak = a1i + + ;elseak := a2j + ;for (k= 0 ; k < 8 ; k +

21、 + printf ("1d", ak); 【分析】程序开始用赋初值方式给数组 for 循环中可以看出,变量 析其后的次数型循环,共计循环al 和 a2 的所有元素赋值。接下来是给变量 i 、 j 清 0,从后面的 i 、 j 是作为一维数组的下标的,所以它们的初值是从 0 下标开始的。重点分 8次,控制变量k的值依次为0、I、7这个控制循环的变量 k也是 a1i < aj ”,即 a1 数组的第叶 这个条件成立时,执行的操作包括:aI 数组的第 i 个元素存入 a作为下标使用的。再分析循环体,这是一条双分支语句,控制条件是“ 元素值小于 a2 数组的第 j 个元素值

22、。 数组的第 k 个元素中、同时 i 加 1, j 个元素值小于或等于 aI 数组的第 的第 k 个地素中、同时 j 加 1 ,使得 是将数组 aI 和 a2 的当前元素中值小的元素复制到数组 移一个位置,指向al的新元素;如果数组a2的元素被复制,则其下标后移一个位置, 该循环执行8次,恰好把数组 a1和数组a2中的各4个元素按照从小到大的顺序复制到数组 看看输出,是一个次数型循环语句,输出的结果是数组 结果当然是:12345678 。请读者注意,由于原来的两个数组al和a2中的元素是从小到大的顺序排列的,所以合并后的数组 a 的元素也必然是从小到大的。这是一种排序的算法,称为 "

23、两路归并排序法 "。但是,真正的两路归 并排序法要考虑到某个数组的元素全部复制后,另一个数组中的剩余元素要全部复制。本程序中没有考 虑这个 "临界问题 " ,而是采用了在两个数组的有效数据之后,放一个最大数的方法,并且知道归并后的 数据总个数。【答案】 12345678 15 阅读下列程序,写出程序运行后的输出结果。 include "string.h" main () char s320="2345" int i for使得 a1i 成为其后的元素;如果这个条件不成立(即 a2 数组的第 i 个元素值),执行的操作包括:a

24、2 数组的第 j 个元素在入 a 数组a2j 成为其后的元素。综合上述的分析,可以看出,循环体的工作 a 中,如果数组 aI 的元素被复制,则其下标后 指向 a2 的新元素。 a 中。最后a 中的 8 个元素值,而且输出格式为一位整数,"123456" , "2347" ;, k;(k = 0 , i = 1; i < 3 ; i + + )if(strcmp (sk , si )< 0) k = i :( s k ) ;puts【分析】该程序很简单,开始给二维字符型数组赋初值为 的值,然后输出 sk 对应的字符串。从上面的分析可知,关键是循

25、环语句执行后变量 我们呵以用记录的方法来记录在循环中变量执行循环语句,记录如下:k = 0, i = 1,控制循环的条件"i < 3'(sk , si )< 0"相当于 "(strcmp 加1后继续循环;k = 0, i = 2,控制循环的条件(sk , si )< 0"相当于 "(strcmp 加1后继续循环;k = 2, i=3,控制循环的条件 此时变量 k 值为 2.执行 "puts (sk ); "语句, 显然该程序的主要功能是在【答案】 234716 阅读下列程序,写出程序的主要功能。ma

26、in () int i3 个字符串,通过一个次数型循环求得变量k 的值等于多少?k 的值。成立,执行循环体的单分支语句,条件("2345" , "123456" ) < 0",条件不成立,变量 k值不变," ( strcmp"i < 3" 成立,执行循环体的单分支语句,条件 "(strcmp("2345" , "2345" ) )< 0",条件成立,执行k= i , k 值为 2,"i < 3" 不成立,退出循环

27、。输出的是 s2 处存放的 字符串: 23473 个字符串中。寻找最大字符串的,a10 , x , flag; i 十十)" d", a 【i 】); scanf ( " d" , for ( i=0;iiffor ( i=0; i<10 scanf< 10;ix = flagX); 十十) ai )=i 十 1; break ;if(flag= 0 printf)(”no found! n");elseprintf ("%dn", flag );【分析】该程序属于比较简单的,开始定义整型数组a以及整型变量x、f

28、lag和i。下面的次数型循环是输入10个整数到数组a中,此时可以看出变量i是作为循环的控制变量使用的。接着输入一个整数到变 量x中。接下来的次数型循环执行10次,这是标進的用单重次数型循环来依次处理一维数组元素的程序段,处理的内容是循环体中的单分支语句,即判断当前的数组元素是否等于变量X,是,则在变量师中记录i +1后退出循环;否,则继续循环。由此可以分析出,这个流环足在数组a中寻找X的,找不到,则变社flag的值不会改变(注意动值为0);如果找到,则lleq变量的值将等于i + I,其中的i是循环控制变量,也就是找到的数组元素的下标,将其加 1后存入变量flag,所以此时的flag是对应数组

29、元素 的下标加1的。我们再仔细分析一下,当i = 0时,找到的是数组元素 a0,此时flag为1,表示是数组的第1个元素,即在10个待查整数中的序号为1 ;当i =1时,找到的是数组元素a1,此时flag为2,表示是数组的第2个元素,即在10个待查整数中的序号为2.当i = 9时,找到的是数组元素 a9,此时flag 为10,表示是数组的第 1O个元素,即在10个待查整数中的序号为 10.所以,找到则flag的 值为1、2、10;找不到则为0。循环后面的输出恰好是按照flag的值分别处理找到和找不到的两种情况。综上所述,可以总结出本程序的主要功能。【答案】输入10个整数存入数组a,再输入一个整

30、数 X,在数组a中查找X。找到输出X在10个整数中 的序号(从1开始),找不到则输出"no found !"。17阅读下列程序,写出程序的主要功能。mai n (),sum=(i = 0 ; scanf(i = 9;if (0 , a 10;i < 10; i + + )("% d",& ai);i >= 0; i )ai % 7 = 0 ) int iforforsum += ai;printf (" % d", ai);(” " nsum=% d n" , sun);printf【分析】这是

31、标准的次数型循环结构。第1个循环是输入10个整数存入数组a中;第2个循环是从后向前的顺序依次处理一维数组的元素。具体的处理是体现在其循环体中,它是判断当前数是否满足条件“ai % 7= 0”,满足条件的元素则参加累加的计算,并输出满足条件的数组元素。退出循环后,再输 出这些满足条件的数组元素之和。程序功能的关键是搞清楚条件"ai %7= 0"的含义,其实很简单,这个条件就是”数组元素能被7整除"。综上所述,可以总结出该程序的主要功能。【答案】输入10个整数,按从后向前的顺序依次寻找并输出其中能被的这些整数的和。18编一个程序,计算并输出下列数列的前数列第数列第数列第数列第【分析】求数列的前2424项,每行输出4项。7整除的所有整数以及能被 7整除1项的值12项的值2k项的值=第k l k项的值=第k l项的值十第k 2项的值, 项的值一第k 2项的值,当k为奇数时, 当k为偶数时。数据的格式输出一维数组中的数据是一个【答案】void main ()lo ng int a25=0int ifor项可使用次数型循环结构,只要按照给出的公式计算并保存即可。按每行 标准的次数型循环。,1, 2;(i = 3; i < 25; i + + ) if ( i % 2 !ai

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论