2024年1月15日发(作者:)

考试场次:2013_09月考_9月2日_C++ 试卷名称:2013年09月_C++_CSD/ESD1306(new)

1. 统计每个部门的人数并要求显示部门名称的SQL语句是?

A. Select dept_id,count(dept_id), from s_emp,s_dept d where

dept_id= group by dept_id

B. Select dept_id,count(dept_id),sum() from s_emp,s_dept d

where dept_id= group by dept_id

C. Select dept_id,count(dept_id),max() from s_emp,s_dept d

where dept_id= group by dept_id

D. Select dept_id,count(dept_id),count() from s_emp,s_dept d

where dept_id= group by dept_id

正确答案:C

2. 打开共享库文件函数的是?

A. dlerror

B. dlsym

C. dlopen

D. dlclose

正确答案:C

3. 下面分组语句正确的是?

A. Select name,dept_id from s_dept d,s_emp e where dept_id=id group

by dept_id;

B. Select ,dept_id from s_dept d,s_emp e

where dept_id= group by dept_id;

C. Select ,dept_id from s_dept d,s_emp e

where dept_id= group by dept_id;

D. Select max(name),dept_id from s_dept d,s_emp e where

dept_id= group by dept_id;

正确答案:D

4. 在建表时,经常需要用到约束,请问下面哪个不是常见约束?

A. 主键

B. 非空

C. 回滚

D. 外键

正确答案:C

5. 阅读如下代码:

int fd = open("", O_WRONLY|O_CREAT|O_TRUNC, 0666);

int flags = fcntl(fd, F_GETFL);

printf("flags=%dn", flags);

switch((空白处)){

case O_RDONLY: printf("RDONLYn");break;

case O_WRONLY: printf("WRONLYn");break;

case O_RDWR: printf("RDWRn");break;

}

空白处的条件应该是?

A. flags & 5

B. flags

C. flags & 3

D. flags & 4

正确答案:C

6. 关于排序,下列说法错误的是?

A. 排序的关键字是order by

B. 升序是默认排序顺序

C. 降序的关键字是desc

D. 不能使用多字段排序

正确答案:D

7. 下列建表的SQL语句错误的是?

A. Create table test123(

Id number,

Dname varchar2(30)

)

B. Create table test123(

Id number,

Dname varchar2(30),

MyDate date

)

C. Create table test123(

Id number,

Dname char(30)

)

D. Create table test123(

Id number,name varchar2(30),

)

正确答案:B

8. 如果想在代码中禁止使用goto,可以采用的是?

A. #pragma GCC dependency goto

B. #pragma GCC poison goto

C. #pragma pack(2)

D. #pragma GCC goto

正确答案:B

9. 显示所有的工资级别和级别对应的salary和first_name的SQL语句是?

A. Select grade,first_name,salary from s_emp,salgrade where

salary(+) between losal and hisal

B. Select grade,first_name,salary from s_emp,salgrade where salary

between losal and hisal(+)

C. Select grade,first_name,salary from s_emp,salgrade where salary

between(+) losal and hisal

D. Select grade,first_name,salary from s_emp,salgrade where

salary(+) between losal and hisal(+)

正确答案:A

10.

下列内存区域中,一般不用来存放变量的是:

A.

栈区

B.

代码区

C.

BSS段

D.

堆区

正确答案:B

11.

关于动态库和静态库,下列说法错误的是?

A. 打包静态库用的是ar命令。

B. 打包共享库用的是gcc -share

C. 静态库和共享库都必须配置环境变量才能使用

D. .a文件是静态库, 而.so文件是共享库

正确答案:C

12. 把工资大于1000的first_name,salary 显示出来,按工资排序,工资相同按first_name降序的SQL语句是?

A.

select first_name,salary from s_emp order by salary,first_name

B.

select first_name,salary from s_emp order by salary,first_name asc

C.

select first_name,salary from s_emp order by salary

desc,first_name

D. select first_name,salary from s_emp order by

salary,first_name desc

正确答案:D

13. Plsql中定义变量,哪个是正确的?

A. Var_i int ;

