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

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

【解题宝典】常见的字符串处理函数总结如下:

调用

形式

作用

说明

puts

(字符数组)

将一个字符串(以′\0′结束)输出到终端设备用该函数输出的字符串中可以包含转义字符gets(字符数组)从终端输入一个字符串到字符数组中,并且得到一个函数值puts()和gets()函数一次只能输入或输出一个字符串,不能写成puts(字符数组1,字符数组2)或gets(字符数组1,字符数组

2)strcpy(字符数组1,字符数组2)把字符数组2所指字符串

的内容复制到字符数组1所指存储空间中。函数返回字符数组1的值,即目的串的首地址为保证复制的合法性,字符数组1必须指向一个足够容纳字符数组2的存储空间strcat(字符数组1,字符数组2)该函数将字符数组2所指字符串的内容连接到字符数组1所指的字符串后面,并自动覆盖字符数组1串末尾的′\0′,该函数返回字符数组1的地址值字符数组1所指定字符串应有足够的空间容纳两串合并后的内容strlen(字符数组)此函数计算出以字符数组为起始地址的字符串的长度,并作为函数值返回这一长度不包括串尾的结束标志′\0′strcmp(字符数组1,字符数组2)该函数用来比较字符数组1和字符数组2所指字符串的大小。

若字符数组1>字符数组2,函数值大于0(正数);若字符数组1=字符数组2,函数值等于0;若字符数组1<字符数组2,函数值小于0(负数)根据字符的ASCII码值依此对字符数组1和字符数组2所指字符串对应位置上的字符两两进行比较,当出现第一对不同的字符时,即由这两个字符决定所在串的大小

12

【参考答案】(1) "r"(2) fs(3) ft

【考点分析】本题考查:打开文件操作,fopen函数用来打开一个文件,其一般形式为"文件指针名=fopen(文件名,使用文件方式);";文件结束检测函数feof函数;写字符函数fputc,功能是把一个字符写入指定的文件中,函数调用的形式为"fputc(字符量,文件指针);"其中,待写入的字符量可以是字符常量或变量,被写入的文件可以用写、读写、追加方式打开。文件一旦使用完毕,需使用关闭文件函数fclose将文件关闭,以避免文件的数据丢失等错误。

【解题思路】填空1:本题考查对文件操作的掌握。打开一个文件的调用方式是,fs=fopen(文件名,使用文件方式),以只读的方式打开文件,所以文件使用方式为"r"。

填空2:while循环语句中,循环条件通过feof()函数来检测是否到文件结尾。填空3:fputc()函数用于将一个字符写到磁盘文件上去,调用形式为:fputc(要输出的字符,文件指针)。

【参考答案】(1)if(d%2==0)(2)s/=10;

【考点分析】本题考查:if语句条件表达式,注意"=="

和"="的区别;除法运算符"/"。

【解题思路】(1)分析程序,在if的条件表达式中,不应该出现赋值运算符"=",应使用"=="运算符。(2)这里是一

7

个运算符的错误,表示除法的运算符是"/"。

【解题宝典】一般情况下,在if条件语句中,很容易出现"=="和"="的混淆错误,这也是经常考查的内容,考生应当注意。

【参考答案】void fun(int a, int b, long *c)

{*c=b%10+(a/10)*10+(b/10)*100+(a%10)*1000;

}

【考点分析】本题考查:如何取出数值n的各个位;知道数值n的各个位,又如何表示该数值;指针型变量的使用。【解题思路】本题中主要的问题是如何取出a和b的个位数和十位数,取出后如何表示成c中相应的位数。由于a和b 都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。得到后对应乘以1000、100、10、1就可得到c的千位数、百位数、十位数和个位数。注意:使用c时要进行指针运算。【解题宝典】知道两位数数值n,需要表示个位和十位,采用求余和除法操作,如n%10 (取个位)、n/10(取十位);

13

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

【考点分析】本题考查:for循环语句;数组元素的引用。【解题思路】填空1:循环语句中,循环变量i增量为1。填空2:将每行元素中的值均右移m个位置,所以数组元素的下标是t[i][j+m]。填空3:此for循环语句实现左边元素置0操作,所以j的取值范围是0到m。

