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

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

(2)p用来存放进行比较的两个数组元素中,较小元素的下标,因此此处应为p=i。

【参考答案】

void fun ( int m, int *a , int *n )

{

int i,j=0;

for(i=1;i<=m;i++)

if(i%7==0||i%11==0) /*求出1到m(含m)之内能被7或

11整除的所有整数放在数组a中*/

a[j++]=i;

*n=j; /*返回这些数的个数*/

}

【考点分析】本题考查:整除的判定方法;if语句条件表达式中"逻辑与"和"逻辑或"的区别;for循环语句;一维数组的定义与引用。

【解题思路】本题应使用循环判断语句实现,首先要确定循环变量的取值范围,题且要求找到1~m之间附合要求的数,所以循环变量的取值范围为1~m。if条件语句用来对每一个数进行判断,注意题目要求能被7或11整除,因此条件表达式中应使用逻辑或"||"运算符。

【解题宝典】整除用求余运算来实现。某数值n如能被数值m1或m2整除,则代码实现为:if(n%m1==0||n%m2==0)。

某数值n如能被数值m1和m2整除,则代码实现为:

if(n%m1==0&&n%m2==0)。

24

【参考答案】(1)0(2)j--(3)j

【考点分析】本题考查:数组元素的引用;for循环语句。【解题思路】填空1:N×N矩阵,第一列元素表示为t[0][N -j-1],第一行元素表示为t[j][0],将第一列赋值给第一行,因此填入0。填空2:for循环语句中,变量j的变化范围为从N-1递减到0,因此j做自减1操作。填空3:最后将临时数组r中的元素赋值给矩阵最后一列。

【解题宝典】二维数组周边元素的表示方法,通过设定数组下标来完成。我们举个简单的例子来说明,如二维数组a[3][3],我们列出它的所有数组元素:

a[0][0],a[0][1],a[0][2]

a[1][0],a[1][1],a[1][2]

a[2][0],a[2][1],a[2][2]

那么其周边元素有a[0][0],a[0][1],a[0][2], a[1][0], a[1][2] , a[2][0],a[2][1],a[2][2]。如果我们把a[3][3]改为a[i][j],就不难表示出该数组的周边元素:

a[0][0],a[0][i]…a[0][N-i-1]…a[0][N-1]

a[1][0],…a[1][N-1]

a[N-j-1][0],…a[N-j-1][N-1]

a[N-1][0],a[N-1][1]…a[N-1][N-i-1]…a[N-1][N-1]

【参考答案】(1)double f(double x)(2)return s ;

【考点分析】本题考查:函数定义,其一般形式为"类型标识符函数名(形式参数列表)",其中类型标识符指明了本函数的类型,函数的类型实际上就是函数返回值的类型。

【解题思路】该程序的流程是:fun()程序对f(n)项循环累加,fun()程序采用条件选择语句计算函数f(x)的值。第一处错误在于未定义函数f(double x)的类型,因此返回值类型为double型,所以此处函数应定义为double。第二处错误的语法错误。

【解题宝典】我们在做改错题目时候,首先应该检查C语言语法是否有问题,在很多题目中都有类似的错误。

【参考答案】

double fun( int m )

{

int i;

double s=0.0;

for(i=1;i<=m;i++)

s=s+log(i); /*计算s=ln(1)+ln(2)+ln(3)+…

+ln(m)*/

return sqrt(s);/*对s求平方根并返回*/

}

【考点分析】本题考查:计算表达式的值运用for循环语句通过累加操作求和;平方根函数sqrt()的使用。

【解题思路】首先计算从1到m的对数的和,因此循环变量的范围是1~m,每次循环都进行一次累加求和。该题需要注意的是,log()函数的形式参数应当为double型变量,而用于循环的基数变量为整数,需要进行强制转换。

在返回的时候求出平方根。

25

【参考答案】(1)fp(2) == (3) fp

【考点分析】

本题考查:文件结束检测函数feof;if语句条件表达式;

fseek函数。

【解题思路】填空1:while循环语句的循环条件是判断文件是否结束,配合feof函数来完成,其一般形式为:feof(文件指针);。填空2:根据题目要求确定if语句条件表达式的内容,满足条件后跳出循环。填空3:文件定位函数fseek(),调用形式;fseek(文件指针,位移量,起始点);,此处文件指针是fp。

