2021年陕西省铜川市全国计算机等级考试C语言程序设计预测试题(含答案).docx
2021年陕西省铜川市全国计算机等级考试 C语言程序设计预测试题(含答案)学校:班级:姓名:考号:一、单选题(12题)1 .对一个算法的评价,不包括()方面的内容。A.健壮性和可读性B.并行性C.正确性D.时空复杂度2 .软件调试的目的是oA.发现错误B.改正错误C.改善软件的性能D.挖掘软件的潜能3 .以下程序的输出结果是0。#include<stdio. h>voidmain ()intx=10, y=10;printfx-, -y);)4 .阅读以下程序及对程序功能的描述,其中正确的是#include < stdio.h >main() FILE*in, *out; charch, infile10, outfile10;printfEntcr the infilc name: n');scanf("s”,infile);printff'Enter the outfile name: n");234567891011include <stdio.h>#include <math.h> double fun (double eps)main ()( double x;void NONO ();printf("Input eps:w);scanf(w%lf6x); printf("neps %lfr PI-%lfn", xr fun(x);NONO O ;1213141516void NONO ()(/*本函数用于打开文件,输入数据,调用函 ft.输出数据,关闭文件.*/FILE *fp, *wf ; int i ;17181920212223242526double x ;fp fopen("in.dat", Hrw);wf - fopen("out.dat"r"w");for(i - 0 ; i < 10 ;(fscanf(fpr&x);fprintf(wf, "%lfnwr fun(x);)fclose(fp);fclose(wf);27.请编写一个函数int fun (int *s, int t, int *k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:234 345 753 134 436 458 100 321 135 760则输出结果为6, 100。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include < conio.h >#include < stdio.h >int fun(int *s, int t, int *k)( main()(intall0=234, 345, 753, 134, 436, 458,100, 321,135, 760), k ;clrscr();fun(a, 10, &k);printf(n%dr %dn,1 k, ak);28 .请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的 值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素 中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存 放最大值所在元素的下标。注意:部分源程序存在文件PROG1 . C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。12345678910111213141516171819202122232425262728tinclude <stdlib.h> finclude <stdio.h> void fun (int a (, int n , int *maxr int *d) main ()(int i, x(20, max , index, n , 10; void NONO ();for (i«0;i < n;i*) (xi - rand() %50; printf(M%4dwr x(i);printf("nw);fun (x, n , &max, Aindex);printf (wMax -%5d , Index -%4dn"r max, index);NONO();void NONO ()(/*本函数用于打开文件,输入数据,调用函 数,输出数据,关闭文件.*/FILE *fp, *wf ;int i, x 20, max, index, n-10, j;fp fopen("in.dat","r");wf fopen("out.dat"rWw");for(i ® 0 ; i < 10 ; i+)(for (j - 0 ; j < n ; j+) fscanf (fp, -%d,”, 4x(j);fun(x, n , &max, 6index);fprintf(wf,"Max«%d,Index»%dn"r max, index);)fclose(fp);fclose(wf);29 .请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9 整除的所有自然数的倒数之和。例如,在主函数中从键盘给n输入20后,输出为:s=0. 583333o注意:要求n的值不大于100。部分源程序在文件PROG1. C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括 号中填入你编写的若干语句。23456789101112131415161718192021222324linclude <stdio.h> double fun(int n)NONO()"请在此函数内打开文件.愉入IN试数据. 调用fun函数.辎出数据,关闭文件./FILE *rf, *wf; int n, 1; double s; rf - fopen(win.datH,wrw);wf fopen(wout.datw,Hww); for(i 0 ; i < 10 ;(fscanf(rf, "td", &n);s - fun(n);fprintf(wf,s);fclose(rf); fclose(wf);>main O int n; double s; printf(wnlnput n:scanf("%dwr(n); s-fun(n); printf(Hnns-%fn"r s);NONO O;30.假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功 能是:使字符串中前部的*号不得多余n个;若多余n个,则删除多余 的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不 删除。例如,字符串中的内容为*A*BC*DEF*G*,若n的值为2, 删除后,字符串中的内容则应当是*A*BC*DEF*G* ;若n的值 为4,则字符串中的内容仍为*A*BC*DEF*G*。n的值在主函 数中输入。在编写函数时,不得使用C语言提供的字符串函数。 注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括 号中填入所编写的若干语句。试题程序:#include < stdio.h >#include < conio.h >void fun (char Aa, int n)(main () char sl81;int n;printf ("Enter a string : n");gets (s);printf ("Enter n : "); scanf (H%dM, &n);fun( s,n );pnntf(MThe string after deleted :nM);puts (s); 31.下列程序定义了 NxN的二维数组,并在主函数中自动赋值。请编写 函数fun(intaWN,intn),该函数的功能是:使数字右上半三角元素中的 值乘以mo例如,若m的值为2, a数组中的值为a=l 927则返回主程序后a数组的值应为2 182 14注意:部分源程序给出如下.请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括 号中填入所编写的若干语句。试题程序:#include < conio.h > #include < stdio.h > #include < stdlib.h > #define N 5int fun(int a N, int m) 1 main() int aN N,m, i, j;clrscr ();printf "*The array*n”);for (i=0; i < N; i+)/*输出一个随机的5x5矩阵*/ for(j=0;j <N;j+)ai j=rand()%20;printf(M%4d' ai j);1printfCn1');dom=rand ()%10;while (m > =3); /*产生一个上于3的随机数*/ printf ("m=%4dn", m);fun (a,m);printf(nTHE RESULTnH);for (i=0; i < N; i+)for(j=0;j <N;j+)printf(',%4d",ai j); printf(',nH); 32 .编写程序,实现矩阵(3行3歹(J)的转置(即行列互换)。例如,若输入下面的矩阵:100 200 300400 500 600700 800 900则程序输出:100 400 700200 500 800300 600 900注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include < stdio.h >#include < conio.h >int fun (int array33) ( main() ( intij;int array 33= 100,200,300,400, 500,600,700,800,900);clrscr();for(i-0;i<3;i+)for(j=0;j <3;j+)printf(n%7d n,arrayi jJ);printf(nn ");)fun(an-ay);printf("Converted array:n ");for(i=0;i<3;i+) for (j=O;j < 3;j+)printf(M%7d H,arrayi|j);printf(nn ");) )33 .请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:876 675 896 101 301 401 980 431 451 777则输出结果为6,980。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include < conio.h >#include < stdio.h >int fun(int *s,int t,int *k)main() (int aflO= 876,675,896,101,301,401,980,431,451,777 ,k;clrscr();fun(a, 10, &k);printf(n%d, %dn ",k, ak); )34 .请编写函数fun,函数的功能是:统计各年龄段的人数。N个年龄通 过调用随机函数获得,并放在主函数的age数组中;要求函数把。至9 岁年龄段的人数放在d0中,把10至19岁年龄段的人数放在把 20至29岁年龄段的人数放在d中,其余依此类推,把100岁(含100) 以上年龄的人数都放在仇10中。结果在主函数中输出。注意:部分源程序在文件PROG1 . C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括 号中填入你编写的若干语句。234567891011121314151617181920212223242526272829 30四、linclude <stdio.h> tdefine N 50 define M 11 void fun(int *a, int *b)double rnd() static t-29,c217,m1024,r0;r-(r*t+c)%m;return(double)r/m);)main ()( int age(N, i, dM);void NONO (int dM);for(i«0; i<N;agei- (int) (115Tnd();printf ("The original data :nw);for(i«0;i<N;i+) printf(i+1)%10-0?w%4dn": N%4dN,age(i);printf(HnnH);fun(age, d);for(i«0; i<10;i+)printf (w%4d%4d : %4dn"ri*10,i*10+9rdi);printf("Over 100 : %4dnwrd10); NONO(d);)void NONO(int dM)/*请在此函数内打开文件,输入测试数据, 调用fun函数,输出数据,关闭文件.*/FILE *wf ; int i ;wf - fopen("out.datwr"ww);for (i - 0 ; i < 10 ; i+) fprintf (wf, "%4d%4d : %4dnw, i*10, i*10+9r di);fprintf(wfr " Over 100 : %4dnn, d(10);fclose(wf);单选题(0题)35 .队列的“先进先出”特性是指()。scanf("%s", outfile);if(in=foen(infile, 44r,)=NULL)printfl'cannot open inflle'n");exit(O); if(out=fopen(outfile, ttw,)=NULL)printf(tcannot open outfileVT);exit(O); while(!feof(in)fputc(fgetc(in), out);fclose(in);fclose(out);A.程序完成将磁盘文件的信息在屏幕上显示的功能B.程序完成将两个磁盘文件合二为一的功能C.程序完成将一个磁盘文件复制到另一个磁盘文件中D.程序完成将两个磁盘文件合并并在屏幕上输出5 .采用深度优先搜索或拓扑排序算法可以判断出一个有向图中是否有环(回路)0A.对B.错6 .以下关于字符串的叙述中正确的是()。A.C语言中有字符串类型的常量和变量B.两个字符串中的字符个数相同时才能进行串符串大小的比较C.可以用关系运算符对字符串的大小进行比较D.空串一定比空格打头的字符串小A.最早插入队列中的元素总是最后被删除B.当同时进行插入、删除操作时,总是插入操作优先C.每当有删除操作时,总是要先做一次插入操作D.每次从队列中删除的总是最早插入的元素五、单选题(0题)36 .判断一个单向链表中是否存在环的最佳方法是0A.两重遍历B.快慢指针C.路径记录D.哈希表辅助六、单选题(0题)37 .以下能正确定义一维数组的选项是()。A.int a5=(0, 1, 2, 3, 4, 5);38 chara=0t1, 2, 3, 4, 5);C.chara='A', 'B1, V;D.inta5=n0123";参考答案l.B2.B解析在对程序进行测试时会发现错误,这就要进行程序调试(排错)。 程序调试活动由三部分组成:一是错误定位,根据错误的外部表现形式, 确定程序中出错的位置,找出错误的内在原因;二是对程序进行修改, 排除这个错误;三是进行回归测试,防止引进新的错误。所以程序调试 的目的就是诊断和改正程序中的错误。软件调试不能改善软件的性能, 也不能挖掘软件的潜能。3 .D4 .C5 .A6 .D解析:C语言中只有字符串常量而没有字符串变量,故选项A不正 确:字符串比较大小是以第1个不相同字符的大小为标准的,跟长度没 有关系,故选项B不正确:字符串比较大小除了使用库函数stremp()以 外,就只能靠自己写代码来实现了,而不能通过关系运算符来比较大小, 因为字符串在表达式中相当于coostchar*,即常字符指针,代表的是字 符串的首地址,关系运算符会将两个字符串的首地址值比较大小,这是 毫无意义的。所以选项C也不正确。空串的长度为0,而以空格打头的 字符串的长度至少为1,故选项D正确,本题应该选择D。7 .A题干中函数的定义指出了函数名为fun,返回值的数据类型为int。函 数包含3个参数,第1个参数是整型的二维数组,第2个参数是整型 数组,第3个参数是整型变量。在定义二维数组时,必须指定第二维 的长度,所以选项B、C、D错误,选项A正确。本题答案为A选 项。8 .C解析:二叉树的遍历分为先序、中序、后序三种不同方式。本题要 求先序遍历遍历顺序应该为:访问根结点。先序遍历左子树。先序遍 历右子树。按照定义,先序遍历序列是ABDECF。9 .D10.A在一个函数内的复合语句中定义的变量在本复合语句块范围内有 效,选项A错误,其他选项正确。本题答案为A选项。H.C解析:算法的执行效率与数据的逻辑结构和存储结构都有很紧密的 关系。算法的空间复杂度是指执行该算法需要的内存空间,并非算法程 序中指令的条数。算法一般应该具有以下4个特征:可行性、确定性、 有穷性和拥有足够情报。其中,有穷性是指算法必须能在执行有限个步 骤之后终止,否则可能失去实际意义。12.C1.33 3解析:软件系统结构图的宽度:整体控制跨度(最大模块数的层) 的表示。1.34 0解析:根据运算符的运算顺序可知,该表达式最后运算的是与 (&&)运算,而任何表达式与“0”进行“与”运算,结果都为0。15 .时间时间解析:算法的复杂度主要指时间复杂度和空间复杂度。所谓算法的时 间复杂度,是指执行算法所需要的计算工作量;算法的空间复杂度, 一般是指执行这个算法所需要的内存空间。16 .非线性结构非线性结构解析:对于一个非空的数据结构,如果同时 满足下列两个条件,即1)有且只有一个根结点;2)每一个结点最多有一 个前件,也最多有一个后件;即为线性结构,而二叉树的结点可能存在 两个后件,所以是非线性结构。17.1<n allJKn , aI解析:该程序直接使用形参max和d,由于它们都是 指针变量,所以要引用它们所指向的变量时,要对它们进行指针运算,即求 号运算。18 .Y%2=1或Y%2!=OY%2=1或Y%2!=0解析:判断变量是否为奇数 可以用变量与2取模,判断结果是为1或下为0。本题具体做法如下: Y%2=1 或 丫2!=0。19 .nbi . dal” fp20.sizeof(struct st)*50sizeof(struct st)*50 解析:fwrite 函数的一般调用形 式为:fwrite(buffer, size, count, fp);其中:buffer 是一个指针变量, 是要输出数据的起始地址;size是要写的字节数;count是要写多少个 size字节的数据项;fp是文件指针。21.源程序源程序 解析:用高级语言编写的程序称为源程序。源程序不 能在计算机上直接运行,运行源程序有两种方式:一种是通过解释程序, 对源程序逐句解释执行;另一种是先让编译程序将源程序一次翻译产生 目标程序(目标程序是计算机可直接执行的机器语言程序,是一种二进 制代码程序),然后执行目标程序。22.&s&t&s, &t解析指针做函数参数时,形参和实参指向同一个数据, 所以函数中对形参所指向的数据的改变也能影响到实参。本题中函数 swap_p的形参为指向指针的指针,即双重指针,原理跟普通的指针是一 样的。注意:通过指针来弓I用一个存储单元。23.67G67G 解析:由于'5'-'3'=2,所以 a='A'+'5析'3'=干V,按4格 式输出'CV的 ASCII 码为 67 同理,'6'-'2V=4, b=a+,6,-,2,=,C'+4=VG',按%。格式输出为YGV。24.*s-*俨s-*t解析:两字符串大小比较必须从它们的首字符开始,在对 应字符相等情况下循环,直至不相等结束。相等时,若字符串已到了字 符串的结束标记符,则两字符串相同,函数返回0值;如还有后继字符, 则准备比较下一对字符。对应字符不相同,循环结束。循环结束时,就 以两个当前字符的差返回。所以在空框处应填入保证在e>t时 返回正值,当s<l时返回负值。25.int fun(char *s) int i j=0; for (i=0;s i!=,0' ;i+) if(si !- ,&&(si+l=- 1|si+l='O')/*如果一个字母的下一个字符为空格或者结束标记则表 示一个单词结束*/ j+; return j; /*返回单词个数*/ int fun(char *s)rn rn int i, j=0;rn for (i=0;s i!=V0V ;i+)rn if(si !=V V&&(si+l=V 'l|si+l='O')/*如果一个字母的下一个字符为空格或者结束标记,则 表示一个单词结束*八rn j+;rn return j;/*返回单词个数*/rn 解析: 判断单词的个数,我们首先想到的是程序怎样识别是一个单词,也即循 环语句中的fir(i=0 ; siJ!=W ; i+),本题重点是if句中的条件表达方式。double s;float n,trpi;345678910111226.13t-l;pi«0;n»l.0;s»l.0;对各个累加项.累加积等裁初始化值while (fabs (s) >=eps) 粒度判断 (pi+-s; pi存放累加和t-n/ (2*n+l); /每一项s*-t; 素积n+;)pi-pi*2; 求得it值解析:进入fun函数,根return pi;据前面的分析:(1)根据题意,需要把每一项累加起来;若每一累加项的值放在t中,后一项等于前一项累加项的值乘以n / (2*n + 1)来求得。(2)根据公式将求到的兀/2的值放到变量pi中,每累加一次,n的值就 增加1,以便求下一个累加项,不断重复,直到满足题目中的精度要求。27.1 nt fun(int *sint tint *k) int i; *k=0 /*k 所指的数是数组的下标值*/for(i=0;i < t;i+) if(s*k > si) *k=i; /*找到数组的最小元素把该元素的 下标赋给k所指的数*/ return s*k; /*返回数组的最小元素*/ int fun(int*s, int t, int *k)rn rn inti;rn *k=0/*k 所指的数是数组的下标值*Arn for(i=0;i < t;i+)rn if(s*kj > sij)rn *k=i; /*找至擞组的最小元素,把该元素的下标赋给k所指的数*&n return s*k; /*返回数组的最小元素*/rn 解析:本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应让*k的值为数组中的某一下标值勤,即*k=0。123 45628. 7int i;*max-a (0; *d-0; /* 把组的第 1 个元 素值跋值给最大值变量*max */ for(i-1; i<n;if (max<a(i) ( /判断*max 是否小 于当前值*/*max«a(i); /*立新把最大值眺值给max */解析:该程序功能是d-i;/记住下标/求一维整型数组元素中最大的值和它所在的下标。其中,求最大元素的 方法:用最大值变量nax标记第一个待找数据,逐个把所有待找数据和 max进行比较,并用max标记其当前最大值及其所在位置,从而找出最大值。29.解析:该程序功能是计算并输出n(包括n)以内能被5或9整除的 所有自然数的倒数之和。解题过程首先求出能被5或9整除的所有自 然数,然后在此基础上求得这些数的倒数之和。30.void fun(char *aint n) int i=Ok=O ; char *p*t ; p=t=a ; /*开始时 p 与t同时指向数组的首地址*/while(*t=,*,)/*用k来统计前部星号的个 数*/ k+ ;t+; if(k > n) /*如果k大于n则佼p的前部保留n个星号 其后的字符依次存入数组a中*/while(*P) ai=*(p+kn) ; i+p+ ; ai=tO,; /*在字符串最后加上结束标志位*/ voidfun(char *a, intn)rn rn int i=0, k=0 ; rn char *p, *t ; rn p=t=a ; /*开始时,p 与 t 同时 指向数组的首地址*Arn while(%=,*,)/*用k来统计前部星号的个数 *Arn k+ ; t+;rnif(k>n)/*如果k大于n,则佼p的前部保留n个 星号,其后的字符依次存入数组a中5Wn while(*P)rn ai=*(p+k-n); rn i+rn p+ ; rn rn ai=<0,;/*在字符串最后加上结束标志位 *Arn rn 解析:while。循环的作用是计算出前部星号的个数;if()的 作用是判断星号个数是否多于n个,若是则只保留n个星号,即从字符 串前部的倒数第n个星号开始,到最后一个字符都存入数组a中,最后 记得在字符串最后加上结束标志位。3 Lint fun(int a N int m) int ij; for (i=0; i < N; i+) for (j=i; j < N; j+) a i lj =a i UJ *m; /*右上半三角元素中的值乘以 m*/ int fun(int a NJ, int m)rn rn int i,j;rn for (i=0; i < N; i+)rn for (j=i; j < N; j+)rn a i 右上半三角元素中的值乘以m*/rn解析:本题考查 表示右上关三角元素的算法。行下标肯定是从。到N-1,而列下标要根 据行下标来定,当到第i行时列下标要从第i列开始,所以我们在编写 程序时,第2个for()中有j=i(不是1);若要表示左下半三角元素时,行 下标也是从。到N-1,列下标也是从。开始,但当到第i行时列只到i。 所以要把上述的第2个for()改成for(j=0;j <=i;+)。32.int fun (int array33) int ijt; for(i=0;i < 3;i+) /*将右上三角和左下 三角对换实现行列互换 */ for(j=i+l;j < 3;j+) t=arrayij; arrayij=arrayji; arrayji=t; int fun (int array33)rn rn int i,j,t;rn for(i=0;i < 3;i+) /*将右上三角和左下三角对换,实现行列互换 *Arn for(j=i+l;j < 3;j+)rn t=arrayijl;rn arrayfi j=arrayfj i;rn arrayji=t;rn rn 解析:注意对矩阵转置后仍然存回其本身时,只 能循环矩阵中的一个角(本程序是右上半三角)。控制右上半三角的方法 是在第2个循环中j从i+1或i开始,左下半三角的方法是在第2个循 环中写成ford=0;j < i;j+),若要控制所有元素在第2个循环要写成 for(j=0;j < 3;j+)。33.int fun(int *sint tint *k) int i; *k=0; /*k 所指的数是数组的下标值*/ for(i=0;i < t;i+) if(s*k < si) *k=i; /*找到数组的最大元素把该元素的 下标赋给k所指的数*/ return s产k; /*返回数组的最大元素*/ int fun(int *s,int t,int *k)rn rn int i;rn *k=0; /*k 所指的数是数组的下标值*Arn for(i=0;i < t;i+)rn if(s*k < si) *k=i; /*找到数组的最大元素,把该元 素的下标赋给k所指的数*Arn return s*k; /*返回数组的最大元素 解析本题中直接使用指针变量k,但在使用时要注意对k的指针运算, 此外,一开始应让*1<的值为数组中的某一下标值,即*k=0。123467891011121314int j;for(j«0;j<M;j*+)bj-0; 计数器初始化for (i-0; i<N; i+) 循环列斯所有的年龄if(a(i)>-04&ai<«9)。到9岁else if(ai>-10&&ai<»19)1。到19岁else if(ai>«2066ai<"29)b2+-l;else if (ai>=304&ai<-39)b3+-l;else if(ai>-4066a (i<-49)15161718b4+-l;else if(ai>«504&ai<=59) b5+-l;else if (ai>-604&ai<=69)192021222324252634-7else if (ai>-704&a(i)<»79) b7+»l;else if(ai>-8044a(i)<-89) b8+-l;else if(ai>-904&a(i<«99) b94-l;else解析:该程序功能是统计各年龄段的人数。本题中采用的是多if选择语句,实现了不同年龄 段的分支选择。35.D36.B37.B数组1标从0开始,A选项中所赋值的个数超过了数组的长度;C选 项中定义a为字符型变量,而不是数组,赋值错误;D选项中,整型 数组不能赋字符串。7.有如下形式的函数:int fun(int a4 5, int * p10, int n)调用 函数之前需要对函数进行说明,即所谓的函数向前引用说明,以下对 fun函数说明正确的是0。A.int fun(int b 5 , int * r , int m);B.int fun(int a4 , int * p10 , int n);C.int fun(int a J I , int * p , int n);D.int fun(int a , int * p , int n);8 .设有下列二叉树:对此二叉树先序遍历的结果是A.ABCDEF B.DBEAFC C.ABDECF D.DEBFCA(3)卜列关于类、对象、属性和方法的叙述中,错误的是()oA)类是对类具有相同的属性和方法对象的描述B)属性用于描述对软的状态C)方法用于表示对象的行为9 . D)基于同一个类产生的两个对象不可以分别设置自己的属性值10 .以下叙述中错误的是()。A.在一个函数内的复合语句中定义的变量在本函数范围内有效B.在一个函数内定义的变量只在本函数范围内有效C.在不同的函数中可以定义相同名字的变量D.函数的形参是局部变量11 .下面叙述正确的是oA.算法的执行效率与数据的存储结构无关B.算法的空间复杂度是指算法程序中指令(或语句)的条数C.算法的有穷性是指算法必须能在执行有限个步骤之后终止D.以上三种描述都不对12 .假定a为一个整型数组名,则元素a4的字节地址为()。A.a+4 B.a+8 C.a+16 D.a+32二、2.填空题(12题)13 .下列软件系统结构图的宽度为。14.若 a=l, b=2,则表达式!(x=A) II (y=B) &&0的值是15 .算法的复杂度主要包括【】复杂度和空间复杂度。16 .按照逻辑结构分类,数据结构可分为线性结构和非线性结构,二叉 树属于 O17 .下面函数的功能是:找出一维数组元素中最大的值和它所在的下标, 最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中 赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index 存放最大值所在元素的下标。请填空。#include<stdlib.h>#include<stdio.h>void fun(int al,int n, int *max, int *d) inti;*max=a01;*d=