|
2003年
《应用软件基础》试题
c语言程序设计部分:
一. 选择题
1. 设a=2,b=3,执行表达式c=b*=a-1;变量c的值是()
a.2 b.3 c.4 d.5
2.若a是int型变量,则表达式(a=4*5,a*2),a+6的值为()
a.20 b.26 c.40 d.46
3.语言程序中使用以下的二维数组定义语句并赋以部分初值,其中不正确的定义只有()
a.int a[2][3]={{4},{5,6}} b. int a[2][3]={{4},{5},{6}}
c. int a[2][3]={4,5,6 } d. int a[2][3]={{4},5,6}
4.设有以下洪定义
#define N 3
#define Y(n) ((N+1)*n)
则执行语句:z=2*(N+Y(5+1));后z的值为()
a.出错 b. 42 c.48 d.54
5.已设有如下定义:
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*ptr)[3]=a,*p=a[0];
则下列能够正确表示数组元素a[1][2]的选项是()
a.*((*ptr+1)[2])b.*(*(p+5)) c.(*ptr+1)+2) d.*(*(a+1)+2)
6.以下程序运行后,输出结果是()
fut(int**s,int p[2][3])
{**s=p[1][1];}
main()
{int a[2][3]={1,3,5,7,9,11},*p;
p=(int *)malloc(sizeof(int));
fut(&p,a);
printf(“%d\n”,*p);}
a. 1 b. 7 c. 9 d. 11
7.若有以下定义和语句,则输出结果是()
char s[12]=”a book!”;
printf(“%d”,strlen(s));
a. 12 b.8 c.7 d.6
8.以下程序执行后,a的值是()
main()
{ int a,k=4,m=6,*p1=&k,*p2=&m;
a=p1=&m;
printf(“%d\n”,a);
}
a.4 b.1 c.0 d.运行时出错,无定值
9.执行以下程序段后,m的值为()
int a[2][3]={{1,2,3},{4,5,6}};
int m,*p;
p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
a. 15 b. 14 c. 13 d. 12
10.以下程序运行后,如果从键盘上输入:
book<回车>
book<空格><回车>
则输出结果是()
#include<string.h>
main()
{char a1[80],a2[80],*s1=a1,*s2=a2;
gets(s1);gets(s2);
if(!strcmp(s1,s2)) printf(“*”);
else printf(“#”);
printf(“%d\n”,strlen(strcat(s1,s2)));
}
a.*8 b.*9 c.#8 d.#9
11.以下程序运行后,输出结果是()
main()
{char ch[2][5]={“693”,”825”},*p[2];
int i,j;
long s=0;
for(i=0;i<2;i++)
p=ch;
for(i=0;i<2;i++)
for(j=0;p[j]>=’0’&&p[j]<=’9’;j++)
s=10*s+(p[j]-‘0’);
printf(“%d\n”,s);
}
a.22 b.33 c.6385 d.693825
12.以下程序的输出结果是()
struct stu
{int num;
char name[10];
int age;
};
fun(struct stu *p)
{printf(“%s\n”,(*p).name);}
main()
{struct stu student[3]={{9801,”Zhang”,20},{9802,”Wang”,19}{9803,”Zhao”,18}};
fun(students+2);
}
a.Zhang b.Zhao c.Wang d.18
13.设有以下说明和定义:
typedef union
{long i;int k[5];char c;
}DATE,max;
struct date
{int cat;DATE cow;double dog;
}too;
则下列语句的执行结果是:()
printf(“%d”,sizeof(too)+sizeof(max));
a.30 b.26 c.18 d.8
14.执行以下程序的输出是()
main()
{int x,a=1,b=2,c=0;
x=--a||b&&++c;
printf(“%d\n”,x);
}
a.1 b.0 c.-1 d.非零值
15.以下可作为函数fopen中第一个参数的正确格式是()
a.c:user\text.txt b.c:\user\text.txt
c.”c:\user\text.txt” d.”c:\\user\\text.txt”
二. 阅读程序,回答问题
1.#include<stdio.h>
main()
{char a[]=”abcde”,b[]=”cd”;
printf(“%d\n”,fun(a,b));
}
fun(char s[],char t[])
{ int i,j,k,pos;
pos=-1;
for(i=0;s!=’\0’;i++){
for(j=i,k=0;t[k]!=’\0’&&s[j]==t[k];j++,k++)
;
if(k>0&&t[k]==’\0’)
pos=I;
}
return pos;
}
1. 程序的输出结果是:
2. 函数fun(char s[],char t[])的功能是:
2.#include<stdio.h>
main()
{int a,b[]={4,13,2,4,6};
fun(b,5);
for(a=0;a<5;a++) printf(“%5d”,*(b+a));
printf(“\n”);
}
fun(int a[],int n)
{int x,y,t;
for(x=0;x<n;x++){
for(t=*(a+x),y=x-1;y>=0&&t>*(a+y);y--)
*(a+y+1)=*(a+y);
*(a+y+1)=t;
}
}
3. 程序的输出结果是:
4. 函数fun(int a[],int n)的功能是:
三. 程序选择填空
函数inode *mergedes(inode *a,inode *b)的功能是将两个降序的链表合并成一个降序的链表
设链表结点的类型是:
typedef struct s
{ int val;
struct s *next;
}inode;
inode *merge (inode *a,inode *b)
{inode *h=a,*p,*q;
while(b){
for(p=h;(1);q=p,p=p->next)
;
if((p==h)
(2);
else
(3);
q=b;
b=b->next;
(4);
}
return h;
}
1. a. p->val>b->val b. p->val<b->val
c. p&&p->val>b->val d. p&&p->val<b->val
2. a. h=b b. b=h c. h=h->next d. b=b->next
3. a. h->next=p b. q->next=b c. q->next=p d. h->next=b
4. a. h->next=p b. q->next=b c. q->next=p d. h->next=b
四.程序填空
程序功能:主函数从命令行读入一个文件名,统计该文件的行树和字符个数,并且找出最长的行,输出该行。请填空完成程序。
#define MAX 100
#include <stdio.h>
main(【1】)
{FILE *fp;
int lno=0,llen=0,lmax=0,lc=0;
char s[MAX],line[MAX];
if(argc==1){
printf(“file name?\n”);
exit(0);}
if((fp=fopen(【2】))==NULL)
{ printf(“File open error!\n”);
exit(0);}
if(feof(fp)) printf(“EOF!\n);
while(【3】){
fgets(s,MAX,fp);
lno++;
llen=strlen(s);
lc+=llen;
if(llen>lmax)
{【4】;
l.max=llen;
}
}
printf(“\n行数:%d, 字符数:%d,最长行是:\n %s”,lno,lc,line);
fclose(fp);
}
五.编写程序
编写函数char *fun (char *s,char c),函数的功能是将字符串变量s中的字符变量c过滤掉,并返回过滤后字符串的地址。例如fun(“abcedaba”,’a’)返回的字符串为“bcdeb”.
数据库部分
一.选择填空
1. 数据库系统是在(1)的基础上发展起来的。由于减少数据冗余,提高数据独立性,并集中检查(2),使数据库系统获得广泛应用。
2. 数据库系统的用户接口是(3),它具有数据定义,操纵和(4)的功能。关系数据库的国际标准语言是(5);
3. 关系代数中的选择运算和SQL中的SELECT相比,它们的功能是(6);
4. 关系数据库的3NF是对(7)之间的函数依赖作出的限制。
5. 数据库的参照完整性是针对(8)的取值限制,它可以取(9);
6. 封锁机制是(10)系统对数据库的一种保护措施。
各空可选的答案如下:
1.A.数据库管理系统 B.编译系统 C.文件系统 D.操作系统
2.A.数据兼容性 B 数据完整性 C 数据的结构 D 数据层次性
3.A 高级语言 B 开发工具 C 数据库语言
4.A 数据修改 B 数据控制 C 数据恢复 D 数据查询
5.A.QUEL B.C C.ORACLE D.SQL
6.A.相同 B.比select功能强 C select比功能强 D 不同
7.A.主属性与主码 B.非主属性与主码 C.所有属性与主码 D 主码与外部码
8.A.主码 B.候选码 C.外部玛 D.全连串码
9.A.常数 B.任何值 C 零 D 空
10.A.数据库出故障时 B.数据库关闭时 C.多用户并发操作时 D数据库运行时
二.简要回答下列问题
1. 什么是数据库数据的逻辑独立性和物理独立性?
2. 什么是关系?什么是关系模式?
3. 什么是串行调度?它与可串行化调度的区别?
4. 解释事物的ACID特性
5. 下面结论是否正确?若不正确,请举出反例。
A 主属性一定是候选码
B 一个关系只有两个属性,它一定属于2NF
三.设计题
图书馆为管理学生借书建数据库,有如下信息:
◆ 有关学生的信息:学号,姓名,系级
◆ 有关图书的信息:书号,书名,作者,出版社,价格
◆ 有关借书的信息:某学生借某书,借期,应还日期,还否
根据以上信息画出E-R图,并把它转化为关系模型,标出每个关系的主码。
四. 解答题
汽车保险公司数据库中有若干个表,其中加下画线的为主码
◆ 车主(身份证号,姓名,住址,电话)
◆ 车辆(牌照,型号,颜色,出厂年份,车况)
◆ 事故(日期,牌照,事故简述,事故损失,赔付金额)
考虑到一个人可以拥有多辆车,还有表
◆ 人_车(身份证号,牌照)
用SQL语句完成下列操作:
1. 找出在2001年共出过多少次事故?涉及多少辆车?
2. 查出张国强(他的身份证号为‘aaaaaa’)的车的事故次数
3. 查询在2001年5月20日的事故中,牌照为‘bbbbbb’的车的出厂年份,车况和赔付金额。
4. 一个新客户来为其车投保,在数据库中加入信息。提示:要在哪些表中加入?可以自己设计一组数据。
5. 为了教育司机,公司要公布事故情况,但又不愿公布赔付金额。怎么办?
6. 统计在2001年内,各种型号的车出事故次数和平均赔付金额。
2002年
数据库部分
一. 简答题
1. 什么是关系?
2. 举例说明实体间一对多(1:n)的联系。
3. 什么是数据与程序的逻辑独立性:
4. 什么是视图?它与基本表的区别是什么?
5. 什么样的关系属于3NF?
6. 举例说明参照完整性(又称引用完整性)规则。
7. 封锁是实现并发控制的技术,基本的封锁类型是什么?
8. 日志文件主要记录的内容是什么?
二. 应用题
某企业管理数据库中有三个表:
顾客信息表:顾客(顾客号,顾客姓名,地址,电话,传真)
产品信息表:产品(产品号,产品名称,型号,单价,折扣,库存量)
顾客订购产品信息表:订购(定单号,顾客号,产品号,数量,单价,交货日期,付款方式)
要求:
1. 用SQL命令建立顾客信息表,其中‘顾客号’,为主码,‘顾客姓名’非空。
2. 分别用关系代数和SQL命令完成下列查询:
1) 产品名称为‘冰箱’,型号为‘A2’的库存量。
2) 订购了产品名称为‘冰箱’的顾客姓名,地址,电话。
3. 为方便普通客户查询,建立一个名为‘产品目录’的视图,它只包括产品名称,型号,单价。
C语言程序设计
一.选择题
1. 在C语言中,如果下面的变量都是int类型,则输出的结果是()
sum=pad=5;
pad=sum++,pad++,++pad;
printf(“%d\n”,pad);
a.7 b.6 c.5 d.4
2.以下程序的输出结果是()
main()
{int i=010,j=10;
printf(“%d,%d\n”,++i,j--);}
a.11,10 b.9,10 c.010,9 d.10,9
3.已知在ASCII代码中,字母A的序号为65,以下程序的输出结果是()
main()
{ char c1=’A’,c2=’Y’;
printf(“%d,%d\n”,c1,c2);}
a.输出错误信息 b.65,90 c.A,Y d..65,89
4. 执行以下语句,则c的二进制值是()
char a=3,b=6,,c;
c=a^b<<2;
a.00011011 b.00010100 c.00011100 d.00011000
5.已知:int a=5;执行下列语句后输出结果是()
if (a=0) printf(“%d”,a)
else printf(“%d”,2*a);
a.10 b.5 c.0 d.语法错误
6.语句while(!E) 中的条件!E等价于()
a.E==0 b.E!=1 c.E!=0 d.~E
7.执行语句for(X=0,Y=0;(Y!=123)&&(X<4);X++);()
a.无限循环 b.循环次数不变 c.执行4次 d.执行3次
8.sizeof(double)是()
a. 一种函数调用 b一个双精度型表达式 c.一个整形表达式 d.一个不合法的表达式
9.以下程序的输出结果是()
main()
{ char str[12]={‘s’,’t’,’r’,’i’,’n’,’g’,’\0’}
printf(“%d\n”,strlen(str));
}
a.12 b.11 c.7 d.6
10. 以下程序的输出结果是()
main()
{ int a,b,d=241;
a=d/100%9;
b=(-1)&&(-1);
printf(“%d,%d\n”,a,b);
}
a.6,1 b.2,1 c.6,0 d.2,0
11.C语言的运算符以运算对象的数目可以分为()
a.单目算符 b.单目算符和双目算符
c.单目,双目和三目算符 d. 单目,双目,三目和四目运算符
12.使用以下对二维数组的定义语句中,不正确的定义是()
a. int m[2][3]={{1},{2,3}}; b.int m[2][3]={1,2,3};
c. int m[2][3]={{1},{2},{3}}; d. int m[2][3]={1,{2,3}};
13.若定义a,b为整型变量,用scanf{“%d%d”,&a,&b};语句输入a,b的值时,不可以()作为输入的分割符。
a., b.空格 c. 回车键 d.TAB键
14.若定义char *s=”car”; 则以下表达式的值不等于’a’的是()
a.*++s; b.*(s+1) c.*s+1 d.s[1]
15.C语言程序中,若对函数的类型没有说明,则函数的默认类型是()
a.void b.int c.char d.single
16设有以下语句,则()不是对a数组元素的正确引用,其中0<=i<10
int *p,a[10]={0,1,2,3,4,5,6,7,8,9};
*p=a;
a.a[p-a] b.*(&a) c.p d.*(*(a+i))
17. 以下程序的输出结果是()
union pw
{ int ji;
char ch[2];
}a;
main()
{ a.ch[0]=13;
a.ch[1]=0;
printf(“%d\n”,a.i);
}
a.13 b.14 c.208 d.209
18.以下程序执行时,从第一列开始输入2374<CR>,<CR>代表一个回车符。程序的输出结果是()
main()
{ int c;
while((c=getchar())!=’\n’){
switch(c-‘2’){
case 0:
case 1:putchar(c+4);
case 2: putchar(c+4);break;
case 3: putchar(c+3);
default: putchar(c+2);break;
}
printf(“\n”);
}
a.668977 b.668966 c.66778777 d.6688766
19.以下程序的输出结果是()
#define FUDGE(y) 2.84+y
#define PR(a) printf(“%d”,(int)(a))
#define PRINT1(a) PR(a); putchar(‘\n’)
main()
{ int x=2;
PRINT1(FUDGE(5)*x)
}
a.11 b.12 c.13 d.15
20.根据以下语句 ,则()不是对库函数strcpy的正确调用
char str1[]=”string,str2[8],*str3,*str4=”string”;
a.strcpy(str1,”HELLO”); b. strcpy(str2,”HELLO”);
c. strcpy(str3,”HELLO”) d. strcpy(str4,”HELLO”)
三. 阅读程序段,填写运行结果
1. 下面程序段的运行结果是()
main()
{ int a=10,b=5,c=5,d=5;
int m=0,n=0,p=0;
for(;a<b;++b) m++;
while(a>++c) n++;
do p++;while(a>d++);
printf(“m=%d n=%d p=%d”,m,n,p);
}
2.下面程序段的运行结果是()
main()
{ int k=4,m=1,p;
p=func(k,m);
printf(“%d,”,p);
p=func(k,m);
printf(“%d,”,p);
}
func(a,b)
int a,b;
{ static int m=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
3.以下程序的输出结果是()
main()
{ int i;
for(i=1;i<=5;i++){
if(i%2) printf(“*”);
else continue;
printf(“#”);
}
printf(“$\n”);
}
4.下面程序的运行结果是()
main()
{ int x,a=1,b=2,c=0;
x=--a||b&&++c;
printf(“%d\n”,x);
}
5.下面程序的运行结果是()
#include<stdio.h>
struct s
{ int a;
int b:
}d[4]={1,20,3,40,5,60,7,80};
main()
{ struct s *p=d;
printf(“%d\n”,++p->a);
printf(“%d\n”,++p->b);
}
三.程序选择填空
以下程序名为cat.c,其功能是将命令行中所列的文件依次在屏幕上显示,每显示完一个文件内容后,用户按任意键,则显示下一个文件,如果命令行中所列的文件不能打开或没有给出文件名,则显示相应的信息,命令的格式为:cat filename1 filename2…
1) a.char b.int c.file d.FILE
2) a.fgetc(fptr) b.getchar(fptr) c.fgetc(fp) d.getchar(fp)
3) argc=1 b.argc==1 c.argc<1 d.argc==1
4) a.&pf b.*fp c.argv d.fp
5) a.fclose(argv) b.rewind(argv) c.fclose(fp) d.rewind(fp)
#include “stdio.h”
void cat (【1】 *fptr)
{ int c;
while((c=【2】)!=EOF)
putchar©;
}
main(argc,argv)
int argc;
char *argv[];
{FILE *fp;
int i;
if(【3】)
{ printf(“缺少参数\n”); exit(0);}
for(i=1;i<argc;i++)
{ if((fp=fopen(argv,”r”))==NULL)
printf(“%s 无法打开 \n”,argv);
else{
printf(“/*文件:%s*/\n”,argv);
cat(【4】);}
【5】;
printf(“按任意键显示下一个文件\n”);
getchar();
}
}
四. 程序填空
1. 函数fun(char *s,int a)的功能是采用递归的方法将16进制的字符串s转换成10进制整数作为函数的返回值,若字符串s不是16进制的字符串,则函数的返回值是-1,a的初值是0。
fun(char *s,int a)
{ int i;
if(【1】)
i=*s-‘0’;
else
if(*s>=’A’&&*s<=’F’)
【2】;
else
if(*s>=’a’&&*s<=’f’)
【3】;
else
【4】;
a=a*16+I;
if(*(s+1)!=’\0’)
fun(【5】);
else
return(a);
}
2.以下程序找出二维数组a中每行的最大值,并按一一对应的顺序放入一维数组s中。即:第零行中最大值,放入s[0]中,第一行中最大值,放入s[1]中……。然后输出每行行号和最大值,请填空。
#define 【6】 10
main()
{
int a[M][M],s[M],i,j,k;
for(i=0;i<M;i++)
for(j=0;j<M;j++)
scanf(“%d”,*(a+i)+j);
for(i=0;i<M;i++)
{ *(s+i)= 【7】;
for(j=1;j<M;j++)
if(*(s+i) 【8】*(*(a+i)+j))
*(s+i)= 【9】;
}
for(i=0;i<M;i++)
{ printf(“Row=%2d Max=%5d”, 【10】);
printf(“\n”);
}
}
3. 函数htmtotxt的功能是将html文件中的htm标记过滤掉,即过滤掉在<….> 之间的内容,将其他内容形成一个纯文本文件。函数的参数f1为现有的html文件名,参数f2为形成的纯文本文件名。注意,在html文件中出现<br>,<BR>标记时,应向文本文件中添加一个回车符。
void htmtotxt(char *f1,char *f2)
{
FILE *fin,*fout;
char sc,*s1,*p1;
int flag;
s1=(char *)malloc(MAX);
p1=s1;
/*打开输入输出文件*/
if((fin=fopen(f1,”r”))==NULL)
{
printf(“File %s open error!\n”,f1);
return;
}
if((fout=fopen(f2, 【11】)==NULL)
{
printf(“File %s open error!\n”,f2);
return;
}
/*从htm文件中读取内容,过滤htm标记中的内容,然后将其他内容写入文本文件中*/
flag=0;
while(!feof(fin))
{
sc=【12】;
if(sc==’<’)
{
s1=p1;
*s1++=sc;
while((sc=fgetc(fin))!=’>’&&!feof(fin))
{ *s1=【13】; s1++;}
flag=1;
}
if(flag==1)
{
*s1++=sc;
*s1=’\0’;
if(【14】)
{
fputc(‘\n’,fout);
flag=0;
continue;
}
}
flag=0;
fputc(sc,fout);
}
【15】;
fclose(fout);
}
五. 编写程序
1. 请编写函数huiwen(char *s),它的功能是检查字符串s是否是回文,所谓回文即正向,反向的拼写都一样。如a,eye,ABBA等,当字符串s是回文时,函数的返回值是1,否则返回值是0。
void huiwen(char *s)
{ /*答案开始*/
…
/*答案结束*/
}
2. 请编写函数void fun(int *a,int y,int n),它的功能是:把y值插入到a数组中,a数组中的数由主函数按由小到大的次序从键盘读入,y是要插入的数,其值也从键盘读入。n是a中数字的个数(n<S)。要求插入后,数组中的数仍然有序。下面的主函数部分的程序略,不需要编写,考生只需要完成函数fun的编程。
#define S 50
main()
{
int a[S],b,c;
……
fun(a,b,c)
……
}
void fun(int *a,int y,int n)
{ /*答案开始*/
……
……
/*答案结束*/
} |
|