2021年广东省汕头市全国计算机等级考试C语言程序设计预测试题(含答案)_第1页
2021年广东省汕头市全国计算机等级考试C语言程序设计预测试题(含答案)_第2页
2021年广东省汕头市全国计算机等级考试C语言程序设计预测试题(含答案)_第3页
2021年广东省汕头市全国计算机等级考试C语言程序设计预测试题(含答案)_第4页
2021年广东省汕头市全国计算机等级考试C语言程序设计预测试题(含答案)_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

2021年广东省汕头市全国计算机等级考试C语言程序设计预测试题(含答案)学校:________班级:________姓名:________考号:________

一、单选题(20题)1.下面说法正确的是()。A.A.一个C程序可以有多个主函数

B.一个C语言的函数中只允许有一对花括号

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

D.在对C程序进行编译时,可以发现注释行中的拼写错误

2.下面程序的运行结果是

#include<stdio.h>

voiddelch(char*s)

{inti,j;

char*a;

a=s;

for(i=0,j=0;a[i]!=′\n′;i++)

if(a[i]>=′0′&&a[i]<=′9′)

{s[j]=a[i];j++;}

s[j]=′\0′;}

main()

{char*item="a34bc";

delch(item);

printf("\n%s",item);}

A.abcB.34C.a34D.a34bc

3.有以下程序:#include〈stdio.h〉voidfun(int*s){staticintj=0;do{s[j]=s[j]+s[j+1];}while(++j<2);}main(){inti.a[10]={1,2,3,4,5};for(i=1;i<3;i++)fun(a);for(i=0;i<5;i++)pfintf(“%d”,a[i]);printf(“\n”);}程序运行后的输出结果是()。A.12345B.23445C.34756D.35745

4.结构化程序设计主要强调的是()。

A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序的易读性

5.有种数据结构叫跳跃列表(SkipList),它是一种基于并联的链表的随机化数据结构,其效率可比拟于二叉查找树(对于大于数操作需要O(logn)平均时间)。它是按层建造的。底层是一个普通的有序链表。每个更高层都充当下面列表的“快速跑道”,这里在层i中的元素按概率l/p出现在层i+1中。平均起来,每个元素都在p/(p-1)个列表中出现,而最高层的元素(通常是在跳跃列表前段的一个特殊的头元素)在O(logpn)个列表中出现。调节p的大小可以在内存消耗和时间消耗上进行折中。试分析在该数据结构中查找一个元素的平均时间复杂度。

A.O(logn)B.O(n)C.O(n*logn)D.以上都不正确

6.在关系数据库中,用来表示实体间联系的是()。

A.网状结构B.树状结构C.属性D.二维表

7.以下函数调用语句中含有实参个数为().func((exp1,exp2),(exp3,exp4,exp5));

A.1个B.2个C.4个D.5个

8.程序运行后的输出结果是()。A.10B.30C.0D.64

9.数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放的存储器内,该数组按行存放,元素A[5][8]的起始地址为()。

A.SA+141B.SA+180C.SA+222D.SA+225

10.下列程序的输出结果是()

main()