【解题宝典】fseek函数用来移动文件内部位置指针,其调用形式为:fseek(文件指针,位移量,起始点);其中:"

文件指针"指向被移动的文件。"位移量"表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB

13

时不会出错。当用常量表示位移量时,要求加后缀"L"。"起始点"表示从何处开始计算位移量,规定的起始点有三种:文件首、当前位置和文件尾。其表示方法如下表。起始点

表示符号

数字表示

文件首

SEEK__SET

当前位置

SEEK__CUR

1

文件末尾

SEEK__END

2

例如:fseek(fp,50L,0)表示把位置指针移到离文件首50个字节处。

【参考答案】(1)n=strlen( aa ) ;(2)ch=aa[i];

【考点分析】本题考查:插入排序法;strlen函数的使用。【解题思路】插入排序算法:先对字符串中的前两个元素进行排序,然后第三个元素插入到前两个元素中,三个元素依然有序,依次类推,完成排序。(1)此处考查strlen函数的格式,应改为strlen(aa)。(2)程序中并没有定义变量c,该语句的作用是将元素a[i]的值赋给中间变量ch,以与其他元素进行比较并交换,所以应改为ch=a[i]。

【参考答案】

double fun( STREC *h )

{

double max=h->s;

while(h!=NULL) /*通过循环找到最高分数*/ {if(maxs) max=h->s;

h=h->next;

}

return max;

}

【考点分析】本题考查:结构体类型;指针型变量;链表的相关知识。

【解题思路】本题使用循环语句遍历链表中的每个结点,用判断语句比较结点数据的域大小。注意,h是一个指向结构体类型的指针变量,若要引用它所指向的结构体中的某一成员时,要用指向运算符"->"。

26

【参考答案】(1)0(2)j--(3)j

【考点分析】本题考查:数组元素的引用;for循环语句。【解题思路】填空1:N×N矩阵,第一列元素表示为t[0][N -j-1],第一行元素表示为t[j][0],将第一列赋值给第一行,因此填入0。填空2:for循环语句中,变量j的变化范围为从N-1递减到0,因此j做自减1操作。填空3:最后将

临时数组r中的元素赋值给矩阵最后一列。

【解题宝典】二维数组周边元素的表示方法,通过设定数组下标来完成。我们举个简单的例子来说明,如二维数组a[3][3],我们列出它的所有数组元素:

a[0][0],a[0][1],a[0][2]

a[1][0],a[1][1],a[1][2]

a[2][0],a[2][1],a[2][2]

那么其周边元素有a[0][0],a[0][1],a[0][2], a[1][0], a[1][2] , a[2][0],a[2][1],a[2][2]。如果我们把a[3][3]改为a[i][j],就不难表示出该数组的周边元素:

a[0][0],a[0][i]…a[0][N-i-1]…a[0][N-1]

a[1][0],…a[1][N-1]

a[N-j-1][0],…a[N-j-1][N-1]

a[N-1][0],a[N-1][1]…a[N-1][N-i-1]…a[N-1][N-1]

【参考答案】(1)double f(double x)(2)return s ;

【考点分析】本题考查:函数定义,其一般形式为"类型标识符函数名(形式参数列表)",其中类型标识符指明了本函数的类型,函数的类型实际上就是函数返回值的类型。

【解题思路】该程序的流程是:fun()程序对f(n)项循环累加,fun()程序采用条件选择语句计算函数f(x)的值。第一处错误在于未定义函数f(double x)的类型,因此返回值类型为double型,所以此处函数应定义为double。第二处错误的语法错误。

【解题宝典】我们在做改错题目时候,首先应该检查C语言语法是否有问题,在很多题目中都有类似的错误。

【参考答案】

double fun( int m )

{

int i;

double s=0.0;

for(i=1;i<=m;i++)

s=s+log(i); /*计算s=ln(1)+ln(2)+ln(3)+…

+ln(m)*/

return sqrt(s);/*对s求平方根并返回*/

}

【考点分析】本题考查:计算表达式的值运用for循环语句通过累加操作求和;平方根函数sqrt()的使用。

