2021年福建省泉州市全国计算机等级考试C语言程序设计_第1页
2021年福建省泉州市全国计算机等级考试C语言程序设计_第2页
2021年福建省泉州市全国计算机等级考试C语言程序设计_第3页
2021年福建省泉州市全国计算机等级考试C语言程序设计_第4页
2021年福建省泉州市全国计算机等级考试C语言程序设计_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2021年福建省泉州市全国计算机等级考试C语言程序设计学校:________班级:________姓名:________考号:________

一、单选题(20题)1.C语言中标准库函数fputs(str,fp)的功能是()。

A.从str指向的文件中读一个字符串存入fp指向的内存

B.把str所指的字符串输出到fp所指的文件中

C.从fp指向的文件中读一个字符串存入str指向的内存

D.把fp指向的内存中的一个字符串输出到str指向的文件

2.下面程序的运行结果是()#include<stdio.h>#include<string.h>main(){char*a="AbcdEf",*b="aBcD"a++;b++;printf("%d\n",strcmp(a,b));}

A.0B.负数C.正数D.无确定值

3.下列写法正确的是()。

A.main(){inti=3,j;j=5}

B.main(){inti=3;

C.main()

D.main(){;}

4.请问对一个排好序的数组进行查找,时间复杂度为()

A.O(n)B.O(lgn)C.O(nlgn)D.O(1)

5.如有inta=11;则表达式(a++*1/3)的值是()。

A.0B.3C.4D.12

6.判定一个顺序栈st(最多元素为MaxSize)为满的条件是()。A.st->top!B.st->top!C.top==-1D.top==MaxSize

7.用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时()。

A.仅修改队头指针B.仅修改队尾指针C.队头、队尾指针都要修改D.队头,队尾指针都可能要修改

8.若变量均已正确定义并赋值,以下合法的C语言赋值语句是()。

A.x=y==5;B.X=n%2.5:C.x+n=i;D.x=5=4+1:

9.在一个长度为n(n>1)的单链表上,设有头和尾两个指针,执行()操作与链表的长度有关。

A.删除单链表中的第一个元素

B.删除单链表中的最后一个元素

C.在单链表第一个元素前插入一个新元素

D.在单链表最后一个元素后插入一个新元素

10.有以下程序段intn=0,p;do{scanf(“%d”,&p);n++;}while(p!=12345&&n<3);此处do-while循环的结束条件是

A.P的值不等于12345并且n的值小于3

B.P的值等于12345并且n的值大于等于3

C.P的值不等于12345或者n的值小于3

D.P的值等于12345或者n的值大于等于3

11.

12.以下选项中是非转义字符的是()。

A.‘\d’B.‘\t’C.‘\b’D.‘\r’

13.下列程序段的输出结果是()。chara=9,b=020;prihtf("%o\n",~a&b<<1);

A.100000B.8C.40D.77

14.若有定义“intx[10],*pt=x;”,则对x数组元素的引用正确的是()。

A.pt+3B.*&x[10]C.*(pt+10)D.*(x+3)

15.下面哪种排序的平均比较次数最少()

A.插入排序B.选择排序C.堆排序D.快速排序

16.以下叙述中错误的是()。

A.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令

B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件

C.用C语言编写的程序称为源程序,它以ASCII形式存放在一个文本文件中

D.C语言源程序经编译后生成扩展名为.obj的目标文件

17.采用邻接表存储的图的深度优先遍历算法类似于二叉树的()。

A.先序遍历B.中序遍历C.后序遍历D.按层遍历

18.以下不属于C语言整数的是()。

A.12fB.25uC.-32D.+20L

19.下列选项中非法的字符常量是()。

A.'\t'B.'\039'C.','D.'\n'

20.软件生命周期是指()。

A.软件的定义和开发阶段

B.软件的需求分析、设计与实现阶段

C.软件的开发阶段

D.软件产品从提出、实现、使用维护到停止使用退役的过程

二、2.填空题(20题)21.若有定义:doubleW[10],则W数组元素下标的上限为【】,下限为【】。

22.设有下列宏定义:

#defineA2

#defineB(A+3)

则执行赋值语句"k=B*20;"(k为int型变量)后,k的值是______。

23.执行以下程序后,输出“#”的个数是【】。

#include<stdio.h>

main()

{inti,j;

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

for(j=2;j<=i;j++)putchar('#');

}

24.以下程序的输出结果是()。main(){char*p[]={"ABC","DEF","GHI","JKL"};inti;for(i=3;i>=0;i--,i--)printf("%c",*p[i]);}

25.本程序用改进冒泡法对数组a[n]的元素从小到大排序,请在程序空白处填空。

voidbubble(inta[],intn)

{intj,k,jmax,temp;

jmax=【】;

do{

k=0;

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

if(a[j]>a[j+1])

{temp=a[j];a[j]=a[j+1];a[j+1]=temp;k=【】;

jmax=k;

}while(jmax>0);}

26.以下程序段的输出结果是【】。

inti=9;

printf("%o\n",i);

27.以下程序调用函数swap_p将指针s和t所指单元(a和b)中的内容交换,请填空。

main()

{inta=10,b=20,*s,*t;

s=&a;t=&b;

swap_p(【】);

printf("%d%d,a,b");}

swap_p(int**ss,int**tt)

{intterm;

term=**ss;

**ss=**tt;

**tt=term;}

28.语句:x++;++x;x=1+x;执行后都使变量x中的值增1,请写出一条同一功能的赋值语句______。

29.在计算机领域中,通常用英文单词“Byte'’表示【】。

30.下列程序的运行结果是______。

#definePOW(r)(r)*?

main()

{intx=3,y=2,t;

t=POW(x+y);

printf("%d\n",t);

}

31.若采用直接插入法对字母序列(W,S,E,L,X,G,I)进行排序,使字母按升序排列,那么第一次排序的结果为【】。

32.在长度为n的有序线性表中进行二分查找。最坏的情况下,需要的比较次数为【】。

33.下列程序的功能是将字符串s中所有的字符c删除。请填空。

#include<stdio.h>

main()

{chars[80];

inti,j;

gets(s);

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

if(s[i]!='c')

s[j]='\0';

puts(s);

}

34.下列程序的输出结果是______。

longfun5(intn)

{longs;

if((n==1)‖(n==2))

s=2;

else

s=n+fun5(n-1);

return(s);

}

main()

{longx;

x=fun5(4);

printf("%1d\n",x);}

35.下列程序的运行结果为【】。

main()

{inta=5,b=5,y,z;

y=b-->++a?++b:a;

z=++a>b?a:y;

printf("%d,%d,%d,%d",a,b,y,z);

}

36.软件的【】设计又称为总体结构设计,其主要任务是建立软件系统的总体结构。

37.在关系运算中,【】运算是在给定关系的某些域上进行的运算。

38.在数据库理论中,数据物理结构的改变,如存储设备的更换、物理存储的更换、存取方式改变等都不影响数据库的逻辑结构,从而不引起应用程序的变化,称为______。

39.请用位运算实现下述目标(设16位二进制数的最低位为零位):

(1)输出无符号正整数m的第i个二进制位的数值。

(2)将m的第i个二进制位置1,其余的位不变,然后输出m。

#include"stdio.h"

【】

main()

{

unsignedk,i,m=0;

scanf("%d%d",&m,&i);

k=【】;

printf("%d\n",k);

k=pow(2,i);

m=【】;

printf("%d\n",m);

}

40.下列程序中的数组a包括10个整数元素,分别将前项和后项之和存入数组b,并按每行4个元素输出数组b。请填空。

#include<stdio.h>

main()

{inta[10],b[10],i;

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

scanf("%d",&a[i]);

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

______;

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

{if(i%4=0)printf("\n");

printf("%3d",b[i]);

}

}

三、1.选择题(20题)41.执行以下程序段后,m的值为______。inta[2][3]={{1,2,3},{4,5,6}};intm,*p;p=&a[0][0];m=(*p)*(*(p+2))*(*(p+4));

A.15B.14C.13D.12

42.下列关于线性链表的描述中正确的是()。

A.存储空间不一定连续,且各元素的存储顺序是任意的

B.存储空间不一定连续,且前件元素一定存储在后件元素的前面

C.存储空间必须连续,且各前件元素一定存储在后件元素的前面

D.存储空间必须连续,且各元素的存储顺序是任意的

43.下列叙述中正确的是______。

A.程序设计就是编制程序

B.程序测试必须由程序员自己去做

C.程序经调试改错后还应进行再测试

D.程序经调度改错后不必进行再测试

44.设已包含头文件<string.h>,下列程序段的运行结果是()。chars1[]={"ACDEF"};chars2[]="ABC";strcpy(s1,s2);printf("%d",strlen(s1));

A.3B.4C.6D.5

45.若变量a,b已正确定义,且b已正确赋值,则合法的语句是()。

A.b=double(b);B.++b;C.a=a++=5;D.a=double(b);

46.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做

A.软件投机B.软件危机C.软件工程D.软件产生

47.若有以下定义,则对a数组元素地址的正确引用是()。

inta[5],*p=a;A.A.p5B.*a1C.&a1D.&a[0]

48.软件工程的结构化生命周期方法,通常是将软件生命周期划分为计划、开发和运行3个时期,下列选项中的______工作应属于软件开发期的内容。

①需求分析

②可行性研究

③总体设计

④问题定义

A.①和②B.①和③C.①、②和④D.全部

49.以下选项中可作为C语言合法常量的是()。

A.-80B.-80C.-80.0D.-80.0e

50.以下叙述中正确的是A.A.C程序中的注释只能出现在程序的开始位置和语句的后面

B.C程序书写格式严格,要求一行内只能写一个语句

C.C程序书写格式自由,一个语句可以写在多行上

D.用C语言编写的程序只能放在一个程序文件中

51.下列叙述中正确的是A.线性表是线性结构B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是线性结构

52.以下合法的赋值语句是______。

A.X=Y=100B.D-;C.X+Y;D.C=int(A+B)

53.若有代数式

(其中P仅代表自然对数的底数,不是变量),则下列能够正确表示该代数式的C语言表达式是()。

A.sqrt(abs(n^x+e^x))

B.sqrt(fabs(pow(n,x)+pow(x,e)))

C.sqrt(fabs(pow(n,x)+exp(x)))

D.sqrt(fabs(pow(x,n)+exp(x)))

54.有以下程序段:main(){inta=5,*b,**c;c=&b;b=&a;……}程序在执行了“c=&b;b=&a;”语句后,表达式“**c”的值是()。

A.变量a的地址B.变量b中的值C.变量a中的值D.变量b的地址

55.若有语句:char*line[5];以下叙述中正确的是()。

A.定义line是一个数组,每个数组元素是一个基类型为char的指针变量

B.定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组

C.定义line是一个指针数组,语句中的.号称为求地址运算符

D.定义line是一个指向字符型函数的指针

56.以下不是面向对象思想中的主要特征的是

A.多态B.继承C.封装D.垃圾回收

57.分析下列程序:#include<stdio.h>main(){int*p1,*p2,*p;inta=6,b=9;p1=&a;p2=&b;if(a<b){p=p1;p1=p2;p2=p;}printf("%d,%d",*p1,*p2);printf("%d,%d",a,b);}程序的输出结果为()。

A.9,66,9B.6,99,6C.6,96,9D.9,69,6

58.有以下程序

intf(intn)

{if(n==1)return1;

elsereturnf(n-1)+1;}

main()

{inti,j=0;

for(i=1;i<3;i++)j+=f(i);

printf("%d\n",j);}

程序运行后的输出结果是

A.4B.3C.2D.1

59.有以下程序:main(){inti=1,j=2,k=3;if(i++==l&&(++j==3||k++==3))printf("%d%d%d\n",i,j,k):}程序运行后的输出结果是()。

A.123B.234C.223D.233

60.有如下说明inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是()

A.*p+9B.*(p+8)C.*p+=9D.p+8

四、选择题(20题)61.一名教师可讲授多门课程,一门课程可由多名教师讲授。则实体教师和课程间的联系是()。

A.1:l联系B.1:m联系C.m:l联系D.m:n联系

62.对如下二叉树进行后序遍历的结果为()。

A.ABCDEFB.DBEAFCC.ABDECFD.DEBFCA

63.

64.在面向对象方法中,不属于“对象”基本特点的是A.一致性B.分类性C.多态性D.标识唯一性

65.

66.有以下程序:

程序运行后的输出结果是()。

A.7,4.2,B.8,7,5,2,C.9,7,6,4,D.8,5,4,2,

67.有以下程序

68.有以下程序

prt(int*m,intn)

{

inti;

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

m[i]++;

}

main()

{

inta[]={1,2,3,4,5},i;

prt(a,5);

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

printf("%d,",a[i]);

}

程序运行后的输出结果是A.A.1,2,3,4,5,

B.3,4,5,6,7,

C.2,3,4,5,6,

D.2,3,4,5,1,

69.

则以下选项中错误的表达式是()。

A.

B.

C.

D.

70.排序的一个重要目的是为了对已排序数据进行

A.合并B.打印输出C.查找D.分类

71.

72.有以下程序:

程序运行后的输出结果是()。

A.02356B.0235C.235D.2356

73.若有以下程序:inta=1,b=2:a=a^b:b=b^a:则执行以上语句后a和b的值分别是()。

A.a=1,b=2B.a=3,b=lC.a=3,b=2D.a=2.b=1

74.

有以下程序:

fun(intx)

{intP;

if(x==0||x==l)return(3);

p=x-fun(x-2);

returnp;

}

main

{printf("%d\n",fun(7));}

程序执行后的输出结果是()。

A.7B.3C.2D.0

75.现有定义inta;doubleb;floatc;chark;,则表达式a/b+C—k值的类型为:()。

A.intB.doubleC.floatD.char

76.有以下程序:

#include<stdio.h>

main()

{inta,b,k,m,*pl,*p2;

k=1,m=8;

p1=&k,p2=&m;

a=/*pl-m;b=*p1+*p2+6;

printf("%d",a);printf("%d\n",b);

}

编译时编译器提示错误信息,你认为出错的语句是()。

A.a=/*pl-m;

B.b=*p1+*p2+6;

C.k=1,m=8;

D.pl=&k,p2-&m;

77.设文件指针fp已定义,执行语句fp=fopen(”61e”,”W”);后,以下针对文本文件file操作叙述的选项中正确的是()。

A.只能写不能读B.写操作结束后可以从头开始读C.可以在原有内容后追加写D.可以随意读和写

78.有以下程序:

程序运行后的输出结果是()。

A.b,B"b,AB.b,B,B,AC.a,B,B,aD.a,B,a,B

79.以下能正确定义一维数组的选项是A.intnum[];

B.#defineN100intnum[N];

C.intnum[0..100];

D.intN=100;intnum[N];

80.

五、程序改错题(1题)81.下列给定程序的功能是:读入一个整数n(2<;=n<;=5000),打印它的所有为素数的因子。例如,若输入整数1234,则应输出2,617。请修改程序中的错误,使程序能得出正确的结果。注意:不要改动main()函数,不能增选或删行,也不能更改程序的结构。试题程序:

六、程序设计题(1题)82.规定输入的字符串中只包含字母和。号。请编写函数fun,其功能是:将字符串尾部的。号全部删除,前面和中间的*号不动。

参考答案

1.B函数fputs(str,fp)的功能是把str所指的字符串输出到fp所指的文件中。故本题答案为B选项。

2.C

3.D解析:本题考查语句的基本构成。选项A)中j=5后面少了一个分号:选项B)中少了“}”;选项C)不是一个完整的函数定义格式,一个完整的函数定义格式还包括一对花括号:选项D)正确,是一个空语句。

4.B

5.B

6.D

7.D

8.AB选项中运算符“%”的运算对象为整数。C选项中不能将变量赋给表达式“x+n”。D选项中不能将表达式“4+1”赋给常量5。故本题答案为A选项。

9.B

10.D解析:本题考查的知识点是do-while循环结构循环执行条件的判断.使用do-while语句必须注意以下几点:

先执行语句,后判断表达式。所以,无论一开始表达式的值为“真”还是“假”,循环体中的语句至少执行一次,这一点与while不同,

如果do-while语句循环体部分是由多个语句组成,则必须用花括号括起来,使其形成复合语句。

C语言中的do—while语句是在表达式“真”时重复执行循环体。

在本题中,循环执行判断条件为while后面括号里的表达式即p!=12345&&n<3(意思为p不等于12345且n小于3)是否为“真”,由此可得循环结束的条件为:p大于12345或者p小于12345又或者n大于等于3。选项A的意思是:p的值不等于12345并且n的小于3和while后面括号里的表达式等价是循环执行的条件而不是循环结束的条件,所以选项A不正确;选项B的意思是:p的值等于12345并且n的值大于3,不是循环结束的条件一个子集,所以选项B不正确;选项C的意思是:p的值不等于12345或者n的值小于3前一半是结束条件的子集,后一部分不是结束条件,所以选项C不正确;选项D描述的意思是:p的值等于12345或者你的大于等于3是结束条件的子集,所以选项D满足题意。所以4个选项中D正确。

11.C

12.AC语言中,转义字符又称反斜线字符,这些字符常量总是以一个反斜线开头后加一个特定的字符。题干中,‘\\t’表示横向跳若干格,‘\\b’表示退格符,‘\\r’表示回车符,选项B、C、D正确,选项A错误。故本题答案为A选项。

13.C解析:将变量a按位求反,再与b按位与,最后左移1位。9的二进制表示为00001001,020的二进制表示为00010000。a按位求反为11110110,再与b按位与结果为00010000,左移1位结果为00100000。按八进制输出为040。

14.D选项A中,“pt+3”使指针变量Pt移动3个单元,指向第4个元素,不能正确引用。运算符“*”与“&”放在一起,其作用相互抵消,且下标10超出了数组下标范围,所以B选项错误。“*(pt+i)”表示引用指针pt所指元素后的第i个元素,引用数组第11个元素,C选项错误。故本题答案为D选项。

15.D

16.AC语言中的非执行语句不会被编译,不会被转换成二进制的机器指令,所以A选项错误。由C语言构成的指令序列称为C语言源程序,C语言源程序经过C语言编译程序编译之后,生成一个扩展名为.obj的二进制文件(称为目标文件);最后要由“连接程序”把此目标文件与C语言提供的各种库函数连接起来生成一个扩展名为.exe的可执行文件。故本题答案为A选项。

17.A

18.AC语言中整型常量,从表示形式来看,有十进制、八进制或十六进制;从符号位来看,有有符号整数和无符号整数两类。选项A的“12f”是float类型的实数,不是整数;选项B的“25u”属于无符号整数;选项C的“-32”是十进制形式的有符号整数;选项D的“+20L”是十进制形式的长整数。故本题答案为A选项。

19.B水平制表符中,'\t'表示的是横向跳若干格;选项B中,'\039'错误,'\039'是八进制形式表的字符,最大数为7,但其中出现'9',','是字符逗号;选项D中,'\n'表示的是换行。

20.D通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期。选项A、B、C选项均为生命周期的一部分。故选D选项。

21.90

22.100100解析:本题考查带参数的宏定义及相关运算。运算过程为:k=B*20=(A+3)*20=(2+3)*20=100。

23.66解析:本题考察的是一个嵌套的循环,当满足j<=i时,输出一个“#”号,符合条件的有i=2,j=2;i=3,j=2;i=3,j=3;i=4,j=2;i=4,j=3;i=4,j=4,共输出6个“#”。

24.JD

25.n-1jn-1\r\nj解析:此题采用了do…while循环内嵌for循环的双层循环结构来实现了数组元素的排序。数组元素通过首地址和数组下标的方式来引用的。

26.1111解析:本题考核的知识点是printf()函数的输出格式。本题中定义了一个整型变量i并赋初值为9,然后要求以八进制输出i的值,9的八进制数的表示为11。

27.&s&t&s,&t解析:指针做函数参数时,形参和实参指向同一个数据,所以函数中对形参所指向的数据的改变也能影响到实参。本题中函数swap_p的形参为指向指针的指针,即双重指针,原理跟普通的指针是一样的。注意:通过指针来引用一个存储单元。

28.x+=1x+=1解析:本题考查“++”,“--”运算符。“++”、“--”只能作用于变量,不能用于表达式或常量;前缀形式是在使用变量之前先将其值增1或减1,后缀形式是先使用变量原来的值,使用完后再使其增1或减1。

29.字节字节

30.解析:本题考查带参数的宏的定义及相关运算。运算过程为:t=POW(x+y)=(2+3)*(2+3)=25。

31.SWELXGI

32.log2n

33.S[j++]=s[i]S[j++]=s[i]解析:循环开始后如果数组s中储存值与字符c相同,则i++直接跳过当前值;如果不相同,则将当前值赋予数组指定位置,并通过j++将下标加1,指向下一元素要存储的位置。

34.考查ifelse语句,n=4不满足条件,所以fun5(4)=4+fun5(3),n==3也不满足条件,fun5(3)=3+fun5(2),n==2满足条件fun5(2)=2,故x=4+3+2=9。\r\n\r\n

35.7467

36.概要概要

37.投影投影解析:在关系运算中,投影运算是在给定关系的某些域上进行的运算。

38.物理独立性物理独立性解析:数据的物理结构改变,不影响数据库的逻辑结构,从而不引起应用程序的变化,这种性质叫做物理独立性。

39.#include"math.h"m>>i&1m|k

40.b[i]=a[i]+a[i+1]b[i]=a[i]+a[i+1]解析:将数组a中元素a[i]与a[j+1]值相加后的值赋予数组b中元素b[i],即可实现将一个数组的前项和后项之和存入另一数组。

41.A

42.A解析:线性表的链式存储结构中的结点空间是动态生成的,它们在内存中的地址可能是连续的,也可能是不连续的。

43.C解析:软件测试包括需求分析、结构功能模块设计、编制程序等阶段。程序的测试可以由专门的测试人员来完成。程序经调试改错后还应进行再测试。

44.A解析:头文件<string.h>是字符串处理函数对应的头文件,要想调用C语言的库函数时,都要在程序中嵌入该函数对应的头文件,否则无法使用库函数。

strcpy(s1,s2)把s2中的字符串复制到s1中,所以结果就为s2的长度。

45.B解析:要解答此题只要知道两个知识点:①在C语言中规定进行强制类型转换的格式是:(double)变量名;②在C语言中不允许给表达式赋值。

46.B解析:软件工程概念的出现源自软件危机。所谓软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。总之,可以将软件危机归结为成本、质量、生产率等问题。

47.D本题考查如何引用数组元素的地址。选项A)中,p5引用的是af51的地址,而数组a只有5个元素,即a[0]、a[1]、a[2]、a[3]、a[4],所以引用错误;选项B)中,*a1指的是将数组a的第一个元素加1;选项C)中,这种引用方式错误;选项D)中,&a[0]引用的是数组的首地址。

48.B

49.A

50.C

51.A根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。如果一个非空的数据结构满足下列两个条件:1,有且只有一根节结点,2,每一个结点最多有一个前件,也最多有一个后件,则称该数据结构为线性结构,又称线性表。所以线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。

52.B解析:本题中的答案A与D都缺少“;”,而答案C中,表达式是不能独立成为语句的,答案B使用了C语言的自减运算符它就相当于D=D-1,所以答案B为一赋值语句。

53.C解析:n和e的x幂次方,要分别调用C语言的数学库函数doublepow(n,x)和doubleexp(x),因为这两个函数的返回值都为double型,对两者的和计算绝对值,调用库函数doublefabs(pow(n,x)+exp(x)),求出和的绝对值,再调用开平方函数doublesqrt(fabs(pow(n,x)+exp(x))),这样计算出的结果就是题干中表达式的值。

54.C解析:主函数中定义了一个整型变量a,一个整型指针变量b和一个二级指针变量c,并让c指向指针变量b,让指针b指向整形变量a,所以**c为变量a的值,所以,4个选项中选项C符合题意。

55.A解析:由于运算符[]优先级比*高,所以line是一个数组,每个数组元素是一个基类型为char的指针变量。

56.D解析:面向对象思想中的三个主要特征是:封装性、继承性和多态性。

57.A解析:通过p1=&a,p2=&b分别将a、b的地址赋给指针p1、p2,接着执行if语句,发现a<b成立,则通过交换p1、p2的值,即交换a、b所在存储单元的地址,但是a、b的值并没有发生变化。

58.B解析:在main函数中,对f(1)和f(2)的值进行了累加。

f(1)=1

f(2)=f(1)+1=2

最后,j的值为1+2=3

59.D解析:本题的考点是关于C语言的逻辑表达式的计算规则。对于逻辑表达式“i++==1&&(++j==3||k++==3)”,首先判断“i++==1”,由于i初值为1,“i++==1”为真,同时i加1值为2。由于第一项为真,对于“&&”运算符,结果取决于后一项“(++j==3||k++==3)”。而逻辑表达式“(++j==3||k++==3)”计算时,首先判断“++j==3”,由于j初值为2,++j后j值为3,“++j==3”为真,对于“||”运算符不需要判断后一项表达式的结果就可以断定此逻辑表达式结果为真,因此“k++==3”并没有进行判断,k++也未执行,k仍是初值3,输出结果应该是233。正确选项是D。

60.B解析:在C语言的数组元素的引用方法,我们在前面已经讲过了,比如数组元素a[0],可以用表达式*(p+0),即*p来引用,对于数组元素a[1],可以用表达式*(p+1)来引用,在这里,p+1的值就是数组元素a[1]的地址,对此地址使用“间接访问运算符”:*(p+1)就代表存储单元a[1],注意:一对圆括号不可少。同样,对于数组元素a[2],则可以用表达式。(p+2)来引用…,对于数组元素a[9],可以用表达式,(p+9)来引用。因此,当指针变量p指向a数组的起始地址时,若0≤i<10,则数组元素a[i]可以用*(p+i)来表示。

61.D因为一名教师可讲授多门课程,而一门课程又能由多名教师讲授,所以教师和课程之间是多对多的关系,可以表示为m:n,选择D)。

62.D解析:后序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,道先遍历左子树,然后遍历右子树,最后访问根结点:并且遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。

63.B

64.A对象具有如下特性:标识唯一性、分类性、多态性、封装性、模块独立性。

65.C

66.DCou血ue的作用是跳出循环体中剩余的语句而进行下一次循环。第一次循环x的值为8,循环体中if条件成立,打印x的值8后将x减1,再执行continue语句,跳出本次循环。第二次判断循环条件时,x的值变为6,不满足循环体内if条件,执行打印一一x的操作,即打印5后跳出循环。第三次判断循环条件时x的值为4,满足循环体中if条件,执行打印x一一的操作,即打印4,后将x值减一,执行continue语句,跳出本次循环。第四次判断循环条件时x的为2,满足循环体中if条件,打印x一一,即打印2后将x减一,执行continue语句,跳出本次循环。在进行for条件表达式中第三个表达式x一一的操作后x的值为0,不满足条件结束循环。所以打印结果为8,5,4,2,。

67.A外层循环i,值分别为l23,内层循环j分别为l23、23和3,所以答案为A)。

68.C用数组名作为函数实参时,不是把数组的值传递给形参,而是把实参数组的起始地址传递给形参数组,这样两个数组就共同占用同一段内存单元。本题通过“prt(a,5);”将数组a的首地址传递给了指针变量m,使指针变量m指向数组a的首地址,那么,对指针变量所指向的存储单元的内容的改变就是对数组a中的元素的改变。题中函数prt的作用是将指针变量m所指向的存储单元中的元素值各加上1,故数组a中的值也随之变化,所以。输出的数组元素的值为2,3,4,5,6,。

69.C选项c)中int(f)不正确,因为强制类型转换表示为:(类型名)(表达式),正确表示为(int)f.

70.C排序是计算机程序中一种重要的操作,它的功能是将任意一个数据元素序列排成有序的数据元素序列;而查找是要在数据元素序列中找到一个与之相符的结果。不难看出,如果数据元素序列有序,则查找起来就方便很多。因此,排序的一个重要目的是为了对已排序数据进行查找。

71.D

72.Ck的值为5,逐个对caBe语句进行匹配,均不匹配,执行default下的语句n=0;k一一。再执行case2:ca804:后面的语句n+=2;k一一;。执行break语句跳出switch判断,打印n的值,即2。经过第一次循环后,k的值为3,然后进行k>0&&ll<5条件判断为真。第二次执行循环体,执行case3:后面的语句n+=1;k一一;。再执行break语句跳出循环,此时打印n的值3,此时k的值为2。第三次执行循环体k的值为2,满足条件,执行case2:case4:后面的语句n+=2;k一一;。执行break语句跳出循环体。打印n的值5。此时n不满足条件k>0&&n<5,所以结束循环。整个程序的打印结果为235。

73.B本题考查按位异或的用法。按位异或运算的规则是:两个运算数的相应二进制位相同,则结果为0,相异则结果为1。b=2的二进制为00000010,a=1的二进制为00000001,a=a^b=00000011,转化为十进制后为3,b=b^a=00000010-00000011=00000001,即1。

74.C

\n在函数funlintx)中,有个if语句判断,如果参数x等于0或1时,返回值,否则进入下面的p=x-fun(x-2)递归函数。当在主函势中调用fun(7)时,其过程为:“fun(7)=7-fun(5)=7-(5一fun(3))=7-(5-(3-fun(1)))=7-(5-(3—3))=7-5=2”,所以最后的输出结果为2。

\n

75.B双目运算中两边运算量类型转换规律:

运算数1\t\t\t\r\n\t\t\t\t\t运算数2\t\t\t\t\r\n\t\t\t\t\t转换结果类型\t\t\t\t\r\n\t\t\t\t\t短整型\t\t\t\t\r\n\t\t\t\t\t长整型\t\t\t\t\r\n\t\t\t\t\t短整型一>长整型\t\t\t\t\r\n\t\t\t\t\t整型\t\t\t\t\r\n\t\t\t\t\t长整型\t\t\t\t\r\n\t\t\t\t\t整型一>长整型\t\t\t\t\r\n\t\t\t\t\t字符型\t\t\t\t\r\n\t\t\t\t\t整型\t\t\t\t\r\n\t\t\t\t\t字符型一>整型\t\t\t\t\r\n\t\t\t\t\t有符号整型\t\t\t\t\r\n\t\t\t\t\t无符号整型\t\t\t\t\r\n\t\t\t\t\t有符号整型一>无符号整型\t\t\t\t\r\n\t\t\t\t\t整型\t\t\t\t\r\n\t\t\t\t\t浮点型\t\t\t\t\r\n\t\t\t\t\t整型一>浮点型\t\t\t\t\r\n\t在a/b的时候,a,b的类型不一致,根据类型转换规则,把整型转换成double类型,之后的加、减类似。转化规则为char,short一>int->unsigned->long->double←float。

76.A\n本题考查指针,pl=&k表示P指向k的地址,则*p=k,依次类推,在对指针进行赋值时没有错误。a=/*p+m赋值,在c语言中'/*'表示的注释,所以答案选择A。

\n

77.A考查文件操作函数fopen的基础知识,以”W”方式打开文件,只能写不能读。选项A正确。

78.A本题重点考察函数的调用,首先要了解字母对应的ASCIl码。例如A为65,a为97。即字母+1劂可得到下一个字母。-其次是函数形参和实参的问题,运行过程如下:在fun(&b,a)中,}c=.a-,d=65。}c+l=V,d+1=66,prinff(”%c,%c,”,}C,d);输出b,B,因为指针c指向地址的值为b,此时b=}C=.b.;豳数返回执行ptud(。%C,%c、n”,b,8);输出b,A,因此A选项正确。

79.B解析:选项A定义数组时省略了长度,而C语言中规定,只有在定义并同时进行初始化时,数组的长度才可以省略,数组的长度为初始化时候的成员个数,故选项A错误;在C语言中规定,数组的长度必须是一个整数或整型常量表达式,故选项C不正确:定义时数组的长度不能使用变量表示,故选项D不正确,所以,4个选项中选项B符合题意。

80.D

81.(1)错误:Prime(intm);

正确:Prime(intm)

(2)错误:if!(m%j)

正确:if(!(m%j))

【解析】(1)第一个标识下面的“Prime(intm);”在程序中显然是一个函数,因此应将后面的分号去掉。

(2)第二个标识下面的for语句最简单的应用形式为:for(循环变量赋初值;循环条件;循环变量增值)语句。显然if语句后面缺少括号,因此,“if!(m%j)”改为“if(!(m%j))”。

本题主要考查标点符号、运算符、基本定义。

82.

voidfun(char*a){

while(*a!=’、0。)

a++:

a一一;/*指针a指向字符串的尾部*/while(}a==’*。)

a一一;/·指针a指向最后一个字母*/

*(a+1)=’、0’;/*在字符串最后加上结束标志符·/

【考点分析】

本题考查:删除字符串尾部*号;删除的主要思想是把不删除的字符保留起来。

【解题思路】

对于一个字符串要删除其尾部的*号,只需要在最后一个不是*号的字符后面加上结束符号‘、0’。具体操作为:首先找到字符串的结尾,然后从最后一个字符开始往前逐个判断是否为*号,直到找到非·号字符为止。最后在该字符后面加上结束符号’\0。2021年福建省泉州市全国计算机等级考试C语言程序设计学校:________班级:________姓名:________考号:________

一、单选题(20题)1.C语言中标准库函数fputs(str,fp)的功能是()。

A.从str指向的文件中读一个字符串存入fp指向的内存

B.把str所指的字符串输出到fp所指的文件中

C.从fp指向的文件中读一个字符串存入str指向的内存

D.把fp指向的内存中的一个字符串输出到str指向的文件

2.下面程序的运行结果是()#include<stdio.h>#include<string.h>main(){char*a="AbcdEf",*b="aBcD"a++;b++;printf("%d\n",strcmp(a,b));}

A.0B.负数C.正数D.无确定值

3.下列写法正确的是()。

A.main(){inti=3,j;j=5}

B.main(){inti=3;

C.main()

D.main(){;}

4.请问对一个排好序的数组进行查找,时间复杂度为()

A.O(n)B.O(lgn)C.O(nlgn)D.O(1)

5.如有inta=11;则表达式(a++*1/3)的值是()。

A.0B.3C.4D.12

6.判定一个顺序栈st(最多元素为MaxSize)为满的条件是()。A.st->top!B.st->top!C.top==-1D.top==MaxSize

7.用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时()。

A.仅修改队头指针B.仅修改队尾指针C.队头、队尾指针都要修改D.队头,队尾指针都可能要修改

8.若变量均已正确定义并赋值,以下合法的C语言赋值语句是()。

A.x=y==5;B.X=n%2.5:C.x+n=i;D.x=5=4+1:

9.在一个长度为n(n>1)的单链表上,设有头和尾两个指针,执行()操作与链表的长度有关。

A.删除单链表中的第一个元素

B.删除单链表中的最后一个元素

C.在单链表第一个元素前插入一个新元素

D.在单链表最后一个元素后插入一个新元素

10.有以下程序段intn=0,p;do{scanf(“%d”,&p);n++;}while(p!=12345&&n<3);此处do-while循环的结束条件是

A.P的值不等于12345并且n的值小于3

B.P的值等于12345并且n的值大于等于3

C.P的值不等于12345或者n的值小于3

D.P的值等于12345或者n的值大于等于3

11.

12.以下选项中是非转义字符的是()。

A.‘\d’B.‘\t’C.‘\b’D.‘\r’

13.下列程序段的输出结果是()。chara=9,b=020;prihtf("%o\n",~a&b<<1);

A.100000B.8C.40D.77

14.若有定义“intx[10],*pt=x;”,则对x数组元素的引用正确的是()。

A.pt+3B.*&x[10]C.*(pt+10)D.*(x+3)

15.下面哪种排序的平均比较次数最少()

A.插入排序B.选择排序C.堆排序D.快速排序

16.以下叙述中错误的是()。

A.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令

B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件

C.用C语言编写的程序称为源程序,它以ASCII形式存放在一个文本文件中

D.C语言源程序经编译后生成扩展名为.obj的目标文件

17.采用邻接表存储的图的深度优先遍历算法类似于二叉树的()。

A.先序遍历B.中序遍历C.后序遍历D.按层遍历

18.以下不属于C语言整数的是()。

A.12fB.25uC.-32D.+20L

19.下列选项中非法的字符常量是()。

A.'\t'B.'\039'C.','D.'\n'

20.软件生命周期是指()。

A.软件的定义和开发阶段

B.软件的需求分析、设计与实现阶段

C.软件的开发阶段

D.软件产品从提出、实现、使用维护到停止使用退役的过程

二、2.填空题(20题)21.若有定义:doubleW[10],则W数组元素下标的上限为【】,下限为【】。

22.设有下列宏定义:

#defineA2

#defineB(A+3)

则执行赋值语句"k=B*20;"(k为int型变量)后,k的值是______。

23.执行以下程序后,输出“#”的个数是【】。

#include<stdio.h>

main()

{inti,j;

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

for(j=2;j<=i;j++)putchar('#');

}

24.以下程序的输出结果是()。main(){char*p[]={"ABC","DEF","GHI","JKL"};inti;for(i=3;i>=0;i--,i--)printf("%c",*p[i]);}

25.本程序用改进冒泡法对数组a[n]的元素从小到大排序,请在程序空白处填空。

voidbubble(inta[],intn)

{intj,k,jmax,temp;

jmax=【】;

do{

k=0;

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

if(a[j]>a[j+1])

{temp=a[j];a[j]=a[j+1];a[j+1]=temp;k=【】;

jmax=k;

}while(jmax>0);}

26.以下程序段的输出结果是【】。

inti=9;

printf("%o\n",i);

27.以下程序调用函数swap_p将指针s和t所指单元(a和b)中的内容交换,请填空。

main()

{inta=10,b=20,*s,*t;

s=&a;t=&b;

swap_p(【】);

printf("%d%d,a,b");}

swap_p(int**ss,int**tt)

{intterm;

term=**ss;

**ss=**tt;

**tt=term;}

28.语句:x++;++x;x=1+x;执行后都使变量x中的值增1,请写出一条同一功能的赋值语句______。

29.在计算机领域中,通常用英文单词“Byte'’表示【】。

30.下列程序的运行结果是______。

#definePOW(r)(r)*?

main()

{intx=3,y=2,t;

t=POW(x+y);

printf("%d\n",t);

}

31.若采用直接插入法对字母序列(W,S,E,L,X,G,I)进行排序,使字母按升序排列,那么第一次排序的结果为【】。

32.在长度为n的有序线性表中进行二分查找。最坏的情况下,需要的比较次数为【】。

33.下列程序的功能是将字符串s中所有的字符c删除。请填空。

#include<stdio.h>

main()

{chars[80];

inti,j;

gets(s);

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

if(s[i]!='c')

s[j]='\0';

puts(s);

}

34.下列程序的输出结果是______。

longfun5(intn)

{longs;

if((n==1)‖(n==2))

s=2;

else

s=n+fun5(n-1);

return(s);

}

main()

{longx;

x=fun5(4);

printf("%1d\n",x);}

35.下列程序的运行结果为【】。

main()

{inta=5,b=5,y,z;

y=b-->++a?++b:a;

z=++a>b?a:y;

printf("%d,%d,%d,%d",a,b,y,z);

}

36.软件的【】设计又称为总体结构设计,其主要任务是建立软件系统的总体结构。

37.在关系运算中,【】运算是在给定关系的某些域上进行的运算。

38.在数据库理论中,数据物理结构的改变,如存储设备的更换、物理存储的更换、存取方式改变等都不影响数据库的逻辑结构,从而不引起应用程序的变化,称为______。

39.请用位运算实现下述目标(设16位二进制数的最低位为零位):

(1)输出无符号正整数m的第i个二进制位的数值。

(2)将m的第i个二进制位置1,其余的位不变,然后输出m。

#include"stdio.h"

【】

main()

{

unsignedk,i,m=0;

scanf("%d%d",&m,&i);

k=【】;

printf("%d\n",k);

k=pow(2,i);

m=【】;

printf("%d\n",m);

}

40.下列程序中的数组a包括10个整数元素,分别将前项和后项之和存入数组b,并按每行4个元素输出数组b。请填空。

#include<stdio.h>

main()

{inta[10],b[10],i;

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

scanf("%d",&a[i]);

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

______;

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

{if(i%4=0)printf("\n");

printf("%3d",b[i]);

}

}

三、1.选择题(20题)41.执行以下程序段后,m的值为______。inta[2][3]={{1,2,3},{4,5,6}};intm,*p;p=&a[0][0];m=(*p)*(*(p+2))*(*(p+4));

A.15B.14C.13D.12

42.下列关于线性链表的描述中正确的是()。

A.存储空间不一定连续,且各元素的存储顺序是任意的

B.存储空间不一定连续,且前件元素一定存储在后件元素的前面

C.存储空间必须连续,且各前件元素一定存储在后件元素的前面

D.存储空间必须连续,且各元素的存储顺序是任意的

43.下列叙述中正确的是______。

A.程序设计就是编制程序

B.程序测试必须由程序员自己去做

C.程序经调试改错后还应进行再测试

D.程序经调度改错后不必进行再测试

44.设已包含头文件<string.h>,下列程序段的运行结果是()。chars1[]={"ACDEF"};chars2[]="ABC";strcpy(s1,s2);printf("%d",strlen(s1));

A.3B.4C.6D.5

45.若变量a,b已正确定义,且b已正确赋值,则合法的语句是()。

A.b=double(b);B.++b;C.a=a++=5;D.a=double(b);

46.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做

A.软件投机B.软件危机C.软件工程D.软件产生

47.若有以下定义,则对a数组元素地址的正确引用是()。

inta[5],*p=a;A.A.p5B.*a1C.&a1D.&a[0]

48.软件工程的结构化生命周期方法,通常是将软件生命周期划分为计划、开发和运行3个时期,下列选项中的______工作应属于软件开发期的内容。

①需求分析

②可行性研究

③总体设计

④问题定义

A.①和②B.①和③C.①、②和④D.全部

49.以下选项中可作为C语言合法常量的是()。

A.-80B.-80C.-80.0D.-80.0e

50.以下叙述中正确的是A.A.C程序中的注释只能出现在程序的开始位置和语句的后面

B.C程序书写格式严格,要求一行内只能写一个语句

C.C程序书写格式自由,一个语句可以写在多行上

D.用C语言编写的程序只能放在一个程序文件中

51.下列叙述中正确的是A.线性表是线性结构B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是线性结构

52.以下合法的赋值语句是______。

A.X=Y=100B.D-;C.X+Y;D.C=int(A+B)

53.若有代数式

(其中P仅代表自然对数的底数,不是变量),则下列能够正确表示该代数式的C语言表达式是()。

A.sqrt(abs(n^x+e^x))

B.sqrt(fabs(pow(n,x)+pow(x,e)))

C.sqrt(fabs(pow(n,x)+exp(x)))

D.sqrt(fabs(pow(x,n)+exp(x)))

54.有以下程序段:main(){inta=5,*b,**c;c=&b;b=&a;……}程序在执行了“c=&b;b=&a;”语句后,表达式“**c”的值是()。

A.变量a的地址B.变量b中的值C.变量a中的值D.变量b的地址

55.若有语句:char*line[5];以下叙述中正确的是()。

A.定义line是一个数组,每个数组元素是一个基类型为char的指针变量

B.定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组

C.定义line是一个指针数组,语句中的.号称为求地址运算符

D.定义line是一个指向字符型函数的指针

56.以下不是面向对象思想中的主要特征的是

A.多态B.继承C.封装D.垃圾回收

57.分析下列程序:#include<stdio.h>main(){int*p1,*p2,*p;inta=6,b=9;p1=&a;p2=&b;if(a<b){p=p1;p1=p2;p2=p;}printf("%d,%d",*p1,*p2);printf("%d,%d",a,b);}程序的输出结果为()。

A.9,66,9B.6,99,6C.6,96,9D.9,69,6

58.有以下程序

intf(intn)

{if(n==1)return1;

elsereturnf(n-1)+1;}

main()

{inti,j=0;

for(i=1;i<3;i++)j+=f(i);

printf("%d\n",j);}

程序运行后的输出结果是

A.4B.3C.2D.1

59.有以下程序:main(){inti=1,j=2,k=3;if(i++==l&&(++j==3||k++==3))printf("%d%d%d\n",i,j,k):}程序运行后的输出结果是()。

A.123B.234C.223D.233

60.有如下说明inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是()

A.*p+9B.*(p+8)C.*p+=9D.p+8

四、选择题(20题)61.一名教师可讲授多门课程,一门课程可由多名教师讲授。则实体教师和课程间的联系是()。

A.1:l联系B.1:m联系C.m:l联系D.m:n联系

62.对如下二叉树进行后序遍历的结果为()。

A.ABCDEFB.DBEAFCC.ABDECFD.DEBFCA

63.

64.在面向对象方法中,不属于“对象”基本特点的是A.一致性B.分类性C.多态性D.标识唯一性

65.

66.有以下程序:

程序运行后的输出结果是()。

A.7,4.2,B.8,7,5,2,C.9,7,6,4,D.8,5,4,2,

67.有以下程序

68.有以下程序

prt(int*m,intn)

{

inti;

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

m[i]++;

}

main()

{

inta[]={1,2,3,4,5},i;

prt(a,5);

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

printf("%d,",a[i]);

}

程序运行后的输出结果是A.A.1,2,3,4,5,

B.3,4,5,6,7,

C.2,3,4,5,6,

D.2,3,4,5,1,

69.

则以下选项中错误的表达式是()。

A.

B.

C.

D.

70.排序的一个重要目的是为了对已排序数据进行

A.合并B.打印输出C.查找D.分类

71.

72.有以下程序:

程序运行后的输出结果是()。

A.02356B.0235C.235D.2356

73.若有以下程序:inta=1,b=2:a=a^b:b=b^a:则执行以上语句后a和b的值分别是()。

A.a=1,b=2B.a=3,b=lC.a=3,b=2D.a=2.b=1

74.

有以下程序:

fun(intx)

{intP;

if(x==0||x==l)return(3);

p=x-fun(x-2);

returnp;

}

main

{printf("%d\n",fun(7));}

程序执行后的输出结果是()。

A.7B.3C.2D.0

75.现有定义inta;doubleb;floatc;chark;,则表达式a/b+C—k值的类型为:()。

A.intB.doubleC.floatD.char

76.有以下程序:

#include<stdio.h>

main()

{inta,b,k,m,*pl,*p2;

k=1,m=8;

p1=&k,p2=&m;

a=/*pl-m;b=*p1+*p2+6;

printf("%d",a);printf("%d\n",b);

}

编译时编译器提示错误信息,你认为出错的语句是()。

A.a=/*pl-m;

B.b=*p1+*p2+6;

C.k=1,m=8;

D.pl=&k,p2-&m;

77.设文件指针fp已定义,执行语句fp=fopen(”61e”,”W”);后,以下针对文本文件file操作叙述的选项中正确的是()。

A.只能写不能读B.写操作结束后可以从头开始读C.可以在原有内容后追加写D.可以随意读和写

78.有以下程序:

程序运行后的输出结果是()。

A.b,B"b,AB.b,B,B,AC.a,B,B,aD.a,B,a,B

79.以下能正确定义一维数组的选项是A.intnum[];

B.#defineN100intnum[N];

C.intnum[0..100];

D.intN=100;intnum[N];

80.

五、程序改错题(1题)81.下列给定程序的功能是:读入一个整数n(2<;=n<;=5000),打印它的所有为素数的因子。例如,若输入整数1234,则应输出2,617。请修改程序中的错误,使程序能得出正确的结果。注意:不要改动main()函数,不能增选或删行,也不能更改程序的结构。试题程序:

六、程序设计题(1题)82.规定输入的字符串中只包含字母和。号。请编写函数fun,其功能是:将字符串尾部的。号全部删除,前面和中间的*号不动。

参考答案

1.B函数fputs(str,fp)的功能是把str所指的字符串输出到fp所指的文件中。故本题答案为B选项。

2.C

3.D解析:本题考查语句的基本构成。选项A)中j=5后面少了一个分号:选项B)中少了“}”;选项C)不是一个完整的函数定义格式,一个完整的函数定义格式还包括一对花括号:选项D)正确,是一个空语句。

4.B

5.B

6.D

7.D

8.AB选项中运算符“%”的运算对象为整数。C选项中不能将变量赋给表达式“x+n”。D选项中不能将表达式“4+1”赋给常量5。故本题答案为A选项。

9.B

10.D解析:本题考查的知识点是do-while循环结构循环执行条件的判断.使用do-while语句必须注意以下几点:

先执行语句,后判断表达式。所以,无论一开始表达式的值为“真”还是“假”,循环体中的语句至少执行一次,这一点与while不同,

如果do-while语句循环体部分是由多个语句组成,则必须用花括号括起来,使其形成复合语句。

C语言中的do—while语句是在表达式“真”时重复执行循环体。

在本题中,循环执行判断条件为while后面括号里的表达式即p!=12345&&n<3(意思为p不等于12345且n小于3)是否为“真”,由此可得循环结束的条件为:p大于12345或者p小于12345又或者n大于等于3。选项A的意思是:p的值不等于12345并且n的小于3和while后面括号里的表达式等价是循环执行的条件而不是循环结束的条件,所以选项A不正确;选项B的意思是:p的值等于12345并且n的值大于3,不是循环结束的条件一个子集,所以选项B不正确;选项C的意思是:p的值不等于12345或者n的值小于3前一半是结束条件的子集,后一部分不是结束条件,所以选项C不正确;选项D描述的意思是:p的值等于12345或者你的大于等于3是结束条件的子集,所以选项D满足题意。所以4个选项中D正确。

11.C

12.AC语言中,转义字符又称反斜线字符,这些字符常量总是以一个反斜线开头后加一个特定的字符。题干中,‘\\t’表示横向跳若干格,‘\\b’表示退格符,‘\\r’表示回车符,选项B、C、D正确,选项A错误。故本题答案为A选项。

13.C解析:将变量a按位求反,再与b按位与,最后左移1位。9的二进制表示为00001001,020的二进制表示为00010000。a按位求反为11110110,再与b按位与结果为00010000,左移1位结果为00100000。按八进制输出为040。

14.D选项A中,“pt+3”使指针变量Pt移动3个单元,指向第4个元素,不能正确引用。运算符“*”与“&”放在一起,其作用相互抵消,且下标10超出了数组下标范围,所以B选项错误。“*(pt+i)”表示引用指针pt所指元素后的第i个元素,引用数组第11个元素,C选项错误。故本题答案为D选项。

15.D

16.AC语言中的非执行语句不会被编译,不会被转换成二进制的机器指令,所以A选项错误。由C语言构成的指令序列称为C语言源程序,C语言源程序经过C语言编译程序编译之后,生成一个扩展名为.obj的二进制文件(称为目标文件);最后要由“连接程序”把此目标文件与C语言提供的各种库函数连接起来生成一个扩展名为.exe的可执行文件。故本题答案为A选项。

17.A

18.AC语言中整型常量,从表示形式来看,有十进制、八进制或十六进制;从符号位来看,有有符号整数和无符号整数两类。选项A的“12f”是float类型的实数,不是整数;选项B的“25u”属于无符号整数;选项C的“-32”是十进制形式的有符号整数;选项D的“+20L”是十进制形式的长整数。故本题答案为A选项。

19.B水平制表符中,'\t'表示的是横向跳若干格;选项B中,'\039'错误,'\039'是八进制形式表的字符,最大数为7,但其中出现'9',','是字符逗号;选项D中,'\n'表示的是换行。

20.D通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期。选项A、B、C选项均为生命周期的一部分。故选D选项。

21.90

22.100100解析:本题考查带参数的宏定义及相关运算。运算过程为:k=B*20=(A+3)*20=(2+3)*20=100。

23.66解析:本题考察的是一个嵌套的循环,当满足j<=i时,输出一个“#”号,符合条件的有i=2,j=2;i=3,j=2;i=3,j=3;i=4,j=2;i=4,j=3;i=4,j=4,共输出6个“#”。

24.JD

25.n-1jn-1\r\nj解析:此题采用了do…while循环内嵌for循环的双层循环结构来实现了数组元素的排序。数组元素通过首地址和数组下标的方式来引用的。

26.1111解析:本题考核的知识点是printf()函数的输出格式。本题中定义了一个整型变量i并赋初值为9,然后要求以八进制输出i的值,9的八进制数的表示为11。

27.&s&t&s,&t解析:指针做函数参数时,形参和实参指向同一个数据,所以函数中对形参所指向的数据的改变也能影响到实参。本题中函数swap_p的形参为指向指针的指针,即双重指针,原理跟普通的指针是一样的。注意:通过指针来引用一个存储单元。

28.x+=1x+=1解析:本题考查“++”,“--”运算符。“++”、“--”只能作用于变量,不能用于表达式或常量;前缀形式是在使用变量之前先将其值增1或减1,后缀形式是先使用变量原来的值,使用完后再使其增1或减1。

29.字节字节

30.解析:本题考查带参数的宏的定义及相关运算。运算过程为:t=POW(x+y)=(2+3)*(2+3)=25。

31.SWELXGI

32.log2n

33.S[j++]=s[i]S[j++]=s[i]解析:循环开始后如果数组s中储存值与字符c相同,则i++直接跳过当前值;如果不相同,则将当前值赋予数组指定位置,并通过j++将下标加1,指向下一元素要存储的位置。

34.考查ifelse语句,n=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论