{inta,b,d=25;

a=d/10%9;

b=a&&(-1);

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

A.6,1B.2,1C.6,0D.2,0

11.

12.字符串"alibaba"的二进制哈夫曼编码有多少位()

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

13.设ch是char型变量,值为'A',则表达式ch=(ch>='A'&&ch<='Z')?ch+32:ch的值是()。

A.ZB.aC.zD.A

14.有以下程序:#include<stdio.h>main(){inta=10,b=11;if(++a==b++) printf(“T”);else printf(“F”);printf(“a=%d,b=%d\n”,a,b);}程序运行后的输出结果是()。

A.Fa=11,b=11B.Fa=10,b=12C.Ta=10,b=11D.Ta=11,b=12

15.以下叙述中正确的是

A.语句inta[8]={0};是合法的

B.语句inta[]={0};是不合法的,遗漏了数组的大小

C.语句chara[2]={"A","BII};是合法的,定义了一个包含两个字符的数组

D.语句chara[3];a="AB";是合法的,因为数组有三个字符空间的容量,可以保存两个字符

16.下列选项中,当X为大于1的奇数时,值为0的表达式是()。

A.x%2==0B.x/2C.x%2!=0D.x%2==1

17.下列选项中,不是一个算法的基本特征的是()。

A.完整性B.可行性C.有穷性D.拥有足够的情报

18.下面关于图的存储的叙述中,哪一个是正确的。________

A.用相邻矩阵法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关

B.用相邻矩阵法存储图,占用的存储空间数只与图中边数有关,而与结点个数无关

C.用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关

D.用邻接表法存储图,占用的存储空间数只与图中边数有关,而与结点个数无关

19.以下叙述中错误的是(

)。A.函数形参的值也可以传回给对应的实参

B.函数调用可以作为一个独立的语句存在

C.若函数有返回值,必须通过r;mm语句返回

D.C程序必须由一个或一个以上的函数组成

20.设有定义:charc[]=“Cc”;FILE*fp;且fp指向以“w”的方式成功打开的文件,若要将c中的两个字符写入文件,且每个字符占一行,则下面的选项中正确的是()。

A.fprintf(fp,“%c\n%c\n”,c[0],c[1]);

B.fprintf(fp,“%c\r\n%c\r\n”,c[0],c[1]);

C.fprintf(fp,“%c%c”,c[0],c[1]);

D.fprintf(fp,“%s\n”,c);

二、2.填空题(20题)21.数据结构分为逻辑结构与存储结构,线性链表属于【】。

22.以下程序运行后的输出结果是【】。

main()

{

intx=0210;

printf("%X\n",x);

}

23.数据库恢复是将数据库从______状态恢复到某一已知的正确状态。

24.执行下列语句段后,x的值是______。

int*p,x;

x=100;

p=&x;

x=*p+50;

25.数据库系统阶段的数据具有较高独立性,数据独立性包括物理独立性和【】两个含义。

26.下列程序的运行结果是【】。

#include<stdio.h>

main()

{unionEXAMPLE

{struct

{intx;inty;}in;

inta;

intb;

}e;

e.a=1;e.b=2;

e.in.x=e.a*e.b;

e.in.y=e.a+e.b;

printf("%d,%d\n",e.in.x,e.in.y);

}

27.阅读下面程序,则执行后的输出结果是【】。

#include"stdio.h"

main()

{intx,y,z;

x=1;y=2;z=3;

if(x>y)if(x>z)printf("%d",x);

elseprintf("%d",y);

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

28.在Windows环境下,可以将窗口最小化为【】。

29.若有以下程序段:

intc1=1,c2=2,c3;

c3=1.0/c2*c1;

则执行后,c3中的值是【】。

30.假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为【】。

31.表示“整数x的绝对值大于5”时值为“真”的C语言表达式是【】。

32.以下程序运行后的输出结果是______。

inta=5;

fun(intB)

{staticinta=10;

a+=b++;

printf("%d",A);

}

main()

{intc=20;

fun(C),

a+=C++;

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

}

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

#include<stdio.h>

main()

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

intx=0;

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

{x=sb(s,x);

printf("%d",x);}

printf("\n");}

sb(s1,y)

int*s1,y;

{staticinti1=3;

y=s1[i1];

i1--;

return(y);}

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

longfun5(intn)

(longs;

if((n==l)‖(n==2))

s=2;

else

s=n+fun5(n-1);

return(s);

}

main()

{longx;

x=fun5(4);

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

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

#include<stdio.h>

main()

{inta=2,b=3,c=4;

a*=16+(b++)-(++c);

Printf("%d",a);

}

36.设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为【】。

37.若有定义inta=10,b=9,c=8;,接着顺序执行下列语句,变量b中的值是【】。

c=(a-=(b-5));

c=(a%11)+(b=3);

38.已有定义:double*p;,请写出完整的语句,利用malloc函数使p指向一个双精度型的动态存储单元______。

39.以下函数用以求x的y次方。补足所缺语句。

Doublefun(doublex,inty)

{inti;doublez=1;

for(i=1;i【】;i++)

z=【】;

returnz;

}

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

#include<stdio.h>

main()

{intx=1,y=1,a=1,b=1;

switch(x)

{case1:

switch(y)

{case0:a++;break;

case1:b++;break;

}

case2:

a++;b++;break;

}

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

}

三、1.选择题(20题)41.现有如下程序段#include"stdio.h"main(){inta[5][6]={23,3,65,21,6,78,28;5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1};inti=0,j=5;printf("%d\n",*(&a[0][0]+2*i+j-2));}则程序的输出结果为

A.21B.78C.23D.28

42.有如下程序main(){inty=3,x=3,z=1;printf("%d%d\n",(++x,y++),z+2);}运行该程序的输出结果是______。

A.34B.42C.43D.33

43.C语言中规定,程序中各函数之间()

A.既允许直接递归调用,也允许间接递归调用

B.不允许直接递归调用,也不允许间接递归调用

C.允许直接递归调用,不允许间接递归调用

D.不允许直接递归调用,允许间接递归调用

44.请读程序:#include<stdio.h>inta[]={2,4,6,8,};main(){inti;int*p=a;for(i=0;i<4;i++)a[i]=*p++;priatf("%d\n",a[2]);}上面程序的输出结果是()。

A.6B.8C.4D.2

45.下列程序的输出结果是

#include"stdio.h"

main()

{inti,a=0,b=0;

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

{if(i%2==0)

{a++;

continue;}

b++;}

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

A.a=4,b=4B.a=4,b=5C.a=5,b=4D.a=5,b=5

46.设有如下关系表:

A.T=R∩SB.T=R∪SC.T=R×SD.T=R/S

47.下面程序段的运行结果是charstr[]="ABC",*p=str;printf("%d\n",*(p+3));

A.67B.0C.字符'C'的地址D.字符'C'

48.若有说明:inta[][3]={0,0};则不正确的叙述是()。

A.数组a的每个元素的初值都是0

B.数组a的第一维大小为1

C.数组a的行数为1

D.只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0

49.算法具有五个特性,以下选项中不属于算法特性的是_____。A.有穷性B.简洁性C.可行性D.确定性

50.以下不正确的定义语句是

A.doublex[5]={2.0,4.0,6.0,8.0,10.0};

B.inty[5]={0,1,3,5,7,9};

C.charc1[]={'1','2','3','4','5'};

D.charc2[]={'\x10','\xa','\x8'};

51.下列程序的输出结果是()。main(){chara[7]"aO\OaO\0";inti,j;i=sizeof(a);j=strlen(a);printf("%d%d\n",i,j);}

A.22B.76C.72D.62

52.若有以下定义和语句;inta[]={1,2,3,4,5,6,7,8,9,10},*p=a;

A.p+=2,*(p++)B.p+=2,*++pC.p+=3,*p++D.p+=2,++*p

53.下述关于C语言文件的操作的结论中,正确的是______。

A.对文件操作必须先关闭文件

B.对文件操作必须先打开文件

C.对文件操作顺序无要求

D.对文件操作前必须先测文件是否存在,然后再打开文件

54.在软件设计中,不属于过程设计工具的是()。

A.PDL(过程设计语言)B.PAD图C.N-S图D.DFD图

55.为了使模块尽可能独立,要求()。

A.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强

B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱

C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱

D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强

56.下列选项中不符合良好程序设计风格的是A.源程序要文档化B.数据说明的次序要规范化C.避免滥用goto语句D.模块设计要保证高耦合、高内聚

57.若已定义:inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素不正确的引用是______。

A.a[p-a]B.*(&a[i])C.p[i]D.a[10]

58.下列是用户自定义标识符的是

A._w1B.3_xyC.intD.LINE-3

59.有以下程序

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

60.若fp是指向某文件的指针,且已读到文件末尾,则函数feof(fp)的返回值是

A.EOFB.-1C.1D.NULL

四、选择题(20题)61.

62.对建立良好的程序设计风格,下面描述正确的是

A.程序应简单、清晰、可读性好B.符号名的命名只需符合语法

C.充分考虑程序的执行效率D.程序的注释可有可无

63.

有如下程序:

#include<stdio.h>

main

{FILE*fp1;

fp1=fopen("f1.txt","w");

fprintf(fp1,"abe");

fclose(fp1);

}

若文本文件f1.txt中原有内容为:good。则运行以上程序后文件f1.txt中的内容为()。

A.goodabcB.abcdC.abcD.abcgood

64.下列叙述中正确的是()。A.A.只能在循环体内和switch语句体内使用break语句B.cotinue语句的作用是结束整个循环的执行

C.在循环体内使用break语句或continue语句的作用相同

D.从多层循环嵌套中退出时,只能使用got0语句

65.

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

67.若有说明“chars1[30]="abc",s2[]="defghi";",则在使用函数stoat(s1,s2)后,结果是()。

A.s1的内容更新为abcdefghi

B.s1的内容更新为defghi\0

C.s1的内容更新勾defghiabc\0

D.s1的内容更新为abcdefghi\0

68.

s1和s2已正确定义并分别指向两个字符串。若要求:当s1所指串大于s2所指串时,执行语句s;则以下选项中正确的是()。

A.if(s1>s2)S;

B.if(strcmp(s1,s2))S;

C.if(strcmp(s2,sl)>O)S;

D.if(stremp(s1,s2)>O)S;

69.有以下计算公式

70.

71.下列叙述中正确的是()。

A.为了建立一个关系,首先要构造数据的逻辑关系

B.表示关系的二维表中各元组的每一个分量还可以分成若干数据项

C.一个关系的属性名表称为关系模式

D.一个关系可以包括多个二维表

72.若已定义inta=25,b=14,c=19;以下三目运算符(?:)所构成的语句执行后a<=25&&b--<=2&&c?printf("***a=%d,b=%d,c=%d\n",a,b,c):printf("###a=%d,b=%d,c=%d\n",a,b,c);程序输出的结果是

A.***a=25,b=13,c=19B.***a=26,b=14,c=19

C.###a=25,b=13,c=19D.###a=26,b=14,c=19

73.针对简单程序设计,以下叙述的实施步骤顺序正确的是()。

A.确定算法和数据结构、编码、调试、整理文档

B.编码、确定算法和数据结构、调试、整理文档

C.整理文档、确定算法和数据结构、编码、调试

D.确定算法和数据结构、调试、编码、整理文档

74.设fun函数的定义形式为voidfun(charch,floatx){…}则下列对函数fun的调用语句中,正确的是()。

A.fun("abc",3.0);

B.t=fun(D.16.5);

C.fun(65,2.8);

D.fun(32,32);

75.

76.有以下程序(注:字符a的ASCIl码值为97)}程序运行后的输出结果是()。

A.789B.abcC.7890D.979899

77.34.有以下程序

#include<stdio.h>

unionpw

{inti;

charch[2];

}a;

main()

{a.ch[0]=13;a.ch[1]=0;

printf("%d\n",a.i);

}

程序的输出结果是

A.13B.14

C.0D.20

78.下面描述中错误的是()。

A.系统总体结构图支持软件系统的详细设计

B.软件设计是将软件需求转换为软件表示的过程

C.数据结构与数据库设计是软件设计的任务之一

D.PAD图是软件详细设计的表示工具

79.

80.

五、程序改错题(1题)81.下列给定程序中,proc()函数的功能是:根据形参m,计算下列公式的值。t=1+1/2+1/3+1/4+…+1/m例如,若输入10,则应输出2.928968。请修改程序中的错误,使它能计算出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。试题程序:

六、程序设计题(1题)82.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组stu中,请编写函数proc,其功能是:按分数的高低排列学生的记录,高分在前。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#defineMl6typedefstruct{charnum[l0];intS;}STREC:voidproc(STRECa[]){inti,j;STRECt;for(i=1;i<M;i++)/*用冒泡法来按从高到低排序*/for(j=0;j<M-1;j++)。if(a[j].s<a[j+1].s)//*按分数的高低排列学生的记录,高分在前*/{t=a[j];a[j]=a[j+1];a[j+1]=t;)}voidmain{STRECstu[M]={{"GA005",85),{"GA003",76},{"GA002",69},{"GA004",85),{"GA001",91),{"GA007",72),{"GA008",64),{"GA006",87),{"GA015",85),{"GA013",91),{"GA012",64),{¨GA014",91),{"GA011",66),{"GA017",64},{"GA018",64),{"GA016",72}};inti;proc(stu);printf("Thedataaftersorted:\n");for(i=0;i<M;i++){if(i%4==0)//每行输出4个学生记录printf("n");printf("%s%4d",stu[i],num,stu[i].s);}printf("\n");}

参考答案

1.C解析:本题涉及C语言基本的3个知识点:①C语言规定一个程序只允许有一个主函数,一个函数内可以允许有多个花括号;②C程序的注释部分仅仅是方便程序员阅读,提高程序的可读性和可移植性,它并不参与程序的编译,所以编译器也就不会发现注释中的错误。

2.B解析:考查用指针引用字符串元素的方法。指针a通过数组元素下标来从头逐个地引用字符串item中的字符,判断不是0~9之间的数字时,就去掉这个字符,所以程序结束后,字符串item中就只剩下和两个字符了。

3.D本题考查静态变量,静态变量有储存已经操作过的值,所以fun(a)s[O]=3,s[1]=5,s[2]=7,所以答案选择D。

4.D解析:程序不仅是编写完就结束了,为了测试和维护程序,往往还有其他人阅读和跟踪程序,因此程序设计的风格应该强调简单和清晰,即程序的易读性,“清晰第一,效率第二”。

5.A

6.D单一的数据结构——关系,现实世界的实体以及实体间的各种联系均用关系来表示。数据的逻辑结构——二维表,从用户角度,关系模型中数据的逻辑结构是一张二维表。但是关系模型的这种简单的数据结构能够表达丰富的语义,描述出现实世界的实体以及实体间的各种关系。

7.B

8.D[解析]本题目中静态局部变量x,在静态存储区内分配存储单元。在程序整个运行期间都不释放。所以第一次循环s的值为2.第二次循环中,返回的x的值为4.所以s的值为8.第三次循环,返回的x的值为8.所以s的值为64.

9.C

10.B解析:算术运行符“/”、“%”的优先级处于同一级,并且两者的结合性都是从左到右。所以算术表达式运算过程为:a=25/10%9=2%9=2:当逻辑运算符“&&”两边的值都是非零时,逻辑表达式的值才为真(即为1)。所以b=2&&(-1)=1。

11.A

12.C

13.B

14.D自增运算符是将运算对象的值增1,它有前缀形式“++a”和后缀形式“b++”。其中“++a”表示首先将a的值自增1,然后表达式“++a”的值就是自增后a的值;而“b++”表示首先将b的值作为表达式的值,然后再将b的值自增1。本题中,a的初值为10,b的初值为11,则表达式“++a==b++”,等价于“11==11”,条件为真,所以输出“T”。if语句执行完后,a的值为11,b的值为12,输出“a=11,b=12”。故本题答案为D选项。

15.AB选项中,如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数;C选项中,chara[2]={"","B"};不合法,应为chara[2]={′A′,′B′};;D选项中,字符数组只能在定义的时候可以用字符串常量来初始化,但不能够先定义字符数组,然后再用字符串常量进行赋值。因此A选项正确。

16.A算术运算符的优先级高于关系运算符的优先级。所以当x为大于1的奇数时,A选项的值为假,即0。B选项的值为不定值,但绝对不是0。C选项的值为真,即1。0选项的值为真,即1。故本题答案为A选项。

17.A解析:作为一个算法,一般应该具有下列4个特征:(1)可行性,即考虑到实际的条件能够达到一个满意的结果;(2)确定性,算法中的每一个步骤都必须是有明确定义的,(3)有穷性,一个算法必须在有限的时间内做完;(4)拥有足够的情报。

18.A

19.A函数参数传递是个不可逆的过程,形参不会把值传回实参,所以A)选项(24)[答案]A)[解析]c的值为a乘以b的值,为3。所以答案选择A)。

