全国计算机考试二级C语言最新上机题库打印版.docx

上传人:b****3 文档编号:4653253 上传时间:2023-05-07 格式:DOCX 页数:134 大小:99.15KB
下载 相关 举报
全国计算机考试二级C语言最新上机题库打印版.docx_第1页
第1页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第2页
第2页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第3页
第3页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第4页
第4页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第5页
第5页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第6页
第6页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第7页
第7页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第8页
第8页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第9页
第9页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第10页
第10页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第11页
第11页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第12页
第12页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第13页
第13页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第14页
第14页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第15页
第15页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第16页
第16页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第17页
第17页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第18页
第18页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第19页
第19页 / 共134页
全国计算机考试二级C语言最新上机题库打印版.docx_第20页
第20页 / 共134页
亲,该文档总共134页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

全国计算机考试二级C语言最新上机题库打印版.docx

《全国计算机考试二级C语言最新上机题库打印版.docx》由会员分享,可在线阅读,更多相关《全国计算机考试二级C语言最新上机题库打印版.docx(134页珍藏版)》请在冰点文库上搜索。

全国计算机考试二级C语言最新上机题库打印版.docx

全国计算机考试二级C语言最新上机题库打印版

 

2012年9月全国计算机考试二级C语言最新上机题库

上机考试题库

(打印版)

2012.9

 

1

【参考答案】

(1)a[i]  

(2)a[j]  (3)a[j]

【考点分析】本题考查:

数组的引用;if语句条件表达式,如果表达式的值为真,则执行下面的语句,如果该值为假,则不执行下面的语句。

【解题思路】填空1:

for循环语句循环体中将数组元素a[i]赋值给变量max和变量min。

填空2:

通过一次for循环,找到数组中的最大值,if语句的条件表达式是max

填空3:

同理,此处if语句的条件表达式是min>a[j]。

【解题宝典】求最大值或者最小值的题目,一般都是假设一个元素最大或最小,然后通过if条件语句将该元素和其他元素进行比较操作来完成。

【参考答案】

(1)去掉分号

(2)case1:

case2:

return1;

【考点分析】本题考查:

switch语句,其一般形式为:

switch(表达式){

case常量表达式1:

语句1;

case常量表达式2:

语句2;

……

case常量表达式n:

语句n;

default:

语句n+1;

}其中switch(表达式)后不应该带有";",同时case语句常量后应该是":

"。

【解题思路】C语言中,switch语句之后不能有分号,并且case语句常量后应用的是冒号。

【参考答案】

oidfun(STREC*a)

