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


发布评论