2012年9月全国计算机考试二级C语言最新上机题库(打印版)(4)

月亱相携 分享 2022-05-06 下载文档

18

【参考答案】(1) 1(2) s[k]或*(s+k)(3) c

【考点分析】本题考查:指针型变量;if…else语句;赋值语句。

【解题思路】填空1:函数fun中变量n统计字符的长度,假如长度为偶数,则k=n-1;假如长度为奇数,则k=n -2,使得下标为奇数的最后一个元素有效(不是′\0′)。填空2:了解变量k的作用后,则将最右边的奇数位置的数赋值给变量c。填空3:将最后一个下标为奇数的元素移到第一个奇数位置。

【参考答案】(1)long s=0, t=0;(2)t=t/10;

【考点分析】本题考查:变量赋初值操作;求余运算和除法运算的区别。

【解题思路】(1) t用来存放每次循环后的多位数,第一次循环时,t应当是个位数,所以t的初始值应为0。(2)根

据题意,这里不需要求余数,而是要去掉个位数,重新组合一个数,因此应用除法运算。

【解题宝典】去掉数值n的个位的方法是采用除法运算,如果需要取出个位数才使用求余运算,此知识我们不要混淆。

【参考答案】

void fun(char *tt, int pp[])

{

int i;

for(i=0;i<26;i++)

pp[i]=0; /*初始化pp数组各元素为0*/ for(;*tt!='\0';tt++)

if(*tt>='a'&&*tt<='z')

pp[*tt-'a']++;

}

【考点分析】本题考查:for循环语句,注意循环变量取值范围以及循环体语句作用。数组元素初始化和赋值操作。if语句条件表达式,需注意条件表达式的逻辑运算。

字符串结束标识'\0'。

【解题思路】要求统计在tt所指字符串中'a'到'z'26个小写字母各自出现的次数,并依次放在pp所指数组中。首先for循环语句体中初始化pp数组中分别用来统计26个字母的个数。再使用循环判断语句对tt所指字符串中的字符进行逐一比较操作,同时存入相对应的pp数组中。

19

【参考答案】(1)N(2)i(3) -1

【考点分析】本题考查:for循环语句;函数返回值;if语句条件表达式。

【解题思路】填空1:变量i是循环变量,它的取值范围是在0到N之间。填空2:如果ss所指字符串数组中的字符串和t所指字符串相同的话,则返回其下标值,即return N-1;否则返回-1,即return -1。填空3:在main函数中输出最后结果,判断函数返回值n,如果n=0,说明没有找到,否则输出n。

【参考答案】(1)a2=k/10;(2)return i;

【考点分析】

本题考查:取数值n的各个位;return语句,将需要返回的函数值返回给函数main。

【解题思路】

(1) a2存放十位数,所以是a2=k/10,此处是一个书写错误

(2)根据题意,要返回能被3整除的数的个数,从循环体中

可以知道其个数是由i来计算的,所以返回的是i。

【参考答案】

void fun( char *a )

{

while(*a!='\0')

a++;

10

a--;/*指针a指向字符串的尾部*/

while(*a=='*')

a--;/*指针a指向最后一个字母*/

*(a+1)='\0';/*在字符串最后加上结束标志符*/

}

【考点分析】本题考查:删除字符串尾部*号;删除的主要思想是把不删除的字符保留起来。

【解题思路】对于一个字符串要删除其尾部的*号,只需要在最后一个不是*号的字符后面加上结束符号′\0′。具体操作为:首先找到字符串的结尾,然后从最后一个字符开始往前逐个判断是否为*号,直到找到非*号字符为止,最后在该字符后面加上结束符号'\0'。

20

【参考答案】(1)next(2) t->data(3) t

【考点分析】本题考查:链表数据结构,结点的表示方法,掌握链表数据结构的基本思想;释放内存空间函数free()。【解题思路】填空1:因为是链表操作,所以要使t逐一往后移动,语句为t=t->next。填空2:输出链表结点的数据域,即t->data。填空3:使用free函数将t所指向的内存空间释放。释放内存空间函数free调用形式:free(void*p);。功能:释放p所指向的一块内存空间,p是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。

【参考答案】(1)void fun(char *a)(2)printf("%c" ,*a) ;