B. Number Var_i;

C. Var_i number;

D. var_i number not null;

正确答案:C

14. 阅读如下代码:

int sockfd = socket(PF_INET, SOCK_DGRAM, 0);

if(sockfd==-1)perror("socket创建失败"),exit(-1);

//2.准备地址

(空白处)

//3.绑定

int res = bind(sockfd,

(struct sockaddr*)&addr, sizeof(addr));

if(res == -1)perror("绑定失败"),exit(-1);

printf("绑写成功n");

//4.通信

char buf[100] = {};

int len = read(sockfd, buf, sizeof(buf));

if(len<=0) perror("读取失败"),exit(-1);

printf("读到%d字节的数据,内容是:%sn",len,buf);

//5.关闭

close(sockfd);

空白出应该填上的代码是?

A. struct sockaddr_un addr;

_family = PF_INET;

_port = htons(8888);

_addr.s_addr = inet_addr("192.168.182.225");

B. struct sockaddr_un addr;

_family = PF_INET;

_port = htons(8888);

_addr.s_addr = "192.168.182.225";

C. struct sockaddr_in addr;

_family = PF_INET;

_port = htons(8888);

_addr.s_addr = inet_addr("192.168.182.225");

D. struct sockaddr_in addr;

_family = PF_INET;

_port = htons(8888);

_addr.s_addr = "192.168.182.225";

正确答案:C

15. 给名字是Smith的员工增加100元的工资的SQL语句是?

A. Update s_emp set salary=salary+100 where last_name=’Smith’

B. Update s_emp set salary=salary+100

C. Update s_emp salary=salary+100 where last_name=’Smith’

D. Update s_emp set salary=100 where last_name=’Smith’

正确答案:A

16. Plsql中定义了一个数字变量 var_sum 对var_sum的操作不正确的是?

A. Var_sum:=100;

B. Select salary into var_sum from s_emp where id=1;

C. Var_sum:=var_sum+100;

D. Var_sum=1000;

正确答案:D

17. 下列关于进程间通信不正确的是?

A. 共享内存是进程间通信最快的方式。

B. 在使用msgsnd发送消息时,如果消息队列满,则发送阻塞。

C. 无名管道的适用范围是父子进程。

D. 若此信号量的值为正,则进程可以使用资源。进程将信号量加1表示使用了资源。

正确答案:D

18.

阅读如下代码:

void* p = sbrk(0);

int r = brk(p+4);

brk(p+8);

brk(p+4);

请问目前占用的内存空间字节是?

A. 16

B. 8

C. 4

D. 0

正确答案:C

19. 把s_emp月薪超过1000的员工列出来的SQL语句是?

A.

select last_name,salary from s_emp where salary>1000

B.

select name,salary from s_emp where salary>1000

C.

select name,salary from s_emp where salary<1000

D. select last_name,salary from s_emp where salary<1000

正确答案:A

20. 下列不是内存区域的是?

A. 代码区

B. 堆区

C. 连接区

D. BSS段

正确答案:C

21. 需要向包含date类型字段mydate的表test中插入date类型,但目前需要插入的值为’2008-12-11’,请问哪个SQL语句是最合适的?

A. insert into test(mydate) values(to_date(‘2008-12-11’,‘YYYY-MM-DD’))

B. insert into test(mydate) values(to_char(‘2008-12-11’,‘YYYY-MM-DD’))

C. insert into test(mydate) values(to_date(‘2008-11-12’,‘YYYY-MM-DD’))

D. insert into test(mydate) values(sysdate)

正确答案:A

22. 以下不属于Linux阵营的Unix操作系统是?

A. Ubuntu

B. Android

C. AIX

D. redhet

正确答案:C

23. 统计每个部门的人数的SQL语句是?

A. select dept_id,max(dept_id) from s_emp group by dept_id

B. select dept_id,avg(dept_id) from s_emp group by dept_id

C. select dept_id,count(dept_id) from s_emp group by dept_id

D. select dept_id,sum(dept_id) from s_emp group by dept_id

正确答案:C

24.

阅读如下代码:

