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

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

(2)t[2*d]='\0';或t[d+i]='\0';或t[2*d]=0;或t[d+i]=0;

【考点分析】本题考查:函数定义;指针型变量的使用;

字符串结束标识符。

【解题思路】(1)从调用函数来看,函数传递的是数组,所以函数的形参应为指针。(2) 循环结束后回文字符的个数为2]

【参考答案】

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

{

int i,j=0,n;

n=strlen(s);

for(i=0;i

if(i%2!=0&&s[i]%2!=0)

{

t[j]=s[i];

/*将下标为奇数同时ASCII码值为奇数的字符放入数组t中*/

j++;

}

t[j]='\0';/*最后加上结束标识符*/

}

【考点分析】本题考查:删除指定字符串中下标为偶数和ASCII码值为偶数的字符,只要把字符串中下标为奇数和ASCII码为奇数的字符保留,同时需要掌握奇数的判定方法。

【解题思路】本题要求除了下标为奇数同时ASCII码值也为奇数的字符之外,其余的所有字符都删除。即要留下下标为奇数同时ASCII码值也为奇数的字符。所以if的条件语句中应使用if(i%2!=0&&s[i]%2!=0)。

37

【参考答案】(1) 0(2) i++或++i或i+=1或i=i+1(3)2.0*i 【考点分析】本题考查:变量赋初值;while循环语句;

18

表达式通项的表示方法。

【解题思路】填空1:循环变量1从开始参加运算,但是在每次循环的开始i都进行自加1操作,故i应赋初值为0。填空2:循环变量i自增1运算。填空3:根据公式确定表达式通项。注意x为double类型,故应将i变为double类型再进行运算。

【参考答案】(1)void fun ( char *s , char *t )

(2)t[2*d]='\0';或t[d+i]='\0';或t[2*d]=0;或t[d+i]=0;【考点分析】本题考查:函数定义;指针型变量的使用;字符串结束标识符。

【解题思路】(1)从调用函数来看,函数传递的是数组,所以函数的形参应为指针。(2) 循环结束后回文字符的个数为2]

【参考答案】

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