【参考答案】(1)while((high>=2) && (n<10))(2)yes=0; break;

【考点分析】本题考查:C语言程序的语法格式。

【解题思路】while循环条件丢掉一个括号。另一处是很简单的程序语法错误,没有加分号。

【参考答案】

double fun()

{

double x0,x1;

x1=0.0;

do

{

x0=x1;

x1=cos(x0);

}while(fabs(x0-x1)>=1e-6);

return x1;

}

【考点分析】本题考查:迭代法求方程的实根;do…while 循环语句,其形式为:

do{

语句

}while(表达式);

do…while循环与while循环的不同在于,它先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续

循环;如果为假,则终止循环。因此,do…while循环至少要执行一次循环语句。

【解题思路】用迭代方法求方程的一个实根,题目已经给出了算法,只要按照算法用合适的程序表达,就可以解题了。

14

【参考答案】(1) a(2) d2841c49fe4733687e21aaa7(3) score[i]

【考点分析】本题考查:结构体数据类型;strcpy字符串拷贝函数。

【解题思路】填空1:题目要求先将形参a所指结构体变量中的数据赋给函数中的结构体变量b,所以此处b=a。填空2:通过strcpy函数修改b中的学生姓名,注意结构变量成员的表示方法。填空3:printf函数输出结果。

【解题宝典】结构变量成员的一般形式是:

结构变量名.成员名

例如:

student1.num即第一个学生的学号

student2.sex即第二个学生的性别

【参考答案】(1)s[j++]=s[i];或{s[j]=s[i];j++;}(2)s[j]=′\0′;

【考点分析】本题考查:数组元素下标;字符串结束标识′\0′。

【解题思路】由循环条件if(s[i]!=′c′)可知,如果字符串中的字符不是′c′,则将保留该字符到s[j]位置,然后下标j 进行加1操作。循环结束后要在新串的结尾加上′\0′。

【参考答案】

void fun( char *a )

{

int i=0,n=0;

char *p;

p=a;

while (*p=='*') /*判断*p是否是*号,并统计*号的个数*/

{

n++;p++;

}

while(*p) /*将前导*号后的字符传递给a*/ {

a[i]=*p;i++;p++;

}

while(n!=0)

{

a[i]='*';i++;n--;

}

a[i]='\0';

}

【考点分析】本题考查:移动字符串中指定字符的位置,一般采用while循环语句,通过指针型变量来完成。

【解题思路】函数fun的功能:将字符串中的前导*号全部

8

移到字符串的尾部。本题解题思路:(1)定义一个指针并指向字符串的首地址;(2)利用循环语句找出字符串的前导*号的个数n;(3)利用循环语句把剩余的字符拷贝到另一个字符串中;(4)在字符串的末尾接上n个*号。

15

【参考答案】(1) *fw(2) str(3) str

【考点分析】本题考查:函数定义以及文件指针;fputs 函数的功能是向指定的文件写入一个字符串,其调用形式为:fputs(字符串,文件指针)。

【解题思路】填空1:定义函数,函数的形参是一个文件类型的指针。填空2:此处考查fputs函数的形式,应填入str。填空3:依据printf函数的格式,输出字符串内容,即printf("%s",str);。

【参考答案】(1)void fun(long s,long *t)(2)s1=s1*10;

【考点分析】

函数定义,指针型变量;数值n和其各个位如何表示。【解题思路】(1)主函数中调用函数的参数为地址,因此函数fun的形式参数应为指针类型。(2)重新组合一个数,从个位开始,然后十位,依次类推,因此每增加一位数,原数值需乘以10,即s1=s1]

【参考答案】

void fun(int a, int b, long *c)

{*c=a/10+(b%10)*10+(a%10)*100+(b/10)*1000;

}