struct sembuf op;

_num = 0;//对下标为0的信号量操作

(空白处1)

_flg = 0;//无法完成时阻塞,可以是IPC_NOWAIT

semop(semid, &op, 1);

printf("访问共享资源n");

sleep(30);

printf("完成共享资源的访问n");

(空白处2)

semop(semid, &op, 1);

空白处1和空白处2应该填上的代码是?

A. 不需要填写代码

B. _op = 1;和_op = 1;

C. _op = 1;和_op = -1;

D. _op = -1;和_op = 1;

正确答案:D

25. 关于信号,以下说法错误的是?

A. 信号分为可靠信号和不可靠信号

B. 信号的默认处理 ,80%的情况是退出进程

C. 所有信号都可以忽略

D. 当前用户只能给自己的进程发信号,不能给别的用户的进程发信号

正确答案:C

26. 已知表salgrade字段如下:

Hisal - 最高薪水

Losal - 最低薪水

grade - 薪水等级

查询每个员工的 first_name 和salary以及对应的薪水等级的SQL语句是?

A. select first_name,salary,grade from s_emp ,salgrade where salary

between hisal and losal

B. select first_name,salary,grade from s_emp ,salgrade where salary

between losal and hisal

C. select first_name,salary,grade from s_emp where salary between

losal and hisal

D. select first_name,salary,grade from s_emp ,salgrade where salary>

losal and

正确答案:B

27. 把s_emp中的月薪在900和1500之间的人列出来的SQL语句是?

A.

select first_name,salary from s_emp where 1500

B.

select first_name,salary from s_emp where salary in (900,1500)

C.

select first_name,salary from s_emp where

salary between 900 and 1500

D. select first_name,salary from emp where

salary between 900 and 1500

正确答案:C

28.

int fd = open("", O_RDWR|O_CREAT|O_TRUNC, 0666);

请问是采用何种方式打开的?

A. 创建新文件,并且权限是666

B. 采用可读可写方式,如文件存在截断后打开,不存在新建权限为666的新文件

C. 可写方式,文件权限改为666

D. 只读方式,如文件存在截断后打开,不存在新建权限为666的新文件

正确答案:B

29.

阅读如下代码:

key_t key = ftok(".", 200);

if(key==-1)perror("key生成失败"),exit(-1);

int shmid = (空白处);

if(shmid==-1)

perror("创建共享存储段失败"),exit(-1);

printf("创建共享存储段成功n");

void* p = shmat(shmid, 0, 0);

if(p==(void*)-1)

perror("挂接内存段失败"),exit(-1);

printf("已挂接到共享存储段n");

int* pi = p;

*pi = 12345678;

if(shmdt(p)==-1)perror("脱接失败"),exit(-1);

空白出应该填上的代码是?

A. shmget(key, 4, 0666|IPC_CREAT|IPC_EXCL)

B. shmget(key, 3, 0666|IPC_CREAT|IPC_EXCL)

C. shmctl(shmid, IPC_SET, 4)

D. shmctl(shmid, IPC_SET,0666|IPC_CREAT|IPC_EXCL)

正确答案:A

30. 查找和Smith一个title的所有员工的名字的SQL语句是?

A. SELECT last_name from s_emp where title=(select title from s_emp

where last_name=’Smith’)

B. SELECT last_name from s_emp where title=(select title from s_emp

where last_name=”Smith”)

C. SELECT last_name from s_emp where title=(select last_name,title

from s_emp where last_name=’Smith’)

D. SELECT last_name from s_emp where title=(select title from s_emp

last_name=’Smith’)

正确答案:A

31.

阅读如下代码:

void* task(void* p){

int* pi = (int*)p;

printf("*pi=%dn", *pi);

*pi = 200;

}

int main()

{

pthread_t id1;

int x = 100;

if(pthread_create(&id1, 0, task, &x)){

printf("create ");

return -1;

}

printf("x=%dn", x);

return 0;

}

打印出数字为?

A. *pi=100 x=100

B. *pi=200 x=100

C. *pi=200 x=200

D. *pi=100 x=200

