C语言二级题库(刷题软件+60套真题+填空题+大题)2022年9月份新题第三套

2023-11-16

文章只能发选择题,刷大题去刷题软件效果会更好

刷题软件

gongzhonghao:露露IT

选择题

1、下面选项中不是关系数据库基本特征的是_______。

A. 不同的列应有不同的列名

B. 不同的列应有不同的数据类型

C. 与行的次序无关

D. 与列的次序无关

本题的考查知识点是关系数据库。关系数据库的基本特征是: 1、数据的结构化,数据库中的数据并不是杂乱无章、毫不相干的,它们具有一定的组织结构,属于同一集合的数据具有相似的特征。 2、数据的共享性,在一个单位的各个部门之间,存在着大量的重复信息。使用数据库的目的就是要统一管理这些信息,减少冗余度,使各个部门共同享有相同的数据。 3、数据的独立性,数据的独立性是指数据记录和数据管理软件之间的独立。数据及其结构应具有独立性,而不应该去改变应用程序。 4、数据的完整性,数据的完整性是指保证数据库中数据的正确性。可能造成数据不正确的原因很多,数据库管理系统通过对数据性质进行检查而管理它们。 5、数据的灵活性,数据库管理系统不是把数据简单堆积,它在记录数据信息的基础上具有很多的管理功能,如输入、输出、查询、编辑修改等。[ 回车]6、数据的安全性,根据用户的职责,不同级别的人对数据库具有不同的权限,数据库管理系统应该确保数据的安全性。所以本题答案为B。

