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

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

强制类型转换是通过类型转换运算来实现的。其一般形式为:"(类型说明符) (表达式)"。其功能是:把表达式的运算结果强制转换成类型说明符所表示的类型。

例如:

(float) a把a转换为实型

(int)(x+y)把x+y的结果转换为整型

【参考答案】(1)double fun(int n)(2)s=s+(double)a/b;

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

【解题思路】(1)由语句"return(s)"和变量s定义为double数据类型可知,该函数定义时其类型标识符为double类型。

(2)注意数据类型double的书写格式。

【解题宝典】确定函数类型标识符在填空和改错题中经常考到,如果函数没有返回值,则函数定义为void型;如果函数有返回值,则函数类型应与返回值类型一致;如果不定义函数类型标识符,则系统默认为int型。

【参考答案】

int fun (int a[][M])

{

int i,j,max=a[0][0];

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

for(j=0;j

if(max

max=a[i][j];

return max;

}

【考点分析】题且要求数组的最大值,需要运用循环语句,

4

因为数组是二维数值,所以应使用二层加for循环嵌套。使用for循环语句时需要注意循环变量的取值范围。

【解题思路】此类求最大值或最小值的问题,我们可以采用逐个比较的方式,要求对数组中所有元素遍历一遍,并且从中找出数组最大值或最小值。首先定义变量max存放数组中的第一个元素的值,然后利用for循环逐个找出数组中的元素,并与max比较,如果元素值大于max,则将该值赋于max,循环结后max的值即为数组最大值,最后将该值返回。

【解题宝典】该类题目考查较多,要掌握逐行比较的方法。对于m*n二维数组,如采用逐行查找方法,代码实现为:for(i=0;i

for(j=0;j

……

7

【参考答案】(1) 0(2) n(3) (t*t)

【考点分析】本题考查:变量初始化操作,需要注意该变量是用作累加器还是累乘器;for循环语句。

【解题思路】填空1:程序开始定义了变量s,但没有对其进行初始化,根据公式及后面的程序可知变量s用来存储公式的前n项和,因此该变量应初始化为0。填空2:通过for循环语句将表达式各项进行累加,结果存于变量s中,循环变量i的取值范围为1~n。填空3:根据题目要求确定表达式通项,前面已定义t=2.0]

【解题宝典】程序要求计算表达式值时,一般我们都设定一个变量s,并赋初值,如果s用来存放表达式的和,则赋初值为0;如果s用来存放表达式的积,则赋初值为1。【参考答案】(1)for(i=0;str[i];i++) (2)if(substr[k+1]==′\0′)【考点分析】本题考查:for循环语句的格式,for循环语句使用最为灵活,其一般形式为:for(表达式1;表达式2;表达式3) ,注意表达式之间使用";"相隔;if条件语句的格式,其中if关键字需要区别大小写,这里不能混淆使用。关键字是由C语言规定的具有特定意义的字符串,也称为保留字。用户定义的标识符不应与关键字相同,并且关键字应小写。

【解题思路】我们先看循环条件for(i =0, str[i], i++),不难发现此处for循环语句的格式有误,其中表达式之间应以";"相隔;同时很容易发现if条件语句处的关键字书写错误。

【参考答案】

double fun ( double eps)

{

double s=1.0,s1=1.0;

int n=1;

while(s1>=eps) /*当某项大于精度要求时,继续求下一项*/

{s1=s1*n/(2*n+1); /*求多项式的每一项*/

s=s+s1; /*求和*/

n++;

}

return 2*s;

}

【考点分析】本题考查:迭代法求给定多项式的值,迭代算法:让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。需要注意变量的数据类型以及赋初值操作。

【解题思路】首先应该定义double类型变量,并且赋初值,用来存放多项式的某一项和最后的总和。从第2项开始以后的每一项都是其前面一项乘以n/( 2]

8

【参考答案】(1) s[i](2) '9' (3)*t=n

【考点分析】本题考查:for循环语句;if语句条件表达式;

指针变量。

【解题思路】填空1:通过for循环语句,来判断是否到字符串结尾,变量i用来存放字符串数组下标,则应填入s[i]。

填空2:题目要求判断数字字符,所以此处应填入'9'。填空3:将数字字符个数存入变量t中,这里需注意变量t是指针变量。

【解题宝典】if语句的条件表达式一般会考查三方面的内容:(1) 条件判断,即>与>=、<与<=、==与!=的区别,需要仔细分析题干的意思,确定条件表达式的内容。

(2) 逻辑判断,即&&(逻辑与)与||(逻辑或)的区别,需要

根据题干确定if条件中若干个条件表达式的并存关系。

(3)=(赋值号)与==(等于号)的区别,注意在if条件中不会

出现=(赋值号)。

【参考答案】(1)t = *x ; *x = y ;(2)return(t) ;或return t;

【考点分析】本题考查:指针型变量的使用;通过return 语句完成函数值的返回。

【解题思路】首先,定义变量t作为中间变量,然后进行数据交换,注意参数x是指针变量,交换时应使用*x,最后确定返回值,根据代码b=fun(8a,b)可以知道返回值将赋给变量b,而b中应存放交换前**中的值,所以函数应返回变量t

【参考答案】

void fun (int *a, int *n)

{

int i,j=0;

for(i=1;i<=1000;i++) /*求1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数,并放入数组a 中*/

if((i%7==0||i%11==0)&&i%77!=0)

a[j++]=i;

*n=j;

}

【考点分析】本题考查:if语句,用来判断能被7整除或者

5

能被11整除,但是又不能同时被7和11整除的数,在这里充分理解"逻辑与"和"逻辑或"的区别;for循环语句的循环变量用来控制取值范围。

【解题思路】该题需要运用循环判断结构来实现,其中循环语句比较容易,只要确定循环变量的范围即可,下面我们来看判断语句,题目要求找出能被7或11整除,但不能同时被7和11整除的所有整数。能同时被7和11整除的整数一定能被77整除,且不能被77整除的数不一定就是能被7或11整除的数所以可得出程序中的if()语句。注意:(i%7==0||i%11==0)两边必须要有小括号。

9

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

【考点分析】本题考查:if语句条件表达式;自增/自减运算符;函数返回值。

【解题思路】填空1:根据题目要求,需要进行奇偶数的判定,我们可以通过if条件语句来判断数组元素是否是奇数,如果元素不能被2整除,则为奇数,所以填入if (a[i]%2==1)。填空2:将为奇数的元素重新存放到数组的前面,同时下标增1。填空3:函数返回值需要返回数组中奇数的个数,因此返回变量j。

【解题宝典】奇数和偶数的判定方法,通过if条件语句完成,对2求余运算,结果为0是偶数,结果为1是奇数。自增1、自减1运算符:自增1运算符记为"++",其功能是使变量的值自增1。自减1运算符记为"--",其功能是使变量值自减1。自增1、自减1运算符均为单目运算,都具有右结合性。有以下几种形式:++i:i自增1后再参与其他运算。--i: i自减1后再参与其他运算。i++:i参与运算后,i的值再自增1。

i--:i参与运算后,i的值再自减1。

【参考答案】(1) t=a;a=b;b=t;(2) return(b);或return b;

【考点分析】本题考查:return语句,功能是计算表达式的值,并将其返回给主调函数。

【解题思路】求最大公约数算法一般采用辗转相除法。辗转相除法的算法为:首先将m除以n(m>n)得余数r,再用余数r去除原来的除数,得到新的余数,重复此过程直到余数为0时停止,此时的除数就是m 和n的最大公约数。程序首先判断参数a和b的大小,如果a

【参考答案】

void fun( char *a )

{

int i,j=0;

for(i=0;a[i]!='\0';i++)

if(a[i]!='*')

a[j++]=a[i]; /*若不是要删除的字符'*'则留

下*/

a[j]='\0';

}

【考点分析】要删除字符串中所有*号需要用循环语句遍历字符串,用判断语句判断字符是否为*号,由此可以决定该程序应使用循环判断结构。

【解题思路】用循环操作从字符串的开始往后逐个进行比较,若不是要删除的字符(用if(a[i]!=′*′)来控制)则保留。

变量i和j用来表示原字符串的下标和删除*号后新字符串的下标。注意下标变量j要从0开始,最后还要加上字符串结束标识′\0′。

10

【参考答案】(1)0(2) 10*x (3)n/10

【考点分析】本题考查:已知某数,如何求该数各个位数值,已知各个位数值,如何表示该数;除法运算。

【解题思路】填空1:定义变量t用来存放数值几的各个位数值,此处判断t是否为偶数,即对2求余结果是否为0。

填空2:将t作为x的个位数,原来x的各个位上升1位,即x =10]

【解题宝典】如果知道某数n的各个位,可以得到该数值n,如n的个位为a、十位为b、百位为c,那么n=c*100+b*10+a。如果知道数值n,可以采用求余和除法操作来表示其各个位,如n%10(取个位)、n/10(取十位),读者可以自己考虑一下,如果是三位数,如何提取各个位?四位数呢?

【参考答案】(1)*t=0;(2)if(d%2!=0)或if(d%2==1)

【考点分析】本题考查:指针型变量作为函数参数;if语句条件表达式,结合奇偶数的表示方法来确定该表达式内容。

【解题思路】(1) 由函数定义可知,变量t是指针变量,所以对t进行赋初值0是不对的。因为t指向的是存放新数的变量,所以此处应给新数赋初值0,即*t=0。(2) 变量d 表示数s各个位上的数,此处的if条件应为判断d是否为奇数。

【参考答案】

void fun(char p1[], char p2[])

{

int i,j;

for(i=0;p1[i]!='\0';i++) ;

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

p1[i++]=p2[j];

p1[i]='\0';

}

【考点分析】本题考查:不使用字符串函数实现字符串连接操作。通过for循环语句来完成,不要忘了最后需要加上字符串结束标识'\0'。

【解题思路】本题用两个循环完成操作,第1个循环的作用是求出第1个字符串的长度,即将i指到第1个字符串的末尾。第2个循环的作用是将第2个字符串的字符连到第1

6

个字符串的末尾。最后在第1个字符串的结尾加上字符串结束标识′\0′。

11

【参考答案】(1) n/2(2) i(3) a[n-i-1]

【考点分析】本题考查:for循环语句;变量交换算法。【解题思路】填空1:逆置数组元素中的值,将a[0]与a[n -1]对换位置,依此类推,那么需要对换n/2次。填空2:将a[0]与a[n-1]对换位置,a[1]与a[n-2]对换位置,依次类推,则a[i]=a[n-1-i]。填空3:普通的调换位置程序,显然填入a[n-i-1]。

【参考答案】(1)n= *p-′0′; (2)n=n*8+*p-′0′;

【考点分析】本题考查:数字和字符转换方法;八进制转十进制方法。

【解题思路】(1)"0"和"1"是字符串中的数字字符,为了进行数字运算,必须要将数字字符转换为数字,用数字字符减去字符'0'的ASCII码,就得到对应的数字。题中给出的是"o",不是"0"。(2)要在一个八进制数的最后加上一位,原来各个位上的数上升一位,只需将原数乘以8再加上个位数。

【解题宝典】各种进制之间转换方法需要掌握,二进制数、八进制数、十六进制数转换为十进制数采取按权求和的方法;十进制数转换为二进制数、八进制数、十六进制数采取除2/8/16取余方法来实现。

【参考答案】

STREC fun( STREC *a, char *b )

{

int i;

STREC str={"\0",-1}; /*若没找到指定的学号,在结构体变量中给学号置空串,给成绩置-1*/

for(i=0;i

if(strcmp(a[i].num,b)==0) /*找到指定学号的学生数据*/

str=a[i];

str=a[i];

return str; /*返回学生记录*/

}

【考点分析】本题考查:结构体类型;字符串比较函数strcmp()的应用。

【解题思路】本程序一开始先使结构体变量str中的学号为空串,成绩为-1。循环体的功能是搜索所有学生的学号,并判断是否有学号与b所指字符串相同(即找到),若找到则给str重新赋值(str=a[i]),若没找到则str成员的值还是原有值(即未找到时学号返回空串,成绩返回-1)。

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

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

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

下载本文档需要支付 7 元

支付方式:

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

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