【考点分析】本题考查:函数定义,本题为有参函数定义。printf()函数,其一般形式为"printf('格式控制字符串',输出表列) ;"。"%d"表示按十进制整型输出;"%ld"表示按十进制长整型输出;"%c"表示按字符型输出等。非格式字符串在输出时原样输出,起提示作用。

【解题思路】(1)定义函数时形参的类型要与调用函数中实参的类型一致,主函数中fun传递的是字符串s的首地址,所以此处形参应为指针类型。(2)根据printf函数格式,很容易找到错误之处。

【参考答案】

char *fun ( char *s, char *t)

{

int i,j;

for(i=0;s[i]!= '\0';i++);/*求字符串的长度*/

for(j=0;t[j]!= '\0';j++);

if(i<=j) /*比较两个字符串的长度*/

return t; /*函数返回较长的字符串,若两个字符串长度相等,则返回第1个字符串*/

else

return s;

}

【考点分析】本题考查:字符串长度比较运算,使用循环语句实现,应注意其循环条件。

【解题思路】本题中,第1个for循环的作用是求出s串的字

符个数i,第2个for循环的作用是求出t串的字符个数j,因为任何循环都要控制一条语句,所以在每一个for循环语句后面加上一个分号以结束循环。

21

【参考答案】(1) 999(2) t/10(3) x

【考点分析】本题考查:while循环语句;数值n各个位的表示方法;if语句条件表达式。

【解题思路】填空1:题目要求找出100~999之间附合要求的数,所以while语句的循环条件是t<=999。填空2:变量s2存放三位数的十位,取出三位数十位数值的方法为s2=(t/10)%10。填空3:题目需要判断各位上数字之和是否为x,所以if语句条件表达式是s1+s2+s3==x。

【解题宝典】三位数数值n各个位的表示方法,个位表示为n%10、十位表示为n/10%10、百位表示为n/100。

【参考答案】(1)void fun(long s,long *t)(2)while(s>0)

【考点分析】本题考查:函数定义,指针型变量作函数参数;while循环语句。

【解题思路】函数的形参类型应与实参类型相同,主函数中函数fun()的调用方式说明其参数应为指针类型,所以形参t应定义为long *t。while循环的功能是,每循环一次就从s中的数上取出一位进行运算,直到取完为止,所以循环条件为s>0。

【参考答案】

void fun( STREC a[] )