2、学生和课程的关系模式定义为S (S#, Sn, Sd,Dc, Sa)(其属性分别为学号、姓名、所在系、所在系的系主任、年龄》;C(C#,Cn, P#)(其属性分别为课程号、课程名、先选课)﹔SC (S#,C#,G)(其属性分别学号、课程号和成绩)。关系中包含对主属性传递依赖的是________。

A. S#→Sd,Sd→Dc

B. S#→sd

C. S#→Sd,(S#,C#)→G

D. C#→P#,(S#,C#)→G

本题的考查知识点是关系模式。 '所在系'直接依赖于主键'学号','所在系的系主任'直接依赖于非主键'所在系',即'所在系的系主任'对主属性'学号'传递依赖。所以本题答案为A。

3、学生关系模式中有D(D#, Dn,Dl, DAddr)(其属性分别为系编号、系名称、系主任和系地址)和S(S#,Sn, SG, Date, Maj,D#)(其属性分别为学号、姓名、性别、入学日期、专业和系编号)两个关系,关系S的主键(码)是S#,关系S的外键(码)是_______。

A. Maj

B. D#

C. D1

D. Dn

本题的考查知识点是关系模式。如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键,则该属性集是关系模式R的外键。关系模式S中学号是主键,而在关系模式D中D#是主键,所以关系S的外键是D#。所以本题答案为B。

4、关系的实体完整性要求关系中不能为空的属性是_______。

A. 主键属性

B. 外键属性

C. 全部属性

D. 候选键属性

本题考查的是关系的实体完整性。关系的实体完整性中主键要求非空且唯一。所以本题答案为A。

5、学生选修课程的关系模式为SC(S#, Sn, Sd, Sa, C#, G)(其属性分别为学号、姓名、所在系、年龄、课程号和成绩);C(C#, Cn, P#)(其属性分别为课程号、课程名、先选课)。关系模式中包含对主属性部分依赖的是_______。

A. C#→Cn

B. (S#,C#)→G

C. S#→Sd

D. C#→P#

本题的考查知识点是关系模式。主键是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。一个学员不可能只选修一门课程,需要字亏和课程号两个属住才能唯一标识一条记录,所以主键是(S#,C#)。课程名Cn完全依赖于课程号C#,所以A选项错误。成绩G完全依赖于(S#,C#),所以B选项错误。先选课P#完全依赖于课程号C#,所以D选项错误。而姓名Sn、所在系Sd只依赖于学号S#,不依赖与主属性中的课程号C#,所以对主属性部分依赖。所以本题答案为C。

6、某二叉树共有399个结点,其中有199个度为2的结点,则该二叉树中的叶子结点数为____。

A. 不存在这样的二叉树

B. 200

C. 198

D. 199

本题的考查知识点是二叉树性质。根据二叉树的性质,在任意一棵二叉树中,度为0的结点总是比度为2的结点多一个,则度为0的结点数为199+1=200。所以本题答案B。

7、设顺序表的长度为n。下列排序方法中,最坏情况下比较次数小于n(n-1)/2的是_______。

A. 简单插入排序

B. 快速排序

C. 堆排序

D. 冒泡排序

本题的考查知识点是时间复杂度。堆排序:比较次数最坏情况为0(nlog2n),快速排序:比较次数最坏情况为n(n-1)/2;简单插入排序:比较次数最坏情况为n(n-1)/2;冒泡排序:比较次数最坏情况为n(n-1)/2。所以本题答案为C。

8、某带链的队列初始状态为front=rear=NULL。经过一系列正常的入队与退队操作后,front=10, rear=5。该队列中的元素个数为___。

A. 4

B. 5

C. 不确定

D. 6

本题考查知识点是循环队列。在链式存储方式中,每个结点有两部分组成,一部分为数据域,一部分为指针域,front=rear时说明只有一个元素,其他情况无法判断。所以本题答案为C。

9、设表的长度为20。则在最坏情况下,冒泡排序的比较次数为____。

A. 90

B. 20

C. 19

D. 190

本题的考查知识点是冒泡排序。冒泡排序中比较次数最坏情况:n(n-1)/2,n的长度为20,即20*(20-1)/2=20*19/2=190。 所以本题答案为D。

10、设一棵树的度为3,共有27个结点,其中度为3,2,0的结点数分别为4,1,10。该树中度为1的结点数为____。

A. 不可能有这样的树

B. 13

C. 11

D. 12

本题的考查知识点是二叉树的基本性质。树中的结点数即为树中所有结点的度之和再加1,设度为1的结点数为n0,27=(3*4+2*1+1*n0+0*10)+1,则n0=12。所以本题答案为D。

11、以下定义语句中正确的是______。

A. char a='A'b='B';

B. float a=b=10.0;

C. int a=10,*b=&a;

D. float *a, b=&a;

本题考查的是变量的初始化。选项A中,字符型变量a、b中间缺少逗号,如果对多个相同数据类型的变量赋初值,要用逗号隔开;若把选项A看成是对几个变量赋同一个初值的话,显然'A'b不是变量名,所以选项A不正确;选项B中,如果对几个变量赋以同一个初值,不能写成int a=b=c=3;这种形式,而应写成: int a=3, b=3, c=3;,所以选项B也不正确;选项D中,执行b=&a相当于将地址转换成了浮点型,在C语言下提示出错信息"无效的类型转换",所以选项D也不正确。故本题答案为C。

12、与十进制数200等值的十六进制数为____。

A. A8

B. A4

C. C8

D. C4

本题考查的是进制之间的转换。200=16*12+8,12的16进制为 C, 故本题答案为C。

13、有以下程序

main()

{

char a='a', b;

printf("%c,",++a);

printf("%c \n", b=a++);

}

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

A. b, b

B. b, c

C. a, b

D. a, c

本题考查的是++运算符。 ++在变量前和变量后的唯一区别就在于在执行"++变量"所在的语句时,是先将变量加了再执行它所在语句还是先执行它所在的语句再使变量加1,当++在变量后时,也就是"变量++",那就是先将变量值代入表达式运算后再使变量加1:而"++变量"是先使变量加1,再把加1后的结果放入表达式进行运算。这两种情况,在执行完变量所在的语句后,它们在内存中的值都是加过1之后的值了。所以本题中printf("%c, " ,++a)先将a加,再执行此条语句,输出b,而printf("%c \n", b=a++)是先输出刚才a的值(刚才的at+表示a=a+1,所以是b),然后再加。所以答案为A。

14、有以下程序

main()

{

int a=666, b=888;

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

}

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

A. 错误信息

B. 666

C. 888

D. 666,888

本题考查的是输出格式。 printf()函数中,当格式转换说明符个数少于输出项个数时,多余的输出项不予输出。所以本题答案为B。

15、有以下程序:

main()

{

int i;

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

switch(i)

{

case 0 :

printf("%d", i);

case 2:

printf("%d", i);

default :

printf("%d", i);

}

}

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

A. 022111

B. 021021

C. 000122

D. 012

此题考点是switch语句。 switch语句的一般形式如下: switch(表达式) { case常量表达式1:语句1; case常量表达式2:语句2; case常量表达式n:语句n; default :语句n+1; } switch语句执行完一个case后面的语句后,流程控制转移到下一个case继续执行。"case 常量表达式"只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。如果想在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行。可以用一个break语句来达到此目的。本题中没有使用break终止switch语句的执行。在此题中当i=0时,执行第一个case语句,因为它后面没有break,所以一直到执行完default语句结束,再执行下一循环。故本题答案为C。

16、若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y |<10的是_______。

A. abs(x-y)<10

B. x-y>-10&&x-y<10

C. ! (x-y)<-10| | !(y-x)>10

D. (x-y)*(x-y)<100

本题考查的是表达式。选项A中,abs()本身就是求绝对值的函数,所以是正确的;选项B是把|x-y|<10表示成了数学表达式中的-10<(x-y)<10,然后再用c语言规则表示出来的;选项D相当于把|x-y<10两边同时平方,此处表达也是正确的;而选项C中!(x-y)<-10相当于(x-y)>=-10,! (y-x)>10相当于(x-y)>=-10。故选项C相当于(x-y)>=-10,所以错误。故本题答案为C。

17、下列条件语句中,功能与其他语句不同的是______。

A. if(a) printf("%d \n",x); else printf("%d\n", y);

B. if(a==0) printf("%d \n", y); else printf("%d\n",x);

C. if (a!=0) printf("%d \n", x); else printf("%d\n", y);

D. if(a==0) printf("%d\n", x); else printf("%d\n" , y);

此题考的是if语句中逻辑表达式值的判断。 if(a)表示a值为真(即不等于0都为真)的话,就输出x的值,否则输出y的值;if(a==0)表示如果a与0等值,即a不为真,就输出p的值,否则输出x的值,此与选项A等价;再看选项C,a不等于0,即为真,输出x,否则输出y,与前两个都同意,而选项D恰好与前几项的意思相反,它是a为0时,输出x,为真时输出y。故本题答案为D。

18、有以下程序

main()

{

int i=0,s=0;

for (; ;)

{

if(i==3 || i==5)

continue;

if (i==6)

break;

i++;

s+=i ;

}

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

}

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

A. 10

B. 13

C. 21

D. 程序进入死循环

此题考的是continue的用法。首先解释一下for (;;)为什么对?因为for语句的作用是给循环变量赋初值,给出循环条件,使循环变量自动增值,而此处都没有进行没置,说明不设初值,不判断条件,循环变量不增值,所以是对的,其实此题中的这三个功能在其它语句中都已体现;下面来说说continue语句,它只能用在循环中,它的作用是跳过其后面的语句,直接将控制转移到下一轮循环条件的测试,此题中,执行时首先是i=0,两个if条件都不成立,则接下执行i+t, s=i;第二次循环继续执行,判断if语句,当执行到i=3时,就执行continue,跳过它下面的语句,继续执行下一轮循环,而又因为此时在for循环中并没有使变量i增值,所以这轮循环的i值还是3 ,继续continue,无终止条件,进入死循环。故本题答案为D。

19、有以下程序

main()

{

char a, b, c, d;

scanf("%c,%c,%d,%d",&a,&b,&c, &d) ;

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

}

若运行时从键盘上输入:6,5,65,66↙。则输出结果是_______。

A. 6,5,A,B

B. 6,5,65,6

C. 66,5,6,5

D. 6,5,6,6

本题考查的是格式字符的输入和输出。将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中,所以它的存储形式与整数的存储形式类似。C语言使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以整数形式输出。以字符形式输出时,需要先将存储单元中的ASCII码转换成相应字符,然后输出,以整数形式输出时,直接将ASCII码作为整数输出。此题变量a, b是以字符型常量输入的,在内存中存储的是字符常量6和5相对应的ASCII码;变量c, d是以整型常量输入的,在内存中存储的就是直接的整型常量65和6,在输出时,因为a b, c. d都要求以字符形式输出,所以,将字符常量6和5所对应的内存的ASCII码翻译成字符常量为6和5输出,将内存中的整型数65和66对应的字符常量即A和B输出。所以本题答案为A

20、以下能正确定义二维数组的是______。

A. int a[][3];

B. int a[][3]={2*3} ;

C. int a[][3]={};

D. int a[2][3]={{1},{2],{3,4} } ;

本题考查的是二维数组的定义。选项B不符合二维数组的定义规范,选项C中不能赋空值,选项D中a[2][3]表示a是一个2行3列的数组,而后面赋值却赋了3行,所以B,C,D均错误。故本题答案为A。

21、有以下程序

int f(int a)

{

return a%2;

}

main()

{

int s[8]={1,3,5,2,4,6} , i, d=0;

for (i=0;f(s[i]) ; i++)

d+=s[i];

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

}

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

A. 9

B. 11

C. 19

D. 21

此题考的是for语句的循环终止条件。在主函数main()中,f(s[i])为for语句的循环终止条件,当f函数返回的值非零时,则继续执行循环,否则循环终止,输出d的值。下面是此题的运行步骤:当i=0时,判断f(s[i])所返回的值是否符合终止条件,此时返回值为1,符合条件,继续执行,d=1、当i=1时,s[1]=3传递给a, a%2=1,所以f()的返回值为1,符合条件,d=d+s[1]=4;当i=2时,s[2]=5传递给a, a%2=1,所以f()的返回值为1,符合条件,d=d+s[2]=9:当i=3时,s[3]=2传递给a, a%2=0,所以f()的返回值为0,条件为假,所以终止循环,直接执行循环下面的语句printf(),输出d为9。故本题答案选A。

22、若有以下说明和语句

int c[4][5],(*p)[5];

p=c;

能够正确引用c数组元素的是_______。

A. p+1

B. *(p+3)

C. *(p+1)+3

D. *(p[o]+2)

本题考查的是数组元素的引用。如果定义一个指针指向二维数组的一行,则可以移动到下一行,这就是行指针。行指针的定义格式为:[存储类型] 数据类型(*指针)[n]这里的n是一个整数,表示所指向的二维数组的列数。(*p)[5]中p是指向一个包含5个元素的一维数组,p的值就是该一维数组的首地址。所以当用行指针访问二维数组时,行指针每增加,就移动一行,即指向二维数组的下一行,例如此题中的pi将指向数组的第i行。即选项A所指的意思是指向数组c的第1行,并不是引用c数组的元素,B答案中p+3是指向数组元素的第3行,*(p+3)是指第三行第零个元素的地址;选项c由对选项A,选项B的解释可知,它指的是第一行第3列元素的地址;选项中p[0]=2是指第0行第2列元素的地址,再加个*就表示第0行第2列的元素,即c[0][2]。故本题答案为D

23、有以下程序

main()

{

int a=7,b=8,*p,*q,*r ;

p=&a ;

q=&b ;

r=p;

p=q;

q=r;

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

}

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

A. 8,7,8,7

B. 7,8,7,8

C. 8,7,7,8

D. 7,8,8,7

此题考的是指针变量。存放变量地址的变量是指针变量,用来指向另一个变量,本题中p和q就是指针变量,它们分别存放了变量a和b的地址,所以程序在执行完p=&a;q=&b;时,*p和*q的值分别为7和8,由于下面的程序段r=p; p=q;q=r;的作用是用于交换指针变量p和q,即将它们所存放的a和b的地址进行了交换,也就是p指向了b,q指向了a,此时a、b的值并没有改变,所以输出的*p,*q的值为8,7,而a, b的值仍为7,8 故本题答案为C。

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

A. if(s1>s2) S;

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

C. if(strcmp(s2,s1)>0) S;

D. if(strcmp(s1, s2)>0) S;

本题考的是字符串比较函数strcmp(char *s1, char *s2)。字符串比较规则是对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到"\0"为止。如果全部相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。比较的结果由函数值带回。当s1<s2,返回值<0;当s1=s2时,返回值=0,当s1>s2时,返回值>0,所以在此题中要使得s1所指串大于s2所指串,那么就必定使得strcmp(s1l, s2)> 0. 故本题答案为D。

25、有以下程序

#include <stdio.h>

main()

{

int a[]={1,2,3,4,5,6,7,8,9,10,11,12,} ,

*p=a+5,*q=NULL;

*q=*(p+5);

printf("%d %d\n", *p,*q);

}

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

A. 运行后报错

B. 6 6

C. 6 11

D. 5 10

此题考查的是指针变量赋值。本题将指针q赋值为空,即指向了空地址,而对空地址所对应的内容赋值*q=*(p+5)是会出错的,所以输出结果会提示Null pointer assignment。所以此题答案为A。

26、有以下程序

main()

(

char str[][10]={"China","Beijing"} ,

*p=str;printf("%s \n", p+10);

}

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

A. China

B. Bejing

C. ng

D. ing

此题考的是指向数组元素的指针变量。本题首先要知道,C语言中二维数组元素排列的顺序是按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。此题二维数组str[0]前5个元素为'C','h', 'i', 'n', 'a', '\0',第6个元素为'\0',后4个元素为空字符。紧接着内存单元存放的内容即从str[1][0]到str[1][9]为'B','e' ,'i', 'j','i','n', 'g','\0',第八个元素为'\0',后两个元素为空字符,执行*p=str后,指针p就指向了二维数组str的首地址,所以p+10就指向了从首地址依次向后的第11个存储单元即字符B的地址,所以输出Beijing,故答案为B。如果此题将*p=str改为(*p)[10]=str; 则p-10指的就是str的第10行,如果此时要想输出Beijing,则必需将p+10改为p+1,因为(*p)[10]中的p是行指针,它是指向包含10个元素的一维数组,那么p+1就是加的一行了;而本题的p+1只是移动一个位置.因为此题的p只是一个指针变量。所以此题答案为B。

27、有以下程序

main()

{

char s[]="ABCD",*p;

for (p=s+1; p<s+4 ; p++)

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

}

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

A. ABCD BCD CD D

B. A B C

C. B C D

D. BCD CD D

此题考的是指向数组元素的指针。 p=s+1是指将s[1]的地址赋给p,循环的终止条件是p<s+4,s+4表示的是s[4]的地址,即运行到s+3那个地址结束,所以此循环总共运行3次,所以答案在C和D中选,又因为程序中按"%s"格式符输出故本题答案为D。

28、在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则___。

A. 称为函数的直接递归调用

B. 称为函数的间接递归调用

C. 称为函数的循环调用

D. C语言中不允许这样的递归调用

本题考的是函数的递归调用。在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用;在调用f1函数过程中要调用f2函数,而在调用f2函数过程中又要调用f1函数是间接调用,所以本题是函数的间接递归调用故本题答案为B。

29、以下叙述中正确的是_______。

A. 局部变量说明为static存储类,其生存期将得到延长

B. 全局变量说明为static存储类,其作用域将被扩大

C. 任何存储类的变量在未赋初值时,其值都是不确定的

D. 形参可以使用的存储类说明符与局部变量完全相同

此题考的是变量的作用域。在一个函数内部定义的变量是局部变量,它只在本函数范围内有效,而全局变量的作用域为整个源程序文件,即它可以为本文件中所有函数所共用,static类型的变量是静态变量,它的值在函数调用结束后不会消失,而是保留原值,即占用存储单元不释放,由于全局变量的存储方式也是如此,即全局变量和说明为static类型的变量的作用域是相同的,所以B答案这句话是错误的,A答案是正确的;C答案也是错误的,因为对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量),而对自动变量来说,如果不成初值则它的值是一个不确定的值,这是因为每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。[回车]故本题答案为A。

30、设有定义语句: char c1=92,c2=92;,则以下表达式中值为零的是_______。

A. c1^c2

B. c1&c2

C. ~c2

D. c1 |c2

本题考的是位运算。 "^'是按位异或运算,当对应位上的二进制数值相同时,异或的结果为0,对应位上的二进制数值不同时,异或的结果为1,因为c1, c2的值相同,所以异或的结果为0,所以A为正确答案。 "&"是按位与运算符(只有当所有对应位上的数都不相同时结果才为0,所以c1&c2的值并不可能为0)。 "~"是按位取反(由于十进制92转化成二进制并不是全为1,所以即使取反也不能得到全为0的答案)。 "|"是按位或运算(由于十进制92转化为二进制也不是全为0,所以按位或运算后也不会全为0)。故本题答案为A。

31、程序中对fun函数有如下说明

void *fun() ;

此说明的含义是_______。

A. fun函数无返回值

B. fun函数的返回值可以是任意的数据类型

C. fun函数的返回值是无值型的指针类型

D. 指针fun指向一个函数,该函数无返回值

本题考的是函数的返回值。由于()的优先级高于*,所以void *fun()表示声明了一个函数,这个函数的返回值是指向无值型变量的指针,所以本题答案为C。D答案的表达法相对应的函数说明应为void (*fun)()。故本题答案为C。

32、有以下程序

main()

{

char s[]="Yes\n/No",*ps=s;

puts(ps+4) ;

*(ps+4)=0;

puts(s);

}

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

A. n/No Yes /No

B. /No Yes

C. /NO Yes /No

D. /No Yes

此题考的是puts()函数。其作用是将一个字符串(以'\0'结束的字符序列)输出到终端。用puts函数输出的字符串中可以包含转义字符,遇到转义字符,自动跳过去。例如本题中ps+4指的是'/'的地址,并不是'\n'的地址。所以puts(ps+4)输出的是/NO。 C规定:在每一个字符串的结尾加一个"字符串结束标志",以便系统据此判断字符串是否结束。C规定以字符'\0'作为字符串结束标志。'\0'是一个ASCII码为0的字符,从ASCII代码表中可以看到ASCII码为0的字符是"空操作字符',即它不引起任何控制动作,也不是一个可显示的字符。所以本题执行*(ps+4)=0之后,再执行puts(s),就相当于输出字符串Yes后遇到结束标志。故本题答案为B。

33、有以下程序

main()

{

unsigned int a;

int b=-1 ;

a=b;

printf("%u", a) ;

}

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

A. -1

B. 65535

C. 32767

D. -32768

本题考的是不同类型数据间的混合运算。当运算对象为不同类型时,数据的转换方向为int→unsigned→ long→double,本题程序中的变量b为int型,先要转换为unsigned型,int型变量的数值范围为-32768~32767,最高位为符号位,而unsigned所表示的数的范围为0-6535,它的最高位为数值位。由于内存中是以补码形式存储数据的,所以整型的"-1"在内存中的表示为16个1,最高位的"1"表示符号负,将它转换为unsigned类型,即将原符号位表示符号的"1"看成数值,所以就得到16个数值位1,即65535。故本题答案为B。

34、有以下程序

void fun(int *a,int i,int j)

{

int t;

if(i<j)

{

t=a[i];

a[i]=a[j] ;

a[j]=t ;

i++;

j--;

fun (a,i,j);

}

}

main ()

{

int x[]={2,6,1,8} , i ;

fun(x,0,3);

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

printf("%2d",x[i]);

printf("\n");

}

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

A. 1 2 6 8

B. 8 6 2 1

C. 8 1 6 2

D. 8 6 1 2

本题考的是函数参数的传递。当用数组名作函数参数时,数组名代表数组的首地址。fun(x, 0, 3) ;是将数组名x作为实参,把数组x的首地址传送给形参(指针a),这样数组x与形参指针a共占同一段内存单元,所以在调用函数期间,如果改变了形参数组x的值,也就改变了实参指针a的值。另外此题还考了个函数自身的调用,下面是调用fun()函数的运行过程: a=x, i=0, j=3,判断i<j,交换a[i],a[j],此时a[0]到a[3 ]里面的数分别为8,6,1,2,也即是:x[0]到x[3]中的数值,因为它们共用存储单元;i++;,j--后继续调用fun (),此时i,j分别为1,2,交换a[1],a[2]的值后a所指向的存储单元中的数据为8,1,6,2:继续i++;j--后判断i<j不成立,返回主函数,输出x[i]即指针a所指向的数据8,1,6,2。故本题答案为C。

35、有以下说明和定义语句

struct student

{ int age; char num[8] ;} ;

struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};

struct student *p=stu;

以下选项中引用结构体变量成员的表达式错误的是_______。

A. (p++)->num

B. p->num

C. (*p).num

D. stu[3].age

本题考的是结构体变量的引用。引用形式有以下三种:①结构体变量.成员名;②(*p).成员名;③p→成员名。所以A,B,C答案都是正确的。故本题答案为D。

36、有以下程序

main()

{

int x[]={1,3,5,7,2,4,6,0}, i, j, k;

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

for (j=2; j>=i ; j--)

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

{

k=x[j] ;

x[j]=x[j+1] ;

x[j+1]=k ;

}

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

for(j=4; j<7-i ; j++)

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

{

k=x[j];

x[j]=x[j+1];

x[j+1]=k ;

}

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

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

printf("\n");

}

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

A. 75310246

B. 01234567

C. 76310462

D. 13570246

本题考查的是排序算法。 for(i=0; i<3 ; i++) for (j=2;j>=i ; j--) if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k ; } 此段程序的作用是将数组x[0]到x[3]中的数由大到小进行排列,运行此段程序后x[]中的值变为x[]={7,5,3,1,2,4,6,0} for(i=0; i<3; i++) for(j=4;j<7-i ; j++) if(x[j]>x[j+1]){ k=x[ j];x[j]=x[j+1];x[j+1]=k ; } 此段程序的作用是将数组x[4]到x[7]中的数由小到大进行排列,运行此段程序后x[]中的值变为x[]={7,5,3,1,0,2,4,6}最后通过一个循环将X[]中的数依次输出。故本题答案为A。

37、有如下程序

#include <stdio. h>

main()

{

FILE*fp1;

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

fprintf(fp1, "abc") ;

fclose(fp1);

}

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

A. goodabc

B. abcd

C. abc

D. abcgood

本题考的是文件类型指针。 fp1=fopen("f1.txt" "w")表示打开名为f1.txt 的文件,使用文件方式为向该文件写数据,如果原来不存在该文件,则在打开时新建一个以指定的名字命名的文件;如果原来已存在一个以该文件命名的文件,则在打开时将该文件删去,然后重新建立一个新文件,所以本题中 f1.txt中原有内容good被删去了,fopen函数带回指向fp1文件的指针并赋给fp1。 fprintf(fp1, "abc ")的作用是将字符串abc输出到fp1指向的文件上。故本题答案为C。

38、以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请为下划线处有号码的选择出正确的选项。

#include <stdlib.h>

stuct node

{

char data; struct node *next;

} ;

_(48)_ CreatList(char *s)

{

struct node *h,*p,*q;

h=(struct node *) malloc(sizeof(struct node)) ;

p=q=h;

while(*s !='\0')

{

p=(struct node *) malloc (sizeof(struct node)) ;

p->data=___;

q->next=p;

q=____;

s++;

}

p->next='\0';

return h;

}

main()

{

char str[]="link list";

struct node *head;

head=CreatList(str);

……

}

A. char *

B. struct node

C. struct node *

D. char

本题考的是建立动态链表。本题要求建立一个struct node类型的数据链表,从main()函数中可知,head是"头指针"变量,它的值是由CreatList(str)带回的一个结构体类型的指针变量,指向所建立的表的第一个数据,所以第48空应该填struct node *。故本题答案为C。

39、以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请为下划线处有号码的选择出正确的选项。

#include <stdlib.h>

stuct node

{

char data;

struct node *next;

};

_____CreatList(char *s)

{

struct node *h,*p,*q);

h=(struct node *) malloc(sizeof(struct node)) ;

p=q=h;

while(*s !='\0')

{

p=(struct node *) malloc(sizeof(struct node)) ;

p->

data=__(49)___;

q->

next=p;

q=____;

s++;

}

p->next='\0';

return h;

}

main()

{

char str[]="link list";

struct node *head;

head=CreatList(str);

……

}

A. *s

B. s

C. *s++

D. (*s)++

本题考的是建立动态链表。从本题要求建立一个struct node类型的数据链表,从main()函数中可知,head是"头指针"变量,它的值是由CreatList(str)带回的一个结构体类型的指针变量,指向所建立的表的第一个数据,所以第48空应该填struct node *。再从本题的函数参数传递看,传递的是字符串link list的首地址给指针变量s,所以可以推断建立的链表一定与link list字符串有关,再看CreatList (char *s)函数中所定义的变量及其它语句,可知h, p, q是用与建立链表的,h表示头指针,p用于记录开辟的新结点,而q是用于将新结点与已建立链表相连的中间变量,且所建立链表各个结点的data依次存放的是link list字符串的各个字符,所以49空填的是*s。故本题答案为A。

40、以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请为下划线处有号码的选择出正确的选项。

#include <stdlib.h>

stuct node

{

char data; struct node *next;

};

___CreatList (char *s)

{

struct node *h,*p,*q;

h=(struct node *) malloc(sizeof(struct node)) ;

p=q=h;

while(*s !='\0')

{

p=(struct node *) malloc(sizeof(struct node)) ;

p->data=__;

q->next=p;

q=___(50)__;

s++;

}

p->next='\0';

return h;

}

main()

{

char str[]="link list";

struct node *head;

head=CreatList(str);

……

}

A. p->next

B. p

C. s

D. s->next

本题考的是建立动态链表。在本题第一空应该填struct node *,第二空填*s的基础上,执行q->next=p; q=(50),用于将原链表中的q->next指向新结点p,再将指针q后移,所以第三空应填p 。故本题答案为B。

填空题

 

专项训练

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言二级题库(刷题软件+60套真题+填空题+大题)2022年9月份新题第三套 的相关文章

随机推荐

  • c++ vector基本函数、排序、查找用法

    终于把自己的个人博客安排上啦 欢迎访问我的个人博客 XJHui s Blog vector用法目录 1 基本用法 2 vector的删除操作 3 vector的sort排序 4 翻转vector中的所有元素 5 find 函数的用法 6 v
  • python中shutil.copy()的用法

    shutil copy src dst 是为了复制文件内容且不包含元数据从src到dst dst必须是完整的文件路径文件名 注意 如果src和dst是同一个文件 就会引发错误 dst必须是可写的 否则将引发错误 如果dst已经存在 就会被替
  • C++函数模板的具体化

    一 函数模板的具体化 先看看C 98里面有关具体化方法的标注 对于给定的函数名可以有非模板函数 模板函数 显式具体化函数以及它们的重载函数 显示具体化以template lt gt 打头 并通过函数参数来指示类型 优先级顺序为 非模板函数
  • PyCharm分屏,左右。

    Windows下安装的pycharm 为了对比两个文件的不一致 把新旧文件 左右分屏呈献 操作如下图 即可把当前编辑界面 呈献在屏幕2中 左右对比更方便 当然也可以选择上下分屏 Split Horizontally
  • 程序员工资真的高吗?

    一直以来都很奇怪的事情 每当别人知道我晚上7点才下班 他们几乎都是会发出这样的惊呼 你居然这么晚才下班 而每当这个时候又轮到我来惊呼了 这么早7点就下班还算晚 每次打听别人的下班时间 要么5点30就下班了 要么6点就下班了 打听完了 这个时
  • 【A-Star算法】【学习笔记】【附GitHub一个示例代码】

    文章目录 一 算法简介 二 应用场景 三 示例代码 Reference 本文暂学习四方向搜索 一 算法简介 一个比较经典的路径规划的算法 相关路径搜索算法 广度优先遍历 BFC 深度优先遍历 DFC Di jkstra算法 最短路径问题 D
  • 实现 strStr() 函数

    实现 strStr 函数 给定一个 haystack 字符串和一个 needle 字符串 在 haystack 字符串中找出 needle 字符串出现的第一个位置 从0开始 如果不存在 则返回 1 示例 1 输入 haystack hell
  • STM32 电机教程 30 - 无刷无感入门2

    前言 无刷直流 Brushless Direct Current BLDC 电机是一种正快速普及的电机类型 它可在家用电器 汽车 航空航天 消费品 医疗 工业自动化设备和仪器等行业中使用 正如名称指出的那样 BLDC 电机不用电刷来换向 而
  • 面渣逆袭:计算机网络六十二问,三万字图文详解

    基础 1 说下计算机网络体系结构 计算机网络体系结构 一般有三种 OSI 七层模型 TCP IP 四层模型 五层结构 三种网络体系结构 简单说 OSI是一个理论上的网络通信模型 TCP IP是实际上的网络通信模型 五层结构就是为了介绍网络原
  • 小程序锚点定位(通讯录)

    1 使用视图容器组件scroll view 2 在scroll view中设置属性scroll into view 属性值为锚点id 3 在需要的位置设置锚点ID值 点击后将scroll into view设置为对应的id即可跳转 示例 名
  • idea空Maven项目部署Tomcat提示:no artifacts configured 、以及后续 No artifacts marked for deployment解决方案

    no artifacts configured 没有配置artifacts 关于artifacts的介绍推荐大家看这篇博文点击查看 我们先退到项目界面 右击项目名导入web程序所需的库 导入成功后继续配置tomcat 点击之后我们发现又报了
  • 聊聊网络安全等级保护“能力验证”:配置核查(Linux系统)

    前言 作为测评机构一定会知道每年会举行 能力验证 活动 申请认可和获准认可的合格评定机构通过参加能力验证活动 包括 CNAS 组织实施或承认的能力验证计划 测评机构间比对和测量审核 证明其技术能力 之前的线上会议也表明了对测评机构能力建设方
  • 关于Layui后台ajax返回问题

    刚接触LayUI 几次出现 返回的数据异常 问题 皆是因为数据的格式不对 这里做个小笔记 一般的格式这个样子 data result array code gt 0 msg gt count gt 100 data gt
  • pycm库详解_机器学习评价

    详细介绍pycm库的使用方法
  • qqkey获取原理_qqkey获取器下载

    qqkey获取工具 QQkey控制接收生成器 是一款类似于灰鸽子的一款软件 不同的是不能不能盗号 在你的好友打开了你配置的文件后 你可以在工具中获取到好友的QQkey信息 可以把对方的QQ当做的自己的QQ一样 想干嘛就干嘛 赶紧来下载使用吧
  • 在 esmodule 环境下使用 jsts

    文章目录 1 说明 Geometry 类 2 安装 3 使用 以 buffer 为例 4 JTS 文档 1 说明 jsts 完全就是根据其老妈 jts 的 java 包结构移植的 除了部分分析功能需要额外注意外 基本上所有的子模块的根路径位
  • C++ 中隐藏DOS调用的命令行窗口

    转自 http hi baidu com jackyho2000 blog item b5c5fabdd3b4db0019d81fbb html 我演示了一下在MFC程序中怎么应用DOS的dir的命令 可是我们遇到了需要解决的问题 首先就是
  • 包含抽象方法的类是抽象类吗?

    如果这个问题的范围是围绕 类 那么 包含抽象方法的类一定是抽象类 因为抽象方法的特征是 必须定义在抽象类中 但是话由说回来了 因为在JAVA中还有一种允许使用抽象方法的结构 那就是接口 在接口中的方法只能是抽象方法 不允许出现具体实现的方法
  • Python,创建map

    import matplotlib pyplot as mpp import os random math matplotlib version 3 5 1 numpy version 1 21 5 创建画布及坐标轴 def set cav
  • C语言二级题库(刷题软件+60套真题+填空题+大题)2022年9月份新题第三套

    文章只能发选择题 刷大题去刷题软件效果会更好 刷题软件 gongzhonghao 露露IT 选择题 1 下面选项中不是关系数据库基本特征的是 A 不同的列应有不同的列名 B 不同的列应有不同的数据类型 C 与行的次序无关 D 与列的次序无关