【考点分析】本题考查:如何取出数值n的各个位;知道数值n的各个位,又如何表示该数值;指针型变量的使用。【解题思路】本题中主要的问题是如何取出a和b的个位数和十位数,取出后如何表示成c中相应的位数。由于a和b 都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。得到后对应乘以1000、100、10、1就可得到c的千位数、百位数、十位数和个位数。注意:使用c时要进行指针运算。

16

【参考答案】(1)1(2) i(3) a[p+i]或*(a+p+i)

【考点分析】条件运算符组成条件表达式的一般形式:"表达式1? 表达式2: 表达式3"。其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。

【解题思路】填空1:该处是判断数组元素的个数是奇数还是偶数,为奇数时要使当前位置加1,以使p指向数组中间位置。填空2和填空3:这里是一个比较常见的数组位置调换程序,应填入i和a[p+i]。

【解题宝典】变量交换算法:如变量a、b互换,需借助第三个变量temp完成,即temp=a;a=b;b=temp。

【参考答案】(1)float k;(2)if(*a< *c)

【考点分析】本题考查:变量定义,根据给定程序语句确定变量类型;if语句条件表达式。

【解题思路】(1) 观察程序中的k,在赋值语句中,k是以

变量的形式进行赋值而非指针,所以将k定义为指针是错误的。

(2) 此处if语句是为了将小于*c的值放入*c中,所以改为

if(*a < *c)z

【参考答案】

int fun( STREC *a, STREC *b )

{

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

/*找出最大值*/

for(i=0;i

if(max

for(i=0;i

if(max==a[i].s) b[j++]=a[i];

/*找出成绩与max相等的学生的记录,存入结构体b 中*/

return j;

/*返回最高成绩的学生人数*/

}

【考点分析】本题考查:结构体数组操作。用循环判断结构查找数组中的最大值。

【解题思路】该程序使用两个循环判断语句,第1个循环判断语句的作用是找出最大值。第2个循环判断语句的作用是找出与max相等的成绩(即最高成绩)的学生记录,并存入b中。

【解题宝典】对于如何找出数组中最大值(多个相等)的方法,我们已经不陌生。如果是对结构体数组进行类似操作呢?

掌握以下语句:

for(i=0;i

if(max

17

【参考答案】(1) N(2) k(3) ss[i]

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

字符串拷贝函数strcpy 的使用。

【解题思路】填空1:for循环语句作用是遍历字符串数组中的每一个字符串,所以循环变量i的循环条件是i

【解题宝典】字符串拷贝函数strcpy ,其格式为:

strcpy (字符数组名1,字符数组名2)功能:把字符数组2中的字符串拷贝到字符数组1中。字符串结束标识′\0′也一同拷贝。字符数名2,也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。

【参考答案】(1) int k=0;(2)while (*p||*q)

【考点分析】本题考查:变量初始化,需根据题意确定变量含义,然后对其进行初始化操作;while循环语句。

【解题思路】(1) 变量k存放数组c的下标,因此应初始化

9

为0。(2) while循环语句的循环条件是判断两个字符串是否到达结尾。

【参考答案】

void fun( char *a )

{

int i=0;

char *p=a;

while(*p&&*p=='*')

{

a[i]=*p;

i++;

p++;

}

while(*p)

{

if(*p!='*')

{a[i]=*p;i++;}

p++;

}

a[i]='\0';

}

【考点分析】本题考查:指针型变量定义;while循环语句;if语句条件表达式;字符串结束标识'\0'。

【解题思路】函数fun的功能:除了字符串前导的*号之外,将串中其他*号全部删除。解答本题,(1) 定义一个临时指针p,初始指向原串首地址;(2) 利用循环语句把字符串前导*号拷贝到原串;(3) 继续移动指针,把串中和串尾的非*号字符拷贝到原串;(4)为修改后的字符串赋结束字符'\0'。

【解题宝典】要删除字符串中的指定字符,我们通常采用保留非指定字符的方法。可以将非指定字符保留在原串,即将需要保留的字符从原串的起始位置重新赋值;也可以保留到新串,即新建一个字符串,存放要保留的字符。

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

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

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

下载本文档需要支付 7 元

支付方式:

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

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