{

int i,j=0,n;

n=strlen(s);

for(i=0;i

if(i%2!=0&&s[i]%2!=0)

{

t[j]=s[i];

/*将下标为奇数同时ASCII码值为奇数的字符放入

数组t中*/

j++;

}

t[j]='\0';/*最后加上结束标识符*/

}

【考点分析】本题考查:删除指定字符串中下标为偶数和ASCII码值为偶数的字符,只要把字符串中下标为奇数和ASCII码为奇数的字符保留,同时需要掌握奇数的判定方法。

【解题思路】本题要求除了下标为奇数同时ASCII码值也为奇数的字符之外,其余的所有字符都删除。即要留下下标为奇数同时ASCII码值也为奇数的字符。所以if的条件语句中应使用if(i%2!=0&&s[i]%2!=0)。

38

【参考答案】(1) &&(2) 0或′\0′(3) s[j]或*(s+j) 【考点分析】本题考查:if语句条件表达式,很多情况下,往往需要配合逻辑运算符的使用;while循环语句循环条件的设定。

【解题思路】填空1:if语句中的条件是判断是否为数字字符,数字字符的条件是既要大于等于"1",同时还需要小于等于"9",因此需要使用逻辑与"&&"来连接。

填空2:while语句判断是否到达字符串的结尾,因此填入0(字符串结束标识'\0')。

填空3:for语句使数字后的字符全都向后移一个单位,那么要使s[j+1]=s[j]。

【解题宝典】如要在字符串中位置i处插入字符,需要将位置为i及其以后的字符后移1个位置,以便进行插入操作。

【参考答案】(1)for(i=2;i<=m;i++)

(2)y+=1.0/(i*i);或y+=(double)1.0/(i*i)

【考点分析】本题考查:for循环语句的循环条件;数据类型的强制转换。

【解题思路】(1)根据公式可以知道for循环语句中变量i的取值范围,应该包括m。(2)变量y是一个double型变量,而i是整型变量,所以要进行类型转换,改为y+=1.0/(i*i)。

【参考答案】

void fun ( int a[3][3], int b[3][3])

{

int i,j;

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

for(j=0;j<3;j++)

b[i][j]=a[i][j]+a[j][i];/*把矩阵a加上a的转置,存放在矩阵b中*/

}

【考点分析】本题考查:矩阵的操作,如何表示矩阵及其转置矩阵的各个元素。

【解题思路】行列数相等的二维数组的转置就是行列互换,即转置后的第i行第j列正好对应原矩阵的第j行第i列。

本题使用双层循环实现矩阵的转置,并将计算结果存入矩阵B中,外层循环控制矩阵的行下标,内层循环控制矩阵的列下标。

【解题宝典】若要将矩阵a转置后还存入a中,可用程序:int i,j,t;

for(i=0;i

for(j=i;j

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

注意第2个循环的初值。

若要将矩阵a转置后存入c中:

int i,j;

for(i=0;i

for(j=0;j

c[i][j]=a[j][i];

注意数组c和a的下标。

39

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

【解题思路】填空1:本题考查了函数指针变量的函数返回值的类型,* fun(NODE *h)的返回值为p,而p的数据类型为NODE,因此本空应该填写NODE。填空2:从此空的形式p->可知本空应该填写next。填空3:本题要求将不带头结点的单向链表逆置,为了使q的指针向后移,此空应该填写r。

【参考答案】

(1)if(i%2 || s[i]%2==0) 或 if(i%2 !=0 || s[i]%2==0)

(2)t[j]= ′\0′; 或 t[j]=0;

19

【解题思路】(1)根据题意,将字符串s中位于奇数位置的字符或ASCII码值为偶数的字符,依次放入字符串t中,所

以if条件中要使用"或"运算。(2)变量j控制字符串t的下标,所以是t[j]。

【参考答案】

void fun(int (*s)[10],int *b,int *n,int mm,int nn) {

int i,j;

for(j=0;j

for(i=0;i

{

b[*n]=*(*(s+i)+j);

*n=*n+1;/*通过指针返回元素个数*/

}

}

【解题思路】题目要求实现将二维数组元素存入一维数组,需使用for循环语句来控制二维数组元素的下标,同时使用指针变量配合操作。可以用两个循环来处理问题,由于是按列的顺序取出,所以第1个循环用于控制列下标,第2个循环用于控制行下标。

40

【参考答案】(1) struct student (2) d2841c49fe4733687e21aaa7(3) a.score[i] 【考点分析】本考查:函数定义;结构变量成员的表示方法。

【解题思路】填空1:函数定义时,类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。该题中,用结构类型定义函数类型。填空2和填空3: 此处考查结构体变量成员的表示方法a、name和a、score[i]分别表示学生的姓名和成绩。

【参考答案】(1)if(p==n) return -1;(2)a[i]=a[i+1];

【考点分析】本题考查:if语句条件表达式;数组元素赋值。

【解题思路】(1)需要确定if条件语句的条件表达式,发现变量p大写,C语言中变量是区别大小写的。(2)删除数列中的元素,删除后,后面的元素依次前移一个位置,因此此处应为a[i]=a[i+1]。

【参考答案】

int fun( STREC *a, STREC *b )

{

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

for(i=0;i

if(min>a[i].s)

min=a[i].s; /*找出最小值*/

for(i=0;i

if(min==a[i].s)

b[j++]=a[i]; /*找出成绩与min相等的学生的记录,存入结构体b中*/

return j;

}

【考点分析】本题考查:查找结构体数组中的最小数据,需要通过for循环语句和if条件语句来完成。

【解题思路】本题中第一个循环语句的作用是遍历数组求出最低分数,第二个循环语句的作用是将数组中的元素与最低分比较,查找是否存在与最低分相等的成绩。

41

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

【考点分析】本题考查:文件的相关操作,fprintf函数与前printf功能相似,区别在于fprintf函数的对象不是键盘和显示器,而是磁盘文件;文件打开和关闭函数fopen和fclose的使用。

【解题思路】填空1:fprintf函数的形式是:fprintf(文件指针,格式字符串,输出表列);,所以填入文件指针fp。填空2:文件一旦使用完毕,应使用关闭函数fclose()将文件关闭,以避免发生文件数据丢失等错误。填空3:fopen函数用来打开一个文件,其一般形式为:文件指针名=fopen(文件名,使用文件方式);因此应填入文件名fname。

【参考答案】(1)for(i=j+1;i

【考点分析】本题考查:for循环语句;需明确各个变量含义。

【解题思路】该程序是对n个无序数实现从小到大的排序,先找出整数序列的最小项,置于指针第1个元素的位置;

再找出次小项,置于第2个元素的位置;之后顺次处理后续元素。(1)数组的长度为n,所以最后一个元素的下标值为n-1,i的取值范围应该包括此下标值。(2)p是中间变量,存放值较小的元素下标。

【参考答案】

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时要进行指针运算。

42

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

【考点分析】本题考查:求余运算;if语句条件表达式。

【解题思路】填空1:通过t对10求余,取出该数值的各个位。填空2:通过if条件语句实现奇偶数的判定。如果条件表达式对2求余为0即是偶数,反之是奇数。填空3:最后将剩余的数赋给n指问的元素。

20

【参考答案】(1)正确:if( n==0)

(2)正确:result *=n--;或{result *=n; n--;}

【考点分析】本题考查:if语句条件表达式,需注意其格式;计算阶乘的方法。

【解题思路】(1)这里是一个简单的格式错误,if条件应该加括号。(2)根据阶乘的概念,从n开始,n!=n*(n-1)!,直到1,所以应该为result *=n--。

【参考答案】

long fun ( char *p)

{

long n=0;

int flag=1;

if(*p=='-') /*负数时置flag为-1*/

{p++;flag= -1;}

else if(*p=='+') /*正数时置flag为1*/

p++;

while(*p!='\0')

{n=n*10+*p-'0'; /*将字符串转成相应的整数*/

p++;

}

return n*flag;

}

【考点分析】本题考查:字符串转整数算法。

【解题思路】if()语句的作用是判断该字符串应当为正数还是负数,while()循环的作用是将字符串转成相应的整数。注意:*p是一个字符(如'9'、'4'),并不是一个数,要将其转成相应的数字需令其减去′0′ (不是′\0′),即*p-′0′就得到*p这个字符的相应数字,如′0′-′0′=0、′8′-′0′=8等。必须在程序的前面加#include,函数atol()的作用是将字符串p转成长整型数,它是一个库函数。

【解题宝典】要实现字符串转整数操作,而且不允许使用相应的字符串函数,因此我们需要通过字符减去′0′来实现,即*p-′0′就得到*p这个字符的相应数字。

掌握以下语句:

while(*p!=′\0′)

{n=n*10+*p-′0′;

p++;

}

43

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

【考点分析】本题考查:for循环语句;如何表示N×N矩阵中各个元素。

【解题思路】填空1:因为是N×N的矩阵,所以行列数是相同的。第一个for循环用来循环行,因此填入一个循环界限N。

填空2:此行语句将移出矩阵的元素暂存,移出矩阵的元素的列下标为N-1,因此填入N-1。

填空3:此行语句将移出矩阵的元素放入最左边,也就是第一列,第一列元素的列下标为0,因此填入0。

【参考答案】(1)s=s +(double)(n+1)/n;(2)return t;

【考点分析】本题考查:变量数据类型,根据题目要求需要进行强制转换;return语句。

【解题思路】(1)在C语言中,整数除以整数得出的结果也是整数,所以此处要转换数据类型。(2)观察while循环,假如返回值是变量s的话,那么返回的是大于q的值,题中所要返回的是小于q的值,所以应该返回变量t。

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

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

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

下载本文档需要支付 7 元

支付方式:

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

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