正确答案:D

32. 下列关于进程描述符说法错误的是?

A. getpid 获取进程ID。

B. getppid 获取父进程ID。

C. getuid 获取有效用户ID。

D. getgid 获取实际组ID。

正确答案:C

33. 阅读如下代码:

pid_t pid = fork();

if(pid==0){//子进程

printf("子进程开始运行,即将进入睡眠n");

sleep(3);

printf("子进程运行结束n");

exit(100);//不能超过255

}

//父进程

printf("父进程运行,子进程的PID=%dn", pid);

printf("父进程等待子进程结束...n");

int result;

pid_t res = wait(&result);

printf("等到结束的子进程是%dn", res);

printf("result=%dn", result);

if((空白处1)){

printf("子进程是正常结束的n");

//取返回值

printf("子进程返回值:%dn",

(空白处2));

}

空白处1和空白处2分别应该填入的代码是?

A. WIFEXIT(result)和WEXITSTATUS(result)

B. WEXITSTATUS(result)和WIFEXIT(result)

C. WEXITSTATUS(result)和WIFEXITED(result)

D. WIFEXITED(result)和WEXITSTATUS(result)

正确答案:D

34.

下列哪段代码能正确的 打开文件,要求如果文件存在就打开,并清除文件原有内容,不存在就创建,同时具备读写权限?

A.

int fd = open("", O_RDONLY|O_CREAT|O_TRUNC, 0666);

if(fd==-1){

perror("创建文件失败");

exit(-1);

}

B.

int fd = open("", O_RDWR|O_CREAT|O_EXCL, 0666);

if(fd==-1){

perror("创建文件失败");

exit(-1);

}

C.

int fd = open("", O_RDWR |O_TRUNC, 0666);

if(fd==-1){

perror("创建文件失败");

exit(-1);

}

D.

int fd = open("", O_RDWR|O_CREAT|O_TRUNC, 0666);

if(fd==-1){

perror("创建文件失败");

exit(-1);

}

正确答案:D

35. 阅读如下代码:

int fd[2] = {};

pipe(fd);

int pid = fork();

if(pid==0){//子进程

(空白处1)

while(1){

int x;

if(read(fd[0], &x, sizeof(x))<=0)break;

printf("%d ", x);

fflush(0);

}

close(fd[0]);

exit(0);

}

(空白处2)

int i;

for(i=0; i<100; i++){

write(fd[1], &i, sizeof(int));

usleep(200000);

}

close(fd[1]);

空白处1和空白处2应该填上的代码是?

A. 什么都不需要填

B. close(fd[1]);和close(fd[0]);

C. close(fd[0]);和close(fd[1]);

D. close(fd[1]);和close(fd[1]);

正确答案:B

36. 阅读如下代码,完成下面 5 题:

#include "stdafx.h"

#include "windows.h"

#include "stdio.h"

void VirtualInfo( ){

CHAR* pszBuffer = (CHAR *)VirtualAlloc( NULL, 1024*1024*1024,

MEM_RESERVE, PAGE_READWRITE );

VirtualFree( pszBuffer, 0, MEM_DECOMMIT );

}

void Virtual_Commit( ){

CHAR *pszBuff = (CHAR *)VirtualAlloc( NULL, 4096, MEM_COMMIT,

PAGE_READWRITE );

strcpy( pszBuff, "Hello VirtualCommit" );

printf( "%sn", pszBuff );

VirtualFree( pszBuff, 0, MEM_RELEASE );

}

void Virtual_Reserve( ){

CHAR *pszBuff = (CHAR *)VirtualAlloc( NULL, 4096, MEM_RESERVE,

PAGE_READWRITE );

VirtualAlloc( pszBuff, 1024, MEM_COMMIT, PAGE_READWRITE );

strcpy( pszBuff, "Hello VirtualRelease" );

printf( "%sn", pszBuff );

VirtualFree( pszBuff, 0, MEM_RELEASE );

}

int main(int argc, char* argv[])

{

VirtualInfo( );

Virtual_Commit( );

Virtual_Reserve( );

return 0;

}