20.A要写入字符数据,需要使用格式字符%c,选项D错误;换行符需要使用‘\\n’,而不是‘\\r\\n’,选项B错误;选项C中未使用换行符,不满足题意。故本题答案为A选项。

21.存储结构

22.8888解析:C语言规定,以0开头的整型常量为八进制。另外,在primf()函数中,%X表示以十六进制无符号形式输出一个整数,且十六进制中的ABCDEF为大写字母。本题的输出应该是八进制210的十六进制形式。将八进制转换为十六进制,可以先将其转换为二进制。因为1位八进制表示3位二进制,4位二进制表示1位十六进制。(210)8=(10001000)2=(88)16,故本题输出为880

23.错误。错误。解析:数据库恢复是将数据库中的数据从错误状态中恢复到某种逻辑一致的状态。如果数据库中包含成功事务提交的结果,则称数据库处于一致性状态。

24.150150解析:本题先给变量x赋初始值100,然后将指针p指向变量x,*p是取指针p所指地址的内容,即100,所以x=100+50=150。

25.逻辑独立性逻辑独立性解析:数据独立性是数据与程序间的互不依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。数据独立性一般分为物理独立性与逻辑独立性两个含义。注意:在人工管理阶段,文件系统阶段和数据库管理阶段中数据独立性的特点。

