if(flag"b[i]>b[j]:
b[i]
{t=b[i];b[i]=b[j];b[j]=t;}
}
main()
{
inta[10]={5,4,3,2,1,6,7,8,9,10},i;
f(&a[2],5,0);
f(a,5,1);
for(i=0;i<10;i++)
printf("%d,",a[i]);
}
程序运行后的输出结果是
A)1,2,3,4,5,6,7,8,9,10,
B)3,4,5,6,7,2,1,8,9,10,
C)5,4,3,2,1,6,7,8,9,10,
D)10,9,8,7,6,5,4,3,2,1,
【解析】此题重点考察函数的参数传递,函数的参数传递分为传值和传地址两种情况。
此题就是结合数组考察参数传递的情形。
函数f完成的功能是对数据进展排序,语句f(&a[2],5,0)的作用是对从a[2]开场的5个元素进展从大到小排序。
注意:
这里传递的是地址&a[2],所以排序操作可看作是直接对数组a操作,执行后的结果为5,4,7,6,3,2,1,8,9,10。
语句f(a,5,1)对数组a的前5个元素从小到大排序,排序后数组为:
3,4,5,6,7,2,1,8,9,10。
因此B选项正确。
假设有定义语句:
inta[2][3],*p[3];
则以下语句中正确的选项是
A)p=a;
B)p[0]=a;
C)p[0]=&a[1][2];
D)p[1]=&a;
【解析】A选项错误,因为p是指向一个指针数组,作为数组名,不能指向别的地方。
B选项错误,因为p[0]是一个int指针,也就是int*;而a是一个指向指针的指针int**。
C选项正确,因为p[0]是一个int*,a[1][2]是int,&a[1][2]是int*,类型吻合。
D选项错误,因为a作为数组名,不能取地址,即使能取,p[1]是int*,&a是int***,类型不对。
因此C选项正确。
以下表达中错误的选项是
A)C程序必须由一个或一个以上的函数组成
B)函数调用可以作为一个独立的语句存在
C)假设函数有返回值,必须通过return语句返回
D)函数形参的值也可以传回给对应的实参
【解析】形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。
在C语言中,实参向形参传送数据的方式是"值传递〞。
因此D选项正确。
有以下程序
*include
main()
{inta=1,b=2;
for(;a<8;a++){b+=a;a+=2;}
printf("%d,%d\n",a,b);
}
程序运行后的输出结果是
A)9,18
B)8,11
C)7,11
D)10,14
【解析】第一次循环a的值为1,满足条件,执行b+=a与a+=2,则b的值变为3,a的值变为3。
执行a++,a的值为4,满足条件进入第二次循环,执行完循环体后b的值为7,a的值为6。
执行a++,a的值为7,满足条件进入第三次循环,执行完循环体后b的值为14,a的值为9。
执行a++,a的值变为10。
所以选择D选项。
在以下给出的表达式中,与while(E)中的(E)不等价的表达式是
A)(E>0||E<0)
B)(E==0)
C)(!
E==0)
D)(E!
=0)
【解析】while语句中条件表达式E的值不为0即为真,认为满足条件,所以与B选项中表达式的含义正好相反,选择B选项。
假设有定义:
inta,b;
通过语句
scanf("%d;%d",&a,&b);
能把整数3赋给变量a,5赋给变量b的输入数据是
A)35
B)3,5
C)3;5
D)35
【解析】输入数据的格式必须与scanf()的格式控制串完全匹配,所以输入时必须在3和5之间输入";"。
以下关于C语言的表达中正确的选项是
A)C语言的数值常量中夹带空格不影响常量值的正确表示
B)C语言中的变量可以在使用之前的任何位置进展定义
C)在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致
D)C语言中的注释不可以夹在变量名或关键字的中间
【解析】C语言的数值常量中不能夹带空格,所以A错误。
C语言中的变量都必须先定义再使用,对变量的定义通常放在函数体内的前部,但也可以放在函数外部或复合语句的开头,不能随便放置,所以B错误。
在C语言中运算符两侧的运算数据类型可以不一致,且结果与精度较高的保持一致,所以C错误。
一个教师可讲授多门课程,一门课程可由多个教师讲授。
则实体教师和课程间的联系是( )。
A)1:
1联系
B)1:
m联系
C)m:
1联系
D)m:
n联系
【解析】因为一个教师可讲授多门课程,而一门课程又能由多个教师讲授所以他们之间是多对多的关系,可以表示为m:
n。
负责数据库中查询操作的数据库语言是( )。
A)数据定义语言
B)数据管理语言
C)数据操纵语言
D)数据控制语言
【解析】数据定义语言:
负责数据的模式定义与数据的物理存取构建;数据操纵语言:
负责数据的操纵,包括查询及增、删、改等操作;数据控制语言:
负责数据完整性、平安性的定义与检查以及并发控制、故障恢复等功能。
下面描述中错误的选项是( )。
A)系统总体构造图支持软件系统的详细设计
B)软件设计是将软件需求转换为软件表示的过程
C)数据构造与数据库设计是软件设计的任务之一
D)PAD图是软件详细设计的表示工具
【【解析】详细设计的任务是为软件构造图中而非总体构造图中的每一个模块确定实现算法和局部数据构造,用*种选定的表达工具表示算法和数据构造的细节,所以A)错误。
*二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)( )。
A)3
B)4
C)6
D)7
【解析】根据二叉树的根本性质3:
在任意一棵二叉树中,度为0的叶子结点总比度为2的结点多一个,所以此题中度为2的结点为1-1=0个,所以可以知道此题目中的二叉树的每一个结点都有一个分支,所以共7个结点共7层,即度为7。
以下表达中正确的选项是( )。
A)在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化
B)在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化
C)在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化
D)以上说法均不正确
解析】栈是先进后出的数据构造,在整个过程中,栈底指针不变,入栈与出栈操作均由栈顶指针的变化来操作,所以选择C)。
以下关于栈表达正确的选项是( )。
A)栈顶元素最先能被删除
B)栈顶元素最后才能被删除
C)栈底元素永远不能被删除
D)栈底元素最先被删除
解析】栈是先进后出的数据构造,所以栈顶元素最后入栈却最先被删除。
栈底元素最先入栈却最后被删除。
所以选择A)。
有以下程序:
*include
main()
{unsignedchara=2,b=4,c=5,d;
d=a|b;d&=c;printf("%d\n",d);}
程序运行后的输出结果是( )。
A)3
B)4
C)5
D)6
【解析】&按位与,如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。
|按位或,两个相应的二进制位中只要有一个为1,该位的结果值为1。
2的二进制为00000010,4的二进制为00000100,所以做或运算结果为00000110,该数与5即00000101做与操作结果为00000100,即4。
以下表达中错误的选项是( )。
A)使用三种根本构造构成的程序只能解决简单问题
B)构造化程序由顺序、分支、循环三种根本构造组成
C)C语言是一种构造化程序设计语言
D)构造化程序设计提倡模块化的设计方法
正确答案:
A
答疑:
【解析】使用顺序,选择(分支),循环三种根本构造构成的程序可以解决所有问题,而不只是解决简单问题,所以A)错误。
2.数据库应用系统中的核心问题是数据库的设计。
耦合性和内聚性是对模块独立性度量的两个标准。
以下表达中正确的选项是( )。
A)提高耦合性降低内聚性有利于提高模块的独立性
B)降低耦合性提高内聚性有利于提高模块的独立性
C)耦合性是指一个模块内部各个元素间彼此结合的严密程度
D)内聚性是指模块间互相连接的严密程度
正确答案:
B
答疑:
【解析】模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。
一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性,所以A)错误,B)正确。
耦合性是模块间互相连接的严密程度的度量而内聚性是指一个模块内部各个元素间彼此结合的严密程度,所以C)与D)错误。
3.软件测试的目的是为了发现错误而执行程序的过程,并不涉及改正错误,所以选项A)错误。
程序调试的根本步骤有:
错误定位、修改设计和代码,以排除错误、进展回归测试,防止引进新的错误。
程序调试通常称为Debug,即排错。
软件测试的根本准则有:
所有测试都应追溯到需求、严格执行测试方案,排除测试的随意性、充分注意测试中的群集现象、程序员应防止检查自己的程序、穷举测试不可能、妥善保存测试方案等文件。
4.编译软件、操作系统、汇编程序都属于系统软件,只有C)教务管理系统才是应用软件。
冒泡排序与简单插入排序与简单项选择择排序法在最坏情况下均需要比较n(n-1)/2次,而堆排序在最坏情况下需要比较的次数是
*二叉树有5个度为2的结点,则该二叉树中的叶子结点数是( )。
A)10
B)8
C)6
D)4
正确答案:
C
答疑:
【解析】根据二叉树的根本性质3:
在任意一棵二叉树中,度为0的叶子节点总是比度为2的节点多一个,所以此题中是5+1=6个。
5.栈支持子程序调用。
栈是一种只能在一端进展插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此此题的答案为A)。
以下表达中正确的选项是( )。
A)当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丧失
B)翻开一个已存在的文件并进展了写操作后,原有文件中的全部数据必定被覆盖
C)在一个程序中当对文件进展了写操作后,必须先关闭该文件然后再翻开,才能读到第1个数据
D)C语言中的文件是流式文件,因此只能顺序存取数据
正确答案:
A
答疑:
【解析】B)选项中翻开一个已存在的文件并进展了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进展追加操作等。
C)选项中在一个程序中当对文件进展了写操作后,不用先关闭该文件然后再翻开,才能读到第1个数据,可以用fseek()函数进展重新定位即可。
D)选项中,C语言中的文件可以进展随机读写。
有以下程序:
*include
*include
main()
{int*a,*b,*c;
a=b=c=(int*)malloc(sizeof(int));
*a=1;*b=2;*c=3;
a=b;
printf("%d,%d,%d\n",*a,*b,*c);
}
程序运行后的输出结果是( )。
A)1,1,3
B)2,2,3
C)1,2,3
D)3,3,3
正确答案:
D
答疑:
【解析】malloc函数动态分配一个整型的内存空间,然后把函数返回的地址用(int*)强制类型转换为整型指针,再把它赋给a,b,c,即让指针变量a,b,c都指向刚申请的内存空间。
所以只有最后一个赋值语句*c=3的值保存在了该空间内,因为a,b,c三个指针变量均指向该空间,所以打印该空间内的数值为3。
有以下程序:
*include
main()
{unsignedchara=2,b=4,c=5,d;
d=a|b;d&=c;printf("%d\n",d);}
程序运行后的输出结果是( )。
A)3
B)4
C)5
D)6
正确答案:
B
答疑:
【解析】&按位与,如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。
|按位或,两个相应的二进制位中只要有一个为1,该位的结果值为1。
2的二进制为00000010,4的二进制为00000100,所以做或运算结果为00000110,该数与5即00000101做与操作结果为00000100,即4。
有以下程序:
*include
*definePT3.5;
*defineS(*)PT****;
main()
{ inta=1,b=2;printf("%4.1f\n",S(a+b));}
程序运行后的输出结果是( )。
A)7.5
B)31.5
C)程序有错无输出结果
D)14.0
正确答案:
C
答疑:
【解析】宏定义不是C语句,末尾不需要有分号。
所以语句printf("%4.1f\n",S(a+b));展开后为printf("%4.1f\n",3.5;*a+b*a+b;);所以程序会出现语法错误。
有以下程序:
*include
structS
{ inta,b;}data[2]={10,100,20,200};
main()
{ structSp=data[1];
printf("%d\n",++(p.a));
}
程序运行后的输出结果是( )。
A)10
B)11
C)20
D)21
正确答案:
D
答疑:
【解析】声明data是构造S数组。
初始化data[0].a=10;data[0].b=100;data[1].a=20;data[1].b=200。
主函数中p=data[1];即p.a=data[1].a;p.b=data[1].b;执行语句printf("%d\n",++(p.a));打印输出时p.a先增1再打印。
p.a=data[1].a=20,先增1等于21。
以下表达中错误的选项是( )。
A)可以通过typedef增加新的类型
B)可以用typedef将已存在的类型用一个新的名字来代表
C)用typedef定义新的类型名后,原有类型名仍有效
D)用typedef可以为各种类型起别名,但不能为变量起别名
正确答案:
A
答疑:
【解析】关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型,所以A)错误。
在一个C源程序文件中所定义的全局变量,其作用域为( )。
A)由具体定义位置和e*tern说明来决定范围
B)所在程序的全部范围
C)所在函数的全部范围
D)所在文件的全部范围
正确答案:
A
答疑:
【解析】全局变量的作用域是从声明处到文件的完毕。
所以选择A)
有以下程序:
*include
intfun()
{ staticint*=1;
**=2;
return*;
}
main()
{ inti,s=1;
for(i=1;i<=3;i++)s*=fu