(1).

关于这段代码完成的功能最准确的描述是?

A.

这段代码是关于虚拟内存管理的

B.

这段代码是关于堆内存管理的

C.

这段代码是关于栈内存管理的

D.

这段代码是关于内存映射文件的

正确答案:A

(2).

CHAR* pszBuffer =

(CHAR *)VirtualAlloc( NULL, 1024*1024*1024,MEM_RESERVE,

PAGE_READWRITE ) 赋值函数如果改为VirtualAlloc( NULL,

1024*1024*1024,MEM_COMMIT, PAGE_READWRITE ),有何区别:

A.

没有区别

B.

MEM_RESERVE只要地址,不要物理内存,而MEM_COMMIT是都占用

C.

MEM_RESERVE是释放内存,而MEM_COMMIT是申请内存

D.

MEM_RESERVE只要物理内存,不占用地址,而MEM_COMMIT是都占用

正确答案:B

(3). VirtualFree( pszBuffer, 0, MEM_DECOMMIT ) 函数如果改为

VirtualFree( pszBuffer, 0, MEM_RELEASE ),有何区别:

A.

没有区别

B.

MEM_DECOMMIT是再次内存申请,MEM_RELEASE释放内存

C.

MEM_DECOMMIT只释放内存,不释放地址,MEM_RELEASE地址和内存都释放

D.

MEM_DECOMMIT只释放地址,不释放内存,MEM_RELEASE地址和内存都释放

正确答案:C

(4).

函数Virtual_Commit对于内存的使用方式是:

A.

内存地址和物理内存一起申请,并同时释放

B.

内存地址和物理内存一起申请,但分别释放

C.

内存地址和物理内存分别申请,但同时释放

D.

内存地址和物理内存分别申请,分别释放

正确答案:A

(5).

函数Virtual_ Reserve对于内存的使用方式是:

A.

内存地址和物理内存一起申请,并同时释放

B.

内存地址和物理内存一起申请,但分别释放

C.

内存地址和物理内存分别申请,但同时释放

D.

内存地址和物理内存分别申请,分别释放

正确答案:C

37.

#include

#include

#include

#include

#include

#include

#include

#include

void copyFile(const char*from,const char*to){

//判断一下传进来的参数是不是空

(空白5);

int ff = open(from,O_RDONLY);

if(-1==ff){perror("打开原文件失败n");return ;}

int ft = open(to,O_RDWR|O_CREAT,0666);

if(-1==ft){perror("打开目标文件失败n");return ;}

(空白1);

close(ff);

close(ft);

}

void backup(const char*from,const char*to){

//判断一下传进来的参数是不是空

(空白5);

//打开要被复制的文件夹

DIR *q = opendir(from);

if(NULL==q){

perror("打开文件夹失败n");

return ;

}

//创建一个文件夹

mkdir(to,0777);

struct dirent *p = NULL;

struct stat s;

char pathFrom[256] = {};

char pathTo[256] = {};

strcat(strcpy(pathFrom,from),"/");

strcat(strcpy(pathTo,to),"/");

char *pf = pathFrom + strlen(pathFrom);

char *pt = pathTo + strlen(pathTo);

while(NULL!=(p = readdir(q))){

strcpy(pf,p->d_name);

strcpy(pt,p->d_name);

lstat(pathFrom,&s);

if(S_ISREG(_mode)){

//判断一下是不是.c/.h文件

char* pff = pf+strlen(pf)-2;

(空白4);

{

copyFile(pathFrom,pathTo);

}else{

continue ;

}

}

else if(S_ISDIR(_mode)){

(空白2);

}

}

closedir(q);

}

int main(int argc,char *argv[]){

(空白3);

return 0;

}

(1). 空白1处:

A.

int len = 0;

char buf[1024] = {};

while((len= read(ff,buf,sizeof(buf)))>0){

write(ft,buf,len);

}

B.

char buf[1024] = {};

while(read(ff,buf,sizeof(buf))>0){

write(ft,buf,sizeof(buf));

}

C.

int len = 0;

char buf[1024] = {};