26.484,8解析:C语言规定,共用体中各个成员变量在内存中占用同一段内存单元,即e.in.x、e.a、e.b占用同一段内存单元。执行语句e.b=2;后,e.in.x=e.a=e.b=2;执行语句e.in.x=e.a*e.b;时,e.a的值为2,e.b的值为2,所以运算得出e.in.x的值为4;执行语句e.in.y=e.a+e.b时,由于e.in.x和e.a、e.b占用的是同一段内存单元,所以此时的e.a、e.b的值为4,因此运算得出e.in.y的值为4+4=8。程序最后的输出结果为4,8。

27.33解析:C语言的语法规定:else子句总是与前面最近的不带else的if相结合。因为x不大于y,所以执行printf('%d\\n',z);语句。

28.图标或按钮图标或按钮

29.00解析:在赋值运算中。如果表达式中变量和常量的数据类型不一致就会自动进行类型转换。系统会计算1.0/c2,由于1.0是实型,所以均先转化为双精度型0.500000,再和c1转化后的双精度数相乘得0.500000。但其要赋值给整型变量c3,故要进行强制转换,c3的值为0。

30.n(n-1)/2

31.x>5||x<-5或abs(x)>5x>5||x<-5或abs(x)>5解析:要使整数x的绝对值大于5,则x大于5或x小于-5,用C语言表示即为:x>5||x<-5或者abs(x)>5。

