时间为 (60分钟)
C语言(每题2分,共20分)
1 设x,y,z,t均为int变量,则执行以下语句后,t的值为 1
x=y=z=1;
t=++x||++y&&++z;
2 设j为int型变量,则下面for循环语句的执行结果是 7,4
for(j=10;j>3;j--)
{
if(j%3)j--;
--j;--j;
printf("%d",j);
}
3 执行一下程序段后,m的值为15
int a[2][3]={{1,2,3},{4,5,6}};
int m,*p;
p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));1*3*5
4 有以下程序
int fun(int x,int y,int *cp,int *dp)
{
*cp=x+y;
*dp=x-y;
}
main()
{
int a,b,c,d;
a=30;
b=50;
fun(a,b,&c,&d);
printf("%d,"%d\n",c,d);
}
输出结果是 80,-20;
5 有一下程序
#include "stdio.h"
int abc(int u,int v);
main()
{
int a=24,b=16,c;
c=abc(a,b);
printf("%d\n",c);
}
int abc(int u,int v)
{
int w;
while(v)
{
w=u%v;u=v;v=w;
}
return u;
}
输出结果是 8;
6 若有一下定义和语句
char *s1="12345",*s2="1234";
printf("%d\n",strlen(strcpy(s1,s2));
则输出结果是 :内存出错 因为代码区的值不能更改;换成字符数组可以,因为在栈区
7一下函数用来在w数组中插入x,w数组中的数已按由小到大顺序存放,n所指存储单元中存放数组中数据的个数,插入后数组中的数仍有序,请填空
void fun(char *w,char x,int n)
{
int i,p;
p=0;
w[*n]=x;
while(x>w[p])
____p++__;
for(i=*n;i>p;i--)
w[i]=_w[i-1]__;
w[p]=x;
++*n;
}
在用数组实现的有序序列中插入内容,必须先寻插入位置。插入位置到后,需将插入位置之后的元素向后移动一个位置,留出插入点。最后,将元素插入,并增加序列的元素个数。函数为了简化寻插入位置循环的循环条件,预先在序列的最后置人插入值。插入位置之后的元素向后移动一个位置必须从最后一个元素开始往前逆序移动,是将前一个元素向后移,所以在空框处应填入w[i-l] 。
8 请问下面程序有没有什么问题?把循环语句内外换一下
int a[60][250][1000],i,j,k;
for(k=0;k<1000;k++)
for(j=0;j<250;j++)
for(i=0;i<60;i++)
a[i][j][k]=0;
9
char str[]="Hello";
char str2[5]={'H','e','l','l',','o'};
char str3[6]={'H','e','l','l',','o','\0'};
char *p1="Hello";
char *p2[]={"hello","world"};
int n=10;
int *q=&n;
sizeof(str1)=____
strlen(str1)=____
sizeof(str2)=____
strlen(str2)=____
sizeof(str3)=____
strlen(str3)=____
sizof(p1)=_______
sizof(p2)=_______
sizof(n)=_______
sizof(q)=_______
6,5,5,13,6,5,4,8,4,4;
10
char * const p;
char const *p;
const char *p;
上述三个有什么区别
P是常量*p是变量;不能进行p++;但能*p=3;
*p 是常量,p 是变量;不能进行*p=3,但能p++;
和第二个一样;
数据库 (共27分)
1 事务的四个属性是什么?(5分)
原子性 要么同时成功 要么同时失败
隔离性 在SELECT 里是共享的 在操作里面是独有的,
持久性,
一致性;
2 为管理岗位业务培训信息,建立了3个表:(15分)1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名
--实现代码:
SELECT SN,SD FROM S
WHERE [S#] IN(
SELECT [S#] FROM C,SC
WHERE C.[C#]=SC.[C#]
AND CN=N'税收基础')
2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位
--实现代码:
SELECT S.SN,S.SD FROM S,SC
WHERE S.[S#]=SC.[S#]
AND SC.[C#]='C2'
3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位
--实现代码:
SELECT SN,SD FROM S
WHERE [S#] NOT IN(
SELECT [S#] FROM SC
WHERE [C#]='C5')
4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
--实现代码:
SELECT SN,SD FROM S
WHERE [S#] IN(
SELECT [S#] FROM SC
RIGHT JOIN C ON SC.[C#]=C.[C#]
GROUP BY [S#]
HAVING COUNT(*)=COUNTprintf函数的作用是向终端(DISTINCT [S#]))
5. 查询选修了课程的学员人数
--实现代码:
SELECT 学员人数=COUNT(DISTINCT [S#]) FROM SC
6. 查询选修课程超过5门的学员学号和所属单位
--实现代码:
SELECT SN,SD FROM S
WHERE [S#] IN(
SELECT [S#] FROM SC
GROUP BY [S#]
HAVING COUNT(DISTINCT [C#])>5)
S(S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号,学院姓名,所属单位,学院年龄
C(C#,CN) C#,CN 分别代表课程编号,课程名称
SC(S#,C#,G) S#,C#,G 分别代表学号,所选修的课程编号,学习成绩
(1)使用标准SQL嵌套语句查询选修课程名称为 税收基础 的学员学号和姓名
(2)使用标准SQL嵌套语句查询选修课程编号为‘C2’的学员姓名和所属单位
(3)使用标准SQL嵌套语句查询不选修课程编号为‘C5’的学员姓名和所属单位
(4)使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
(5)查询选修了课程的学员人数
(6)查询选修课程超过5门的学员学号和所属单位
3 有一个数据库表people有name,age,address三个字段(注:没有主键),表中存在重复的记录,请删除重复的记录。(7分)
create table temp_people as (select distinct * from people);
truncate table people;--truncate 效率比delete高
insert into people select * from temp_people;
还有一种简单的方式(效率不一定比上面的好,但也不一定差,要看具体数据冗余的程度),
对于oracle,使用rowid:
delete from people where rowid not in (select max(rowid) from people t group by name,age,address);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论