《全国计算机二级C语言上机答案.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言上机答案.docx(107页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1、L 357 + +1)一 22 42 6()2 直到Mx”)下列给定程序中,函数fun的功能是计算如下公式(3) (t+1)【解题思路】填空1:变量x定义为double类型,而运算符/后面是整型数,所以给x赋值时,需要注 意数据类型,此处不能将3.0写成3。填空2: while循环语句的循环条件,根据题意确定循环变量应大于le-3,因此此处应填Ha填空3:表达式的通项是(22、下列给定程序中函数fun的功能是:求出如下分数序列的前n项之和。和值通过函数值返 回。2 3 5 8 13 21T,2,3,5,T,i3,例如,若n=5,则应输出8.391667。【参考答案】(1 )double f
2、un(int n)(2)s=s+(double)a/b;【解题思路】(1)由语句retum(s)和变量s定义为double数据类型可知,该函数定义时其类型标识符为d ouble类型。(2)注意数据类型double的书写格式。3、请编写函数ftm,其功能是:找出2xM整型二维数组中最大元素的值,并将此值返回调用 函数。【参考答案】int fun (int aM)(int ij,max=a00;fbr(i=0;i2;i-H-)fbr(j=OaM;j-H-)if(max=eps)sl=sl*n/(2*n+l);s=s+sl;n+;double fun ( double eps)/*当某项大于精度要求
3、时,继续求下一项*/*求多项式的每一项*/*求和*/return 2*s;【解题思路】首先应该定义double类型变量,并且赋初值,用来存放多项式的某一项和最后的总和。从 第2项开始以后的每一项都是其前面一项乘以n/( 27、给定程序中,函数fun的功能是:统计形参s所指的字符串中数字字符出现的次数,并存 放在形参t所指的变量中,最后在主函数中输出。例如,若形参s所指的字符串为abcdef35adg h3kjsdf7,则输出结果为4。【参考答案】(1) si 9(3)*t=n【解题思路】填空1:通过for循环语句,来判断是否到字符串结尾,变量i用来存放字符串数组下标,则应 填入si。填空2:题
4、目要求判断数字字符,所以此处应填入9。填空3:将数字字符个数存入变量t中,这里需注意变量t是指针变量。8、下列给定程序中函数fun的功能是:实现两个变量值的交换,规定不允许增加语句和表达 式。例如,变量a中的值原为8, b中的值原为3,程序运行后a中的值为3, b中的值为8。【参考答案】(l)t = *x ; *x = y ;(2)retum(t);或 return t;【解题思路】首先,定义变量t作为中间变量,然后进行数据交换,注意参数x是指针变量,交换时应使用* X,最后确定返回值,根据代码b=fun(8a, b)可以知道返回值将赋给变量b,而b中应存放交换 前*中的值,所以函数应返回变量
5、t9、编写函数fun,其功能是:求出1到1000之间能被7或11整除,但不能同时被7和11整除的所 有整数,并将其放在a所指的数组中,通过n返回这些数的个数。【参考答案】void fiin (int *a, int *n)(int ij=0;for(i=l;in)得余数 r,再用余数r去除原来的除数,得到新的余数,重复此过程直到余数为0时停止,此时的除数 就是m和n的最大公约数。程序首先判断参数a和b的大小,如果a=O;ai!=O;i+)ifiai!=*)aj+=ai;/*若不是要删除的字符*则留下*/aj= 0;【解题思路】用循环操作从字符串的开始往后逐个进行比较,若不是要删除的字符(用if
6、(ai! =)来控制) 则保留。变量i和j用来表示原字符串的下标和删除*号后新字符串的下标。注意下标变量j要从0开始,最后还要加上字符串结束标识,0,。13、下列给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从 高位到低位相反的顺序组成一个新数,作为函数值返回。例如,输入一个整数27638496,函数返回值为64862。【参考答案】(1)0(2) 10*x (3) n/10【解题思路】填空1:定义变量t用来存放数值几的各个位数值,此处判断t是否为偶数,即对2求余结果是否 为0。填空2:将t作为x的个位数,原来x的各个位上升1位,即x=1014、下列给定程序中函数fu
7、n的功能是:将长整型数中各位上为奇数的数依次取出,构成个 新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为87653142时,t中的数为7531。【参考答案】(l)*t=0;(2)if(d%2!=0)或 if(d%2=l)【解题思路】(1)由函数定义可知,变量t是指针变量,所以对t进行赋初值0是不对的。因为t指向的 是存放新数的变量,所以此处应给新数赋初值0,即*t=0。(2)变量d表示数s各个位上的数,此处的if条件应为判断d是否为奇数。15编写函数fun,其功能是:实现两个字符串的连接(不要使用库函数strcat),即把p2所指的 字符串连接到pl所指的字符串的后面。例如,分别
8、输入下面两个字符串:FirstStringSecondString程序输出:FirstStringSecondString【参考答案】void fun(char pl, char p2) int i,j;fbr(i=0;pli!=W;i+);fora=0;p2j!=;j+)pli+=p2j;pli=W;)【解题思路】本题用两个循环完成操作,第1个循环的作用是求出第1个字符串的长度,即将i指到第1个字符 串的末尾。第2个循环的作用是将第2个字符串的字符连到第1个字符串的末尾。最后在第1个字 符串的结尾加上字符串结束标识,01下列给定程序中,函数ftm的功能是:把形参a所指数组中的最小值放在元素a
9、0中,接着 把a所指数组中的最大值放在al元素中;再把a所指数组元素中的次小值放在a2中,把a 所指数组元素中的次大值放在a3,以此类推。例如,若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动后, 数据排列为:1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数据的个数。规定fun函数中的max存放当前所找的最大值,px存放当前所找最大值的下标。【参考答案】(1) ai (2) aU (3) aj【解题思路】填空1 : for循环语句循环体中将数组元素ai赋值给变量max和变量min。填空2:通过一次fbr循环,找到数组中的最大值,if语句的条件表达式
10、是maxaj。17、下列给定程序中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项 起,斐波拉契数列为:1、1、2、3、5, 8、13、21例如,若给n输入7,则该项的斐波拉契数值为13。【参考答案】(1)去掉分号(2) case 1: case 2: return 1;【解题思路】C语言中,switch语句之后不能有分号,并且case语句常量后应用的是冒号。18、某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给 出,请编写函数fim,其功能是:求出该学生的平均分,并放入记录的ave成员中。例如,学生的成绩是:85.5,76,69.5,85,
11、91,72,64.5, 87.5,则他的平均分应为78.875。【参考答案】oid fun(STREC *a)(double ave=0.0;int i;fbr(i=0;iave=a-ave+a-s i;/*求各门成绩的总和*/a-ave/=N;/*求平均分*/【解题思路】本题考查自定义形参的相关知识点,程序流程是这样的:在fun()函数中求出平均分后,返回到 主函数时平均分也要带回,所以只能定义一个指针类型的形参STREC*a ,此时,引用成员的 方式可以使用指向运算符,即aave和a-si,当然也可用(*a). ave和(*2). si。19、下列给定程序中,函数fun的功能是进行数字字符
12、转换。若形参ch中是数字字符09, 则将0转换成9, 1转换成8, 2转换成7 9转换成0;若是其它字符则保持不变:并将转换后的结果作为函数值返回。【参考答案】(1) char (2) chnext;while(p!=NULL)ave=ave+p-s;p=p-next;1return ave/N;)【解题思路】题目要求求链表中数据域的平均位,应首先使用循环语句遍历链表,求各结点数据域中数值的 和,再对和求平均分。遍历链表时应定义一个指向结点的指针p,因为头结点中没有数值,所 以程序中让p直接指向头结点的下一个结点,使用语句STREC *p=h-next22、下列给定程序中,函数fun的功能是:
13、求ss所指字符串数组中长度最短的字符串所在的行 下标,作为函数值返回,并把其串长放在形参n所指的变量中。ss所指字符串数组中共有M个 字符串,且串长N。【参考答案】(1) M (2) (3) k【解题思路】填空1:题目指出SS所指字符串数组中共有M个字符串,所以fbr循环语句循环条件是iM。填空2:要求求长度最短的字符串,*n中存放的是已知字符串中长度最短的字符串的长度,这 里将当前字符串长度与*n比较,若小于*n,则将该长度值赋给*n,因此if语句的条件表达式为 len=a,)&( tti = z)(2)tti-=32;【解题思路】(1)分析本题可知,要判断字符是否为小写字母,即判断其是否在
14、az之间,所以这里需要进行 连续的比较,用&。(2)从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII值大32。将字符 串中的小写字母改为大写字母的方法是:从字符串第一个字符开始,根据ASCH码值判断该字 母是不是小写字母,若是,则ASCH码值减32即可。24、编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数 的个数通过k返回。例如,若输入17,则应输出:4 6 8 9 10 12 14 15 16。【参考答案】void fun( int m, int *k, int xx)int ij,n=0;for(i=4;im;i+) /*找
15、出大于1小于整数m的非素数*/ for(j=2;ji;j+)if(i%j=O) break;if(ji) xxn+=i;)*k=n;/*返回非素数的个数*/【解题思路】题目要求将1m之间的非素数存入数组中,应使用循环判断结构。循环语句用来遍历1m之 间的每个数,判断语句用来判断该数是否素数,若不是素数,则将其存入数组中。这道题目是 考查一个数是否为素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解决。25、下列给定程序中,函数fun的功能是:将s所指字符串中的所有数字字符移到所有非数字 字符之后,并保持数字字符串和非数字字符串原有的次序。例如,s所指的字符串为def35adh3kjsdf
16、7,执行后结果为defhdhajsdf3537。【参考答案】(Dj+或 j+=l 或+或)可+1si=tli (3) j【解题思路】填空1:根据函数fiin中的内容可知,数组tl存储了 s中的非数字字符,数组t2存储了 s中的数 字字符,为了存储下一个数字字符,下标j要进行加1操作。填空2:将s串中的数字与非数字字符分开后,要先将非数字字符放入字符串s中,因此填入si填空3:最后将数字字符加到s串之后,并且i要小于数字的个数j。26、下列给定程序中函数fim的功能是:用冒泡法对6个字符串进行升序排列。请改正程序中的错误,使它能得出正确的结果。【参考答案】(l)for (j = i + 1; j
17、 6; j+)(2)*(pstr + i) = *(pstr + j);【解题思路】(1)此处考查for语句的格式,各表达式之间应用;割开。(2)此处考查用指针表示数组元素的方法,*(pstr+l)表示pstr所指向数组的第I个元素,同理*(p str+j)表示pstr所指向数组的第j个元素。27、编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串123412132,输入字符为1,则输出3。【参考答案】int fun(char *ss, char c)(int i=0;fbr(;*ss!=I0;ss+)iR*ss=c)i+;/*求出ss所指字符串中指定字
18、符的个数*/return i;【解题思路】从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍历字符串,循环条件为字 符串没有结束,即当前字符不是-O,判断语句用来判断当前字符是否为指定字符。最后返回指 定字符的个数。28、下列给定程序中,函数fun的功能是:将s所指字符串中的所有数字字符移到所有非数字 字符之后,并保持数字字符串和非数字字符串原有的次序。例如,s所指的字符串为def35adh3kjsdf7,执行后结果为defadhajsdf3537。【参考答案】j+或j+=l或+或上可+1si=tli(3) j【解题思路】填空1:根据函数firn中的内容可知,数组tl存储了 s中的非
19、数字字符,数组t2存储了 s中的数 字字符,为了存储下一个数字字符,下标j要进行加1操作。填空2:将s串中的数字与非数字字符分开后,要先将非数字字符放入字符串s中,因此填入si =tlio填空3:最后将数字字符加到s串之后,并且i要小于数字的个数j。29、下列给定程序中函数fun的功能是:用冒泡法对6个字符串进行升序排列。【参考答案】(Dfor (j = i + 1; j 6; j+)(2)*(pstr + i) = *(pstr + j);【解题思路】(1)此处考查for语句的格式,各表达式之间应用;割开。(2)此处考查用指针表示数组元素的方法,*(pstr+I)表示pstr所指向数组的第I
20、个元素,同理*(p str+j)表示pstr所指向数组的第j个元素。30、编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串123412132,输入字符为1,则输出3。【参考答案】int fiin(char *ss, char c)int i=0;fbr(;*ss!=0;ss-H-)if*ss=c)i+;/*求出ss所指字符串中指定字符的个数*/return i;【解题思路】从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍历字符串,循环条件为字 符串没有结束,即当前字符不是、0,判断语句用来判断当前字符是否为指定字符。最后返回指 定字符的个数
21、。31、下列给定程序中已建立一个带头结点的单向链表,链表中的各结点按结点数据域中的数据 递增有序链接。函数fim的功能是:把形参x的值放入一个新结点并插入链表中,使插入后各 结点数据域中的数据仍保持递增有序。【参考答案】(Dx (2)p(3)s【解题思路】填空1:将形参x赋值给结点的数据域。填空2和填空3:将新的结点和原有链表中结点进行比较。32、下列给定程序中函数firn的功能是:计算正整数num各位上的数字之积。例如,若输入252,则输出应该是20。若输入202,则输出应该是0。【参考答案】(l)long k=l;(2)num /=10;【解题思路】(l)k用来存放各位数字的积,初始值应为
22、1。(2)这里是一个符号错误,除号用/来表示。33、编写函数fun,其功能是:计算n门课程的平均分,结果作为函数值返回。例如:若有5门课程的成绩是:90.5,72,80,61.5,55,则函数的值为:71.80。【参考答案】float fun ( float *a , int n )(int i;float av=0.0;fbr(i=0; in;i+) /*求分数的总和*/av=av+ai;return(av/n) ;/*返回平均值*/【解题思路】本题较简单,只需用一个循环语句就可变成数组元素的求和,再将和除以课程数即可。需要注 意的是本题对指针的操作,当指针变量指向一个数组时,用该指针变量引
23、用数组元素,引用方 式与数组的引用方式相同。如本题中a指向了 score,所以通过a引用score中的元素时可以用 下标法,也可以用指针运算法,ai和*(a+i)具有相同的作用。下标运算实际上是从当前地址开 始往后取出地址中的第几个元素,当前地址下标为0。例如,若有int cc10, *p=cc+5;,即p 指向了 cc的第5个元素,则p0的作用与cc5相同;p3的作用是取出从当前地址(即p所指地 址)开始往后的第3个元素,它与cc8相同;p-2的作用是取出从当前地址开始往前的第2个元 素,它与cc3相同,但不提倡使用负的下标。34、下列给定程序中,函数fun的功能是:将形参a所指数组中的前半
24、部分元素中的值与后半 部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。例如:若a所指数组中的数据为:1、2、3、4、5、6、7、8、9,则调换后为:6, 7、8、9、5、 1、 2、 3、 4。【参考答案】(1)1(2) i (3) ap+i或*(a+p+i)【解题思路】填空1:该处是判断数组元素的个数是奇数还是偶数,为奇数时要使当前位置加1,以使p指向 数组中间位置。填空2和填空3:这里是一个比较常见的数组位置调换程序,应填入i和ap+i。35、下列给定程序中函数fbn的功能是:把从主函数中输入的3个数,最大的数放在a中,中间 的数放在b中,最小的数放在c中。
25、例如,若输入的数为:55 12 34,输出的结果应当是:a=55.O, b=34.0, c=12.0 【参考答案】(1 )float k;*c)【解题思路】(1)观察程序中的k,在赋值语句中,k是以变量的形式进行赋值而非指针,所以将k定义为指 针是错误的。(2)此处if语句是为了将小于*c的值放入*c中,所以改为iR*a *c)z学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中,请编 写函数fun,其功能是:把分数最高的学生数据放在b所指的数组中。注意:分数最高的学生可 能不止一个,函数返回分数最高的学生的人数。【参考答案】int fun( STREC *a, STRE
26、C *b )int ij=O,max=aO.s;/*找出最大值*)for(i=0;iN;i+)if(maxai. s) max=ai.s;for(i=0;iN;i+)if(max=ai. s) bj+=ai;/*找出成绩与max相等的学生的记录,存入结构体b中*/return j;/*返回最高成绩的学生人数*/【解题思路】该程序使用两个循环判断语句,第1个循环判断语句的作用是找出最大值。第2个循环判断语句 的作用是找出与max相等的成绩(即最高成绩)的学生记录,并存入b中。37、下列给定程序中,函数fun的功能是:从形参ss所指字符串数组中,删除所有串长超过k 的字符串,函数返回剩余字符串的个
27、数。ss所指字符串数组中共有N个字符串,且串长小于M。 【参考答案】(1) N (2) k (3) ssi【解题思路】填空1: for循环语句作用是遍历字符串数组中的每一个字符串,所以循环变量i的循环条件是i N.填空2:题目要求删除串长度小于k的字符串,所以if条件语句的条件表达式是len=k。 填空3:通过字符串拷贝函数将串长不大于k的字符串另存,并记录个数。38、下列给定程序中函数fiin的功能是:逐个比较p、q所指两个字符串对应位置上的字符,并 把ASCII值大或相等的字符依次存放到c所指的数组中,形成一个新的字符串。例如,若主函数中a字符串为aBCDeFgH, b字符串为ABcd,则
28、c中的字符串应为aBcde FgHo【参考答案】(1) int k=0;(2)while (*p|*q)【解题思路】(1)变量k存放数组c的下标,因此应初始化为0。(2) while循环语句的循环条件是判断两个字符串是否到达结尾。39、规定输入的字符串中只包含字母和*号。请编写函数firn,其功能是:除了字符串前导的* 号之外,将串中其它*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:*A*BC*DEF*G*,删除后,字符串中的内容应当是:*ABCDEFGo【参考答案】void fun( char *a )(int i=0;char *p=a;while(*
29、p&*p=*)ai=*p;i+;p+;while(*p)(if(*p!=*)ai=*p;i+;p+;)ai=;)【解题思路】函数firn的功能:除了字符串前导的*号之外,将串中其他*号全部删除。解答本题,(1)定义一 个临时指针P,初始指向原串首地址;(2)利用循环语句把字符串前导*号拷贝到原串;(3)继续 移动指针,把串中和串尾的非*号字符拷贝到原串;(4)为修改后的字符串赋结束字符0。40、下列给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下 一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动 (注:字符串的长度大于等于2)。例如
30、,形参s所指字符串为abcdefjgh,执行结果为ahcbedgf。【参考答案】(1) 1(2) sk或*(s+k)(3) c【解题思路】填空1:函数firn中变量n统计字符的长度,假如长度为偶数,则卜=11-1:假如长度为奇数, 则k=n-2,使得下标为奇数的最后一个元素有效(不是K0,)。填空2: 了解变量k的作用后,则将最右边的奇数位置的数赋值给变量c。填空3:将最后一个下标为奇数的元素移到第一个奇数位置。41、下列给定程序中fun函数的功能是:求表达式s=aa. aa-. aaa - aa -a(此处aa. aa表示n个a, a和n的值在1至9之间)例如,a=3, n=6,则以上表达式
31、为:s=33333333333 3333333333其值是296298。a和n是fun函数的形参,表达式的值作为函数值传回main函数。【参考答案】(1 )long s=0, t=0;(2)t=t/10;【解题思路】(1) t用来存放每次循环后的多位数,第一次循环时,t应当是个位数,所以t的初始值应为0。 (2)根据题意,这里不需要求余数,而是要去掉个位数,重新组合一个数,因此应用除法运算。42、编写函数void fun(char *tt, int pp),统计在tt所指的字符串中a到z26个小写字母各 自出现的次数,并依次放在pp所指的数组中。例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:3 3 3 2 2 1 1 0000000000000000000【参考答案】void fun(char *tt, int pp)int i;fbr(i=0;i= a &*ttdata (3) t【解题思路】填空1:因为是链表操作,所以要使t逐一往后移动,语句为t=tnext。填空2:输出链表结点的数据域,HP t-data.填空3:使用free函数将t所指向的内
限制150内