while((len= write(ff,buf,sizeof(buf)))>0){

read(ft,buf,len);

}

D.

char buf[1024] = {};

while(write(ff,buf,sizeof(buf))>0){

read(ft,buf,len);

}

正确答案:A

(2). 空白2处:

A.

backup(pathFrom,pathTo);

B.

if(0==strcmp(".",p->d_name)||0==strcmp("..",p->d_name)){

backup(pathFrom,pathTo);

}

C.

if(0==strcmp(".",p->d_name)||0==strcmp("..",p->d_name)){

continue;

}else{

backup(pathFrom,pathTo);

}

D.

if("."==p->d_name||".."==p->d_name){

continue;

}else{

backup(pathFrom,pathTo);

}

正确答案:C

(3). 空白3处:

A.

backup(argv[0],argv[1]);

B.

backup(argv[1],argv[2]);

C.

backup(argv[2],argv[3]);

D.

backup();

正确答案:B

(4). 空白4处:

A.

if(0==strcmp(".c",pff))

B.

if(0==strcmp(".h",pff))

C.

if(0==strcmp(".c",pff)&&0==strcmp(".h",pff))

D.

if(0==strcmp(".c",pff)||0==strcmp(".h",pff))

正确答案:D

(5). 空白5处:

A.

if(NULL==from||'0'==from[0]||NULL==to||0==strlen(to)){

return ;

}

B.

if((NULL==from||'0'==from[0])&&(NULL==to||0==strlen(to))){

return ;

}

C.

if('0'==from[0]||NULL==from||0==strlen(to)||NULL==to){

return ;

}

D.

if((NULL==from||'0'==from[0])&&(NULL==to||0==strlen(to))){

return ;

}

正确答案:A

38.

阅读如下代码,完成下面 5 题:

#include

#include

char* data[5];

int size=0;

pthread_mutex_t lock

= PTHREAD_MUTEX_INITIALIZER;

void* task1(void* p){

pthread_mutex_lock(&lock);

data[size] = "杨键";

sleep(1);

size++;

pthread_mutex_unlock(&lock);

}

void* task2(void* p){

pthread_mutex_lock(&lock);

data[size] = "闵卫";

sleep(1);

size++;

pthread_mutex_unlock(&lock);

}

int main()

{

data[size] = "郭镫鸿";

size++;

pthread_t id1, id2;

pthread_create(&id1, 0, task1, 0);

pthread_create(&id2, 0, task2, 0);

pthread_join(id1, 0);

pthread_join(id2, 0);

pthread_mutex_destroy(&lock);

int i;

for(i=0; i

printf("%s ", data[i]);

}

printf("n");

}

(1). 关于这段代码完成的功能最准确的描述是?

A. 多进程中的进程间通信

B. 多线程的交互

C. 多线程中使用信号量

D. 多线程中使用互斥锁保护临界资源

正确答案:D

(2). pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;如果不对lock进行赋值,那么需要用一个函数进行初始化,该函数是:

A. pthread_mutex_create

B. pthread_mutex_init

C. pthread_mutex_lock

D. pthread_mutex_add

正确答案:B

(3). pthread_mutex_lock(&lock);是对代码进行加锁,如果不加锁会有什么问题:

A. 没有问题

B. size元素个数 会出现问题

C. data数组中的数据会出现问题,有可能丢失数据

D. 数据郭镫鸿会出现问题

正确答案:C

(4). pthread_mutex_unlock(&lock); 是对代码进行解锁,如果不解锁会有什么问题:

A. 没有问题

B. 代码的执行效率会降低,只有一个线程完全结束了另外一个线程才能继续运行

C. 多线程的执行会变成串行,主线程会优先执行完毕

D. 多线程出现死锁现象,有一个线程会无法执行锁定代码

正确答案:D

(5). pthread_join(id1, 0);代码实现的功能是:

A. 让主线程等待线程1的结束后才能继续运行

B. 让所有线程等待线程1的结束后才能运行

C. 让主线程等待线程1零秒后继续运行

D. 让所有线程等待线程1零秒后继续运行

正确答案:A