【解题思路】首先计算从1到m的对数的和,因此循环变量的范围是1~m,每次循环都进行一次累加求和。该题需要注意的是,log()函数的形式参数应当为double型变量,而用于循环的基数变量为整数,需要进行强制转换。

在返回的时候求出平方根。

27

【参考答案】(1) N(2) substr(3) 0

【考点分析】本题考查:for循环语句;strstr()字符串函数的使用;if语句条件表达式。

14

【解题思路】填空1:此处考查for循环语句中循环变量i 的取值范围,题目指出共有N个字符串,所以i的取值范围为0~N-1。填空2:strstr(s1,s2)的功能是在s1串中查找s2子串。题目要求在ss字符串数组中,查找substr所指的字符串,故应填substr。填空3:此处使用if条件语句来判断查找结果,由于printf("\nDon′t found!\n")可知此处需填写没有找到的条件,即是find==0。

【解题宝典】strstr(s1,s2)的功能是在s1串中查找s2子串,若没有找到,则函数值为0,若找到,函数值为非0。

【参考答案】(1)fun(int x,int y, int z)或int fun(int x,int y,int z)(2)return j;

【考点分析】本题考查:函数定义,注意有参函数的参数列表;函数返回值,通过return语句返回给主调函数。【解题思路】(1)定义函数时,必须为每个形参分别定义变量类型。

(2)通过return语句将最小公倍数j返回主调函数。

【解题宝典】几个自然数公有的倍数中最小的一个,叫做这几个数的最小公倍数。求几个数的最小公倍数的方法为:定义一个变量从1开始增加,每增加1即对几个数进行求余运算,直到几个数的余数全部为0,此时该数为这几个数的最小公倍数。

【参考答案】

void fun( char *a, int n,int h,int e )

{

int i,j=0;

for(i=h;i

a[j++]=a[i];

a[j]='\0'; /*在字符串最后加上结束标识*/

}

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

【解题思路】由于程序已经给出前导*号和尾部*号的个数,所以只要用循环语句将中间的字符保留起来。注意循环变量i的初值(h)和终止值(n-e),由于h和e分别表示a中的前导*号和尾部*号的个数,n是字符串的长度,所以从a[h]到a[n-e-1]之间的所有字符都要保留。循环结束后在新串的尾部加上结束符'\0'。

【解题宝典】本题技巧:

1

2

3

void fun(char *a,int n,int h,int e )

{a[n-e]=′\0′;

strcpy(a,a+h);}

a[n-e]的作用是在最后一个字母后加上字符串结束符。本程序采用了strcpy()库函数。

28

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

【考点分析】本题考查:链表数据结构,结点的表示方法;

掌握链表数据结构的基本思想。

【解题思路】本题考查的是链表的数据结构,需利用指针变量才能实现,一个结点中应包含一个指针变量,用来存放下一个结点的地址。建立单项链表的一般步骤是:建立头指针→建立第一个结点→头指针指向第一个结点→建立第二个结点→第一个结点的指针与指向第二个结点→……→最后一个结点的指针指向NULL。填空1:变量s 用来累加各结点的数据域,因此该空应为data。填空2:每次循环结束时,指针P指向下一个结点,即p=p ne xt。

填空3:由被调用函数的形参列表可知,此处应为指针类型变量,因为要对链表的数据域求和,所以在将链表的头指针传给被调用函数。

【参考答案】(1)while( *r)

(2){*a=*r;a++;r++;}

【考点分析】本题考查:指针型变量;C语言语法。

【解题思路】while( r)和r++都是简单的逻辑和语法错误,C语言中语句必须以分号";"结尾。只要掌握了C语言的基础知识,发现这样的错误是很容易的。

【参考答案】

void fun(char *s, char t[])

{

int i,j=0,k=strlen(s); /*k为字符串的长度*/

for(i=1;i

t[j++]=s[i];

t[j]='\0';

}

【考点分析】本题考查:删除字符串中指定字符,采用保留非指定字符的方法操作。

【解题思路】本题使用了一种i永远是奇数的循环方法,即for(i=1;i

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

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

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

下载本文档需要支付 7 元

支付方式:

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

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