32.30253025解析:本题考核的知识点是变量的存储属性和算术运算的应用。本题涉及了自动变量、静态变量和外部变量。外部变量是定义在所有函数之外的变量,本题中inta=5定义了一个外部变量a,它是一个全局变量,即作用域是从定义的位置开始到本文件的结束;静态变量的存储空间在程序的整个运行期间是固定的(static),本题函数fun()中staticinta=10定义个一个静态变量a,此静态变量a是个静态的局部变量,即它的值只能在本函数中使用;自动变量是C程序中使用最多的一种变量,它的建立和撤消都是由系统在程序执行过程中自动进行的,auto是自动变量的存储类别标识符,如果省略auto,系统隐含认为此变量为auto,本题中main()中intc=20定义了一个自动变量c,此自动变量c是个静态的局部变量.算术运算中a+=b++相当于a=a+b,b=b+1.所以,在第一个ptine('%d',a)中a=a+b=10+20=30,第二个printf('%d',a)中a=a+c=5+20=25,即输出3025。

33.43214321解析:静态存储类的局部变量其生存期为整个程序的运行期间,作用域却只是定义它的函数或局部范围。注意:局部变量和全局变量的作用域。

34.99解析:考查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。

35.2828解析:a*=16+(b++)-(++c)等价于a=a*(16+(b++)-(++c)),b++的值为3,++c的值为5,这里要注意前缀++和后缀++的用法。