{

int i,j;

STREC t;

for(i=1;i

for(j=0;j

if(a[j].s

{t=a[j];a[j]=a[j+1];a[j+1]=t;}/*按分数的高低排列学生的记录,高分在前*/

}

【考点分析】本题考查:排序算法;结构体类型。

【解题思路】对N个数进行排序的算法很多,其中最简单的排序算法是冒泡算法。利用双层for循环嵌套和一个if判断语句来实现,外层循环用来控制需比较的轮数,内层循环用来控制两两比较。

【解题宝典】冒泡法算法思路:如果有N个数,则要进行N-1次比较,在每一次比较中要进行N-1次两两比较(这种算法较好理解但不是最精的)。所谓两两比较就是从头到尾依次将相邻两个数进行比较,并将其中较大的数放在前或在后(若要求从小到大排序,则大的数要放在后面,反之对调),即两两比较后这两个数要形成题中所要求的顺序。由于总是从头到尾进行比较,第1轮比较结束后,最大(或最小)数肯定在最后,第2轮比较结束后,次最大(或

11

次最小)数肯定在倒数第2个,依次类推,所以进行第1轮比较时必须比较到最后一个数,而进行第2轮比较时只要比较到倒数第2个数,进行第i轮比较时只需比较到第N-i -1个数即可(这种算法较难理解,但它是最好的)。选择法算法思路:如果有N个数,则从头到倒数的第2个数逐个向后移动,每移动1个数总是对其后面的所有数进行搜索,并找出它们的最大(或最小)数,然后与该数进行比较,若大于(或小于)该数则进行交换,交换后再移动到下一个数,依次交换到结束。此外,选择法还可用如下思路:如果有N个数,则从头到倒数第2个数逐个移动,每移动一个数总是将这个数与其后的所有数进行两两比较,在比较时按顺序将进行比较的这两个数排序(即交换)。插入法算法思路:先对前两个数进行排序。然后把第3个数插入到前两个数中,插入后前3个数依然有序;再把第4个数插入到前3个数中,插入后前4个数依然有序;依次插完所有的数。具体执行方式(假设从小到大排序):从第2个数开始往后逐个走动直到最后,每走到1个数总是将该数(先将其存到1个临时变量中)与前面的数进行比较(比较的顺序总是从后往前进行),在比较时只要发现该数比被比较的数小,就将被比较的数往后移1位,然后再与前1个数进行比较,直到发现该数比被比较的数大或已比较到头(即第1个数的前面),并将该数存入当前被比较数的后1位(存储空间)。例如,整型一维数组a中有N个元素,要求将其按从小到大排序。注意元素下标是从0开始的。冒泡法:

for(i=1;i

for(j=0;j

if(a[j]>a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=a[j];}

选择法:

for(i=0;i

{

p=i;

for(j=i+1;j

if(a[p]>a[j]) p=j;

if(p!=i)

{t=a[i];a[i]=a[p];a[p]=t;}

}

插入法:

for(i=1;i

{

t=a[i];

for(j=i-1;a[j]>t&&j>=0;j--)

a[j+1]=a[j];

a[j+1]=t;

}

22

【参考答案】(1) ->sno(2) ->name(3) &t

【考点分析】本题考查:结构变量成员的表示方法;strcpy

函数;函数调用。

【解题思路】填空1:给b所指结构体变量学生学号赋值。

填空2:通过strcpy字符串拷贝函数修改b所指结构体变量

学生姓名。填空3:由于函数fun的形参是指针型变量,所

以在main中调用函数fun的参数应为指针或地址。

【参考答案】(1)double fun(double a,double x0)

(2)if(fabs(x1-x0)>=0.00001)

【考点分析】本题考查:双精度实型变量定义(double);

if语句条件表达式。

【解题思路】用C语言求平方根的方法一般有两种经典的

算法,分别是迭代法和递归法,本题要求仅用递归法。该

程序采用了if语句,错误在于if语句的判断条件,程序的

含义是当迭代结果差大于误差时进行循环,故正确的答案

应该是if(fabs(x1-x0)>=0.00001)。

【解题宝典】递归算法:一个过程或函数在其定义或说明

时又直接或间接调用自身的一种方法。递归算法一般用于

解决三类问题:(1)数据的定义是按递归定义的。(Fibonacci

函数)(2)问题解法按递归算法实现。(回溯)(3)数据的结构

形式是按递归定义的。(树的遍历)

【参考答案】

double fun( STREC *a, STREC *b, int *n )

{

int i;

double av=0.0;

*n=0;

for(i=0;i

av=av+a[i].s;

av=av/N; /*求平均值*/ for(i=0;i

if(av<=a[i].s)

{ b[*n]=a[i];*n=*n+1;} /*将高于等于平均分

的学生存入b所指存储单元中,并统计人数*/

return av;/*返回平均分*/

}

【考点分析】本题考查:结构体类型;for循环语句和if条

件语句的应用。

【解题思路】本题中第1个循环的作用求出所有分数的总

和,然后进行av=av/N后得到平均值。第2个循环的作用

是将大于等于平均分的学生存入b所指存储单元中。注意

同一结构体变量之间可以互相赋值。本程序中直接用*n

来表示b的下标,注意开始时要给*n赋初值0,且使用时不

能少*号,因为单独的n是一个指针变量,而我们要用的是

它所指向的存储单元中的值。

23

【参考答案】(1) q(2) next(3) next

【考点分析】本题考查:释放内存空间函数free();链表

结点的基本操作。

【解题思路】填空1:使用free函数,释放q所指的内存空

12

间,其一般格式为:free(指针变量)。填空2和填空3:删除链表中符合条件结点后,指针要指向下一个结点。【参考答案】(1)p=j ;(2)p=i;

【考点分析】本题考查:选择法排序。

【解题思路】(1)这里是一个语法错误,缺少一个";"号。

2012年9月全国计算机考试二级C语言最新上机题库(打印版)(4).doc 将本文的Word文档下载到电脑

下一篇:2021年02月中国中标项目信息“操作台”情况统计

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7 元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xxxxxx QQ:xxxxxx