2021-2022年广东省清远市全国计算机等级考试C语言程序设计知识点汇总卷(含答案)_第1页
2021-2022年广东省清远市全国计算机等级考试C语言程序设计知识点汇总卷(含答案)_第2页
2021-2022年广东省清远市全国计算机等级考试C语言程序设计知识点汇总卷(含答案)_第3页
2021-2022年广东省清远市全国计算机等级考试C语言程序设计知识点汇总卷(含答案)_第4页
2021-2022年广东省清远市全国计算机等级考试C语言程序设计知识点汇总卷(含答案)_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

2021-2022年广东省清远市全国计算机等级考试C语言程序设计知识点汇总卷(含答案)学校:________班级:________姓名:________考号:________

一、单选题(20题)1.

2.

3.

4.以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是

A.feof(fp)B.ftell(fp)C.fgetc(fp)D.rewind(fp)

5.设已有定义“floatx;”,则下列对指针变量P进行定义且赋初值的语句中正确的是()。

A.int*p=(float)x;

B.float*p=&x;

C.floatp=&x;

D.float*p=1024;

6.

7.在具有101个元素的顺序表中查找值为x的元素结点时,平均比较元素的次数为()。

A.50B.51C.100D.101

8.下列字符数组初始化语句中,不正确的是()。

A.charc[]=goodmorning;

B.charc[20]="goodmorning";

C.charc[]={a,b,c,d);

D.charc[]={"ffgoodmorning"};

9.

10.若有定义“charc=“hello!”;”,则以下说法正确的是()。

A.c占用7字节内存B.c是一个字符串变量C.定义中有语法错误D.c的有效字符个数是6

11.软件需求规格说明书的作用不包括()。

A.软件设计的依据B.软件可行性研究的依据C.软件验收的依据D.用户与开发人员对软件要做什么的共同理解

12.若有运算符:>、=、<<、%、sizeof,则它们按优先级(由高至低)的正确排列顺序为()

A.%、sizeof、>、<<、=

B.sizeof、%、>、=、<<

C.sizeof、<<、>、%、=

D.sizeof、%、<<、>、=

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

A.在C语言中,预处理命令行都以“#”开头

B.预处理命令行必须位于C语言源程序的起始位置

C.“include<stdio.h>”必须放在C语言程序的开头

D.C语言的预处理不能实现宏定义和条件编译的功能

14.以下不能将s所指字符串正确复制到t所指存储空间的是()。A.while(*t=*s){t++;s++;}

B.for(i=0;t[i]=s[i];i++);

C.do{*t++:*s++;}while(*s);

D.for(i=0,j=0;t[i++]=s[j++];);

15.排序方法中,从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,称为()。

A.希尔排序B.冒泡排序C.插入排序D.选择排序

16.设一棵二叉树共有50个叶子结点(终端结点),则共有___个度为2的结点。

A.25B.49C.50D.51

17.若有定义和语句int**pp,*p,a=10,b=20;pp=&p;p=&a;p=&b;printf("%d,%d\n",*p,**pp);则输出结果是()

A.10,10B.10,20C.20,10D.20,20

18.有以下程序:#include<stdio.h>main(){inta;scanf("%d",&a);if(a++<9)printf("%d\n",a);clscprintf("%d\n",a--);}程序运行时从键盘输入9<回车>,则输出结果是()。A.10B.11C.9D.8

19.设n、m为一棵二叉树上的两个结点,在中序遍历时,n在m之前的条件是_____________。

A.n在m右方B.n是m的祖先C.n在m左方D.n是m子孙

20.

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

voidfunc(int*a,intb[])

{b[0]=*a+b;}main

{inta,b[5];

a=0.b[0]=3;

func(&a,b);printf("%d\n",b[0]);

}

A.6B.7C.8D.9

二、2.填空题(20题)21.表示“整数x的平方大于36"时的值为“真”的C语言逻辑表达式是【】。