36.33解析:本题考查的是C语言逗号表达式的相关知识。程序在计算逗号表达式时,从左到右计算由逗号分隔各表达式的值,整个逗号表达式的值等于其中最后一个表达式的值。本题中,首先i被赋值为2,再自加1,最后i++的值计算为3。

37.33解析:这里:b-5=4,a-=4之后a的值为6,并把它赋给c。此时b的值并未被改变。在第2个表达式中,也只有赋值表达式b=3改变了b的值。所以两行语句执行完毕,b的值应该为3。

38.p=(double*)malloc(sizeof(double)):或p=(double*)malloc(8);p=(double*)malloc(sizeof(double)):或p=(double*)malloc(8);解析:malloc()函数只有一个参数,该参数指定了需要分配多少字节的内存。然后将分配好的内存块的首地址作为void*(未知类型指针)返回.故标准的调用形式应该写成:

p(double*)malloc(sizeof(double));

39.<y+1z*x

40.a=2b=3a=2,b=3解析:分析程序,程序从x=1语句开始执行,之后执行第一个switch语句,switch(x)=switch(1),所以执行case1,case1语句中包含一个复合switch语句:这时执行第二个switch语句,此时y=1,所以switch(y)=switch(1),因此执行case1,将b加1,得到b=2,遇到break语句,退出第二个switch语句,则整个case1的复合语句执行完毕,由于在这个case1的后面没有break语句使其退出第一个switch语句,所以接着执行下列的case2后面的语句,即将a,b各加1,得到a=2,b=3。

