未来教育 全国计算机等级考试 (qq.com)https://mp.weixin.qq.com/s?__biz=MzkyNjQwODc2MA==&mid=2247483676&idx=1&sn=96daf350e5cb0542bbab621cbc8434b5&chksm=c236884bf541015d868736e488791c4c90c06eb04339fb3923f02fc36fc5732b248f176c9bcd#rd
1、深度为7的完全二叉树中共有125个结点,则该完全二叉树中的叶子结点数为__。
A.62
B.63
C.64
D.65
本题考查知识点是完全二叉树的性质。完全二叉树的总结点为奇数时,叶子结点数是总结点加一再除以2。所以本题答案为B。
2、下列叙述中正确的是_____。
A.所谓有序表是指在顺序存储空间内连续存放的元素序列
B.有序表只能顺序存储在连续的存储空间内
C.有序表可以用链接存储方式存储在不连续的存储空间内
D.任何存储方式的有序表均能采用二分法进行查找
本题考查知识点是有序表。有序表具有两个基本特点:1)所有元素所占的存储空间是不连续的。2)各数据元素的存储空间与按逻辑顺序依次存放可以不一致。所以本题答案为C。
3、设二叉树如下:
则后序序列为__。
A.ABDEGCFH
B.DBGEAFHC
C.DGEBHFCA
D.ABCDEFGH
4、下面描述中不属于软件需求分析阶段任务的是_____。
A.撰写软件需求规格说明书
B.软件的总体结构设计
C.软件的需求分析
D.软件的需求评审
本题考查知识点是软件需求分析阶段的工作。软件需求分析阶段的工作主要分为4个方面:1.需求获取;2.需求分析;3.编写需求规格说明书,4.需求评审。软件的总体结构设计属于软件设计阶段的任务。因此不属于软件需求分析阶段主要工作的是软件的总体结构设计。所以本题答案为B。
5、当数据库中数据总体逻辑结构发生变化,而应用程序不受影响,称为数据的__。
A.逻辑独立性
B.物理独立性
C.应用独立性
D.以上选项都不是
本题考查知识点是数据库的逻辑独立性。逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的,即当数据的逻辑结构改变时,用户程序也可以不变。所以本题答案为A。
6、有三个关系R、S、T如下:
则由关系R和S得到关系T的操作是_____。
A.并
B.投影
C.交
D.选择
本题考查知识点是基本运算的并。从图中可以看出,关系T是关系R和关系s的简单合并。并:设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,则关系与关系S的并由属于R或属于s的元组组成。所以本题答案A。
7、带链的栈与顺序存储的栈相比,其优点是______。
A.入栈与退栈操作方便
B.可以省略栈底指针
C.入栈操作时不会受栈存储空间的限制而发生溢出
D.以上选项都不是
本题考查知识点是链式存储结构和顺序存储结构的特点。顺序存储时如果开辟的空间已满,则再次插入会造成"上溢错误"'﹐因此不便于存储空间的扩充和动态分配。链式存储时各数据元素的逻辑次序靠结点的指针来指示,结点空间可以动态申请和释放。所以本题答案是C。
8、某二叉树的前序序列为ABCD,中序序列为DCBA,则后序序列为__。
A.BADC
B.DCBA
C.CDAB
D.ABCD
本题考查知识点是二叉树的遍历。在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为3种:前序遍历、中序遍历和后序遍历。前序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树,最后遍历右子树;并且遍历左、右子树时,仍然先访何根结点,然后遍历左子树,最后遍历右子树。二叉树的中序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问根结点,最后遍历右子树;并且遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。二叉树的后序遍历指在访问遍历左子树与遍历右子树,然后访问根结点、这三者中,首先遍历左子树,然后访问右子树,最后遍历根结点;并且遍历左、右子树时,仍然先遍历左子树,然后访问遍历右子树,最后访问根结点。所以本题答案为B。
9、逻辑模型是面向数据库系统的模型,下面属于逻辑模型的是______。
A.关系模型
B.谓词模型
C.物理模型
D.实体-联系模型
本题考查知识点是数据类型。逻辑模型也称为数据模型,数据模型分为3种:层次、网状、关系模型。所以本题答案为A。
10、运动会中一个运动项目可以有多名运动员参加,一个运动员可以参加多个项目。则实体项目和运动员之间的联系是_____
A.多对多
B.一对多
C.多对一
D.一对一
本题考查知识点是实体的联系。多对多联系表现为一个表中多条记录在相关表中同样有多条记录与其匹配,一个运动项目可以有多名运动员参加,一个运动员可以参加多个项目,所以实体项目和运动员之间是多对多的关系。所以本题答案为A。
11、以下使指针指向一个字符串的选项错误的是_____。
A.char str[ ] = "string",*ps; *ps = str;
B.char str[ ] = "string"; char *ps = str;
C.char str[ ] = "string",*ps; ps = str;
D.char *ps; ps = "string" ;
本题考查的是指针。 A选项中,*ps是地址里面的值,str是数组str的首地址,应改为ps=str。故本题答案为A。
12、若有定义:
char *ps[ ] = {"aa", "bb","cc","dd"} ;
则以下叙述正确的是_____
A.*ps[0]是字符'a'
B.*ps[0]是字符串" aa"
C.ps[0]是字符'a'
D.ps是字符串"aa"
本题考查的是指针数组。 *ps[0]是字符'a', ps[0]和ps是字符串"aa"的首地址。故本题答案为A。
13、有以下程序
#include <stdio.h>
main()
{
char s[10] = "verygood",*ps = s;
ps = "too" ;
s[4] = '\0';
puts(ps) ;
}
程序的运行结果是____.
A.very
B.verygood
C.too
D.good
本题考查的是程序。在C语言中,字符串是借助于字符型一位数组来存放的,并规定以字符'\0'作为"字符串结束标志。指针ps本来是指向数组s,因为ps="too",p指向了字符串"too"。故本题答案为C。
14、有以下函数
void fun(char *p,char *q)
{
while ((*p++=*q++) != '\0') ;
}
该函数的功能是_____。
A.实现字符串的复制
B.计算字符串所占字节数
C.将字符串逆序存放
D.计算字符串的长度
本题考查的是程序。本程序的作用是把指针q所指向的字符串赋给指针p所指向的字符串。故本题答案为A。
15、以下叙述中错误的是_____。
A.在函数外部定义的变量在所有函数中都有效
B.在函数内部定义的变量只能在本函数范围内使用
C.函数中的形参属于局部变量
D.在不同的函数中可以使用相同名字的变量
本题考查的是变量。函数外部定义的变量的作用域是从变量定义的位置开始,到整个源文件结束止。故本题答案为A。
16、以下叙述错误的是_____。
A.未经赋值的全局变量值不确定
B.未经赋值的auto变量值不确定
C.未经赋值的register变量值不确定
D.未经赋值的静态局部变量值为0
本题考查的是变量。未经赋值的全局变量值为0。故本题答案为A。
17、读取二进制文件的函数调用形式为:
fread (buffer,size, count,fp);
其中buffer代表的是_____。
A.一个内存块的字节数
B.一个整型变量,代表待读取的数据的字节数
C.一个文件指针,指向待读取的文件
D.一个内存块的首地址,代表读入数据存放的地址
本题考查的是函数。 buffer是数据块的指针,对fread来说,它就是内存块的首地址,输入的数据存入此内存块中。故本题答案为D。
18、有以下程序
#include <stdio.h>
main()
{
int a=1,b=2,c=3,x;
x = (a b)&c ;
printf ("%d \n", x);
}
程序的运行结果是_______。
A.0
B.1
C.2
D.3
本题考查的是运算符。按位异或"^"运算的规则是参与运算的两个相应位同号,则结果为0,不同则为1。从这个规则中我们分析可得,通过与1异或可达到求反的效果,与0异或可保持被异或的值本身不变。运算符"&"的作用是:把参加运算的两个云算数按对应的二进制位分别进行"与"运算,当两个相应的位都为1时,该位的结果为1;否则为0。 a^b=3,(a^b)&c=3&3=3。故本题答案为D。
19、有以下程序
#include <stdio.h>
main()
{
FILE*fp;
int a[10]={1,2,3,0,0},i ;
fp = fopen("d2.dat", "wb");
fwrite(a,sizeof(int),5, fp);
fwrite(a,sizeof(int),5, fp);
fclose(fp);
fp = fopen("d2.dat", "rb");
fread(a,sizeof(int),10, fp);
fclose(fp);
for (i=0; i<10; i++)
printf("%d,",a[i]);
}
程序的运行结果_.
A.1,2,3,0,0,1,2,3,0,0,
B.1,2,3,1,2,3,0,0,0,0,
C.123,0,0,0,0,123,0,0,0,0,
D.1,2,3,0,0,0,0,0,0,0,
本题考查的是文件。本程序段中,首先把数组a两次写进了d2.dat文件中,然后再读该二进制文件。所以输出的是: 1,2,3,0,0,1,2,3,0,0,。故本题答案为A。
20、变量已正确定义,则以下语句的输出结果是_____。
s=32;
s^=32;
printf("%d", s);
A.0
B.-1
C.1
D.32
本题的考查点是"异或"运算符。 "按位异或"运算的规则是参与运算的两个相应位同号,则结果为0,不同则为1。从这个规则中我们分析可得,通过与1异或可达到求反的效果,与0异或可保持被异或的值本身不变。 s=s^32=32^32=0。故本题答案为A。
21、若有以下程序
#include <stdio.h>
main()
{
int c;
c = 13|5;
printf("%d\n", c);
}
则程序的输出结果是_____。
A.13
B.15
C.18
D.5
本题考查的是运算符。 "|"是或运算符,在按位或运算中,只要有一个为真,结果就为真。 c=1101|0101=1101=13。故本题答案为A。
22、若有以下程序
#include <stdio.h>
main()
{
FILE*fp ;
int i, a[6]={1,2,3,4,5,6},k;
fp = fopen("data.dat", "w+b") ;
for (i=0; i<6; i++)
{
fseek(fp, 0L,0);
fwrite(&a[5-i], sizeof(int), 1,fp);
}
rewind (fp);
fread(&k,sizeof(int), 1, fp);
fclose(fp);
printf("%d", k);
}
则程序的输出结果是______。
A.1
B.6
C.123456
D.21
本题考查的是文件。 for语句中,最终是把数组a写进data. dat文件中,rewind(fp)函数使fp指向了数组a中值1的地址,&k是内存块的首地址,所以k=1。故本题答案为A。
23、为了建立如图所示的存储结构(即每个结点包含两个域,data是数据域,next是指向结点的指针域),则在―__处应填入的选项是_____。
struct link { char data;__ } node;
A.struct link *next;
B.link next;
C.link *next ;
D.struct link next;
本题考查的是结构体。在结构体中定义本结构体的指针成员的类型的格式:结构体名*指针名。故本题答案为A。
24、以下结构体说明和变量定义中,正确的是_____。
A.typedef struct abc{ int n; double m; }ABC; ABC x,y;
B.struct abc{ int n; double m } ; struct abc x, y;
C.struct ABC{ int n; double m; } struct ABC x,y;
D.struct abc{ int n; double m;} ; abc x,y;
本题考查的是结构体。定义结构体类型的变量、数组和指针变量的四种方式。 (1)紧跟在结构体类型说明之后进行定义; (2)在说明一个无名结构体类型的同时,直接进行定义; (3)先说明结构体类型,再单独进行变量定义; (4)使用typedef说明一个结构体类型名,再用新类型名来定义变量。故本题答案为A。
25、有以下程序
#include <stdio.h>
#include <stdlib.h>
void fun(int *pl,int *p2,int *s )
{
s=( int * )malloc( sizeof(int)) ;
*s = *p1 +*(p2++);
}
main()
{
int a[2]={1,2 }, b[2]={10,20},*s=a;
fun( a, b,s ); printf("%d\n", *s ) ;
}
程序运行后的输出结果是_______。
A.1
B.10
C.11
D.2
本题考查的是程序。在void fun(int *p1, int *p2,int *s)函数中,定义了指针s,并为其开辟了内存单元。在程序中,我们可以理解为指针s指向了两个不同的内存单元,当fun( a, b,s )函数运行结束后,s指向新开辟的内存单元的指向也就消失,此时s就只指向数组a的首地址。故本题答案为A。
26、以下程序依次把从终端输入的字符存放到f文件中,用#作为结束输入的标志,则在横线处应填入的选项是____.
#include <stdio.h>
main()
{
FILE*fp;char ch;
fp=fopen( "fname", "w");
while( ( ch=getchar())!='#')
fputc(__) ;
fclose(fp);
}
A.ch,fp
B.fp,ch
C.ch
D.ch,"fname"
本题考查的是程序。 fputc函数的调用形式: fputc(ch, fp) 这里ch是待输出的某个字符,它可以是一个字符常量,也允许是一个字符变量,fp是文件指针故本题答案为A。
27、有以下程序
#include <stdio.h>
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main()
{
printf("%d\n", NUM );
}
程序运行后的输出结果是_____。
A.8
B.4
C.9
D.6
本题考查的是宏替换。不带参数的宏定义命令形式如下:#define 宏名 替换文本 NUM=(M+1)*M/2=(N+1+1)*N+1/2=(2+1+1)*2+1/2=4*2+1/2=8+0=8。故本题答案为A。
28、有以下程序
#include <stdio.h>
main()
{
int i=0;
i = ~i ;
printf("%d\n",i) ;
}
程序运行后的输出结果是_____。
A.-1
B.0
C.1
D.8
本题考查的是运算符。在C语言中,负数在内存单元中的存放形式是用补码存放的。对0取反是11111111,-1的补码就是11111111。故本题答案为A。
29、有以下程序段
int*p;
p=___malloc( sizeof( int ));
若要求使p指向一个int型的动态存储单元,在横线处应填入的是_____。
A.(int *)
B.int
C.int *
D.( *int )
本题考查的是malloc函数。在ANSI C中malloc函数指针为void*,故在调用函数时,必须利用强制类型转换将其转换成所需的类型,本题中要求p指向一个int 型的动态存储单元,故为:(int*)。故本题答案为A。
30、有以下程序
#include <stdio.h>
#define SUB( X,Y ) (X+1)*Y
main ()
{
int a=3,b=4;
printf ("%d\n",SUB(a++ , b++ ));
}
程序运行后的输出结果是_____。
A.16
B.20
C.12
D.25
本题考查的是程序。 SUB(a++ , b++)=(a+1)*b=(3+1)*4=16。故本题答案为A。
31、有以下程序
#include <stdio.h>
main()
{
char c[2][5]={"6938","8254"},*p[2];
int i, j,s=0;
for( i=0; i<2; i++ )
p[i]=c[i];
for( i=0; i<2; i++ )
for( j=0; p[i][j]>0 ; j+=2 )
s=10*s+p[i][j]-'0';
printf("%d\n", s) ;
}
程序运行后的输出结果是_____。
A.4528
B.9824
C.6385
D.6938
本题考查的是程序。第一个for循环语句功能:指针p指向数组c。第二个for循环语句中,当i=0,j=0,p[0][0]=6>0条件成立,s=10*s+p[0][0]-'0'=10*0+6-'0'=6,j=j+2=2,p[0][2]=3>0条件成立,s=10*s+p[0][2]-'0'=10*6+3-'0'=63,j=j+2=4,条件不成立,结束内存for循环; 当i=1, j=0,p[1][0]=8>0条件成立,s=10*s+p[1][0]-'0'=10*63+8-'0'=638,j=j+2=2,p[1][2]=5>0条件成立,s=10*s+p[1][2]-'0'=10*638+5-'0'=6385,j=j+2=4,条件不成立,结束内存for循环。故本题答案为C。
32、若有以下程序段
struct st { int n; struct st *next ; } ;
struct st a[3]={ 5,&a[1],7,&a[2],9,'\0'},*p;
p=&a[0] ;
则以下选项中值为6的表达式是____.
A.++(p->n)
B.(*p).n
C.p->n++
D.p->n
本题考查的是程序。由题意可知p->n=a[0]=5,++(p->n)=6。故本题答案为A。
33、有以下程序
#include <stdio.h>
main()
{
int i=1;
i = i^i ;
printf("%d\n", i );
}
程序运行后的输出结果是_____.
A.0
B.-1
C.1
D.7
本题的考查点是"异或"运算符。 "按位异或"运算的规则是参与运算的两个相应位同号,则结果为0,不同则为1。从这个规则中我们分析可得,通过与1异或可达到求反的效果,与0异或可保持被异或的值本身不变。故本题答案为A。
34、以下程序用来统计文件中字符的个数(函数feof用以检查文件是否结束,结束时返回非零)
#include <stdio.h>
main()
{
FILE*fp;long num=0;
fp=fopen("fname.dat","r");
while(__)
{
fgetc(fp) ;
num++;
}
printf("num=%d\n" , num);
fclose( fp ) ;
}
下面选项中,填入横线处不能得到正确结果的是_____。
A.feof(fp)
B.! feof(fp)
C.feof(fp)==NULL
D.feof(fp)==0
35、下面选项中关于编译预处理的叙述正确的是_____。
A.凡是以#号开头的行,都被称为编译预处理命令行
B.预处理命令行必须使用分号结尾
C.预处理命令行不能出现在程序的最后一行
D.预处理命令行的作用域是到最近的函数结束处
本题考查的是编译预处理。在C语言中,凡是以'#'号开头的行,都称为"编译预处理"命令行,预处理命令组成的预处理命令行必须在一行的开头以'#"号开始,每行的未尾不得用";'结束;根据需要,命令行可以出现在程序的任何一行的开始部位,其作用一直持续到源文件的末尾。故本题答案为A。
36、以下叙述中正确的是____.
A.在程序中,允许用typedef来说明一种新的类型名
B.使用typedef说明新类型名时,其格式是: typedef 新类型名 原类型名;
C.使用typedef说明新类型名时,后面不能加分号
D.在使用typedef改变原类型的名称后,只能使用新的类型名
本题考查的是typedef。 C语言中允许用typedef说明一种新类型名,说明新类型名的语句一般形式为: typedef 类型名 标识符; typedef语句的作用仅仅是用"标识符"来代表已存在的"类型名",并未产生新的数据类型,原有类型名依然有效。故本题答案为A。
37、以下叙述中正确的是_____。
A.结构体类型中的成分只能是C语言中预先定义的基本数据类型
B.一个结构体类型可以由多个称为成员(或域)的成分组成
C.在定义结构体类型时,编译程序就为它分配了内存空间
D.结构体类型中各个成分的类型必须是一致的
本题考查的是结构体。一个结构体类型可以由若干个称为成员(或域)的成分组成。不同的结构体类型可根据需要,由不同的成员组成。对于某个具体的结构体类型,成员的数量必须固定,这一点与数组相同;但该结构体中各个成员的类型可以不同,这是结构体与数组的重要区别结构体类型的说明只是列出了该结构的组成情况,标志着这种类型的结构"模式"已存在,编译程并没有因此而分配任何存储空间。真正占有存储空间的仍应是具有相应结构体类型的变量、数组以及动态开辟的存储单元,只有这些"实体"才可以用来存放结构体的数据。故本题答案为B。
38、以下叙述中正确的是______。
A.使用typedef定义新类型名后,新类型名与原类型名实际上是等价的
B.结构体类型中的各个成分均不能是数组或指针
C.结构体类型的变量,不能在声明结构体类型组成时一起定义
D.元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义
本题考查的是结构体。 typedef语句的作用仅仅是用*标识符"来代表已存在的"类型名",并未产生新的数据类型,原有类型名依然有效;结构体类型中的各个成分可以是数组或指针;定义结构体类型的变量、数组和指针变量可以(1)紧跟在结构体类型说明之后进行定义(2)在说明一个无名结构体类型的同时,直接进行定义(3)先说明结构体类型,再单独进行变量定义(4)使用typedef说明一个结构体类型名,再用新类型名来定义变量。故本题答案为A。
39、下面选项中关于位运算的叙述正确的是_____。
A.右移运算时,高位总是补0
B.位运算符都需要两个操作数
C.左移运算的结果总是原操作数据2倍
D.位运算的对象只能是整型或字符型数据
本题考查的是位运算。 C语言中,位运算的对象只能是整数或字符型数据,不能是其他类型的数据; 取反运算符是位运算中唯一的一个单目运算符,运算对象应置于运算符的右边,左移时,若左端移出的部分不包含有效二进制数1,则每左移一位,相当于移动对象乘以2;右移时,右端移出的二进制数舍弃,左端(高位)移入的二进制数分两种情况:对于无符号整数和正整数,高位补0,对于负整数,高位补1。故本题答案为D。
1、在数据库的三级模式中,外模式(用户模式或子模式)_____。
A. 只有3个
B. 只有2个
C. 可以有任意多个
D. 只有1个
本题考查的知识点是数据库设计基础。外模式也称子模式或用户模式。它是用户的数据视图,也就是用户所见到的数据模式,它由概念模式推导而出。概念模式给出了系统全局的数据描述而外模式则给出每个用户的局部数据描述。一个概念模式可以有若干个外模式,每个用户只关心与它有关的模式,这样不仅可以屏蔽大量无关信息而且有利于数据保护。所以本题答案为C。
2、在商场购物时,顾客可以购买不同的商品,而同样的商品也销售给不同的顾客,则实体顾客和实体商品之间的联系是_______。
A. 一对多
B. 一对一
C. 多对一
D. 多对多
本题考查的知识点是数据模型。根据题目要求,一名顾客可以购买多种商品,一种商品也可以被多名顾客购买,所以实体顾客和实体商品之间的联系是多对多的关系。所以本题答案为D。
3、学生选课成绩表的关系模式是SC(S#,C#,G),其中S#为学号,C#为课号,G为成绩,检索课号为2的成绩不及格的学生的学号____。
本题考查的知识点是关系代数。首先在SC中进行选择运算,选择出课程号为2且成绩不及格的学生信息,故B、D选项错误;其次查找出符合该条件的学生学号,故选项C错误。所以本题答案为A。
4、在数据库的三级模式中,内模式(物理模式)有____。
A. 任意多个
B. 2个
C. 3个
D. 1个
本题考查的知识点是数据库设计基础。内模式又称为物理模式,它是数据库中全体数据的内部表示或底层描述,它是唯一的,而建立在数据库系统之上的应用则是非常广泛的、多样的,因此外模式不是唯一的,也不可能是唯一的。所以本题答案为D。
5、由若干零件组合成的、具有一定功能的部分为系统的部件,而零件可用于不同的部件,则实体部件和实体零件之间的联系是_______。
A. 多对多
B. 一对一
C. 多对一
D. 一对多
本题考查的知识点是数据模型。根据题目要求,部件由多个零件组成,零件可用于不同的部件,所以部件与零件之间的联系是多对多的关系。所以本题答案为A。
6、关系R经过运算
的结果为____。
A. (b, e,1,2)
B. (c, c,11,4)
C. (a, a,2,2)
D. (e, e,6,1)
本题考查的知识点是关系代数。根据题意可知,需要选择出关系R中A=B并且D>2的关系元组,只有(c, c,11,4)满足条件。所以本题答案为B。
7、长期储存在计算机内、有组织的、可共享的大量数据的集合是_______。
A. 数据库
B. 数据库系统
C. 关系数据库系统
D. 数据库管理系统
本题考查知识点是数据库基本概念。数据库(Database,简称DB)是数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集合,并可被各个应用程序所共享。所以本题答案为A。
8、某工厂生产中使用若干种原材料,原材料置于多个仓库中,并且同样的材料可放在不同的仓库中,则实体材料和实体仓库之间的联系是______。
A. 多对一
B. 一对一
C. 多对多
D. 一对多
本题考查的知识点是数据模型。根据题目要求,一个仓库可以存储多种材料,一种材料可以被存储在不同的仓库中,所以实体材料和实体仓库是多对多的关系。所以本题答案为C。
9、设有表示商店聘用职工的三张表,其中商店(商店号,商店名,地址),职工(职工号,姓名,性别,业绩),聘用(职工号,商店号,聘期,月薪),则关系聘用的关键字(键或码)为___。
A. 职工号,商店号
B. 职工号,聘期
C. 职工号,月薪
D. 商店号,聘期,月薪
本题考查知识点是数据库基础知识。主键也称为主关键字,是在一个二维表中,唯一限定一条元组的属性或属性集合。商品关系的主键为商品号,职工关系的主键为职工号,且商品与职工属于多对多联系。聘用表可以将商品与职工的多对多联系拆分为两个一对多联系,所以聘用的关键字为职工号,商品号。所以本题答案为A。
10、循环队列的存储空间为Q(1:50),初始状态为front=rear=50。经过一系列正常的入队与退队操作后,front=rear=25,此后又正常地插入了一个元素,则循环队列中的元素个数为____。
A. 51
B. 49
C. 50
D. 1
本题考查知识点是循环队列。循环队列是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。经过一系列的入队操作和退队操作后,头指针(front=25)尾指针(rear=25)说明入队25次,退队25次,此时队列中有零个元素或队列满,此后又正常地插入了一个元素,说明队列满的情况是不可能的,所以此时队列中元素个数为1。所以本题答案为D。
11、C语言中,下列叙述正确的是_______。
A. 不能使用do-while语句构成的循环
B. do-while语句构成的循环,必须用break语句才能退出
C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环
D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环
本题的考查点是do-while语句。选项A是错误的,C语言支持do-while语句; do-while构成的循环,当while语句中的表达式值为零时结束循环,而不是非零,故选项B、C都是错误的。故本题答案为D。
12、设有如下的程序段 char str[]="Hello"; char *ptr; ptr=str; 执行完上面的程序段后,*(ptr+5)的值为____。
A. 'o'
B. '\0'
C. 不确定的值
D. 'o'的地址
本题的考查点是字符数组的结束标志。 ptr=str实际上是将串str的首地址赋给了指针变量ptr,所以ptr+5将指向str串的第六个数组元素,即是串的隐含结束标志'\0',*(ptr+5)='\0',最后的结果为'\0'。故本题答案为B。
13、设有以下语句 char a=3,b=6, c; c=a^b<<2; 则c的二进制值是_______。
A. 00011011
B. 00010100
C. 00011100
D. 00011000
本题的考查点是位运算。 "<<"是C语言中规定的左移运算符,例如,a=a<<2,这个语句即是将a的二进制数左移两位,左移一位相当该数乘以2,移两位相当于该数乘以2的2次方;^是异或运算符,所以,c的二进制值应为00011011。故本题答案为A。
14、设有 static char str[]="Beijing" ; 则执行 printf ("%d \n",strlen(strcpy (str,"China"))) ; 后的输出结果为_____。
A. 5
B. 7
C. 12
D. 14
本题的考查点是求字符串的长度。在执行printf()函数前,数组str的长度是7,但是使用strcpy()函数将新的值赋给str后,strlen()函数返回的应当是现在的str字符串的字符个数,即是5。故本题答案为A。
15、下列语句中,符合C语言语法的赋值语句是_______。
A. a=7+b+c=a+7;
B. a=7+b++=a+7;
C. a=7+b, b++, a+7
D. a=7+b, c=a+7;
本题的考查点是赋值语句。选项A和B中,"7+b+c"和"7+b++"中是表达式,而赋值语句中赋值号的左边应为变量,所以不正确;选项C中由于没有";",所以不是语句,因为语句必需以分号结束故本题答案为D。
16、下面程序
main()
{
int y=9;
for(; y>0 ; y--)
{
if(y%3==0)
{
printf("%d",__-y);
continue ;
}
}
}
的输出是_____。
A. 741
B. 852
C. 963
D. 875421
本题的考查点是if判断语句。 "%"是求模运算符,所以if判断语句中实际是指出只有当y可以被3整除时方可以执行循环体;--y是先进行y的自减运算,再使用y值。所以,最后的打印结果应当为"852"。故本题答案为B。
17、下面程序
void prtv(int *x)
{
printf("%d\n",++*x);
}
main()
{
int a=25;
prtv(&a) ;
}
的输出是____。
A. 23
B. 24
C. 25
D. 26
本题的考查点是指针变量作为函数参数。观察程序,可以发现,函数prtv()的作用是将地址等于x的内存单元中值加1,因为我们在主函数中是将变量a的地址作为实参传递给了prtv()函数,所以,函数prtv()将地址等于变量a的地址的那个内存单元中的值加1,打印结果自然就是25+1=26了。故本题答案为D。
18、下面的程序片段
y=-1;
if (x!=0)
if(x>0)
y=1 ;
else
y=0;
所表示的数学函数关系是______。
A.①
B.②
C.③
D.④
19、下面的程序
main()
{
int x=3;
do
{
printf("%d\n", x-=2);
} while(! (--x));
} ____。
A. 输出的是1
B. 输出的是1和-2
C. 输出的是3和0
D. 是死循环
本题的考查点是do-while语句。在第一次循环时,先计算表达式x-=2,所以输出1,--x为0,判断表达式的值为非零,返回重新执行该语句;在第二次循环时,表达式x-=2,即-2,所以输出-2,--x为-3,判断表达式的值为零,循环结束。故本题答案为B。
20、下面的程序中____错误(每行程序前面的数字是行号)。
#include<stdio.h>
main()
{
float a[3]={0.0} ;
int i;
for(i=0 ; i<3 ; i++)
scanf("%d", a[i]);
for(i=1 ; i<3 ; i++)
a[0]=a[0]+a[i];
printf("%f\n",a[0]);
}
A. 没
B. 第4行
C. 第6行
D. 第8行
本题的考查点是函数scanf()的格式输入。根据函数scanf()的语法可知,在函数中的参数表列部分,应当是欲赋值变量的内存地址,像第六行这样,将数组元素直接放在参数表列中是无法达到给数组元素赋值的目的。故本题答案为C。
21、下面函数
int fun1 (char*x)
{
char *y=x ;
while(*y++);
return(y-x-1) ;
} 的功能是_______。
A. 求字符串的长度
B. 比较两个字符串的大小
C. 将字符串x复制到字符串y
D. 将字符串x连接到字符串y后面
本题的考查点是while()循环语句。这个函数的功能是求字符串的长度,需要注意的是,在返回长度时一定记住要减一,否则计算出的串长度将会多故本题答案是A。
22、以下程序的输出结果是_______。
#include <stdio.h>
#include <math. h>
main()
{
int a=1, b=4, c=2;
float x=10.5, y=4.0,z;
z=(a+b)/c+sqrt ((double)y)*1.2/c+x;
printf("%f\n",z);
}
A. 14.000000
B. 15.400000
C. 13.700000
D. 14.900000
本题的考查点是sqrt()函数的应用。函数sqrt(x)是一个标准的数学函数,用于求x的二次方根,知道这一点以后就好做了,将各变量的值带入程序求解即可,另外,程序中的(double)是强制类型转换,将原来为float型的y强制转换成double型变量。故本题答案为C。
23、以下程序的输出结果是____
#include <stdio.h>
main()
{
int a=2,c=5;
printf("a=%%d,b=%%d\n" , a, c);
}
A. a=%2,b=%5
B. a=2, b=5
C.a=%%d,b=%%d
D. a=%d, b=%d
本题的考查点是格式控制字符的应用。 printf()函数:当"格式控制"字符串中连续使用两个"%"符号时,表示要输出字符"%",所以,a, c两个变量的值并不带入输出字符串,最后的打印结果应当是a=%d,b=%d。故本题答案为D。
24、以下程序的输出结果是_______。
#include<stdio.h>
main ()
{
printf ("%d\n",NULL);
}
A. 不确定的(因变量无定义)
B. 0
C. -1
D. 1
本题的考查点是对'NULL'的理解。 NULL在C编译器中是一个值为0的常量,它的定义在头文件"stdio.h"中,本题的程序在一开始就包含了这个头文件,所以,在打印的时候,将打印出0。故本题答案为B。
25、以下程序的输出结果是_______。
main()
{
int k=4, m=1, p;
p=func(k, m);
printf("%d,", p);
p=func (k,m);
printf("%d\n", p);
}
func(int a,int b)
{
static int m=0,i=2;
i+=m+1 ;
m=i+a+b;
return(m);
}
A. 8,17
B. 8,16
C. 8, 20
D. 8,8
本题的考查点是函数的调用。将k和m的值带入函数func中,第一次调用完func()后,其中m和i的值要保留,并在第二次调用时使用,这是因为两者都是局部静态变量,最后的结果是8和17。故本题答案为A。
26、以下程序的输出结果为_
main()
{
char *alpha[6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX"};
char **p ;
int i;
p=alpha;
for(i=0; i<4 ; i++)
printf("%s", p[i]);
printf("\n") ;
}
A. ABCDEFGHIJKL
B. ABCD
C. ABCDEFGHIJKLMNOP
D. AEIM
本题的考查点是指向指针的指针。指针数组*alpha[6]实际上相当于一个二维数组,而p是一个指向指针的指针,p=alpha后,引用p[x]便是引用数组*alpha[6]中的第x个数组元素的首地址,所以打印的结果应当为ABCDEFGHIJKLMNOP。故本题答案为C。
27、以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空:
#include <stdio.h>
findmax(int *s,int t,int *k)
{
int p;
for(p=0,*k=p;p<t ;p++)
if(s[p]>s[*k])
____;
}
main()
{
int a[10],i,k;
for(i=0; i<10; i++)
scanf("%d",&a[i]);
findmax(a,10,&k);
printf("%d,%d\n",k,a[k]);
}
A. k=p
B. *k=p-s
C. k=p-s
D. *k=p
本题的考查点是求数组中最大值的下标。 k是一个指针,它的值是一个地址,要通过它为主函数的变量改变数据,必须使用*p,这样就可以把一个下标数赋给p指针指向的那个内存单元,所以横线处应填入k=p。故本题答案为D。
28、以下的for循环: for (x=0, y=0 ; (y!=123)&&(x<4) ; x++);
A. 是无限循环
B. 循环次数不定
C. 执行4次
D. 执行3次
本题的考查点是for语句循环条件的判断。循环条件是表达式(y !=123)d&(x(4),因为y值始终为0,所以表达式左边一定恒为1,当x<4时,循环可以运行,当x=4时,循环终止,所以这个循环一共可以执行4次。故本题答案为C。
28、以下的for循环: for (x=0, y=0 ; (y!=123)&&(x<4) ; x++);
A. 是无限循环
B. 循环次数不定
C. 执行4次
D. 执行3次
本题的考查点是for语句循环条件的判断。循环条件是表达式(y !=123)d&(x(4),因为y值始终为0,所以表达式左边一定恒为1,当x<4时,循环可以运行,当x=4时,循环终止,所以这个循环一共可以执行4次。故本题答案为C。
29、若有说明: int i, j=7,*p=&i;则与i=j;等价的语句是_______。
A. i=*p ;
B. *p=*&j;
C. i=&j;
D. i=**p ;
本题的考查点是指针变量的引用。 p的地址本身和i的地址一样,所以p代表i中的数值,而&j是j的地址, *&j就是j中的数值,所以,*p=&j和i=j是等价的。故本题答案为B。
30、若有以下说明: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为6的表达式是______。
A. *p+6
B. *(p+6)
C. *p+=5
D. p+5
本题的考查点是通过指针引用数组元素。选项A,*p+6,其值等于1+6=7; 选项B,*(p+6),其值等于a[6]=7; 选项C,冷p+=5,其值等于*p=*p+5=1+5=6; 选项D,p+5是个地址值。故本题答案为C。
31、下面程序的输出是_____________
main ()
{
int k=11;
printf("k=%d, k=%o,k=%x \n",k,k,k);
}
A. k=11,k=12,k=11
B. k=11,k=13,k=13
C. k=11,k=013,k=0xb
D. k=11,k=13,k=b
本题的考查点是格式字符。在C语言格式字符的输出中,"%d"是以带符号的十进制形式输出整数,即k=11;"%o"是以8进制无符号形式输出整数(不输出前导符0),即k=13;"%x"是以16进制无符号形式输出整数(不输出前导符0x),即k=b。故本题答案为D。
32、下面程序的输出是______。
main()
{
int t=1;
fun(fun(t)) ;
}
fun(int h)
{
static int a[3]={1,2,3} ;
int k;
for (k=0;k<3;k++)
a[k]+=a[k]-h;
for (k=O ;k<3;k++)
printf("%d," , a[k]);
printf("\n") ;
return(a[h]);
}
A. 1,3,5, 1,5,9,
B. 1,3,5, 1,3,5,
C. 1,3,5 0,4,8
D. 1,3,5 -1,3,7
本题的考查点是函数的反复调用。在子函数fun()中,第一次执行使得a数组的3个元素的值都翻倍后减一,即为1,3,5,此时h的值为1,a[h]即a[1]的值3,返回作为fun()第二次执行的实参,函数第二次的执行使得各个数组元素的值分别变为-1,3,7。故本题答案为D。
33、以下程序的输出结果是_______。
#include <string.h>
main()
{
char *a="abcdefghi" ;
int k;
fun(a) ;
puts(a) ;
}
fun (char *s)
{
int x, y ;
char c;
for(x=0, y=strlen(s)-1 ; x<y ;x++,y--)
{
c=s[y] ;
s[y]=s[x] ;
s[x]=c;
}
}
A. ihgfedcba
B. abcdefghi
C. abcdedcba
D. ihgfefghi
本题的考查点是字符串的应用。观察子函数fun()可知,它是实现一个数组首末元素位置互相依次交换。联系主函数,可以看出,是对字符串中的元素依次进行首末位置的对调。故本题答案为A。
34、以下程序的输出结果是_______。
main()
{
int n[3][3],i,j;
for(i=O; i<3; i++)
for(j=0 ; j<3; j++)
n[i][j]=i+j;
for(i=0 ; i<2 ; i++)
for (j=0; j<2; j++)
n[i+1][j+1]+=n[i][j];
printf("%d\n" , n[i][j]);
}
A. 14
B. 0
C. 6
D. 值不确定
本题的考查点是二维数组的运算。观察程序段可知,第一个for循环语句是给数组中的各元素赋值,第二个for循环语句是给数组中的元素进行重新赋值,得到数组中的最大元素值为6。故本题答案为C。
35、以下程序的输出结果是_______。
main()
{
union
{
char i[2];
int k ;
} r;
r.i[0]=2;
r.i[1]=0;
printf("%d\n", r.k);
}
A. 2
B. 1
C. 0
D. 不确定
本题的考查点是共用体类型数据的特点。根据共用体的定义可知:共用体r的成员k和成员i[2]是共用同一段内存空间,所以,当程序给r.i[0]赋值后,实际上,共用体成员k的值也确定了,为2。所以打印输出的结果应当为2。故本题答案为A。
36、设有以下定义和语句,则输出的结果是_______。(用small模式编译,指针变量占2个字节)
struct date
{
long*cat;
struct date*next ;
double dog;
}too ;
printf("%d", sizeof(too)) ;
A. 20
B. 16
C. 14
D. 12
本题的考查点是计算结构体的长度。结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。double占8个字节,指针变量占2个字节,2+2+8=12,所以,输出结果是12。故本题答案为D。
37、以下程序的输出结果是_______。
#define f(x) x*x
main()
{
int a=6, b=2, c;
c=f(a)/f(b) ;
printf("%d\n" , c) ;
}
A. 9
B. 6
C. 36
D. 18
本题的考查点是带参数的宏定义。观察程序段可知,对带参数的宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define命令行中的形参。本题中c=f(a)/f(b)用#define f(x)x*x代替得c=f(6)/f(2),即c=6*6/2*2,结果为36。故本题答案为C。
38、以下程序的输出结果是_______。
main()
{
char *s="12134211";
int v[4]={0,0,0,0} ,k, i ;
for (k=0 ; s[k] ;k++)
{
switch(s[k])
{
case '1' :
i=0;
case '2' :
i=1;
case '3' :
i=2;
case '4':
i=3;
}
v[i]++;
}
for(k=0; k<4; k++)
printf ("%d ", v[k]);
}
A. 4 2 1 1
B. 0 0 0 8
C. 4 6 7 8
D. 8 8 8 8
本题的考查点是switch语句的应用。在每次执行switch后面括号内的表达式s[k]时,要先取当前s[k的值与case后的字符常量进行比较,找到与之匹配的分支后,即转去执行该分支中的语句。switch语句中,某分支执行完毕,若未遇到break语句,则接着执行剩余的其它分支,直到遇到break语句。此题中,因为没有break语句,所以总会执行到i=3,即总是v[3]在递加。故本题答案为B。
39、有如下程序
main()
{
int n = 9;
while(n>6)
{
n--;
printf("%d", n);
}
}
该程序的输出结果是______。
A. 987
B. 876
C. 8765
D. 9876
本题考查点是while语句循环次数的问题。符合n>6的n只有7,8,9,所以循环次数为3。选项C、D可以排除。又因n在输出之前要执行n--,所以输出结果只能是876。本题答案为B。
40、以下对结构体类型变量的定义中,不正确的是______。
①typedef struct aa { int n; float m; }AA; AA td1;
②#define AAstruct aa AA{ int n; float m; } td1;
③struct { int n; float m; } aa; struct aa td1;
④struct { int n; float m; }td1;
A. ①
B. ②
C. ③
D. ④
本题的考查点是结构体类型变量的定义。在选项C中,aa是一个结构体变量,而不是结构体名,所以struct aa td1;是非法的。本题答案为C。
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。
填空题
专项训练
1、循环队列的存储空间为Q(1:100),初始状态为front=rear=100。经过一系列正常的入队与退队操作后,front=rear=99,则循环队列中的元素个数为( )。
A. 0或100
B. 1
C. 2
D. 99
本题考查知识点是循环队列。当队头和队尾指针指向同一个元素时,队列为空或队列为满。故所以本题答案为A。
2、某系统结构图如下图所示。该系统结构图的最大扇入数是( )。
A. 1
B. 4
C. 2
D. 3
本题的考查知识点是软件结构。模块的扇入指模块直接调用该模块的上级模块的个数。根据定义,功能模块n.1的直接上级模块有3个,扇入数最大。所以本题答案为D。
3、下列叙述中正确的是( )。
A. 数据库的数据项之间存在联系
B. 数据库中任意两个表之间一定不存在联系
C. 数据库的数据项之间无联系
D. 数据库的数据项之间以及两个表之间都不存在联系
本题考查知识点是数据库知识。数据库中的数据是有结构的,这种结构由数据库管理系统所支持的数据模型表现出来。数据库系统不仅可以表示事物内部各数据项之间的联系,而且可以表示事牧与事物之间的联系,从而反映出现实世界事物之间的联系。以关系数据库系统为例,数据库中的数据存储在二维表中,表由记录构成,每个记录都有相同的结构,既每个记录所包含的属性类型相同,而取值不同,因此可以肯定数据库中的记录之间存在联系。数据库中的数据项,也就是二维表的字段,而在数据库的表中,通常会设定某个字段或某些字段为键,通过这些键就可以确定其他字段的值,既数据库中的数据项之间也存在一定的关系,因此,数据库的数据项之间以及记录之间都存在联系。所以本题答案为A。
4、下列叙述中正确的是( )。
A. 数据库系统可以减少数据冗余和增强数据独立性,而文件系统不能
B. 数据库系统能够管理各种类型的文件,而文件系统只能管理程序文件
C. 数据库系统可以管理庞大的数据量,而文件系统管理的数据量较少
D. 以上选项都不正确
本题考查知识点是数据库系统基本特点。数据库技术是在文件系统基础上发展产生的,两者都以数据文件的形式组织数据,但由于数据库系统在文件系统之上加入了DBMS对数据库进行管理,从而使得数据库系统具有以下特点: 1、数据的继承性; 2、数据的高共享性和低冗余性; 3、数据独立性; 4、数据统一管理与控制。所以本题答案为A。
5、在关系数据库设计中,关系模式设计属于( )。
A. 需求分析
B. 概念设计
C. 物理设计
D. 逻辑设计
本题的考查知识点是关系模式。数据库的逻辑设计主要工作是将E-R图转换成指定RDBMS中的关系模式。所以关系模式设计属于逻辑设计。所以本题答案为D。
6、表示学生选修课程的关系模式是SC(S#,C#, G),其中S#为学号,C#为课程号,G为成绩,检索选修了课程号为2的课且成绩不及格的学生学号的表达式是( )。
本题考查知识点是关系运算。检索的是学生学号S#,故A、B选项错误。检索选修了课程号为2的课且成绩不及格,此处是两个并列条件,课程号为2并且成绩<6O,所以选项D错误。所以本题答案为C。
7、按照传统的数据模型分类,数据库系统可分为( )。
A. 层次、网状和关系
B. 大型、中型和小型
C. 西文、中文和兼容
D. 数据、图形和多媒体
本题考查知识点是数据模型的定义。逻辑数据模型又称数据模型,是一种面向数据库系统的模型,该模型着重于在数据库系统一级的实现,较为成熟并先后被人们大量使用过的有:层次模型、网状模型、关系模型、面向对象模型等。所以本题答案为A。
8、现有表示患者和医疗的关系如下:P(P#,Pn,Pg,By),其中P#为患者编号,Pn为患者姓名,Pg为性别,By为出生日期,Tr(P#,D#,Date,Rt),其中D#为医生编号,Date为就诊日期,Rt为诊断结果。检索在1号医生处就诊的男性病人姓名的表达式是( )。
本题考查知识点是关系运算。本题检索的是病人姓名Pn,故B、D选项错误。检索在1号医生处就诊的男性病人姓名,选项C中未筛选病人性别,故选项C错误。所以本题答案为A。
9、一名员工可以使用多台计算机,每台计算机只能由一名员工使用,则实体员工和计算机间的联系是( )。
A. 一对一
B. 多对多
C. 多对一
D. 一对多
本题考查知识点是实体联系。一对多联系表现为主表中每一条记录与相关表中的多条记录关联,则员工与计算机的关系为一对多。所以本题答案为D。
10、学生选课成绩表的关系模式是SC(S#,C#, G),其中S#为学号,C#为课号,G为成绩,学号为20的学生所选课程中成绩及格的全部课号为( )。
本题考查知识点是关系运算。本题检索的是课号C#,故B、C选项错误。选项D中未筛选成绩及格的记录,故选项D错误。所以本题答案为A。
11、若有以下程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu
{
char *name,gender;
int score;
} ;
main()
{
struct stu a={NULL,'m', 290} , b;
a. name=(char *)malloc(10) ;
strcpy (a.name,"Zhao") ;
b=a;
b. gender=' f' ;
b.score=350;
printf("%s,%c, %d," , a.name, a. gender, a.score) ;
printf("%s,%c, %d\n", b.name, b.gender, b.score) ;
}
则程序的输出结果是( )。
A. Qian, m,290,Qian,f,350
B. Zhao, m,290,Qian,f,350
C. Qian,f,350,Qian,f,350
D. Zhao,m,290, Zhao,f,350
本题的考查点是结构体的运用。本题在结构体内定义了指针变量name,字符变量gender,整型变量score,在主函数中定义了两个结构体变量a和b,并为a赋予了新值;语句b=a是将结构体变量a的内容赋给了结构体变量b。对于结构体的赋值,意味着将其中的每一个元素都进行赋值,但b.gender= 'f' ;b.score=350;语句又为b赋予了新值,a. name和b.name是指向同一内存地址的,因此a.name=b. name=Zhao。故本题答案为D。
12、若有以下程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct stu
{
char *name,gender;
int score;
} STU;
void f(char*p)
{
p=(char *)malloc(10) ;
strcpy(p,"Qian");
}
main()
{
STU a={NULL,'m'', 290} ,b;
a.name=(char *)malloc(10);
strcpy ( a.name,"Zhao");
b = a;
f(b.name);
b.gender = 'f' ; b.score = 350;
printf("%s,%c, %d,",a. name,a.gender,a.score) ;
printf("%s,%c,%d\n", b.name,b.gender,b.score) ;
}
则程序的输出结果是( )。
A. Zhao,m,290,Qian,f,350
B. Zhao,m, 290, Zhao,f,350
C. Qian,f,350,Qian, f, 350
D. Qian, m,290,Qian,f[逗号]350
本题的考查点是结构体的运用。本题定义了两个结构体变量a和b,并为a赋予了新值;语句b=a是将结构体变量a的内容赋给了结构体变量b,对于结构体的赋值,意味着将其中的每一个元素都进行赋值,执行f (b.name)时,调用f函数,在f函数体中给p开辟了一个新的空间,在新的空间里的*p=Qian,但对主函数无任何影响,语句又为b中的gender和score元素赋予了新值,b.gender = 'f'; b.score = 350 ; 。故本题答案为B。
13、若有定义
typedef int* T;
T a[10];
则a的定义与下面哪个语句等价( )。
A. int *a;
B. int (*a)[10];
C. int *a[10];
D. int a[10];
本题的考查点是用户定义类型(typedef) 。 C语言允许用typedef说明一种新类型名,说明新类型名的语句一般形式为: typedef 类型名 标识符; 由题目可知T是指针类型,T a[10]是数组指针,int *a[10]是数组指针;int (*a)[10]是指针数组; int *a是指针变量; int a[10]是数组。故本题答案为C。
14、若有以下程序
#include <stdio.h>
main()
{
int c;
c= 10^5;
printf("%d\n",c);
}
则程序的输出结果是( )。
A. 5
B. 10000
C. 15
D. 105
本题的考查点是"异或"运算符。 "按位异或"运算的规则是参与运算的两个运算数中相对应的二进制位上,若数相同,则该位的结果为0,不同则为1。c=10^5=01010^00101=01111=15。故本题答案为C。
15、若有以下程序
#include <stdio.h>
main()
{
FILE*fp ;
int i, a[6]={1,2,3,4,5,6} , k;
fp = fopen("data.dat","w+");
for (i=0; i<6; i++)
{
fseek(fp,0L, 0) ; fprintf(fp,"%d\n", a[i]) ;
}
rewind(fp);
fscanf(fp,"%d",&k);
fclose(fp);
printf("%d\n", k);
}
则程序的输出结果是( )。
A. 6
B. 1
C. 123456
D. 21
本题的考查点是文件。 "w+"的作用:首先建立一个新文件,进行写操作,随后可以从头开始读,如果指定的文件已存在,则原有的内容将全部消失。rewind函数的功能是使文件的位置指针回到文件的开头。当i=0时,向文件写入a[0],即写入:1 当i=1时,向文件写入a[1],即写入:2,并覆盖原来文件中的内容当i=2时,向文件写入a[2],即写入:3,并覆盖原来文件中的内容当i=3时,向文件写入a[3],即写入:4,并覆盖原来文件中的内容当i=4时,向文件写入a[4],即写入:5,并覆盖原来文件中的内容当i=5时,向文件写入a[5],即写入:6,并覆盖原来文件中的内容所以k=6。故本题答案为A。
16、若有以下程序
#include <stdio.h>
#define S(x) (x)*(x)
#define T(x) S(x)/S(x)+1
main()
{
int k=3,j=2;
printf("%d, %d\n",S(k+j),T(k+j));
}
则程序的输出结果是( )。
A. 25.2
B. 25.26
C. 11.12
D. 11.2
本题的考查点是define关键字。由#define S(x) x*x和#define T(x) S(x)/S(x)+1得: S(k+j)=(k+j)*(k+j)=(3+2)* (3+2)=25; T(k+j)= S(x)/S(x)+1=(k+j)* (k+j)/ (k+j)*(k+j)+1=(3+2)*(3+2)/ (3+2)*(3+2)+1=26。故本题答案为B。
17、若有以下程序
#include <stdio.h>
typedef struct stu {
char name[10],gender;
int score;
} STU;
void f(STU a,STU b)
{
b = a;
printf( "%s,%c,%d,",b.name,b. gender,b.score );
}
main()
{
STU a={"Zhao",'m', 290},b={"Qian", 'f', 350} ;
f(a, b);
printf("%s,%c, %d\n", b.name,b.gender,b.score);
}
则程序的输出结果是( )。
A. Zhao, m,290,Qian,f,350
B. Zhao, m, 290,Zhao, m,290
C. Qian, f,350,Qian,f,350
D. Zhao, m,290,Zhao,f,350
本题的考查点是结构体的运用。本题定义了两个结构体变量a和,f(a,b)函数是按值传送,因此在f函数中将a的内容复制给b,输出Zhao, m,2 90,但并未对主函数中结构体b中的值造成影响,因i主函数中输出Qian,f,350。故本颗答案为A。
18、若有以下程序
#include <stdio.h>
#include <string.h>
typedef struct stu { char name[10],gender;
int score;
} STU;
void f( char*p )
{
strcpy( p, "Qian"); }
main()
{
STU a={"Zhao", 'm', 290},b;
b=a;
f(b.name) ;
b. gender = 'f' ; b.score = 350 ;
printf("%s,%c,%d,",a.name,a.gender,a.score) ;
printf("%s,%c,%d\n", b.name,b.gender,b.score) ;
}
则程序的输出结果是( )。
A. Zhao, m,290,Qian,f,350
B. Zhao, m, 290,Zhao, m,290
C. Qian,f,350,Qian,f,350
D. Zhao, m,290, Zhao,f,350
本题的考查点是结构体的运用。本题定义了两个结构体变量a和b,f(b.name)的作用是Qian赋值给p和b.nam e所共同指向的内存单元的值。故本题答案为A。答案:A 本题的考查点是结构体的运用。本题定义了两个结构体变量a和b,f(b.name)的作用是Qian赋值给p和b.name所共同指向的内存单元的值。故本题答案为A。
19、有以下程序
#include <stdio.h>
main()
{
char c='A';
int x=36, b;
b=(x>>2)&& ( c<'a') ;
printf("%d\n",, b ) ;
}
程序运行后的输出结果是______。
A. 2
B. 0
C. 1
D. 4
本题考查的是位运算。 C语言提供六种位运算符,按优先级由高到低的顺序分别为:取反(~)→左移(<<)和右移(>>)→按位与(&)→按位异或(^)→按位或(|)。 (x>>2)是右移两位为(右移1位是除以2)∶9,条件为真,则为1,(c<' a')为真则是1,符号&&两侧同时为真,表达式的值才为真,故(x>>2)&&( c<'a')表达式为真,即b=1。故本题答案为C。
20、若有以下程序
#include <stdio.h>
typedef struct
{
char name[10];
int age;
} ST;
main()
{
ST stud[10]={ "Adum",15,
"Muty",16,
"Paul", 17,
"Johu", 14,
} ;
}
程序运行后不能输出字符u的语句是( )。
A. printf("%c\n",stud[1].name[1]);
B. printf("%c\n",stud[3].name[3]);
C. printf("%c \n",stud[2].name[2] );
D. printf("%c \n",stud[0].name[3] ) ;
本题的考查点是结构体的运用。假设i,j为整型;stud iJ.name[j])对应的是变量stud[10]第i个元素,name[10]中的第j个元素,注意数字是从0开始的。stud[0].name[3]对应的是m,其余的对应的是u。故本题答案为D。
21、以下叙述正确的是( )。
A. EOF可以作为所有文件的结束标志
B. EOF只能作为文本文件的结束标志,其值为-1
C. EOF只能作为二进制文件的结束标志
D. 任何文件都不能用EOF作为文件的结束标志
本题的考查点是EOF的作用。 EOF作为文件结束的标志,但是文件必须是文本文件。EOF的值为-1。故本题答案为B。
22、以下叙述正确的是( )
A. 在C语言中调用fopen函数就可把程序中要读、写的文件与磁盘上实际的数据文件联系起来
B. fopen函数的调用形式为: fopen(文件名)
C. fopen函数的返回值为NULL时,则成功打开指定的文件
D. fopen函数的返回值必须赋给一个任意类型的指针变量
本题的考查点是对fopen函数的理解。在C语言中fopen函数就可把程序中要读、写的文件与磁盘上实际的数据文件联系起来,其调用形式为:fopen (文件名,文件使用方式)﹔若该函数调用成功,函数返回一个FILE类型的指针,赋给文件指针变量,从而与文件联系起来,当打开文件时出现错误,fopen函数将返回NLL。故本题答案为A。
23、以下不能对文件进行输出的库函数是( )。
A. fwrite
B. fputc
C. fpout
D. fprintf
本题的考查点是文件输出函数。对文件进行输出的库函数是fputc、 fwrite、fprintf。故本题答案为C。
24、有以下程序
#include <stdio.h>
struct link
{
int data;
struct link*next;
};
main()
{
struct link*h, a ,b;
h=&a; a. data=10; a.next=&b; b.data=20;
}
程序运行时不能输出10,20的语句是( )。
A. printf("%d, %d \n" , a.data,(*a.next).data) ;
B. printf("%d,%d\n",h->data, a.next.data);
C. printf("%d,%d \n", h->data,(*a. next).data) ;
D. printf("%d, %d \n" , a.data, a.next->data);
本题的考查点是对结构体变量成员的引用。若已定义了一个结构体变量和基类型为同一结构体类型的指针变量,并使该指针指向同类型的变量则可以用以下三种形式来引用结构体变量中的成员。结构体变量名也可以是已定义的结构体数组的数组元素。 (1)结构体变量名.成员名 (2)指针变量名->成员名 (3) (*指针变量名).成员名故本题答案为B。
25、有以下程序
#include <stdio.h>
main()
{
int a=3 , b=3;
printf("%d \n", a&b);
}
程序运行后的输出结果是( )。
A. 3
B. 1
C. 0
D. 6
本题考查的是位运算。 C语言提供六种位运算符,按优先级由高到低的顺序分别为:取反(~)→左移(<<)和右移(>>)→按位与(&)→按位异或(^)→按位或(|)。相同的两个数进行相与,还是原来的数。故本题答案为A。
26、以下选项中的编译预处理命令行,正确的是( )。
A. #define int INT
B. ##define eps 0.001
C. #DEFINE TRUE
D. #define PI 3.14
本题考查的是宏替换。不带参数的宏定义命令形式如下: #define 宏名 替换文本宏名是用户定义的标识符,因此不能与程序中的其他名字相同。故本题答案为D。
27、设有以下程序段
struct person
{
char name[10];
char sex;
float weight;
}
zhangsan,*ptr;
ptr = &zhangsan;
若要从键盘读入姓名给结构体变量zhangsan的name成员,输入项错误的是( )。
A. scanf("%s", zhangsan->name);
B. scanf("%s", zhangsan. name) ;
C. scanf("%s", ptr->name);)
D. scanf("%s",(*ptr). name);
本题的考查点是对结构体变量成员的引用。若已定义了一个结构体变量和基类型为同一结构体类型的指针变量,并使该指针指向同类型的变量则可以用一下三种形式来引用结构体变量中的成员。结构体变量名也可以是已定义的结构体数组的数组元素。 (1)结构体变量名.成员名 (2)指针变量名->成员名 (3)(*指针变量名).成员名故本题答案为A。
28、有如下程序
#include <stdio.h>
struct person
{
char name[10] ;
int age;
}
main()
{
struct person room[4] = {{"Zhang",19},{"Li",20},{"Wang",17},"Zhao",18}};
printf("%s: %d\n", (room+2)->name,room->age) ;
}
程序运行后的输出结果是_____。
A. Li:20
B. Wang:17
C. Wang:19
D. Li : 19
本题的考查点是结构体的运用。由题目可知:room指针指向的是结构体room[4]的第一个元素{"Zhang",19} ;(room+2)->name指针指向的是结构体room[4]的第三个元素中的Wang 故本题答案为C。
29、表达式3.6-5/2+1.2+5%2的值是( )。
A. 3.8
B. 4.8
C. 3.3
D. 4.3
本题的考查点是算数运算符。基本的算数运算符是+、一、*、/、%,其中/和%运算的运算两边类型一致,结果也与运算数的类型一致。3.6-5/2+1.2+5%2=3.6-2+1.2+1=3.8。故本题答案为A。
30、有以下程序
#include <stdio.h>
main()
{
int a=0, b=0;
/*给a赋值 a=10;
b=20; 给b赋值*/
printf("a+b=%d\n" , a+b); /* 输出计算结果*/
}
程序运行后的输出结果是( )。
A. a+b=0
B. a+b=30
C. a+b=10
D. 出错
本题的考查点是注释的运用。题目中开始给a和b分别赋初值=0,而第4和第5行语句是在注释中,不起作用,因此a+b=0。故本题答案为A。
31、我们所写的每条C语句,经过编译最终都将转换成二进制的机器指令。关于转换以下说法错误的是______。
A. 一条C语句可能会被转换成零条机器指令
B. 一条C语句可能会被转换成多条机器指令
C. 一条C语句对应转换成一条机器指令
D. 某种类型和格式的C语句被转换成机器指令的条数是固定的
本题的考查点是编译。一条C语言被转换成的机器指令条数可能是0条,一条或者多条。故本题答案为C。
32、关于"while(条件表达式)循环体",以下叙述正确的是( )。
A. 条件表达式的执行次数总是比循环体的执行次数多一次
B. 循环体的执行次数总是比条件表达式的执行次数多一次
C. 条件表达式的执行次数与循环体的执行次数一样
D. 条件表达式的执行次数与循环体的执行次数无关
本题的考查点是while(条件表达式)循环体。对于while(条件表达式)循环体,我们是先判断,若满足条件表达式则执行循环体、若不满足则退出循环。当遇到不满足条件时,我们执行了条件表达式,并没有执行循环体。故条件表达式的执行次数总是比循环体的执行次数多一次。故本题答案为A。
33、关于C语言的符号常量,以下叙述中正确的是( )。
A. 符号常量的符号名是标识符,但必须大写
B. 符号常量是指在程序中通过宏定义用一个符号名来代表一个常量
C. 符号常量在整个程序中其值都不能再被重新定义
D. 符号常量的符号名必须是常量
本题的考查点是符号常量。在C语言程序中,可以用一个符号名来代表一个常量,称为符号常量。这个符号名必须在程序中进行特别的"指定",并符合标识符的命名规则。故本题答案为B。
34、若有以下程序
#include <stdio.h>
main()
{
int b=10, a=-11;
a %= b %=4;
printf("%d %d\n", a,b);
}
则程序的输出结果是_______。
A. -1 2
B. 1 2
C. -1 -2
D. 1 -2
本题考查的是算术运算符。在算术运算符中%是求余。 a%=b%=4可知b=b%4=10%4=2,a=a%b=-11%2=-1。故本题答案为A。
35、若有以下程序
#include <stdio.h>
main()
{
int a=0, b=0,c=0;
c= (a -= ++a),(a+=b, b+=4);
printf("%d,%d,%d\n" , a, b, c);
}
则程序的输出结果是_______。
A. 0,4,0
B. 0,4,4
C. 1,4,1
D. 1,4,4
本题考查的是算术运算符。 (a-=++a)即a=a-(++a)=1-1=0;c=(a-=++a)=0; a+=b=0+0=0; b+=4=0+4=4故本题答案为A。
36、有以下程序
#include <stdio.h>
main()
{
int a=0, b=0,c=0, d;
c= (a+=b,, b+=a); /*第4行*/
d=c ;; /*第5行*/
; /*第6行*/
; printf("%d,%d,%d\n" , a, b, c); /*第7行*/
}
编译时出现错误,你认为出错的是_____。
A. 第7行
B. 第5行
C. 第6行
D. 第4行
本题考查的是逗号表达式。在逗号表达式中,左边是表达式,右边是返回值,但在第4行语句中有多余的","。故本题答案为D。
37、关于算法,以下叙述中错误的是( )。
A. 任何算法都能转换成计算机高级语言的程序,并在有限时间内运行完毕
B. 同一个算法对于相同的输入必能得出相同的结果
C. 一个算法对于某个输入的循环次数是可以事先估计出来的
D. 某个算法可能会没有输入
本题考查的是算法。算法是指为解决某个特定问题而采取的确定且有效的步骤。一个算法应该具有以下五个特性: (1) 有穷性:一个算法包含的有效步骤应该是有限的,也就是说,在执行若干个操作步骤之后,算法将结束,而且每一步都在合理的时间内完成。 (2) 确定性:算法中的每一条指令必须有确切的含义,不能有二义性,对于相同的输入必能得出相同的执行结果。 (3)可行性:算法中指定的操作,都可以通过已经验证过可以是实现的基本运算执行有限次后的实现。 (4)有零个或多个输入:在计算机上实现的算法是用来处理数据对象的,在大多数情况下这些数据对象需要通过输入来得到。 (5)有一个或多个输出:算法的目的是为了求"解"这些"解[双引号]只有通过输出才能得到。故本题答案为A。
38、关于C语言的变量,以下叙述中错误的是( )。
A. 变量所占的存储单元地址可以随时改变
B. 所谓变量是指在程序运行过程中其值可以被改变的量
C. 程序中用到的所有变量都必须先定义后才能使用
D. 由三条下划线构成的符号名是合法的变量名
本题考查的是变量。所谓变量是指在程序运行过程中其值可以改变的量,程序中用到的所有变量都必须有一个名字作为标识,变量的名字是由用户定义,它必须符合标识符的命名规则;一个变量实质上代表了内存中的某个存储单元;C语言规定,程序中所有的标量都必须先定义后使用。故本题答案为A。
39、关于do循环体while (条件表达式);以下叙述中正确的是( )。
A. 条件表达式的执行次数与循环体的执行次数无关
B. 循环体的执行次数总是比条件表达式的执行次数多一次
C. 条件表达式的执行次数总是比循环体的执行次数多一次
D. 条件表达式的执行次数与循环体的执行次数一样
本题的考查点是while(条件表达式)循环体。对于while(条件表达式)循环体,我们是先判断,若满足条件表达式则执行循环体,若不满足则退出循环。当遇到不满足条件时,我们执行了条件表达式,并没有执行循环体。故条件表达式的执行次数总是比循环体的执行次数多一次。故本题答案为D
40、若有以下程序
#include <stdio.h>
main()
{
int a=-11,b=10;
a /= b /= -4;
printf("%d %d\n",a, b);
}
则程序的输出结果是______。
A. 5 -2
B. -1 -2
C. 4 -3
D. 5 -3
本题考查的是算术运算符。基本的算术运算符是+、一、*、/、%,其中/和%运算的运算两边类型一致,结果也与运算数的类型一致。a/=b/=-4可知b=b/-4=10/-4=-2; a=a/b=-11/(-2)=5。故本题答案为A。