22.以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串“yes!”,否则函数返回字符串“no!”,并在主函数中输出。所谓回文即正向与反向的拼写都一样,例如:adsda。请填空。

#include<stdio,h>

#include<string,h>

char*huiwen(char*str)

{char*p1,*p2;inti,t=0;

p1=str;p2=【】;

for(i=0;i<=strlen(str)/2;i++)

if(*pl++!=*p2--){t=1;break

if(【】)return("yes!");

elsereturn("no!");

}

main(){charstr[50];

printf("Iaput:");scanf("%s",str);

printf("%s\n",【】);

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

main()

{

chara[]="123456789",*p;

inti=0;

p=a;

while(*p)

{

if(i%2==0)

*p='*';

p++;i++;

}

puts(a);

}

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

main()

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

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

printf("%d",a);

}

25.当数据的物理结构(存储结构、存取方式等)改变时,不影响数据库的逻辑结构,从而不致引起应用程序的变化,这是指数据的【】。

26.设有以下定义的语句:

inta[3][2]={10,20,30,40,50,60},(*p)[2];

p=a;

则*(*(P+2)+1)值为【】。

27.若由以下定义,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是【】。

intw[10]={23,54,10,33,47,98,72,80,61},*p=w;

28.将以下程序写成三目运算表达式是【】。

if(a>b)max=a;

elsemax=b;

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

main()

{inti=0,a=0;

while(i<20)

{for(;;)

{if((i%10)==0)break;

elsei--;}

i+=11;

a+=i;

}

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

}

30.fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。请填空。

#include<stdio.h>

#defineN100

intfun(int(*a)[N])

{

introw,col,max,min;

for(row=0;row<N;row++

{

for(max=a[row][0],col=1;col<N;col++)

if(【】)max=a[row][col];

if(row==0)min=max;

elseif(【】)min=max;

}

returnmin;

}

31.下面程序的运行结果是【】。

intf(inta[],intn)

{if(n>1)returna[0]+f(&a[1],n-1);

elsereturna[0];

}

main()

{intaa[3]={1,2,3},s;

s=f(&aa[0],3);

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

}

32.按照逻辑结构分类,数据结构可分为线性结构和非线性结构,队列属于______。

33.注释说明了程序的功能,它分为【】注释和功能性注释。

34.数据的逻辑结构有线性结构和______两大类。

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

main()

{inti=10,j=0;

do

{j=j+i;i-;}

while(i>2);

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

}

36.若x和n均是int型变量,且x=12,n=5,则执行y=x%=(n%=2)表达式后y的值为()。

37.以下程序建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输入结束(键表头结点的data域不放数据,表空的条件是ph->next==NULL),请填空。

#include<stdio.h>

structlist{intdata;structlist*next;};

structlist*creatlist()

{structlist*p,*q,*ph;inta;ph=(structlist*)malloc(sizeof(structlist));

p=q=ph;printf("Inputanintegernumber;entre-1toend:\n");

scanf("%d",&a);

while(a!=-1)

{p=(structlist*)malloc(sizeof(structlist));

【】=a;q->next=p;【】=p;scanf("%d",&a);}

p->next='\0';return(ph);}

main()

{structlist*head;head=creatlist();}

38.下面程序的运行结果是______。

intf(inta[],intn)

{if(n>1)returna[0]+f(&a[1],n-1);

elsereturna[0];

{

main()

{intaa[3]={1,2.3},s;

s=f(&aa[0],3);

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

}

39.以下程序的功能是:对输入的一行字符串的数字字符按它们的字面值累加,输出此累加和。例如,输入一行字符是:ab34dh8u,输出值应当是15。请填空。

#include<stdio.h>

#include<ctype.h>

main()

{charch;inta,s;

【】;

while((ch=getchar())【】)

if(isdigit(ch))

{a=【】;s+=a;}

printf("s=%d\n\n",s);}

40.若a=1,b=2,则表达式!(x=A)‖(y=B)&&0的值是______。

三、1.选择题(20题)41.以下能正确定义且赋初值的语句是()。

A.intn1=n2=10;

B.charc=32;

C.floatf=f+1.1;

D.doublex=12.300.5;

42.有以下程序:main(){inti=0,s=0;do{if(i%2){i++;continue;}i++;s+=i;}while(i<7);.printf("%d\n",s);}执行后输出的结果是()。

A.16B.12C.28D.21

43.有以下程序voidswap(char*x,char*y){chart;t=*x;*X=*y;*y=t;}main(){char*s1:"abc",*s2="123";swap(s1,s2);printf("%s,%s\n",s1,s2);}程序执行后的输出结果是

A.123,abcB.abc,123C.1bc,a23D.321,cba

44.有以下程序point(char*p){p+=3;}main(){charb[4]={'a','b','c','d'},*p=b;point(p);printf("%c\n",*p);}程序运行后的输出结果是______。

A.aB.bC.cD.d

45.下列程序的输出结果是______。intb=2;intfunc(int*a){b+=*a;return(b);}main(){inta=2,res=2;res+=func(&b);printf("%d\n,res);}

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

46.下列叙述中正确的是A.break语句只能用于switch语句

B.在switch语句中必须使用default

C.break语句必须与switch语句中的case配对使用

D.在switch语句中,不一定使用break语句

47.下列程序的输出结果是()。#include<stdio.h>intfun(intx){inta;if(x==0‖x==1)return3;elsea=x-fun(x-2);returna;}voidmain(){printf("%d",fun(7));}

A.2B.8C.9D.5

48.下列数据结构中,属于非线性的是()。

A.线性表B.队列C.树D.栈

49.执行以下程序后i的值为()。main(){intx,i;for(i=l,x=1;i<=36;i++){if(x>=20)break;if(x%5==1){x+=5;continue;}x-=5;)printf("%d",i);}

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

50.以下四个程序中,完全正确的是()。

A.#include<stdio.h>

B.#include<stdio.h>main();main(){/*programming*/{/*/programming/*/printf("programming!\n");}printf("programming!\n");}

C.#include<stdio.h>

D.include<stdio.h>main()main(){/*/*programming*/*/{/*programming*/printf("programming!\n");}printf("programming!\n");}

51.有以下程序:#include<stdio.h>unionpw{inti;charch[2];}a;main(){a.ch[0]=13;a.ch[1]=0;printf("%d\n",a.i);}程序的输出结果是(注意:ch[0]在低字节,ch[1]在高字节)()。

A.13B.14C.208D.209

52.按照“先进后出”原则组织数据的数据结构是()。

A.队列B.栈C.双向链表D.二叉树

53.下面程序的输出结果是()。voidprty(int*x){printf("%din",++*x);}main(){inta=25;prty(&a);}

A.23B.24C.25D.26

54.设有定义:Structcomplex{intreal,unreal;}data1={1,8},data2;则以下赋值语句中错误的是()。

A.data2={data1.rea1,data1.unrea1};

B.data2=(2,6);

C.data2.rea1=data1->rea1;

D.data2->rea1=data1.unrea1;

55.具有3个结点的二叉树有

A.2种形态B.4种形态C.7种形态D.5种形态

56.以下选项中,能定义s为合法的结构体变量的是()。

A.typedefstructabc{doublea;charb[10];}s;

B.struct{doublea;charb[10];}s;

C.structABC{doublea;charb[10];}ABCs;

D.typedefABC{doublea;charb[10];}ABCs;

57.设有表示学生选课的三张表,学生s(学号,姓名,性别,年龄,身份证号),课程c(课号,课名),选课SC(学号,课号,成绩),则表sc的关键字(键或码)为()。

A.课号,成绩B.学号,成绩C.学号,课号D.学号,姓名,成绩

58.已知函数的调用形式为fread(buf,size,count,fp),参数buf的含义是

A.一个整型变量,代表要读入的数据项总数

B.一个文件指针,指向要读的文件

C.一个指针;指向要读入数据的存放地址

D.一个存储区,存放要读的数据项

59.有以下程序段

intj;floaty;charname[50];

scanf("%2d%f%s",&j,&y,name);

当执行上述程序段,从键盘上输入555667777abe后,y的值为

A.55566.0B.566.0C.7777.0D.566777.0

60.若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是______。

A.p=2*(int*)malloc(sizeof(int));

B.p=(int*)mallet(2*sizeof(int));

C.p=(int*)malloc(2*2);

D.p=(int*)calloc(2,sizeof(int));

四、选择题(20题)61.

62.设有定义:

63.有以下程序main(){chara[7]="a0\0a0\0";inti,j;i=sizeof(a);j=strlen(a);printf("%d%d\n",i,j);}程序运行后的输出结果是______。

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

64.已知大写字母A的ASCIl码值是65,小写字母a的ASCIl码值是97。以下不能将变量C中的大写字母转换为对应小写字母的语句是()。

A.C=(。A’+C.%26一"a"B.c=c+32C.c=c一"A"+"a"D.c=(c一’A")%26+-a"

65.以下选项中正确的语句组是()。

A.char*s;8={1.BOOK!”}i

B.char*s;8=”BOOK!”;

C.charS[10];S=”BOOK!”;

D.charS[];S=”BOOK!”;

66.有以下程序:

A.xyyxB.yyyyC.yyxxD.yxyx

67.

68.数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图内容的是

A.控制流B.加工C.数据存储D.数据流

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

A.intB.doubleC.floatD.char

70.有以下程序程序输出()。

A.编译有错B.0,0,0,3C.1,1,2,0D.0,l,2,0

71.有以下程序:

程序的运行结果是()。

A.*7

B.*3*5

C.*5

D.*2*6

72.下列程序的输出结果是()。#include<stdio.h>main{inta=3,b=2,c=1;if(a<b)if(b<0)c=0;elsec++:printf("%d\n",c);}A.2B.0C.1D.不确定的值

73.下列对队列的叙述正确的是()。

A.队列按“先进后出”原则组织数据

B.队列属于非线性表

C.队列在队尾删除数据

D.队列按“先进先出”原则组织数据

74.有下列程序:

main

{inty=10;

do{y--;}while(--y);

printf("%d\n",--y);

)

当执行程序时,输出的结果是()。

A.-1B.1C.4D.0

75.用黑盒技术测试用例的方法之一为

A.因果图B.逻辑覆盖C.循环覆盖D.基本路径测试

76.已知各变量的类型说明如下:

则以下不符合C语言语法的表达式是()。

A.

B.

C.

D.

77.以下选项中非法的表达式是()。

A.a+1=a+1

B.a=b==0

C.(Char.(100+100.

D.7<=X<60

78.

79.

80.若以下选项中的变量已正确定义,则正确的赋值语句是()。

A.x1=26.8%3B.1+2=x2C.x3=0x12D.x4=1+2=3

五、程序改错题(1题)81.下列给定程序中,函数fun()的功能是:求两个非零正整数的最大公约数,并作为函数值返回。例如,若num1和num2分别为49和21,则输出的最大公约数为7;若num1和num2分别为27和81,则输出的最大公约数为27。请改正程序中的错误,使它能得出正确结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:

六、程序设计题(1题)82.下列程序定义了M×M的二维数组,并在主函数中赋值。请编写函数proc(),函数的功能是求出数组周边元素的平方和并作为函数值返回给主函数中的s。例如,若a数组中的值为则返回主程序后s的值应为310。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

参考答案

1.D

2.B

3.D

4.D解析:本题考查的是文件操作函数.题目中fseek(fp,0L,SEEK_SET)的作用将文件指针定位到文件开始。feof(fp)的作用是判断文件指针是否已到文件结尾,因此选项A不对。ftell(fp)的作用是获取当前文件指针的位置,因此选项B不对。fgetc(fp)的作用是从文件中读取一个字节,因此选项C不对。rewind(中)的作用是将文件指针重定位到文件开头,所以应该选择D。

5.B指针是用来存放地址的变量,定义指针变量的形式为:类型名*指针变量名。赋值时应将某个变量地址,如选项B中变量x的地址&x赋给指针变量。故本题答案为B选项。

6.B

7.B

8.A本题考查两个概念:①用单引号括起来的一个字符常量只能存放一个字符;②℃语言中没有字符串变量,只能用字符数组来存储字符串。

9.B

10.Cc是字符变量,“hello!”是字符串。字符串不能赋给字符变量,定义中有语法错误。本题答案为C选项。

11.B《软件可行性分析报告》是软件可行性研究的依据。

12.D解析:主要考查运算符的优先级。sizeof的优先级最高,后面的顺序是:%、<<、>,优先级最低的是“=”。

13.A预处理命令以“#”开头,一般在源文件的最前面书写,但不是必须在起始位置书写,所以B、C选项错误。C语言的预处理能够实现宏定义和条件编译的功能,所以D选项错误。故本题答案为A选项。

14.C解析:C项复制时没有复制结束串“\0”。

15.C

16.B难易程度:易

17.D

18.A本题考查简单的运算符操作.当输入9时,(a++<9)为假,所以执行else语句中的printf("%d\n",a--),在执行时此时a经过a++操作a=10,所以答案为A。

19.C

20.A

\n本题考查函数的调用,从主函数传递到调用函数中,*a的值为0,因此当执行完调用函数后,b[0]的值为6。

\n

21.x<-6||x>6

22.p1+(stfien(str)-1)或str+(strlen(str)-1)t==0或!thuiwen(str)或(strlen(str)-1)+p1或(stden(str)-1)+strp1+(stfien(str)-1)或str+(strlen(str)-1)\r\nt==0或!t\r\nhuiwen(str)或(strlen(str)-1)+p1或(stden(str)-1)+str解析:回文字符串是指正向与反向拼写都一样。由huiwen函数可知,第三处应该填写调用函数huiwen(str)。在函数huiwen中,执行P1=str;使p1指向字符串str中第一个字符的地址,则第一处应该使p2指向字符串str中最后一个字符的地址,故填p1+(stden(str)-1)或str+(strlen(str)-1)。本题要求如果是回文,则返回'yes!',否则,返回'no!',故当t=0时,说明字符串str为回文,所以第二处应填t==0或!t。

23.*2*4*6*8**2*4*6*8*解析:程序中定义了一个字符数组a,并初始化为123456789,接着定义了一个指针p并让它指向数组a,紧接着执行了一个while循环,此循环的作用是:当i为偶数时,将“*”赋给a[i],p指向数组末尾,循环结束,此时数组中a[0]、a[2]、a[4]、a[6]和a[8]的值都为“*”,所以最后调用puts()函数输出的a的值为*2*4*6*8*

24.2626解析:a*=16+(b++)-(++c)等价于a*=a*(16+(b++)-(++c))=2*(16+(2-5)=26。b++是先使用b的值参加运算,再对b加1;++c是先c加1,再使用c的值参加运算。

25.物理独立性物理独立性

26.6060解析:p是指向整型数组的指针变量,p=a使得p指向数组a的第1行。p+2是数组a第3行的地址,*(p+2)是数组a第3行{50,60},其实*(p+2)为数组a第3行的首地址,*(p+2)+1为数组a第3行第2个元素的地址,那么*(*(P+2)+1)就是数组a第3行第2个元素,即60。

27.*(p+5)或p[5]*(p+5)或p[5]解析:本题的考查点是通过指针引用数组元素。98是数组w的第5个元素(最开始的为第0个),而通过*p=w已经将p指向了数组w,要想不移动指针p而引用98,可以有以下两种方法:p[5]、*(p+5)。

28.max=(a>b)?a:b;max=(a>b)?a:b;解析:本题考查三目运算符的用法,条件运算符要求有三个操作对象,称三目(元)运算符,它是C语言中惟一的一个三目运算符。条件表达式的一般形式为:表达式1?表达式2:表达式3所以,我们可以写成(a,b)?a:b,它是一个“条件表达式”。执行顺序是:如果(a>b)条件为真,则条件表达式取值a,否则取值b。注意:逗号表达式的执行原理。

29.3232解析:while(表达式)的功能是:首先计算表达式的值,若为真,则执行循环体语句,执行完毕,再计算表达式的值,若仍为真,则重复执行循环体语句,直到表达式的值为假时,结束while语句的执行,继续执行while语句后面的语句:i=0时满足循环条件,也满足if的条件,执行语句得i=11,a=11,第2次循环不满足if的条件,执行i--,i=10,执行i+=11;a+=i后,得i=21,a=32,不满足i<20,循环结束。

30.a[row][col]>max或a[row][col]>=max或max<=a[row][col]或max<a[row][col)max<min或min>max或max<=min或min>=maxa[row][col]>max或a[row][col]>=max或max<=a[row][col]或max<a[row][col)\r\nmax<min或min>max或max<=min或min>=max解析:本题有两层for循环,主函数中定义了整型变量row、col、max和min,其中row用来存放外循环中的循环次数,col用来存放内循环中的次数,max记录每行中的最大值,min记录所有行中最大值中的最小值。在内循环中,首先给max赋初值为每行的第0列元素值,然后从第一列开始依次与max进行比较。如果大于max则将其值赋给max,当每一行循环结束,max记录了每一行的最大值。所以第一个空应该填a[row][col]>max或a[row][col]>=max。退出内循环,在第一次退出内循环时,将min赋初值为第0行的max,然后在每次退出内循环时,将min和每行的max比较,如果大于max,则将max值赋min,所以第二个空应该填max>min或mm>max,当退出外循环时,min为所有行中的最大值的最小值。

31.66解析:经过分析将递归函数写成其数学表达式如下:

本题中定义了一个长度为3的数组aa并初始化。接着调用递归函数f,由上面的数学表达式以计算其返回值s=1+2+3=6,所以空格处应该填6。

32.线性结构线性结构解析:队列有且只有一个根结点,而且每一个结点最多有一个前件,也最多有一个后件,满足线性结构的条件,所以属于线性结构。

33.序言性序言性解析:注释一般分为序言性注释和功能性注释。

34.非线性结构非线性结构

35.5252解析:do...while语句的形式为:

do

{

语句;

}while(条件表达式)

当条件表达式为非零时,继续执行循环体,直到条件表达式为零时退出循环。

36.00解析:n%=2等价于n=n%2,结果为1:x%=1等价于x=x%1,结果为0。

37.p->dataqp->data\r\nq解析:本题考查的是链表这一数据结构对结构体变量中的数据的引用。链表的特点是结构体变量中有两个域,一个是数据,一个是指向该结构体变量类型的指针,用以指明链表的下一个结点。

38.66解析:经过分析将递归函数写成其数学表达式如下:

f(&a,n)=a[0]+f(&a[1],n-1)n>1

f(&a,n)=a[0]n=1

本题中定义了一个长度为3的数组aa并初始化。接着调用递归函数f,由上面的数学表达式以计算其返回值s=1+2+3=6,所以空格处应该填6。39.s=0\r\n!='\\n'\r\nch-'0's=0\r\n!='\\n'\r\nch-'0'解析:按照题目的要求,s用于保存累加结果;while语句用于得到一个字符串,并以'\\n'结束;if语句用于判断一个字符是否为数值型,如果是就将其累加至s中。

40.00解析:根据运算符的运算顺序可知,该表达式最后运算的是与(&&)运算,而任何表达式与“0”进行“与”运算,结果都为0。

41.B

42.A

43.C解析:这是一个转换程序:低字节相互转换,高字节不变。“abe”的ab和“123”的12相互转化。

44.A解析:本题是一个陷阱,看似考查函数的传址调用,其实考的是传值调用。在C语言中,不管你给函数传递的参数是什么,指针也好数组名也罢,系统都是严格的将实参的值复制了一份作为函数的形参,即传值调用。在函数中,对形参中的值怎么改变都不会影响到实参。那传址调用又是怎么实现的呢?那是因为在函数中改变的不是形参指针变量中的值,而是形参指针变量所指内存中的值。其实骨子里还是将实参指针的值复制?一份给形参指针变量,它们是两个独立的互不相干的变量,只不过指向的内存地址值一模一样罢了。本题的函数只是改变了形参指针变量p的值,这对程序没有任何影响,主函数中p一开始就是指向b[0],最后输出时还是b[0]的值'a'。所以应该选择A。

45.B解析:实参a按地址传递,b是全局变量,函数func中b=b+*a=2+2=4,故主函数中res=res+4=2+4=6。

46.D解析:break语句除了能用于switch语句外,还可以用于循环语句中,因此选项A不正确。在switch语句中,可以使用default来执行所有case均失配时的分支,也可以不使用default,此时若所有case均失配则跳出switch,因此选项B不正确。在switch语句中,每个case的作用就是标出一个执行的起点,当符合某个case时,程序就从该case所标出的起点处开始执行,若没有break语句中断执行的话,程序会一直执行到switch的最后一条语句,而不是碰到下一个case就跳出switch。虽然break与case的配对使用会让所有case分支互不重叠条理明确,但不配对使用在C语言中也是允许的。因此选项C不正确,应该选择D。

47.A解析:本题考查函数的递归调用。

在函数递归调用时,fun(7):a=7-fun(5)→fun(5):a=5-fun(3)→fun3:a=3-fun(1)→fun(1):a=3,反推回去fun(3):a=3-3=0→fun(5):a=5-0=5→fun(7):a=7-5=2,最后的计算结果为2。

48.C解析:线性结构,是指数据元素只有一个直接前件元素和直接后件元素。线性表是线性结构。栈和队列是指对插入和删除操作有特殊要求的线性表,树是非线性结构。

49.C解析:第1次循环执行情况如下:

i=1,x=1,判断i<=36为真执行循环体。

x=1,判断x>=20为假。

判断x%5==1为真,执行x+=5;x值为6,执行continue;跳过本次循环余下的语句,即不执行X-=5:。

执行i++,i=2。

第2次循环执行情况如下:

i=2,判断i<=36为真执行循环体。

x=6,判断x>=20为假。

判断x%5==1为真,执行x+=5:x值为11,执行continue;跳过本次循环余下的语句,即不执行X-=5;。

执行i++,i=3。

第3次循环执行情况如下:

i=3,判断i<=36为真执行循环体。

x=11,判断x>=20为假。

判断x%5==1为真,执行x+=5;x值为16,执行continue;跳过本次循环余下的语句,即不执行X-=5:。

执行i++,i=4。

第4次循环执行情况如下:

i=4,判断i<=36为真执行循环体。

x=16,判断x>=20为假。

判断x%5==l为真,执行x+=5;x值为21,执行continue;跳过本次循环余下的语句,即不执行X-=5;。

执行i++,i=5。

第5次循环执行情况如下:

i=5,判断i<=36为真执行循环体。

x=21,判断x>=20为真。

执行break;,跳出循环体,即结束循环。最后i=5,选项C正确。

50.B解析:选项A中的main()后面不能直接用分号。选项C中的注释符使用不正确,编译器会把从第一个“/*到第一个*/”之间的当作注释,最后一个“*/”会被作为程序代码去编译。选项D中的include前要加上#表示是预定义语句。

51.A解析:根据共用体的定义可知:共用体a的成员i和成员ch[2]共用同一段内存空间,所以,当程序给a.ch[0]和a.ch[1]赋值后,实际上,共用体成员i的值就确定为13了,所以打印输出的结果应当为13。

52.BB.【解析】栈是一种特殊的线性表,其插入和删除运算都只在线性表的一端进行,而另一端是封闭的。进行插入、删除的一端称为栈顶,封闭的一端称为栈底。栈顶元索是最后被插入的元素,也是最后被删除的元素。栈是按先进后出的原则组织数据的。

【知识拓展】“栈”的形式如手枪的弹匣,最后压入的子弹总是最先被弹出,而最先压人的子弹最后才被弹出,也就是“先进后出”。

53.D解析:执行prty(&a);将变量a的地址传递给形参。x是指针型变量,值为变量a的地址,*x就是取存储单元的值即25,输出*x加1后的值26。

54.B

55.D解析:因为二叉树有左、右子树之分,所以有3个结点的二叉树具有5种不同的形态。

56.B解析:定义一个结构体类型的变量,可采用三种方法:

①先定义结构体类型,再定义变量名。

②在定义类型的同时定义变量。

③直接定义结构体类型变量,即不出现结构体名。

选项B)符合第三种定义方法。

57.C学号是学生表S的主键,课号是课程表C的主键,所以选课表SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择C项。

58.C解析:这是一道考查fread函数的题。buf是一个指针,fread是读入数据的存放地址;fwrite是输出数据的地址(以上指的是起始地址)。

59.B解析:本题考查通过scanf函数输入数据时的格式控制问题。变量j的格式控制为“%2d”,即只接收输入数据的前两位,从第三位开始直到空格之间的输入都会被保存到变量y中,因为y为浮点型数据,所以输出结果为选项B)。

60.A解析:本题考查malloc函数和calloc函数的应用。C语言中库函数malloc和calloc的功能都是向系统申请分配内存空间。其中函数malloc的调用为:malloc(size),其中size是一个无符号整数,表示向系统申请多大的存储空间;calloc(n,size)表示向系统申请n个大小为size的存储空间。新标准C提供的malloc和calloc函数的类型规定为void*类型,使用时根据需要进行强制类型转换。选项B、C、D都能满足p指向两个连续的整型存储单元的要求,其中(int*)表示强制类型转换。

61.C

62.A选项B)、D)中if语句后都是一条复合语句,选项c)中if语句后都是一条语句。选项A)之后有3条语句,所以答案选择A)。

63.C题目中需要求出程序的输出值i,j,其中i的值由sizeof决定,j的值由strlen函数决定。

sizeof是C语言的一种运算符,以字节的形式给出操作数的存储空间的大小。sizeof的操作对象可以是具体的数据类型,也可以是变量。题目中的操作数为数组名,利用sizeof可计算出数组所占用内存的字节数,题目中数组类型为char,大小为7,故该数组占用的内存数为7。

strlen函数则是计算一段字符串的长度,可以从整个字符串的头部开始计算,也可以从字符串的中间开始计算,当碰到第一个字符串结束符“\\0”,则停止计算,返回当前的计算值。题目中在前两个字符之后就出现了结束符“\\0”,故strlen函数的值为2。

64.A根据题意可知,小写字母比与之对应的大写字母的ASCⅡ码大32。A选项中字符A加上c表示的大写字符再对字母个数26取余,本身这个表达式没有任何含义,所以选择A选项。

65.BA选项去掉大括号就正确了;c选项和D选项应在定义时赋初值。因此B选项正确。

66.B本题考查do-while语句和if…else语句。do-while语句的功能是先执行循环体再判断条件,所以先判断if语句的条件,y=-4,!y为逻辑0,条件不成立,执行下面的else语句,输出y,然后将x的值减1,x=3,条件不成立,执行下面的else语句,输出y,然后将x的值减1,x=2,满足while循环条件,继续循环。第三次循环:先判断if语句的条件,y=2,!y为逻辑0,条件不成立,执行下面的else语句,输出y,然后将x的值减1,x=1,满足while循环条件,继续循环。第四次循环:先判断if语句的条件,y=-1,!y为逻辑0,

温馨提示

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

最新文档

评论

0/150

提交评论