41.A解析:通过地址来引用二维数组,若有以下定义:inta[3][4],i,j;且当0≤i≤3,0≤j<4则可以有以下几种方式来引用数组中的第i行,第j列的元素:\ue008a[i][j]\ue009,\ue008*(a[i]+j),\ue009*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。表达式&a[0][0]+2*i+j-2相当于是地址&a[0][0]加上多少偏移量。

42.D解析:逗号表达式(++x,y++)的值应该是y++的值,由于y++是先引用后自增,所以y++的值是3。

43.A解析:本题考查函数调用的基本概念。在函数调用时,只要符合函数的使用,程序中的各个函数间既可以直接调用其他函数,也可以递归调用其自身。

44.A解析:本题考查通过指针引用数组元素。程序通过a[i]=*p++;语句,循环地将2赋给a[0],4赋给a[1],6赋给a[2],8赋给a[3],所以输出结果为6。

45.B解析:continue语句的作用是跳过本次循环体中余下尚未执行的语句,接着再一次进行循环条件的判定。当能被2整除时,a就会增1,之后执行continue语句,直接执行到for循环体的结尾,进行i++,判断循环条件。

46.B解析:仔细观察3个表可以看到,R,S,T具有相同的关系模式,且T包含了R和S的所有元组,故T=R∪S。

47.B解析:考查指向字符串的指针变量。在该题中,指针变量p指向的应该是该字符串中的首地址,p+3指向的是字符串结束标志'\\0'的地址,因而。(p+3)的值为0。

48.D解析:本题考查给二维数组元素赋值。给二维数组元素赋值时应注意下列两点:①在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取0。②二维数组第一维的大小由下列规则确定;当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小;当初值的个数不能被第二维的常量表达式的值除尽时,第一维的大小等于所得商数加1。

49.B解析:一个算法应当具有以下5个特性:有穷性;确定性;可行性;有零个或多个输入;由一个或多个输出.简洁性不属于这5个特性,所以本题应该选择B。

50.B解析:在一维数组中要注意的是作为下标表达式的常量表达式的值必须是大于等于0,选项B)中定义有5个元素,但赋值时有6个元素,所以是错误的。

51.C解析:函数sizeof(a)的功能:求出字符串a中的字符占用存储空间的大小,由于字符数组a有长度为7,所以i=7;函数strlen(a)的功能:求出字符串a的长度。而每个字符串都以'\\0'为字符串的结束标记,所以j的值等于2。

52.A解析:引用一个数组元素,可以用:(1)下标法,如a[i]形式;(2)指针法,如*(a+i)或*(p+i)。数组的下标从0开始,值为3的数组元素是a[2]。B、C的内容为a[3],D将a[2]前自加,结果为4。

53.B解析:在C中对文件操作必须先打开文件,待文件操作完毕后要关闭文件。对文件以读的方式进行打开操作时,同时会执行文件的检查文件是否存在,不存在将会返回空的文件指针,如果对文件以写的方式打开时,文件不存在,将会自动创建文件,因此在C中打开文件前不必对其检查文件是否存在,故答案为B。

