开始时,n的值应该为7,所以最后一次执行循环时,输出为6,由此可以排除选项C)。
(24)A 【解析】本题主要考查了字符输入输出函数getchar和putchar的使用。getchar函数用来从标准输入设备上读入一个字符,putchar(c)函数是将字符变量c中的字符输出到标准输出设备上,并且字符可以看作整数参与运算。 (25)A 【解析】本题考查了continue和break语句在循环语句中的作用。break语句的作用是结束本层循环,而continue语句的作用是结束本次循环直接进入到下次循环。
(26)A 【解析】本题利用多重 for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列,最后输出对角线上的元素值。 (27)B 【解析】在main函数中,对f(1)和f(2)的值进行了累加。 f(1)=1
f(2)=f(1)+1=2
最后,j的值为1+2=3
(28)A 【解析】本题主要考查的知识点是大写字母比它对应的小写字母ASCII码值小32,并且字符可以看作整数进行算术运算等操作。
(29)B 【解析】本题用循环的方法考查对数组概念的掌握。首先,当i=0时,数组中的位置是a[2][0]=7,当然,如果用排除法,就不用考虑后面的循环,因为在4个选项中,第1个数为7的选项只有B)。本题执行第2次循环时,i的值为1,则printf函数中的数组指向为a[1][1]=5,依次循环,可求出答案。
(30)A 【解析】通过地址来引用二维数组,若有以下定义:int a[3][4],i,j;且当0≤i≤3,0≤j<4则可以有以下几种方式来引用数组中的第i行,第j列的元素:?a[i][j]?,?*(a[i]+j),?*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。表达式&a[0][0]+2*i+j-2相当于是地址&a[0][0]加上多少偏移量。 (31)C 【解析】本题的选项A)和B)犯了同样的错误,即指针变量在定义后并没有指向具体的变量。也就是说,指针变量中没有确定的地址值,它的值是不可预见的,所指的单元也是不可预见的,因此不能进行赋值操作。另外,在选项D)中,s是int型指针变量,p是char型指针变量,所指向的内存单元所占用的字节数是不
同的,因而不能将字符指针变量p的值赋给整型指针变量s。
(32)C 【解析】本段程序的作用是输出字符串\中字母u之前的字符,并将其转化为大写字母。
注意:如果一个字符数组用来作为字符串使用,那么在定义该字符数组时,数组的大小就应该比它将要实际存放的最长字符多一个元素,以存放'\\0'。
(33)D 【解析】本题考查了二维数组元素引用的方法。题中用动态存储分配函数malloc分配了一个int型数据长度大小的内存,然后指针p指向了这段内存,函数f()中对p所指向的数据进行了赋值,p[1][1]为二维数组第二行第二列的元素,对应于实参a的元素5,所以输出结果为5。
(34)B 【解析】调用函数f()时,将数组a的地址传递给了指针q,此时q指向的就是数组a的第一个元素a[0]。在5次循环过程中,q始终指向a[0],因此a[0]的值增加了5。最后的输出结果为\。
(35)A 【解析】 C语言的字符常量是用单引号(即撇号)括起来的一个字符。除此之外,在C语言中还允许用一个\开头的字符序列来表示字符常量。其中,形式\表示1到3位8进制数所代表的字符;形式\表示1到2位16进制数所代表的字符。在本题中,'\\x13'表示回车符,是一个字符常量;'\\081'用8进制数所代表的字符,但形式不正确,因为8进制数所代表的字符中不会出现数字\;'65'不是一个字符,而是一个十进制数字;\是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。
(36)D 【解析】本题考查数组指针的应用。选项D)第一层括号中为数组a中第i项元素的值,外面再加指针运算符没有意义。
(37)B 【解析】 strcpy()函数的功能是将字符串q复制到从p[3]位置开始的存储单元,同时复制字符串结束标志'\\0' 到p[6]中。函数strlen()返回的是字符串中不包括'\\0'在内的实际长度,故本题答案为B)
(38)A 【解析】 auto变量:无static声明的局部变量。用auto作存储类别的声明时,可以不写auto,存储类别隐含确定为auto(自动存储类别),是动态存储方式。大多数变量是自动变量。用static声明的局部变量是静态局部变量。函数调用结束后静态局部变量占据的内存存
储单元空间不释放,局部变量保留原值,下次调用时可以继续使用该值。用extern声明外部变量,外部变量即全局变量,可以用extern声明来改变全局变量的作用域,实际上,关键字\\可以省略,auto不写则隐含确定为\自动存储类别\属于动态存储方式。
(39)C 【解析】本题考查按位与\。因为1&1=1,0&0=0,所以任何数与自身按位与,结果仍为此数,不发生变化。
(40)A 【解析】本题中,最主要的是掌握几个有关文件函数的应用。 函数名:fopen
功能:打开一个文件 调用方式FILE *fp ;
fp=fopen(文件名,使用文件方式); 函数名:fprintf
功能:传送格式化输出到一个文件中
调用方式:fprintf(文件指针,格式字符串,输出表列);
函数名:fclose
功能:关闭一个文件
调用方式:fclose(文件指针); 函数名:fscanf
功能:从磁盘文件执行格式化输入
调用方式:fscanf(文件指针,格式字符串,输入列表)。
二、填空题
(1)【1】 350 【解析】完全二叉树中,设高度为n,则除h层外其它层结点数都到达最大,可以算出h=10,1至9层结点个数为2^9-1=511,最后一层结点个数为700-511=189个,189/2=95,除最后一层外共有结点2^(9-1)-95=161个,所以所有的结点个数为:189+161=350个。
(2)【2】边界值分析法【解析】黑箱测试法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价类划分法、边界值分析法和错误推测法3种。
(3)【3】关系模型【解析】数据库管理系统是位于用户与操作系统之间的一层系统管理软件,属于系统软件是用户与数据库之间的一个标准接口,其总是基于某种数据模型,可以分为层次模型、网状模型和关系模型。
(4)【4】软件生命周期【解析】软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。一般包括可行性研究与需求分析、设计、实现、测试、交付
使用以及维护等活动。
(5)【5】完整性控制【解析】安全性控制:防止未经授权的用户有意或无意存取数据库中的数据,以免数据被泄露、更改或破坏;完整性控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作;并发控制:正确处理好多用户、多任务环境下的并发操作,防止错误发生;恢复:当数据库被破坏或数据不正确时,使数据库将其恢复到正确的状态。 (6)【6】 a=14 【解析】本题考查的是表达式的优先级问题。先计算表达式3*5=15,再计算a+4=14,将数据14赋值给a,根据printf()函数内的输出格式控制串,最后的输出结果应为\。
(7)【7】 9 【解析】本题的字符串中共有9个字符,它们分别是'I'、'B'、'M'、'\\n'、 '0'、'1'、'2'、'\\1'、'\\\\',其中,\表示换行,\表示反斜杠字符\,所以本题的最后输出结果为9。
(8)【8】 1 【解析】在执行逻辑表达式\时,首先判断j=!ch的值,因为\不为0,所以\编译系统便不再计算表达式\的值,i的值不变,仍为1。 (9)【9】 k=5 【解析】本题主要考查了函数的递归调用方法。g=0或?g=1?或g=2是递归的终止条件,然后用回代的方法从一个已知值推出下一个值,直到计算出最终结果。 (10)【10】 k=p; 【解析】为寻找数组中最大元素的下标,需先预设1个临时最大元素的下标,并顺序逐一考查数组的元素,当发现当前元素比临时最大元素更大时,就用当前元素的下标更新临时最大元素下标。直至考查了数组的全部元素后,这临时最大元素下标就是数组的最大元素下标。通常预设的最大元素下标是数组的首元素下标,考查通常从首元素开始顺序向后继元素考查。程序中,存储临时最大元素下标的变量是k,变量p控制顺序考查的循环控制变量。当发现当前元素s[p]比临时最大元素s[k]更大时,应该用p更新k,所以在空框处应填入代码\。
(11)【11】 I=1 【12】 x[I-1] 【解析】对于10个数,相临的两个数相加取和,总共要进行9次加法运算,所以空14处应填入I=1。相临的两个数相加取和,放在数组a中,x[0]与x[1]的和存放在a[0]中,所以空15处应填入x[I-1]。 (12)【13】 #include 【解析】本
题考查了函数的存储分类的概念。如果没有特别说明,函数的存储范围是从定义函数的位置
到文件的结尾,如果其他文件想使用这个函数,
需要用#include文件包含命令将定义函数的
文件包含进来。
(13)【14】 p->data 【15】 q 【解析】本题考查的是链表这一数据结构对结构体变量中数据的引用。链表的特点是结构体变量中有两个域,一个是数据,另一个是指向该结构体变量类型的指针,用以指明链表的下一个结点。
一、选择题
在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写
在答题卡相应位置上,答在试卷上不得分。 (1)程序流程图中带有箭头的线段表示的是 A)图元关系 B)数据流C)控制流 D)调用关系 (2)结构化程序设计的基本原则不包括 A)多态性 B)自顶向下C)模块化 D)逐步求精 (3)软件设计中模块划分应遵循的准则是 A)低内聚低耦合 B)高内聚低耦合 C)低内聚高耦合 D)高内聚高耦合 (4)在软件开发中,需求分析阶段产生的主要文档是 A)可行性分析报告 B)软件需求规格说明书 C)概要设计说明书D)集成测试计划 (5)算法的有穷性是指 A)算法程序的运行时间是有限的B)算法程序所处理的数据量是有限的 C)算法程序的长度是有限的 D)算法只能被有限的用户使用 (6)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是
A)快速排序 B)冒泡排
序 C)直接插入排序 D)堆排序(7)下列关于栈的叙述正确的是
A)栈按\先进先出\组织数据 B)
栈按\先进后出\组织数据 C)只能在栈底
插入数据 D)不能删除数据
(8)在数据库设计中,将E-R图转换成关系数
据模型的过程属于 A)需求分析阶段 B)概念设计阶段 C)逻辑设计阶段 D)物理设计阶段 (9)有三个关系R、S和T如下:
R B C D a 0 k1 b 1 n1
S B C D f 3 h2 a 0 k1
n 2 x1 T
B C D
a 0 k1
由关系R和S通过运算得到关系T,则所使用的运算为 A)并 B)自然连接 C) 笛卡尔积 D)交 (10)设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字 (键或码)为 A)课号,成绩 B)学号,成绩 C)学号,课号 D)学号,姓名,成绩 (11)以下叙述中正确的是 A)C程序中的注释只能出现在程序的开 始位置和语句的后面 B)C程序书写格式严格,要求一行内只能写一个语句 C)C程序书写格式自由,一个语句可以写 在多行上 D)用C语言编写的程序只能放在一个程序文件中 (12)以下选项中不合法的标识符是 A)print B)FOR C)&a D)_00 (13)以下选项中不属于字符常量的是 A)′C′ B)\C)′\\xCC′ D) ′\\072′ (14)设变量已正确定义并赋值,以下正确的
表达式是 A)x=y*5=x+z B)int(15.8%5) C)x=y+z+5,++y D)x=25%5.0
(15)以下定义语句中正确的是
A)int a=b=0; B)char A=65+1,b=′b′; C)float a=1,?*b=&a,?*c=&b; D)double a=0.0;b=1.1; (16)有以下程序段
char ch; int k; ch=′a′; k=12; printf(\ printf(\已知字符a的ASCII码值为97,则执行上述程
序段后输出结果是
A)因变量类型与格式描述符的类型不匹
配输出无定值 B)输出项与格式描述符个
数不符,输出为零值或不定值
C)a,97,12k=12 D)a,97,k=12
(17)已知字母A的ASCII码值为65,若变量
kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是 A)kk>=′A′&& kk<=′Z′ B)!(kk>=′A′||kk<=′Z′) C)(kk+32)>=′a′&&(kk+32)<=′Z′ D)isalpha(kk)&&(kk<91) (18)当变量c的值不为2、4、6时,值也为\真\的表达式是 A)(c==2)||(c==4)||(c==6) B)(c>=2&& c<=6)||(c!=3)||(c!=5) C)(c>=2&&c<=6)&&!(c%2) D)(c>=2&& c<=6)&&(c%2!=1) (19)若变量已正确定义,有以下程序段 int a=3,b=5,c=7; if(a>b) a=b; c=a; if(c!=a) c=b; printf(\其输出结果是 A)程序段有语法错 B)3,5,3 C)3,5,5 D)3,5,7 (20)有以下程序 #include
main() { int x=1,y=0,a=0,b=0; switch(x) { case 1:
switch(y)
{ case 0:a++; break;
case 1: b++; break;
}
case 2:a++; b++; break;
case 3:a++; b++;
}
printf(\ } 程序的运行结果是 A)a=1,b=0 B)a=2,b=2 C)a=1,b=1 D)a=2,b=1 (21)有以下程序 #include
printf(\ } } 程序的运行结果是 A)7,4,2, B)8,7,5,2,
C)9,7,6,4, D)8,5,4,2,
(22)以下不构成无限循环的语句或语句组是
A) n=0; do{++n;}while(n<=0);B) n=0;
while(1){n++;} C) n=10; while(n);{n--;} D) for(n=0,i=1; ;i++)n+=i; (23)有以下程序 #include
p=s; 则执行p=s;语句后,以下叙述正确的是 A)可以用*p表示s[0] B)s数组中元素的个数和p所指字符串长度相等 C)s和p都是指针变量 D)数组
s中的内容和指针变量p中的内容相同 (26)若有定义:int a[2][3];,以下选项中对a数组元素正确引用的是 A)a[2][!1] B)a[2][3] C)a[0][3] D)a[1>2][!1] (27)有定义语句:char s[10];,若要从终端给s输入5个字符,错误的输入语句是 A)gets(&s[0]); B)scanf(\ C)gets(s); D)scanf(\ (28)以下叙述中错误的是 A)在程序中凡是以\开始的语句行都是预处理命令行 B)预处理命令行的最后不
能以分号表示结束 C)#define MAX是合
法的宏定义命令行 D)C程序对预处理命
令行的处理是在程序执行的过程中进行的
(29)以下结构体类型说明和变量定义中正确
的是 A)tupedef strct {int n; char c;}REC; REC t1,t2; B)tupedef strct {int n; char c;}; REC t1,t2; C)tupedef strct REC; {int n=0; char c='A';}t1,t2; D)strct
{int n; char c;}REC;
REC t1,t2;
(30)以下叙述中错误的是
A)gets函数用于从终端读入字符串 B)getchar函数用于从磁盘文件读入字符 C)fputs函数用于把字符串输出到文件 D)fwrite函数用于以二进制形式输出数据到文件
(31)有以下程序
#include
main()
{ int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++) c[s[i]]++;
for(i=1;i<5;i++) printf(\
printf(\
}
程序的运行结果是
A)1 2 3 4 B)2 3 4 4 C)4 3 3 2 D)1 1 2 3
(32)有以下程序
#include
void fun(int ?*s,int n1,int n2)
{ int i,j,t;
i=n1; j=n2;
while(i } main() { int a[10]={1,2,3,4,5,6,7,8,9,0},k; fun(a,0,3); fun(a,4,9); fun(a,0,9); for(k=0;k printf(\ } 程序的运行结果是 A)0987654321 B)4321098765 C)5678901234 D)0987651234 (33)有以下程序 #include for(i=0;i for(j=i+1;j A)xy,aaaacc B)aaaacc,xy C)bcc,aabcc D)aabcc,bcc ( 34)有以下程序 #include y=x*x-f(x-2); return y; } main() { int z; z=f(3); printf(\ } 程序的运行结果是 A)0 B)9 C)6 D)8 (35)有以下程序 #include void fun(char *a,char?*b) { while(*a==′*′)a++; while(?*b=*a){b++;a++;} } main() { char *s=\ fun(s,t); puts(t); } 程序的运行结果是 A)*****a*b B)a*b C)a*b****? D)ab (36)有以下程序 #include f(STU a) { STU b={\ int