{doubleave=0.0;

inti;

for(i=0;i

a->ave=a->ave+a->s[i];

/*求各门成绩的总和*/

a->ave/=N;

/*求平均分*/

}

【考点分析】本题考查:

结构体类型成员运算,指向结构体类型的指针变量作函数参数。

【解题思路】本题考查自定义形参的相关知识点,程序流程是这样的:

在fun()函数中求出平均分后,返回到主函数时平均分也要带回,所以只能定义一个指针类型的形参STREC*a,此时,引用成员的方式可以使用指向运算符,即a->ave和a->s[i],当然也可用(*a).ave和(*a).s[i]。

2

【参考答案】

(1)char 

(2)ch<='9' (3)'0'

【考点分析】本题考查:

函数定义,注意函数定义的一般形式以及有参函数和无参函数的区别;if语句条件表达式,本题的条件表达式是判断数字字符;函数返回值,其一般形式为"return表达式;"。

【解题思路】填空1:

函数定义时,类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型,所以此处应该填入char。

填空2:

通过if条件语句判断字符串中字符是否是数字字符,既大于等于字符'0',同时小于等于字符'9'。

填空3:

return语句完成函数返回操作,要实现字符转换,应填入return′9′-(ch-′0′)。

【解题宝典】有参函数定义,其一般形式为:

类型标识符 函数名(形式参数表列)

{声明部分

  语句}

在形参表中给出的参数称为形式参数,它们可以是各种类型的变量,各参数之间用逗号间隔。

在进行函数调用时,主调函数将赋予这些形式参数实际的值。

形参既然是变量,必须在形参列表中给出类型说明。

【参考答案】

(1)b[k]=*p;

(2)b[k]=′′;k++;

【考点分析】本题考查:

指针类型变量作为函数的参数,函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。

它的作用是将一个变量的地址传送到另一个函数中。

【解题思路】

(1)题目中p是指针型变量作函数参数,因此给b[k]赋值时出现错误。

(2)题目要求赋值3个字符后加一个空格,所以应该是先给b[k]赋值空格,然后变量k再加1。

【解题宝典】C语言中为了表示指针变量和它所指向的变量之间的关系,在程序中用"*"符号表示"指向",例如,pointer代表指针变量,而*pointer是pointer所指向的变量。

【参考答案】

doublefun(STREC*h)

{

doubleave=0.0;

STREC*p=h->next;

while(p!

=NULL)

{ave=ave+p->s;

p=p->next;

}

returnave/N;

}

【考点分析】本题考查:

链表的操作,对链表的主要操作有以下几种:

建立链表、结构的查找与输出、插入一个结点、删除一个结点。

【解题思路】题目要求求链表中数据域的平均值,应首先使用循环语句遍历链表,求各结点数据域中数值的和,再对和求平均分。

遍历链表时应定义一个指向结点的指针p,因为"头结点"中没有数值,所以程序中让p直接指向"头结点"的下一个结点,使用语句STREC*p=h->next。

3

【参考答案】

(1)M  

(2)<  (3)k

【考点分析】本题考查:

for循环语句的循环条件;if语句条件表达式;return语句完成函数值的返回。

【解题思路】填空1:

题目指出ss所指字符串数组中共有M个字符串,所以for循环语句循环条件是i

填空2:

要求求长度最短的字符串,*n中存放的是已知字符串中长度最短的字符串的长度,这里将当前字符串长度与*n比较,若小于*n,则将该长度值赋给*n,因此if语句的条件表达式为len<*n。

填空3:

将最短字符串的行下标作为函数值返回,变量k储存行下标的值。

【参考答案】

(1)if((tt[i]>=a′)&&(tt[i]<=′z′)

(2)tt[i]-=32;

【考点分析】本题考查:

if语句条件表达式;小写字母转大写字母的方法。

【解题思路】

(1)分析本题可知,要判断字符是否为小写字母,即判断其是否在a~z之间,所以这里需要进行连续的比较,用&&。

(2)从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII值大32。

将字符串中的小写字母改为大写字母的方法是:

从字符串第一个字符开始,根据ASCII码值判断该字母是不是小写字母,若是,则ASCII码值减32即可。

【参考答案】

voidfun(intm,int*k,intxx[])

{

inti,j,n=0;

for(i=4;i

{for(j=2;j

if(i%j==0)break;

if(j

}

*k=n;/*返回非素数的个数*/

}

【考点分析】本题考查:

如何判断非素数;循环判断结构;数组的引用。

【解题思路】题目要求将1~m之间的非素数存入数组中,应使用循环判断结构。

循环语句用来遍历1~m之间的每个数,判断语句用来判断该数是否素数,若不是素数,则将其存入数组中。

这道题目是考查一个数是否为素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解决。

【解题宝典】判定一个数是否为素数,即该数除了能被1和它本身外,不能被任何数整除。

代码实现为:

for(j=2;j

if(i%j==0)  /*如余数为0,证明i不是素数*/

……

此语句需要熟记,很多判断素数的题目也可通过此法解决。

4

【参考答案】

(1)j++或j+=1或++或j=j+1

(2)s[i]=t1[i] (3)j

【考点分析】本题考查:

指针型变量;数组变量赋值;for循环语句。

【解题思路】填空1:

根据函数fun中的内容可知,数组t1存储了s中的非数字字符,数组t2存储了s中的数字字符,为了存储下一个数字字符,下标j要进行加1操作。

填空2:

将s串中的数字与非数字字符分开后,要先将非数字字符放入字符串s中,因此填入s[i]=t1[i]。

填空3:

最后将数字字符加到s串之后,并且i要小于数字的个数j。

【参考答案】

(1)for(j=i+1;j<6;j++)

(2)*(pstr+i)=*(pstr+j);

【考点分析】本题考查:

冒泡排序算法;for循环语句格式;指针数组。

【解题思路】

(1)此处考查for语句的格式,各表达式之间应用";"割开。

(2)此处考查用指针表示数组元素的方法,*(pstr+I)表示pstr所指向数组的第I个元素,同理*(pstr+j)表示pstr所指向数组的第j个元素。

【解题宝典】冒泡排序算法,其基本思想是,将待排序的元素看作是竖着排列的"气泡",较小的元素比较轻,从而要往上浮。

在冒泡排序算法中我们要对这个"气泡"序列处理若干遍。

所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。

如果发现两个相邻元素的顺序不对,即"轻"的元素在下面,就交换它们的位置。

显然,处理一遍之后,"最轻"的元素就浮到了最高位置;处理二遍之后,"次轻"的元素就浮到了次高位置。

依次类推,完成排序。

用代码实现数组s[N]的升序排列为:

for(i=0;i

for(j=i+1;j

if(s[i]>s[j])

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

s[j]=to;}

【参考答案】

intfun(char*ss,charc)

{

inti=0;

for(;*ss!

='\0';ss++)

if(*ss==c)

i++;/*求出ss所指字符串中指定字符的个数*/

returni;

}

【考点分析】本题考查:

for循环语句遍历字符串,并通过if条件语句,判断字符串是否结束。

【解题思路】从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍历字符串,循环条件为字符串没有结束,即当前字符不是′\0′,判断语句用来判断当前字符是否为指定字符。

最后返回指定字符的个数。

5

【参考答案】

(1)x  

(2)p  (3)s

【考点分析】本题考查:

链表的基本操作。

了解链表的基本思想和相关算法,理解有关链表插入及删除时指针移动的先后顺序问题,注意指针的保存和归位。

【解题思路】填空1:

将形参x赋值给结点的数据域。

填空2和填空3:

将新的结点和原有链表中结点进行比较。

【参考答案】

(1)longk=1;

(2)num/=10;

【考点分析】本题考查:

数据类型;保存乘积的变量初始化;除法运算符。

【解题思路】

(1)k用来存放各位数字的积,初始值应为1。

(2)这里是一个符号错误,除号用"/"来表示。

【解题宝典】明确C语言中的算术运算符:

加法运算符"+":

为双目运算符,即应有两个量参与加法运算。

减法运算符"-":

为双目运算符。

但"-"也可作负值运算符,此时为单目运算,如-x,-5等具有左结合性。

乘法运算符"*":

双目运算,具有左结合性。

除法运算符"/":

双目运算,具有左结合性。

参与运算量均为整型时,结果也为整型,舍去小数。

如果运算量中有一个是实型,则结果为双精度实型。

求余运算符(模运算符)"%":

双目运算,具有左结合性。

要求参与运算的量均为整型。

求余运算的结果等于两数相除后的余数。

【参考答案】

floatfun(float*a,intn)

{

inti;

floatav=0.0;

for(i=0;i

av=av+a[i];

return(av/n);/*返回平均值*/

}

【考点分析】本题考查:

如何通过指针来实现计算平均分。

【解题思路】本题较简单,只需用一个循环语句就可变成数组元素的求和,再将和除以课程数即可。

需要注意的是本题对指针的操作,当指针变量指向一个数组时,用该指针变量引用数组元素,引用方式与数组的引用方式相同。

如本题中a指向了score,所以通过a引用score中的元素时可以用下标法,也可以用指针运算法,a[i]和*(a+i)具有相同的作用。

下标运算实际上是从当前地址开始往后取出地址中的第几个元素,当前地址下标为0。

例如,若有intcc[10],*p=cc+5;,即p指向了cc的第5个元素,则p[0]的作用与cc[5]相同;p[3]的作用是取出从当前地址(即p所指地址)开始往后的第3个元素,它与cc[8]相同;p[-2]的作用是取出从当前地址开始往前的第2个元素,它与cc[3]相同,但不提倡使用"负"的下标。

【解题宝典】计算平均分方法。

掌握以下语句:

for(i=0;i

av=av+a[i];

return(av/n);  /*返回平均值*/

6

【参考答案】

(1)3.0或(double)3  

(2)>  (3)(t+1)

【考点分析】本题考查:

基本算术运算时的类型转换,其转换规则为:

如果双目运算符两边运算数的类型一致,则所得结果的类型与运算数的类型一致;如果双目运算符两边运算的类型不一致,系统将自动进行类型转换,使运算符两边的类型达到一致后,再进行运算规律见下表。

运算数1,运算数2,转换结果类型

短整型,大整型,短整型长整型

整型,大整型,整型长整型

字符型,整型,字符型整型

有符号整型,无符号整型,有符号整型无符号整型

整型,浮点型,整型浮点型while循环语句,一般考查如何根据题意确定循环条件,以及如何通过循环变量变化实现循环操作。

【解题思路】填空1:

变量x定义为double类型,而运算符"/"后面是整型数,所以给x赋值时,需要注意数据类型,此处不能将3.0写成3。

填空2:

while循环语句的循环条件,根据题意确定循环变量应大于1e-3,因此此处应填">"。

填空3:

表达式的通项是(2]

【解题宝典】本题填空1还可以运用强制类型转换来实现。

强制类型转换是通过类型转换运算来实现的。

其一般形式为:

"(类型说明符)(表达式)"。

其功能是:

把表达式的运算结果强制转换成类型说明符所表示的类型。

例如:

(float)a    把a转换为实型

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

【参考答案】

(1)doublefun(intn)

(2)s=s+(double)a/b;

【考点分析】本题考查:

函数定义,函数定义的一般形式为:

"类型标识符 函数名(形式参数表列)",其中类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。

【解题思路】

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

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

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

【参考答案】

intfun(inta[][M])

{

inti,j,max=a[0][0];

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

for(j=0;j

if(max

max=a[i][j];

returnmax;

}

【考点分析】题且要求数组的最大值,需要运用循环语句,因为数组是二维数值,所以应使用二层加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条件语句处的关键字书写错误。

【参考答案】

doublefun(doubleeps)

{

doubles=1.0,s1=1.0;

intn=1;

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

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

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

n++;

}

return2*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);或returnt;

【考点分析】本题考查:

指针型变量的使用;通过return语句完成函数值的返回。

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

【参考答案】

voidfun(int*a,int*n)

{

inti,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整除或者能被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);或returnb;

【考点分析】本题考查:

return语句,功能是计算表达式的值,并将其返回给主调函数。

【解题思路】求最大公约数算法一般采用辗转相除法。

辗转相除法的算法为:

首先将m除以n(m>n)得余数r,再用余数r去除原来的除数,得到新的余数,重复此过程直到余数为0时停止,此时的除数就是m和n的最大公约数。

程序首先判断参数a和b的大小,如果a

当余数r为0时,除数b即为所求的最大公约数,所以函数应返回b。

【参考答案】

voidfun(char*a)

{

inti,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,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2