54.D解析:PDL一种设计性语言,用于书写软件设计规约。它是软件设计中广泛使用的语言之一。N-S图是无线的流程图,是算法描述工具;PAD图是问题分析图,它用二维树状结构的图表示程序的控制流,将这种图转换为程序代码比较容易。此3类均是过程设计工具,数据流图(DataFunctionDiagram):又名数据功能图表,简称DFD,是采用图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。

55.B解析:模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。本题答案为B。

56.D解析:编程风格是在不影响性能的前提下,有效地编排和组织程序,以提高可读性和可维护性。更直接地说,风格就是意味着要按照规则进行编程。这些规则包括:(1)程序文档化。就是程序文档包含恰当的标识符、适当的注解和程序的视觉组织等。(2)数据说明。出于阅读理解和维护的需要,最好使模块前的说明语句次序规范化。此外,为方便查找,在每个说明语句的说明符后,数据名应按照字典顺序排列。(3)功能模块化。即把源程序代码按照功能划分为低耦合、高内聚的模块。(4)注意goto语句的使用。合理使用goto语句可以提高代码的运行效率,但goto语句的使用会破坏程序的结构特性。因此,除非确实需要,否则最好不使用goto语句。因此,本题的正确答案是D。

57.D解析:通常,引用一个数组元素可以用下标法,如a[P-a]形式,或指针法,如*(&a[i])的形式。本题中a[9]=9,a[10]显然超出了数组范围,注意,数组的下标是从0开始的。

58.A本题主要考查标识符的定义。对标识符的定义是考试中常考的内容之一。标识符主要由数字、下画线和字母组成,其中数字不能放在首位,另外,用户自定义标识符时,不能将标识符定义为C语言中已定义的关键字,如int、while等。

根据上面对标识符的分析,我们不难看出本题的正确答案是A。在选项B中,3_xy以数字开头,不符合标识符定义的规定;在选项C中,int是C语言系统中已经定义了的关键字;在选项D中,LINE-3使用的数字、下画线和字母以外的字符,因此不正确。

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

f(1)=1

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

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

60.C解析:EOF是指向文本文件的结束标志,NULL是打开文件错误时的返回值。feof(fp)用来判断文件是否在文件末尾,文本文件和二进制文件均可以使用此函数,如果遇到文件结束就返回1,否则返回0。

61.B

62.A具有良好的程序设计风格是一个程序员必不可少的素质。我们在编写程序时要养成良好的程序设计习惯,对程序的要求不仅能够在计算机上正确运行,而且要便于阅读和被别人理解,便于程序的调试和维护。好的程序设计风格有助于提高程序的正确性、可读性、可维护性和可用性。要使程序具有良好的风格,必须做到以下几点:

(1)合理的标识符的命名。由于一个程序中必然有很多标识符,特别是在一个大型复杂的程序中,标识符可能成千上万,对标识符作用的正确理解是读懂程序的前提,如果程序员随意命名标识符,程序的可读性会很差。因此,在命名标识符时要注意其可理解性。

(2)在程序中添加一定的注释。注释是程序员与日后的程序读者之间询通的重要工具,它用自然语言或伪码描述。它说明了程序的功能,特别是在维护阶段,对理解程序提供了明确指导。因此,一定的注释是程序必不可少的组成部分。

(3)程序的编辑风格。为了使程序的结构一目了然,可以在程序中利用空格、空行、缩进等技巧使程序层次清晰,便于对程序的理解。

(4)语句的结构。在结构化程序设计中,单个语句结构是编码阶段的任务,语句结构追求简单直接,不能为了追求效率而使代码复杂化。

总之,程序应简单、清晰、可读性和可理解性好。

63.C

\n当用“w”打开时,已存在一个以该文件名命名的文件,则在打开时将该文件删除,再重新建立一个新文件,因此当输入时原来的内容已被覆盖,所以只有后输入的内容,故选择C选项。

\n

64.A本题考查循环跳出的知识点:①break语句可以出现在switch循环体内及语句体内,它的作用是跳出循环体,不能用于其他的语句;②continue语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,而接着判定循环条件是否成立,确定下一次循环是否继续执行,执行contiune语句不会使

温馨提示

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

评论

0/150

提交评论