c语言数据结构问题,*&必须形参对应的实参参是类型,如图CreateList函数中,形参是*&A,对应的形参应该填什么?

当前位置: >>
C语言练习题答案及解析
练习题1(1)栈和队列的共同特点是 A)都是先进先出 B)都是先进后出 C)只允许在端点处插入和删除元素 D)没有共同点 (2)已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是 A)acbed B)decab C)deabc D)cedba (3) 链表不具有的特点是 A)不必事先估计存储空间 B)可随机访问任一元素 C)插入删除不需要移动元素 D)所需空间与线性表长度成正比 (4) 结构化程序设计的3种结构是 A)顺序结构、选择结构、转移结构 B)分支结构、等价结构、循环结构 C)多分支结构、赋值结构、等价结构 D)顺序结构、选择结构、循环结构 (5) 为了提高测试的效率,应该 A)随机选取测试数据 B)取一切可能的输入数据作为测试数据 C)在完成编码以后制定软件的测试计划 D)集中对付那些错误群集的程序 (6)算法的时间复杂度是指 A)执行算法程序所需要的时间 B)算法程序的长度 C)算法执行过程中所需要的基本运算次数 D)算法程序中的指令条数 (7) 软件生命周期中所花费用最多的阶段是 A)详细设计 B)软件编码 C)软件测试 D)软件维护 (8)数据库管理系统中用来定义模式、内模式和外模式的语言为 A)C B)Basic C)DDL D)DML (9)下列有关数据库的描述,正确的是 A)数据库是一个DBF文件 B)数据库是一个关系 C)数据库是一个结构化的数据集合 D)数据库是一组文件 (10)下列有关数据库的描述,正确的是 A)数据处理是将信息转化为数据的过程 B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变 C)关系中的每一列称为元组,一个元组就是一个字段 D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关 键字 (11)以下选项中可作为C语言合法常量的是 A)-80 B)-080 C)-8e1.0 D)-80.0e (12)以下叙述中正确的是 A)用C程序实现的算法必须要有输入和输出操作 B)用C程序实现的算法可以没有输出但必须要有输入 C)用C程序实现的算法可以没有输入但必须要有输出 D)用C程序实现的算法可以既没有输入也没有输出 (13)下列可用于C语言用户标识符的一组是 A)void, define, WORD B)a3_b3, _123,Car C)For, -abc, IF Case D)2a, DO, sizeof (14)有以下程序 main() {int i=1,j=1,k=2; if((j++‖k++)&&i++)printf(&%d,%d,%d\n&,i,j,k); } 执行后输出结果是 A)1,1,2 B)2,2,1 C)2,2,2 D)2,2,3 (15)有定义语句: char c[10];,则正确的输入语句是 A)scanf(&%d%s&,&b,&c); B)scanf(&%d%s&,&b,c); C)scanf(&%d%s&,b,c); D)scanf(&%d%s&,b,&c); (16)有以下程序: main() {inti,s=1; for (i=1;i&50;i++) if(!(i%5)&&!(i%3))s+=i; printf(&%d\n&,s); } 程序的输出结果是 A)409 B)277 C)1 D)91 (17)若运行时给变量x输入12,则以下程序的运行结果是 main() {int x,y; scanf(&%d&,&x); y=x&12?x+10:x-12; printf(&%d\n&,y); } A)0 B)22 C)12 D)10 (18)已知 int t=0; while (t=1) {...} 则以下叙述正确的是 A)循环控制表达式的值为0 B)循环控制表达式的值为1 C)循环控制表达式不合法 D)以上说法都不对 (19)有以下程序: #include&stdio.h& #include&string.h& main() {char a[]={′a′,′b′,′c′,′d′,′e′,′f′,′g′,′h′,′\0′};int i,j; i=sizeof(a);j=strlen(a); printf(&%d,%d\b&,i,j); } 程序运行后的输出结果是 A)9,9 B)8,9 C)1,8 D)9,8 (20)以下能正确定义一维数组的选项是 A)int a[5]={0,1,2,3,4,5}; B)char a[]={′0′,′1′,′2′,′3′,′4′,′5′,′\0′}; C)char a={′A′,′B′,′C′}; D)int a[5]=&0123&; (21)有以下程序 float fun(int x,int y) {return(x+y);} main() {int a=2,b=5,c=8; printf(&%3.0f\n&,fun((int)fun(a+c,b),a-c)); } 程序运行后的输出结果是 A)编译出错 B)9 C)21 D)9.0 (22)下面的程序段运行后,输出结果是 int i,j,x=0; static int a[8][8]; for(i=0;i&3;i++) for(j=0;j&3;j++) a[i][j]=2*i+j; for(i=0;i&8;i++) x+=a[i][j]; printf(&%d&,x); A)9 B)不确定值 C)0 D)18 (23)若有语句:char *line[5];,以下叙述中正确的是 A) 定义line是一个数组,每个数组元素是一个基类型为char为指针变量 B) 定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组 C) 定义line是一个指针数组,语句中的*号称为间址运算符 D) 定义line是一个指向字符型函数的指针 (24)下列程序执行后的输出结果是 void func(int *a,int b[]) {b[0]=*a+6; } main() {int a,b[5]; a=0; b[0]=3; func(&a,b); printf(&%d\n&,b[0]); } A)6 B)7 C)8 D)9 (25)有如下程序 main() {char ch[2][5]={&6937&,&8254&},*p[2]; int i,j,s=0; for(i=0;i&2;i++)p[i]=ch[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)69825 B)63825 C)6385 D)693825 (26)有以下程序 void ss(char *s,char t) {while(*s) {if(*s==t)*s=t-′a′+′A′; s++; } } main() {char str1[100]=&abcddfefdbd&,c=′d′; ss(str1,c); printf(&%s\n&,str1); } 程序运行后的输出结果是 A)ABCDDEFEDBD B)abcDDfefDbD C)abcAAfefAbA D)Abcddfefdbd (27)下面程序的输出结果是 main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf(&%d\n&,*(p+2));} A)3 B)4 C)1 D)2 (28)有如下程序: #define N 2 #define M N+1 #define NUM 2*M+1 main() { for(i=1;i&=NUM;i++)printf(&%d\n&,i); } 该程序中的for循环执行的次数是 A)5 B)6 C)7 D)8 (29)有以下程序: #include &stdio.h& union pw { 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 (30)设有以下说明语句 typedef struct { char ch[8]; } PER; 则下面叙述中正确的是 A)PER 是结构体变量名 B)PER是结构体类型名 C)typedef struct 是结构体类型 D)struct 是结构体类型 (31)下列程序的输出结果是 #include &stdio.h& main() {int i,a=0,b=0; for(i=1;i&10;i++) {if(i%2==0) {a++;} b++;} printf(&a=%d,b=%d&,a,b); } A)a=4,b=4 B)a=4,b=5 C)a=5,b=4 D)a=5,b=5 (32)下面程序段的运行结果是 char str[]=&ABC&,*p= printf(&%d\n&,*(p+3)); A)67 B)0 C)字符′C′的地址 D)字符′C′ (33)设有以下说明语句 struct stu { } 则下面的叙述不正确的是 A)struct是结构体类型的关键字 B)struct stu是用户定义的结构体类型 C)stutype是用户定义的结构体类型名 D)a和b都是结构体成员名 (34)fseek函数的正确调用形式是 A)fseek(文件指针,起始点,位移量) B)fseek(文件指针,位移量,起始点) C)fseek(位移量,起始点,文件指针) D)fseek(起始点,位移量,文件指针) (35)对于下述程序,在方式串分别采用&wt&和&wb&运行时,两次生成的文件TEST的长度是 #include&stdio.h& void main() {FILE *fp=fopen(&TEST&,); fputc(′A′,fp);fputc(′\n′,fp); fputc(′B′,fp);fputc(′\n′,fp); fputc(′C′,fp); fclose(fp); } A)7字节、7字节 B)7字节、5字节 C)5字节、7字节 D)5字节、5字节二 填空题(每空 2 分,共 30 分) 请将每一个空的正确答案写在答题卡【1】-【15】序号的横线上,答在试卷上不得分.(1)算法的基本特征是可行性、确定性、 【1】和拥有足够的情报。 (2)某二叉树中度为 2 的结点有 18 个,则该二叉树中有 【2】 个叶子结点。 (3)在面向对象的程序设计中,类描述的是具有相似性质的一组 【3】 。 (4)通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为 【4】 。 (5)数据库管理系统常见的数据模型有层次模型、网状模型和 【5】 3种。 (6)在scanf()函数调用语句中,可以在格式字符和%号之间加上一个星号,它的作用是跳过对 应的输入数 据;当输入以下数据时,100 200 300 400 500&回车&,下面语句的执行结果为【6】。 main() { int a,b,c; scanf(&%d %*d %d %d&,&a,&b,&c); printf(&%d %d %d&,a,b,c); } (7)设有如下宏定义 #define MYSWAP(z,x,y) {z=x;x=y;y=z;} 以下程序段通过宏调用实现变量a,b内容交换,请填空。 float a=5,b=16,c; MYSWAP(【7】,a,b); (8)阅读下面语句,则程序的执行结果是 【8】。 #include &stdio.h& main() { int a=-1,b=1,k; if((++a&0)&&!(b--&=0)) printf(&%d,%d\n&,a,b); else printf(&%d,%d\n&,b,a); } (9) 以下程序的输出结果是【9】。 main() {int a=0; a+=(a=8); printf(&%d\n&,a);} (10)下列程序的输出结果是【10】。 main() { for(i=1;i+1;i++) {if(i&4) {printf(&%d\n&,i); } printf(&%d\n&,i++); } } (11)函数 void fun(float *sn, int n)的功能是:根据以下公式计算s,计算结果通过形参指针sn传回;n通 过形参传入,n的值大于等于0。请填空。 S=?ni=0(-f)i2×i+1 void fun( float *sn, int n) { float s=0.0, w, f=-1.0; int i=0; for(i=0; i&=n; i++) { f=【11】* w=f/(2*i+1); s+=w; } 【12】=s;} 12)以下程序从输入的10个字符串中找出最长的那个串,请填空。 #include &stdio.h& #include &string.h& #define N 10 main() {char str[N][81],* for(i=0;i&N;i++) gets(str[i]); sp=str[0]; for(i=1;i&N;i++) if(strlen(sp)&strlen(str[i])) 【13】; printf(&输出最长的那个串:\n%s\n&,sp); printf(&输出最长的那个串的长度:%d\n&,strlen(sp)); } (13)下列程序执行输出的结果是【14】。 #include&stdio.h& f(int a) {int b=0; static c=3; a=c++,b++; return(a); } main() {int a=2,i,k; for(i=0;i&2;i++) k=f(a++); printf(&%d\n&,k); } (14)有如图所示的双链表结构,请根据图示完成结构体的定义: lheaddatarchildstruct aa { 【15】 }练习题2(1)已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为 A)GEDHFBCA B)DGEBHFCA C)ABCDEFGH D)ACBFEDHG (2)树是结点的集合,它的根结点数目是 A)有且只有1 B)1或多于1 C)0或1 D)至少2 (3)如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是 A)e3,e1,e4,e2 B)e2,e4,e3,e1 C)e3,e4,e1,e2 D) 任意顺序 (4)在设计程序时,应采纳的原则之一是 A)不限制goto语句的使用 B)减少或取消注解行 C)程序越短越好 D)程序结构应有助于读者理解 (5)程序设计语言的基本成分是数据成分、运算成分、控制成分和 A)对象成分 B)变量成分 C)语句成分 D)传输成分 (6)下列叙述中,不属于软件需求规格说明书的作用的是 A)便于用户、开发人员进行理解和交流 B)反映出用户问题的结构,可以作为软件开发工作的基础和依据 C)作为确认测试和验收的依据 D)便于开发人员进行需求分析 (7)下列不属于软件工程的3个要素的是 A)工具 B)过程 C)方法 D)环境 (8)单个用户使用的数据视图的描述称为 A)外模式 B)概念模式 C)内模式 D)存储模式 (9)将E-R图转换到关系模式时,实体与联系都可以表示成 A)属性 B)关系 C)键 D)域 (10)SQL语言又称为 A)结构化定义语言 B)结构化控制语言 C)结构化查询语言 D)结构化操纵语言 (11)以下不正确的叙述是 A)在C程序中,逗号运算符的优先级最低 B)在C程序中,APH和aph是两个不同的变量 C)若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变 D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值 (12)请选出可用作C语言用户标识符的是 A)void,define,WORD B)a3_b3,_123,IF C)FOR,--abc,Case D)2a,Do,Sizeof (13)以下选项中,不能作为合法常量的是 A)1.234e04 B)1.234e0.4 C)1.234e+4 D)1.234e0 (14)已知所用的scanf调用语句格式为: scanf(&a//%d,b=%f&,&a,&b); 为了将数据3和25.08分别赋给x和y,正确的输入应当是 A)3,25.08&Enter& B)a=3,b=25.08&Enter& C)a//3,b=25.08&Enter& D)a//3&Enter&b=25.08&Enter& (15)在C语言中,运算对象必须是整型数的运算符是 A)% B)\ C)%和\ D)** (16)若有条件表达式 (exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是 A)(exp==0) B)(exp!=0) C)(exp==1) D)(exp!=1) (17)设有以下程序段 int x=0,s=0; while(!x!=0)s+=++x; printf(&%d&,s); 则 A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中的控制表达式是非法的 D)程序段执行无限次 (18)请选出以下语句的输出结果 printf(&%d\n&,strlen(&\t\&\065\xff\n&)); A)5 B)14 C)8 D)输出项不合法,无正常输出 (19)以下不正确的定义语句是 A)double x[5]={2.0,4.0,6.0,8.0,10.0}; B)int y[5]={0,1,3,5,7,9}; C)char c1[]={′1′,′2′,′3′,′4′,′5′}; D)char c2[]={′\x10′,′\xa′,′\x8′}; (20)设函数fun的定义形式为 void fun(char ch,float x){…} 则以下对函数fun的调用语句中,正确的是 A) fun(&abc&,3.0); B) t=fun(′D′,16.5); C) fun(′65′,2.8); D) fun(32,32); (21)下面判断正确的是 A)char *a=&china&;等价于 char *a;*a=&china&; B)char str[5]={&china&};等价于char str[]={&china&}; C)char *s=&china&;等价于 char *s;s=&china&; D)char c[4]=&abc&,d[4]=&abc&;等价于char c[4]=d[4]=&abc&; (22)若已定义: int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a,i; 其中 0≤i≤9, 则对a数组元素不正确的引用是 A)a[p-a] B)*(&a[i]) C)p[i] D)a[10] (23)以下程序的输出结果是 void reverse(int a[],int n) { int i,t; for(i=0;i&n/2;i++) { t=a[i]; a[i]=a[n-1-i];a[n-1-i]=t;} } main() { int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8); for(i=6;i&10;i++)s+=b[i]; printf(& %d\n &,s); } A)22 B)10 C)34 D)30 (24)阅读下列程序,则执行后的结果为 #include &stdio.h& main() { int c[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56}; printf(&%x,%x\n&,c[2][2],*(*(c+1)+1)); } A)3e,6 B)62,5 C)56,5 D)3E,6 (25)阅读下列程序,当运行函数时,输入asd af aa z67,则输出为 #include &stdio.h& #include &ctype.h& #include &string.h& int fun (char *str) { int i,j=0; for(i=0;str[i]!=′\0′;i++) if(str[i]!=′ ′)str[j++]=str[i]; str[j]= ′\0′; } main() { char str[81]; clrscr(); printf(&Input a string : &); gets(str); puts(str); fun(str); printf(&%s\n&,str); } A)asdafaaz67 B)asd af aa z67 C)asd D)z67 (26)以下程序的运行结果是 #define MIN(x,y)(x)&(y)?(x):(y) main() { int i=10,j=15,k; k=10*MIN(i,j); printf(&%d\n&,k); } A)10 B)15 C)100 D)150 (27)设有以下语句: char x=3,y=6,z; z=x^y&&2; 则z的二进制值是 A) B) C) D) (28)若有以下说明和定义 union dt {} 以下叙述中错误的是 A)data的每个成员起始地址都相同 B)变量data所占内存字节数与成员c所占字节数相等 C)程序段:data.a=5;printf(&%f\n&,data.c);输出结果为5.000000 D)data可以作为函数的实参 (29)设有以下说明语句 typedef struct { char ch[8]; } PER; 则下面叙述中正确的是 A)PER 是结构体变量名 B)PER是结构体类型名 C)typedef struct 是结构体类型 D)struct 是结构体类型名 30)下列说法中错误的是 A)只能在循环体内使用break语句 B)在循环体内使用break语句可以使流程跳出本层循环体,从而提前结束本层循环 C)在while和do…while循环中,continue语句并没有使整个循环终止 D)continue的作用是结束本次循环,即跳过本次循环体中尚未执行的语句,接着再一次进行循环判断 (31)下面程序段的运行结果是 char *s=&abcde&; s+=2;printf(&%d&,s); A)cde B)字符′c′ C)字符′c′的地址 D)无确定的输出结果 (32) 假定以下程序经编译和连接后生成可执行文件PROG.EXE, 如果在此可执行文件所在目录的DOS提示符下键 入: PROG ABCDEFGH IJKL&回车&,则输出结果为 main( int argc, char *argv0[]) { while(--argc&0) printf(&%s&,argv[argc]); printf(&\n&); } A)ABCDEFG B)IJHL C)ABCDEFGHIJKL D)IJKLABCDEFGH (33)下面函数的功能是将指针t2所指向的线性链表,链接到t1所指向的链表的末端。假定t1所指向的链表非 空 struct node{struct node *}; connect(struct node *t1, struct node *t2) { if(t1-&next==NULL)t1-&next=t2; else connect( ,t2); } 要实现此功能则应该填入的选项是 A)t1.next B)++t1.next C)t1-&next D)++t1-&next (34)C语言结构体类型变量在程序运行期间 A)TC环境在内存中仅仅开辟一个存放结构体变量地址的单元 B)所有的成员一直驻留在内存中 C)只有最开始的成员驻留在内存中 D)部分成员驻留在内存中 (35)已知函数的调用形式:fread(buf,size,count,fp),参数buf的含义是 A)一个整型变量,代表要读入的数据项总数 B)一个文件指针,指向要读的文件 C)一个指针,指向要读入数据的存放地址 D)一个存储区,存放要读的数据项二 填空题(每空 2 分,共 30 分) 请将每一个空的正确答案写在答题卡【1】-【15】序号的横线上,答在试卷上不得分.(1)数据结构分为逻辑结构与存储结构,线性链表属于 【1】 (2)在面向对象方法中,类之间共享属性和操作的机制称为 【2】 。 (3)耦合和内聚是评价模块独立性的两个主要标准,其中 【3】 反映了模块内各成分之间的联系。 (4)一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体&项目主管&与实体&项目&的联系属于 【4】的联系。 (5)数据库设计分为以下 6 个设计阶段:需求分析阶段、 【5】、逻辑设计阶段、物理设计阶段、实施阶段、 运行和维护阶段。 (6)如下程序片段: int a,b,c; printf(&input a,b,c:&); scanf(&a=%d,b=%d,c=%d&,&a,&b,&c); 欲使输出结果为1、2、3(分别对应于a、b、c),输入数据的正确形式为【6】。 (7)以下程序的运行结果是【7】。 #define MAX (a,b)(a&b?a:b)+1 main () { int i=6,j=8,k; printf (&%d\n&,MAX(i,j)); } (8) 以下程序输出的结果是【8】。 main() { int a=5,b=4,c=3,d; d=(a&b&c); printf(&%d\n&,d); } (9) 以下程序的功能是: 删去一维数组中所有相同的数, 使之只剩一个。 数组中的数已按由小到大的顺序排列, 函数返回删除后数组中数据的个数。 例如,若一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10 删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。 请填空。 #include &stdio.h& #define N 80 int fun(int a[], int n) { int i,j=1; for(i=1;i&n;i++) if(a[j-1]【9】a[i]) a[j++]=a[i]; 【10】; } main() { int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10}, i, n=19; printf(&The original data :\n&); for(i=0; i&n; i++)printf(&%3d&,a[i]); n=fun(a,n); printf(&\nThe data after deleted :\n&); for(i=0; i&n; i++)printf(&%3d&,a[i]); printf(&\n\n&); } (10)以下程序的输出结果是【11】。 fun (int x,int y,int z) { z =x*x+y*y;} main () {int a=31; fun (6,3,a) printf (&%d&, a) } (11)有下列程序,功能是把输入的十进制长整型数以十六进制的形式输出,完成程序 #include &stdio.h& main() { char b[17]={&ABCDEF&}; int c[50],d,i=0,base=16; scanf(&%ld&,&n); do{c[i]=n%i++;n= 【12】 ;} while(n!=0); for(--i;i&=0;--i) {d= 【13】 ;printf(&%c&,b[d]);} printf(&H\n&); } (12)以下程序的输出结果是【14】。 void fun() { static int a=0; a+=2; printf(&%d&,a); } main() { for(cc=1;cc&4;cc++)fun(); printf(&\n&); } (13)函数my_cmp()的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的 ASCII码差值,即s & t时返回正值,当s & t时返回负值。请填空。 my_cmp(char *s, char *t) { while (*s == *t) {if (*s == ′\0′)return 0; ++s; ++t; } return【15】; }练习题 3(1)已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为 A)GEDHFBCA B)DGEBHFCA C)ABCDEFGH D)ACBFEDHG (2)树是结点的集合,它的根结点数目是 A)有且只有1 B)1或多于1 C)0或1 D)至少2 (3)如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是 A)e3,e1,e4,e2 B)e2,e4,e3,e1 C)e3,e4,e1,e2 D) 任意顺序 (4)在设计程序时,应采纳的原则之一是 A)不限制goto语句的使用 B)减少或取消注解行 C)程序越短越好 D)程序结构应有助于读者理解 (5)程序设计语言的基本成分是数据成分、运算成分、控制成分和 A)对象成分 B)变量成分 C)语句成分 D)传输成分 (6)下列叙述中,不属于软件需求规格说明书的作用的是 A)便于用户、开发人员进行理解和交流 B)反映出用户问题的结构,可以作为软件开发工作的基础和依据 C)作为确认测试和验收的依据 D)便于开发人员进行需求分析 (7)下列不属于软件工程的3个要素的是 A)工具 B)过程 C)方法 D)环境 (8)单个用户使用的数据视图的描述称为 A)外模式 B)概念模式 C)内模式 D)存储模式 (9)将E-R图转换到关系模式时,实体与联系都可以表示成 A)属性 B)关系 C)键 D)域 (10)SQL语言又称为 A)结构化定义语言 B)结构化控制语言 C)结构化查询语言 D)结构化操纵语言 (11)以下不正确的叙述是 A)在C程序中,逗号运算符的优先级最低 B)在C程序中,APH和aph是两个不同的变量 C)若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变 D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值 (12)请选出可用作C语言用户标识符的是 A)void,define,WORD B)a3_b3,_123,IF C)FOR,--abc,Case D)2a,Do,Sizeof (13)以下选项中,不能作为合法常量的是 A)1.234e04 B)1.234e0.4 C)1.234e+4 D)1.234e0 (14)已知所用的scanf调用语句格式为: scanf(&a//%d,b=%f&,&a,&b); 为了将数据3和25.08分别赋给x和y,正确的输入应当是 A)3,25.08&Enter& B)a=3,b=25.08&Enter& C)a//3,b=25.08&Enter& D)a//3&Enter&b=25.08&Enter& (15)在C语言中,运算对象必须是整型数的运算符是 A)% B)\ C)%和\ D)** (16)若有条件表达式 (exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是 A)(exp==0) B)(exp!=0) C)(exp==1) D)(exp!=1) (17)设有以下程序段 int x=0,s=0; while(!x!=0)s+=++x; printf(&%d&,s); 则 A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中的控制表达式是非法的 D)程序段执行无限次 (18)请选出以下语句的输出结果 printf(&%d\n&,strlen(&\t\&\065\xff\n&)); A)5 B)14 C)8 D)输出项不合法,无正常输出 (19)以下不正确的定义语句是 A)double x[5]={2.0,4.0,6.0,8.0,10.0}; B)int y[5]={0,1,3,5,7,9}; C)char c1[]={′1′,′2′,′3′,′4′,′5′}; D)char c2[]={′\x10′,′\xa′,′\x8′}; (20)设函数fun的定义形式为 void fun(char ch,float x){…} 则以下对函数fun的调用语句中,正确的是 A) fun(&abc&,3.0); B) t=fun(′D′,16.5); C) fun(′65′,2.8); D) fun(32,32); (21)下面判断正确的是 A)char *a=&china&;等价于 char *a;*a=&china&; B)char str[5]={&china&};等价于char str[]={&china&}; C)char *s=&china&;等价于 char *s;s=&china&; D)char c[4]=&abc&,d[4]=&abc&;等价于char c[4]=d[4]=&abc&; (22)若已定义: int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a,i; 其中 0≤i≤9, 则对a数组元素不正确的引用是 A)a[p-a] B)*(&a[i]) C)p[i] D)a[10] (23)以下程序的输出结果是 void reverse(int a[],int n) { int i,t; for(i=0;i&n/2;i++) { t=a[i]; a[i]=a[n-1-i];a[n-1-i]=t;} } main() { int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8); for(i=6;i&10;i++)s+=b[i]; printf(& %d\n &,s); } A)22 B)10 C)34 D)30 (24)阅读下列程序,则执行后的结果为 #include &stdio.h& main() { int c[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56}; printf(&%x,%x\n&,c[2][2],*(*(c+1)+1)); } A)3e,6 B)62,5 C)56,5 D)3E,6 (25)阅读下列程序,当运行函数时,输入asd af aa z67,则输出为 #include &stdio.h& #include &ctype.h& #include &string.h& int fun (char *str) { int i,j=0; for(i=0;str[i]!=′\0′;i++) if(str[i]!=′ ′)str[j++]=str[i]; str[j]= ′\0′; } main() { char str[81]; clrscr(); printf(&Input a string : &); gets(str); puts(str); fun(str); printf(&%s\n&,str); } A)asdafaaz67 B)asd af aa z67 C)asd D)z67 (26)以下程序的运行结果是 #define MIN(x,y)(x)&(y)?(x):(y) main() { int i=10,j=15,k; k=10*MIN(i,j); printf(&%d\n&,k); } A)10 B)15 C)100 D)150 (27)设有以下语句: char x=3,y=6,z; z=x^y&&2; 则z的二进制值是 A) B) C) D) (28)若有以下说明和定义 union dt {} 以下叙述中错误的是 A)data的每个成员起始地址都相同 B)变量data所占内存字节数与成员c所占字节数相等 C)程序段:data.a=5;printf(&%f\n&,data.c);输出结果为5.000000 D)data可以作为函数的实参 (29)设有以下说明语句 typedef struct { char ch[8]; } PER; 则下面叙述中正确的是 A)PER 是结构体变量名 B)PER是结构体类型名 C)typedef struct 是结构体类型 D)struct 是结构体类型名 30)下列说法中错误的是 A)只能在循环体内使用break语句 B)在循环体内使用break语句可以使流程跳出本层循环体,从而提前结束本层循环 C)在while和do…while循环中,continue语句并没有使整个循环终止 D)continue的作用是结束本次循环,即跳过本次循环体中尚未执行的语句,接着再一次进行循环判断 (31)下面程序段的运行结果是 char *s=&abcde&; s+=2;printf(&%d&,s); A)cde B)字符′c′ C)字符′c′的地址 D)无确定的输出结果 (32) 假定以下程序经编译和连接后生成可执行文件PROG.EXE, 如果在此可执行文件所在目录的DOS提示符下键 入: PROG ABCDEFGH IJKL&回车&,则输出结果为 main( int argc, char *argv0[]) { while(--argc&0) printf(&%s&,argv[argc]); printf(&\n&); } A)ABCDEFG B)IJHL C)ABCDEFGHIJKL D)IJKLABCDEFGH (33)下面函数的功能是将指针t2所指向的线性链表,链接到t1所指向的链表的末端。假定t1所指向的链表非 空 struct node{struct node *}; connect(struct node *t1, struct node *t2) { if(t1-&next==NULL)t1-&next=t2; else connect( ,t2); } 要实现此功能则应该填入的选项是 A)t1.next B)++t1.next C)t1-&next D)++t1-&next (34)C语言结构体类型变量在程序运行期间 A)TC环境在内存中仅仅开辟一个存放结构体变量地址的单元 B)所有的成员一直驻留在内存中 C)只有最开始的成员驻留在内存中 D)部分成员驻留在内存中 (35)已知函数的调用形式:fread(buf,size,count,fp),参数buf的含义是 A)一个整型变量,代表要读入的数据项总数 B)一个文件指针,指向要读的文件 C)一个指针,指向要读入数据的存放地址 D)一个存储区,存放要读的数据项二 填空题(每空 2 分,共 30 分) 请将每一个空的正确答案写在答题卡【1】-【15】序号的横线上,答在试卷上不得分.(1)数据结构分为逻辑结构与存储结构,线性链表属于 【1】 (2)在面向对象方法中,类之间共享属性和操作的机制称为 【2】 。 (3)耦合和内聚是评价模块独立性的两个主要标准,其中 【3】 反映了模块内各成分之间的联系。 (4)一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体&项目主管&与实体&项目&的联系属于 【4】的联系。 (5)数据库设计分为以下 6 个设计阶段:需求分析阶段、 【5】、逻辑设计阶段、物理设计阶段、实施阶段、 运行和维护阶段。 (6)如下程序片段: int a,b,c; printf(&input a,b,c:&); scanf(&a=%d,b=%d,c=%d&,&a,&b,&c); 欲使输出结果为1、2、3(分别对应于a、b、c),输入数据的正确形式为【6】。 (7)以下程序的运行结果是【7】。 #define MAX (a,b)(a&b?a:b)+1 main () { int i=6,j=8,k; printf (&%d\n&,MAX(i,j)); } (8) 以下程序输出的结果是【8】。 main() { int a=5,b=4,c=3,d; d=(a&b&c); printf(&%d\n&,d); } (9) 以下程序的功能是: 删去一维数组中所有相同的数, 使之只剩一个。 数组中的数已按由小到大的顺序排列, 函数返回删除后数组中数据的个数。 例如,若一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10 删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。 请填空。 #include &stdio.h& #define N 80 int fun(int a[], int n) { int i,j=1; for(i=1;i&n;i++) if(a[j-1]【9】a[i]) a[j++]=a[i]; 【10】; } main() { int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10}, i, n=19; printf(&The original data :\n&); for(i=0; i&n; i++)printf(&%3d&,a[i]); n=fun(a,n); printf(&\nThe data after deleted :\n&); for(i=0; i&n; i++)printf(&%3d&,a[i]); printf(&\n\n&); } (10)以下程序的输出结果是【11】。 fun (int x,int y,int z) { z =x*x+y*y;} main () {int a=31; fun (6,3,a) printf (&%d&, a) } (11)有下列程序,功能是把输入的十进制长整型数以十六进制的形式输出,完成程序 #include &stdio.h& main() { char b[17]={&ABCDEF&}; int c[50],d,i=0,base=16; scanf(&%ld&,&n); do{c[i]=n%i++;n= 【12】 ;} while(n!=0); for(--i;i&=0;--i) {d= 【13】 ;printf(&%c&,b[d]);} printf(&H\n&); } (12)以下程序的输出结果是【14】。 void fun() { static int a=0; a+=2; printf(&%d&,a); } main() { for(cc=1;cc&4;cc++)fun(); printf(&\n&); } (13)函数my_cmp()的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的 ASCII码差值,即s & t时返回正值,当s & t时返回负值。请填空。 my_cmp(char *s, char *t) { while (*s == *t) {if (*s == ′\0′)return 0; ++s; ++t; } return【15】; }练习题 4(1)在深度为5的满二叉树中,叶子结点的个数为 A)32 B)31 C)16 D)15 (2)若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺 序是 A) bdgcefha B) gdbecfha C) bdgaechf D) gdbehfca (3)一些重要的程序语言(如C语言和Pascal语言)允许过程的递归调用。而实现递归调用中的存储分配通常 用 A)栈 B)堆 C)数组 D)链表 (4)软件工程的理论和技术性研究的内容主要包括软件开发技术和 A)消除软件危机 B)软件工程管理 C)程序设计自动化 D)实现软件可重用 (5)开发软件时对提高开发人员工作效率至关重要的是 A)操作系统的资源管理功能 B)先进的软件开发工具和环境 C)程序人员的数量 D)计算机的并行处理能力 (6)在软件测试设计中,软件测试的主要目的是 A)实验性运行软件 B)证明软件正确 C)找出软件中全部错误 D)尽可能多地发现软件中的错误 (7)数据处理的最小单位是 A)数据 B)数据元素 C)数据项 D)数据结构 (8)索引属于 A)模式 B)内模式 C)外模式 D)概念模式 (9)下述关于数据库系统的叙述中正确的是 A)数据库系统减少了数据冗余 B)数据库系统避免了一切冗余 C)数据库系统中数据的一致性是指数据类型一致 D)数据库系统比文件系统能管理更多的数据 (10)数据库系统的核心是 A)数据库 B)数据库管理系统 C)模拟模型 D)软件工程 (11)下面各选项中,均是C语言合法标识符的选项组是 A)33weauto B)_23me_3ew C)_433e_ else D)ER -DF32 (12)下列关于复合语句和空语句的说法错误的是 A)复合语句是由&{&开头,由&}&结尾的 B)复合语句在语法上视为一条语句 C)复合语句内,可以有执行语句,不可以有定义语句部分 D)C程序中的所有语句都必须由一个分号作为结束 (13)以下对C语言函数的有关描述中,正确的是 A)在C语言中调用函数时,只能把实参的值传给形参,形参的值不能传送给实参 B)C函数既可以嵌套定义又可以递归调用 C)函数必须有返回值,否则不能使用函数 D)函数必须有返回值,返回值类型不定 (14)现在有以下定义,则下面的表达式a/b+c-k值的类型为: A)int B)double C)float D)char (15)若有定义: char *st= &how are you &; 下列程序段中正确的是 A)char a[11], *p; strcpy(p=a+1,&st[4]); B)char a[11]; strcpy(++a, st); C)char a[11]; strcpy(a, st); D)char a[], *p; strcpy(p=&a[1],st+2); (16)若变量已正确定义并赋值,下面符合C语言语法的表达式是 A)m∶=5 B)c=b=a=1 C)float 8%5 D)x+5=y+2 (17)以下变量x,y,z均为double类型且已正确赋值,不能正确表示数学式子x÷y÷z的C语言表达式是 A)x/y*z B)x*(1/(y*z)) C)x/y*1/z D)x/y/z (18)若w=1,x=2,y=3,z=4,则条件表达式w&x?w:y&z?y:z的值是 A)4 B)3 C)2 D)1 (19)下列程序的运行结果是 #include &stdio.h& main() { int x=-9,y=5,z=8; if(x&y) if(y&0)z=0; else z+=1; printf(&%d\n&,z);} A)6 B)7 C)8 D)9 (20)以下程序的运行结果为 #include &stdio.h& main() {int m,n; for(m=0,n=10;m&n;m+=3,n--); printf(&%d,%d\n&,m,n);} A)6,7 B)7,6 C)9,7 D)7,9 21)现有如下定义:int a,b,*p,*q;,则下列赋值语句错误的是 A)p=&a; B)q=&b; C)p=q; D)p=a; (22)有如下程序段 int *p,a=10,b=1; p=&a; a=*p+b; 执行该程序段后,a的值为 A)12 B)11 C)10 D)编译出错 (23)下面程序的输出结果是 #include&stdio.h& main() {int a[]={1,2,3,4,5,6,7,8,9,0},*p; p=a; printf(&%d\n&,*p+9); } A)0 B)1 C)10 D)9 (24)下列选项中错误的说明语句是 A)char a[]={′t′,′o′,′y′,′o′,′u′,′\0′}; B)char a[]={&toyou\0&}; C)char a[]=&toyou\0&; D)char a[]=′toyou\0′; (25)下列程序的输出结果是 #include &stdio.h& #defineM(x,y)x%y main() { int a,m=12,n=100; a=M(n,m); printf(&%d\n&,a--);} A)2 B)3 C)4 D)5 (26)以下程序的输出结果是 main() {int a,i;a=0; for(i=1;i<5;i++) {switch(i) {case 0: case 3:a+=2; case 1: case 2:a+=3; default:a+=5; } }printf(&%d\n&,a); } A)31 B)13 C)10 D)20 (27)若有以下程序 #include &stdio.h& int a[]={2,4,6,8}; main() { int *p=a; for(i=0;i&4;i++)a[i]=*p; printf(&%d\n&,a[2]); } 上面程序输出结果是 A)6 B)8 C)4 D)2 (28) 下列程序是用来判断数组中特定元素的位置所在。如果输入如下整数: 876 675 896 101 301 401 980 431 451 777 #include &conio.h& #include &stdio.h& int fun(int *s, int t, int *k) { *k=0; for(i=0;i&t;i++) if(s[*k]&s[i])*k=i; return s[*k]; } main() { int a[10]={ 876,675,896,101,301,401,980,431,451,777},k; clrscr(); fun(a, 10, &k); printf(&%d, %d\n &, k, a[k]); } 则输出结果为 A)7,431 B)6 C)980 D)6,980 (29)现有如下程序段 #include &stdio.h& main() { int k[30]={12,324,45,6,768,98,21,34,453,456}; int count=0,i=0; while(k[i]) { if(k[i]%2==0‖k[i]%5==0)count++; i++; } printf(&%d,%d\n&,count,i);} 则程序段的输出结果为 A)7,8 B)8,8 C)7,10 D)8,10 (30)有下面程序段 #include &stdio.h& #include &string.h& main() {char a[3][20]={{&china&},{&isa&},{&bigcountry!&}}; char k[100]={0},*p=k; for(i=0;i&3;i++) { p=strcat(p,a[i]);} i=strlen(p); printf(&%d\n&,i);} 则程序段的输出结果是 A)18 B)19 C)20 D)21 (31)下面程序的文件名为t.exe,在DOS下输入的命令行参数如下:t to meet me&回车& 则程序输出的结果是 #include &stdio.h& main(argc,argv)char *argv[]; { printf(&%d\n&,argc);} A)3 B)4 C)2 D)以上答案都不正确 (32)以下程序的输出结果是 int f() { static int i=0; int s=1; s+=i; i++; } main() { int i,a=0; for(i=0;i&5;i++)a+=f(); printf(&%d\n&,a); } A)20 B)24 C)25 D)15 (33)已知如下定义,则sizeof(a)的值是 struct{ } A)8 B)9 C)10 D)11 (34)有如下定义 struct person{char name[9];}; struct person class[10]={&John&,17,&paul&,19,&Mary&,18,&Adam&,16,}; 根据上述定义,能输出字母M的语句是 A)printf(&%c\n&,class[3].name); B)printf(&%c\n&,class[3].name[1]); C)printf(&%c\n&,class[2].name[1]); D)printf(&%c\n&,class[2].name[0]); (35)假定当前盘符下有两个文本文件,如下 文件名 a1.txta2.txt 内容123# 321# 则下面程序段执行后的结果为 #include &stdio.h& void fc(FILE *p) { while((c=fgetc(p))!=′#′)putchar(c);} main() { FILE * fp=fopen(&a1.txt&,&r&); fc(fp); fclose(fp); fp=fopen(&a2.txt&,&r&); fc(fp); fclose(fp); putchar(′\n′);} A)123321 B)123 C)321 D)以上答案都不正确二 填空题(每空 2 分,共 30 分) 请将每一个空的正确答案写在答题卡【1】-【15】序号的横线上,答在试卷上不得分.(1)在树形结构中,树根结点没有 【1】 。 (2)Jackson结构化程序设计方法是英国的M.Jackson提出的,它是一种面向 【2】 的设计方法。 (3)面向对象的模型中,最基本的概念是对象和 【3】 。 (4)软件设计模块化的目的是 【4】 。 (5)数据模型按不同应用层次分成3种类型,它们是概念数据模型、 【5】 和物理数据模型 (6)以下程序运行后的输出结果是【6】。 main() {int x=0210; printf(&%X\n&,x); } (7)阅读下面程序,则执行后的输出结果是【7】 。 #include &stdio.h& main() {int x,y,z; x=1;y=2;z=3; if(x&y)if(x&z)printf(&%d&,x); else printf(&%d&,y); printf(&%d\n&,z); } (8)阅读下面程序,则程序的执行结果为 【8】。 #include &stdio.h& main() {int a=30,b=20,z; z=fun(a+b,a-b); printf(&%d\n&,z); } fun(int a,int b) { z=a/b; } (9)以下程序的输出结果是【9】。 main() { int y=9; for(; y&0; y--) if (y%3==0) {printf(&%d&, --y);} } (10)下述程序的输出结果是【10】。 #include&stdio.h& int fun(int x) { if(x==0‖x==1) return 3; elsep=x-fun(x-2); } void main() {printf(&\n%d&,fun(9)); } (11)以下函数用来在w数组中插入x。n所指向的存储单元中存放w数组中字符个数。数组w中的字符已按从小到 大的顺序排列,插入后数组w中的字符仍有序。请填空。 void fun(char *w, char x, int *n) { int i, p=0; w[*n]= while(x & w[p])p++; for(i=*n; i&p; i--)w[i]=【11】; w[p]=x; ++*n;} 12)mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。 int mystrlen(char *str) { for(i=0;【12】!= ′\0′;i++); return(i); } (13)下面程序的输出结果是【13】。 long fun5(int n) { if((n==1)‖(n==2)) s=2; else s=n+fun5(n-1); return(s); } main() { x=fun5(4); printf(&%ld\n&,x);} (14)阅读下列程序,则程序的输出结果为【14】。 #include &stdio.h& struct ty { }; main() { struct ty a={30,′x′}; fun(a); printf(&%d%c&,a.data,a.c); } fun(struct ty b) { b.data=20; b.c=′y′; } (15)设有以下定义和语句,则*(*(p+2)+1)的值为【15】。 int a[3][2]={10, 20, 30, 40, 50, 60}, (*p)[2]; p=a;练习题 5(1)数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算,以及 A)数据的存储结构 B)计算方法 C)数据映象 D)逻辑存储 (2) 串的长度是 A)串中不同字符的个数 B)串中不同字母的个数 C)串中所含字符的个数且字符个数大于零 D)串中所含字符的个数 (3)在计算机中,算法是指 A)加工方法 B)解题方案的准确而完整的描述 C)排序方法 D)查询方法 (4)以下不属于对象的基本特点的是 A)分类性 B)多态性 C)继承性 D)封装性 (5)开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做 A)软件投机 B)软件危机 C)软件工程 D)软件产生 (6)下面不属于软件设计原则的是 A)抽象 B)模块化 C)自底向上 D)信息隐蔽 (7)开发大型软件时,产生困难的根本原因是 A)大系统的复杂性 B)人员知识不足 C)客观世界千变万化 D)时间紧、任务重 (8)下列SQL语句中,用于修改表结构的是 A) ALTER B) CREATE C)UPDATE D)INSERT (9)数据库、数据库系统和数据库管理系统之间的关系是 A)数据库包括数据库系统和数据库管理系统 B)数据库系统包括数据库和数据库管理系统 C)数据库管理系统包括数据库和数据库系统 D)3者没有明显的包含关系 (10)关系模型允许定义3类数据约束,下列不属于数据约束的是 A)实体完整性约束 B)参照完整性约束 C)属性完整性约束 D)用户自定义的完整性约束 (11)下列选项可以正确表示字符型常量的是 A)′\r′ B)&a& C)&\897& D)296 12)若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是 A)2.500000 B)2.750000 C)3.500000 D)0.000000 (13)下述对C语言字符数组的描述中错误的是 A)字符数组的下标从0开始 B)字符数组中的字符串可以进行整体输入/输出 C)可以在赋值语句中通过赋值运算符&=&对字符数组整体赋值 D)字符数组可以存放字符串 (14)以下叙述中正确的是 A)构成C程序的基本单位是函数 B)可以在一个函数中定义另一个函数 C)main()函数必须放在其他函数之前 D)C函数定义的格式是K&R格式 (15)有以下函数 char fun(char *p) {} 该函数的返回值是 A)无确切的值 B)形参p中存放的地址值 C)一个临时存储单元的地址 D)形参p自身的地址值 (16)若变量c为char类型,能正确判断出c为小写字母的表达式是 A)′a′&=c&=′z′ B)(c&=′a′)‖(c&=′z′) C)(′a′&=c)and(′z′&=c) D)(c&=′a′)&&(c&=′z′) (17)有以下程序: #include&stdio.h& main() { while((c=getchar())!=′\n′) {switch(c-′2′) {case 0: case 1:putchar(c+4); case 2:putchar(c+4); case 3:putchar(c+3); case 4:putchar(c+3); } } printf(&\n&) } 从第一列开始输入以下数据&CR&代表一个回车符。 2743&CR& 程序的输出结果是 A)66877 B)668966 C)6677877 D)6688766 (18)若有说明:int *p,m=5,n;以下正确的程序段是 A)p=&n;scanf(&%d&,&p); B)p=&n;scanf(&%d&,*p) C)scanf(&%d&,&n);*p=n; D)p=&n;*p=m; (19) 以下程序的运行结果是 #include &stdio.h& main() {struct date {int year,month,} printf(&%d\n&,sizeof(struct date)); } A)6 B)8 C)10 D)12 (20)当运行以下程序时,从键盘输入;AhaMA(空格)Aha&CR&,则下面程序的运行结果是 #include&stdio.h& main() { char s[80],c=′a′; int i=0; scanf(&%s&,s); while(s[i]!=′\n′) { if(s[i]==c)s[i]-32; else if(s[i]==c-32)s[i]=s[i]+32; i++; } puts(s); } A)ahaMa B)AbAMa C)AhAMa[空格]ahA D)ahAMa[空格]ahA (21)有如下程序: main() {int n=9; while(n&6){n--; printf(&%d&,n);} } 该程序的输出结果是 A)987 B)876 C)8765 D)9876 (22)有以下程序: main() { int x=0,y=0,i; for (i=1;++i) {if (i%2==0) {x++;} if (i%5==0) {y++;} } printf (& %d,%d&,x,y); } 程序的输出结果是 A)2,1 B)2,2 C)2,5 D)5,2 (23)有以下函数定义: int mypr (double a,double b) {returna*b;} 若以下选项中所用变量都已正确定义并赋值,错误的函数调用是 A)if(mypr(x,y)){……} B)z=mypr(mypr(x,y),mypr(x,y)); C)z=mypr(mypr(x,y)x,y); D)mypr(x,y); (24)现有如下程序段 #include &stdio.h& main() {int a[5][6]={23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1}; int i=0,j=5; printf(&%d\n&,*(&a[0][0]+2*i+j-2)); } 则程序的输出结果为 A)21 B)78 C)23 D)28 (25)以下程序的输出结果是 #include&stdio.h& int a[3][3]={1,2,3,4,5,6,7,8,9,},*p; main() {p=(int*)malloc(sizeof(int)); f(p,a); printf(&%d\n&,*p); free(p); } f(int *s, int p[][3]) { *s=p[1][1];} A)1 B)4 C)7 D)5 (26)有以下语句,则对a数组元素的引用不正确的是(0≤i≤9) int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a; A)a[p-a] B)*(&a[i]) C)p[i] D)*(*(a+i)) (27)以下程序的输出结果是 void fun (float*p1, float*p2, float*s) { s=(float*)calloc(1,sizeof(float)); *s=*p1+*p2++; } main() { float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a; fun(a,b,s); printf(&%5.2f\n&,*s); } A)11.10 B)12.00 C)21.10 D)1.10 (28)有以下程序 int f(int n) { if(n==1)return 1; else return f(n-1)+1;} main() { int i,j=0; for(i=1;i&3;i++)j+=f(i); printf(&%d\n&,j);} 程序运行后的输出结果是 A)4 B)3 C)2 D)1 (29)在C语言中,变量的隐含存储类别是 A)auto B)static C)extern D)无存储类别(30)以下程序的输出结果是 union myun {struct { int x, y, }} main() {a.u.x=4; a.u.y=5; a.u.z=6; a.k=0; printf(&%d\n&,a.u.x); } A)4 B)5 C)6 D)0 (31)下面程序输出的结果是 main() { int a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i&3;i++) printf(&%d &,a[2-i][i]); } A)1 5 9 B)7 5 3 C)3 5 7 D)5 9 1 (32)有以下程序 #include &stdio.h& main() { FILE * int i=20,j=30,k,n; fp=fopen(&d1.dat&,&w&); fprintf(fp,&%d\n&,i);fprintf(fp,&%d\n&,j); fclose(fp); fp=fopen(&d1.dat&,&r&); fscanf(fp,&%d%d&,&k,&n); printf(&%d %d\n&,k,n); fclose(fp); } 程序运行后的输出结果是 A)20 30 B)20 50 C)30 50 D)30 20 (33)C语言规定,在一个源程序中,main函数的位置 A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后 (34)下面程序段的运行结果是 char a[]=&lanuage&,*p; p=a; while(*p!=′u′){printf(&%c&,*p-32);p++;} A)LANGUAGE B)language C)LAN D)langUAGE (35)若执行下述程序时,若从键盘输入6和8时,结果为 main() {int a,b,s; scanf(&%d%d&,&a,&b); s=a if(a&b) s=b; s*=s; printf(&%d&,s); } A)36 B)64 C)48 D)以上都不对二 填空题(每空 2 分,共 30 分) 请将每一个空的正确答案写在答题卡【1】-【15】序号的横线上,答在试卷上不得分.(1)长度为 n 的顺序存储线性表中,当在任何位置上插入一个元素概率都相等时,插入一个元素所需移动元素 的平均个数为 【1】 。 (2)用树型结构表示实体类型及实体间联系的数据模型称为 【2】 。 (3)类是一个支持集成的抽象数据类型,而对象是类的【3】 (4)数据流图的类型有【4】和事务型。 (5)当数据的物理结构(存储结构)改变时,不影响数据库的逻辑结构,从而不致引起应用程序的变化,这是 指数据的 【5】 。 (6)若已知a=10,b=20,则表达式!a&b的值为【6】。 (7)设有以下定义和语句,则*(*(p+2)+1)的值为 【7】。 int a[3][2]={10,20,30,40,50,60},(*p)[2]; p=a; (8)下面程序的功能是输出数组s中最大元素的下标,请填空。 main() { int k, p,s[]={1, -9, 7, 2, -10, 3}; for(p=0, k=p; p&6; p++) if(s[p]&s[k])【8】 printf(&%d\n&, k); } (9)以下程序运行结果是【9】。 #include&stdio.h& long fib(int g) {switch(g) {case 0:return 0; case 1: case 2:return 1; } return(fib(g-1)+fib(g-2)); } main() { k=fib(5); printf(&k=%5ld\n&,k); } (10) 设有以下程序, 为使之正确运行, 请在下划线中填入应包含的命令行。注:try_me()函数在a:\myfile.txt ( 中有定义。) 【10】 main() {printf(&\n&); try_me(); printf(&\n&); } (11)以下程序的输出结果是【11】。 #include&stdio.h& fun() {static int a=0; a+=2;printf(&%d&,a); } main () { for(cc=1;cc&4;cc++)fun(); printf(&\n&); } (12)本程序用改进冒泡法对数组a[n]的元素从小到大排序,请在程序空白处填空。 void bubble(int a[],int n) { int j, k, jmax, jmax=【12】; do { k=0; for(j=0;j&j++) if(a[j]&a[j+1]) { temp=a[j];a[j]=a[j+1];a[j+1]= k=【13】; } jmax=k; }while(jmax&0); } 13)以下程序建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输 入结束(键表头结点的data域不放数据,表空的条件是ph-&next==NULL),请填空。 #include&stdio.h& struct list { struct list *}; struct list*creatlist() {struct list *p,*q,*ph=(struct list *)malloc (sizeof(struct list)); p=q=printf(&Inp entre-1 to end:\n&); scanf(&%d&,&a); while(a!=-1) {p=(struct list*)malloc(sizeof(struct list)); 【14】=a;q-&next=p;【15】=p;scanf(&%d&,&a);} p-&next=′\0′;return(ph);} main() {struct list * head=creatlist();} (1)数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算,以及 A)数据的存储结构 B)计算方法 C)数据映象 D)逻辑存储 (2) 串的长度是 A)串中不同字符的个数 B)串中不同字母的个数 C)串中所含字符的个数且字符个数大于零 D)串中所含字符的个数 (3)在计算机中,算法是指 A)加工方法 B)解题方案的准确而完整的描述 C)排序方法 D)查询方法 (4)以下不属于对象的基本特点的是 A)分类性 B)多态性 C)继承性 D)封装性 (5)开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做 A)软件投机 B)软件危机 C)软件工程 D)软件产生 (6)下面不属于软件设计原则的是 A)抽象 B)模块化 C)自底向上 D)信息隐蔽 (7)开发大型软件时,产生困难的根本原因是 A)大系统的复杂性 B)人员知识不足 C)客观世界千变万化 D)时间紧、任务重 (8)下列SQL语句中,用于修改表结构的是 A) ALTER B) CREATE C)UPDATE D)INSERT (9)数据库、数据库系统和数据库管理系统之间的关系是 A)数据库包括数据库系统和数据库管理系统 B)数据库系统包括数据库和数据库管理系统 C)数据库管理系统包括数据库和数据库系统 D)3者没有明显的包含关系 (10)关系模型允许定义3类数据约束,下列不属于数据约束的是 A)实体完整性约束 B)参照完整性约束 C)属性完整性约束 D)用户自定义的完整性约束 (11)下列选项可以正确表示字符型常量的是 A)′\r′ B)&a& C)&\897& D)296 12)若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是 A)2.500000 B)2.750000 C)3.500000 D)0.000000 (13)下述对C语言字符数组的描述中错误的是 A)字符数组的下标从0开始 B)字符数组中的字符串可以进行整体输入/输出 C)可以在赋值语句中通过赋值运算符&=&对字符数组整体赋值 D)字符数组可以存放字符串 (14)以下叙述中正确的是 A)构成C程序的基本单位是函数 B)可以在一个函数中定义另一个函数 C)main()函数必须放在其他函数之前 D)C函数定义的格式是K&R格式 (15)有以下函数 char fun(char *p) {} 该函数的返回值是 A)无确切的值 B)形参p中存放的地址值 C)一个临时存储单元的地址 D)形参p自身的地址值 (16)若变量c为char类型,能正确判断出c为小写字母的表达式是 A)′a′&=c&=′z′ B)(c&=′a′)‖(c&=′z′) C)(′a′&=c)and(′z′&=c) D)(c&=′a′)&&(c&=′z′) (17)有以下程序: #include&stdio.h& main() { while((c=getchar())!=′\n′) {switch(c-′2′) {case 0: case 1:putchar(c+4); case 2:putchar(c+4); case 3:putchar(c+3); case 4:putchar(c+3); } } printf(&\n&) } 从第一列开始输入以下数据&CR&代表一个回车符。 2743&CR& 程序的输出结果是 A)66877 B)668966 C)6677877 D)6688766 (18)若有说明:int *p,m=5,n;以下正确的程序段是 A)p=&n;scanf(&%d&,&p); B)p=&n;scanf(&%d&,*p) C)scanf(&%d&,&n);*p=n; D)p=&n;*p=m; (19) 以下程序的运行结果是 #include &stdio.h& main() {struct date {int year,month,} printf(&%d\n&,sizeof(struct date)); } A)6 B)8 C)10 D)12 (20)当运行以下程序时,从键盘输入;AhaMA(空格)Aha&CR&,则下面程序的运行结果是 #include&stdio.h& main() { char s[80],c=′a′; int i=0; scanf(&%s&,s); while(s[i]!=′\n′) { if(s[i]==c)s[i]-32; else if(s[i]==c-32)s[i]=s[i]+32; i++; } puts(s); } A)ahaMa B)AbAMa C)AhAMa[空格]ahA D)ahAMa[空格]ahA (21)有如下程序: main() {int n=9; while(n&6){n--; printf(&%d&,n);} } 该程序的输出结果是 A)987 B)876 C)8765 D)9876 (22)有以下程序: main() { int x=0,y=0,i; for (i=1;++i) {if (i%2==0) {x++;} if (i%5==0) {y++;} } printf (& %d,%d&,x,y); } 程序的输出结果是 A)2,1 B)2,2 C)2,5 D)5,2 (23)有以下函数定义: int mypr (double a,double b) {returna*b;} 若以下选项中所用变量都已正确定义并赋值,错误的函数调用是 A)if(mypr(x,y)){……} B)z=mypr(mypr(x,y),mypr(x,y)); C)z=mypr(mypr(x,y)x,y); D)mypr(x,y); (24)现有如下程序段 #include &stdio.h& main() {int a[5][6]={23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1}; int i=0,j=5; printf(&%d\n&,*(&a[0][0]+2*i+j-2)); } 则程序的输出结果为 A)21 B)78 C)23 D)28 (25)以下程序的输出结果是 #include&stdio.h& int a[3][3]={1,2,3,4,5,6,7,8,9,},*p; main() {p=(int*)malloc(sizeof(int)); f(p,a); printf(&%d\n&,*p); free(p); } f(int *s, int p[][3]) { *s=p[1][1];} A)1 B)4 C)7 D)5 (26)有以下语句,则对a数组元素的引用不正确的是(0≤i≤9) int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a; A)a[p-a] B)*(&a[i]) C)p[i] D)*(*(a+i)) (27)以下程序的输出结果是 void fun (float*p1, float*p2, float*s) { s=(float*)calloc(1,sizeof(float)); *s=*p1+*p2++; } main() { float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a; fun(a,b,s); printf(&%5.2f\n&,*s); } A)11.10 B)12.00 C)21.10 D)1.10 (28)有以下程序 int f(int n) { if(n==1)return 1; else return f(n-1)+1;} main() { int i,j=0; for(i=1;i&3;i++)j+=f(i); printf(&%d\n&,j);} 程序运行后的输出结果是 A)4 B)3 C)2 D)1 (29)在C语言中,变量的隐含存储类别是 A)auto B)static C)extern D)无存储类别(30)以下程序的输出结果是 union myun {struct { int x, y, }} main() {a.u.x=4; a.u.y=5; a.u.z=6; a.k=0; printf(&%d\n&,a.u.x); } A)4 B)5 C)6 D)0 (31)下面程序输出的结果是 main() { int a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i&3;i++) printf(&%d &,a[2-i][i]); } A)1 5 9 B)7 5 3 C)3 5 7 D)5 9 1 (32)有以下程序 #include &stdio.h& main() { FILE * int i=20,j=30,k,n; fp=fopen(&d1.dat&,&w&); fprintf(fp,&%d\n&,i);fprintf(fp,&%d\n&,j); fclose(fp); fp=fopen(&d1.dat&,&r&); fscanf(fp,&%d%d&,&k,&n); printf(&%d %d\n&,k,n); fclose(fp); } 程序运行后的输出结果是 A)20 30 B)20 50 C)30 50 D)30 20 (33)C语言规定,在一个源程序中,main函数的位置 A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后 (34)下面程序段的运行结果是 char a[]=&lanuage&,*p; p=a; while(*p!=′u′){printf(&%c&,*p-32);p++;} A)LANGUAGE B)language C)LAN D)langUAGE (35)若执行下述程序时,若从键盘输入6和8时,结果为 main() {int a,b,s; scanf(&%d%d&,&a,&b); s=a if(a&b) s=b; s*=s; printf(&%d&,s); } A)36 B)64 C)48 D)以上都不对二 填空题(每空 2 分,共 30 分) 请将每一个空的正确答案写在答题卡【1】-【15】序号的横线上,答在试卷上不得分.(1)长度为 n 的顺序存储线性表中,当在任何位置上插入一个元素概率都相等时,插入一个元素所需移动元素 的平均个数为 【1】 。 (2)用树型结构表示实体类型及实体间联系的数据模型称为 【2】 。 (3)类是一个支持集成的抽象数据类型,而对象是类的【3】 (4)数据流图的类型有【4】和事务型。 (5)当数据的物理结构(存储结构)改变时,不影响数据库的逻辑结构,从而不致引起应用程序的变化,这是 指数据的 【5】 。 (6)若已知a=10,b=20,则表达式!a&b的值为【6】。 (7)设有以下定义和语句,则*(*(p+2)+1)的值为 【7】。 int a[3][2]={10,20,30,40,50,60},(*p)[2]; p=a; (8)下面程序的功能是输出数组s中最大元素的下标,请填空。 main() { int k, p,s[]={1, -9, 7, 2, -10, 3}; for(p=0, k=p; p&6; p++) if(s[p]&s[k])【8】 printf(&%d\n&, k); } (9)以下程序运行结果是【9】。 #include&stdio.h& long fib(int g) {switch(g) {case 0:return 0; case 1: case 2:return 1; } return(fib(g-1)+fib(g-2)); } main() { k=fib(5); printf(&k=%5ld\n&,k); } (10) 设有以下程序, 为使之正确运行, 请在下划线中填入应包含的命令行。注:try_me()函数在a:\myfile.txt ( 中有定义。) 【10】 main() {printf(&\n&); try_me(); printf(&\n&); } (11)以下程序的输出结果是【11】。 #include&stdio.h& fun() {static int a=0; a+=2;printf(&%d&,a); } main () { for(cc=1;cc&4;cc++)fun(); printf(&\n&); } (12)本程序用改进冒泡法对数组a[n]的元素从小到大排序,请在程序空白处填空。 void bubble(int a[],int n) { int j, k, jmax, jmax=【12】; do { k=0; for(j=0;j&j++) if(a[j]&a[j+1]) { temp=a[j];a[j]=a[j+1];a[j+1]= k=【13】; } jmax=k; }while(jmax&0); } 13)以下程序建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输 入结束(键表头结点的data域不放数据,表空的条件是ph-&next==NULL),请填空。 #include&stdio.h& struct list { struct list *}; struct list*creatlist() {struct list *p,*q,*ph=(struct list *)malloc (sizeof(struct list)); p=q=printf(&Inp entre-1 to end:\n&); scanf(&%d&,&a); while(a!=-1) {p=(struct list*)malloc(sizeof(struct list)); 【14】=a;q-&next=p;【15】=p;scanf(&%d&,&a);} p-&next=′\0′;return(ph);} main() {struct list * head=creatlist();}练习题 6(1)数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算,以及 A)数据的存储结构 B)计算方法 C)数据映象 D)逻辑存储 (2) 串的长度是 A)串中不同字符的个数 B)串中不同字母的个数 C)串中所含字符的个数且字符个数大于零 D)串中所含字符的个数 (3)在计算机中,算法是指 A)加工方法 B)解题方案的准确而完整的描述 C)排序方法 D)查询方法 (4)以下不属于对象的基本特点的是 A)分类性 B)多态性 C)继承性 D)封装性 (5)开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做 A)软件投机 B)软件危机 C)软件工程 D)软件产生 (6)下面不属于软件设计原则的是 A)抽象 B)模块化 C)自底向上 D)信息隐蔽 (7)开发大型软件时,产生困难的根本原因是 A)大系统的复杂性 B)人员知识不足 C)客观世界千变万化 D)时间紧、任务重 (8)下列SQL语句中,用于修改表结构的是 A) ALTER B) CREATE C)UPDATE D)INSERT (9)数据库、数据库系统和数据库管理系统之间的关系是 A)数据库包括数据库系统和数据库管理系统 B)数据库系统包括数据库和数据库管理系统 C)数据库管理系统包括数据库和数据库系统 D)3者没有明显的包含关系 (10)关系模型允许定义3类数据约束,下列不属于数据约束的是 A)实体完整性约束 B)参照完整性约束 C)属性完整性约束 D)用户自定义的完整性约束 (11)下列选项可以正确表示字符型常量的是 A)′\r′ B)&a& C)&\897& D)296 12)若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是 A)2.500000 B)2.750000 C)3.500000 D)0.000000 (13)下述对C语言字符数组的描述中错误的是 A)字符数组的下标从0开始 B)字符数组中的字符串可以进行整体输入/输出 C)可以在赋值语句中通过赋值运算符&=&对字符数组整体赋值 D)字符数组可以存放字符串 (14)以下叙述中正确的是 A)构成C程序的基本单位是函数 B)可以在一个函数中定义另一个函数 C)main()函数必须放在其他函数之前 D)C函数定义的格式是K&R格式 (15)有以下函数 char fun(char *p) {} 该函数的返回值是 A)无确切的值 B)形参p中存放的地址值 C)一个临时存储单元的地址 D)形参p自身的地址值 (16)若变量c为char类型,能正确判断出c为小写字母的表达式是 A)′a′&=c&=′z′ B)(c&=′a′)‖(c&=′z′) C)(′a′&=c)and(′z′&=c) D)(c&=′a′)&&(c&=′z′) (17)有以下程序: #include&stdio.h& main() { while((c=getchar())!=′\n′) {switch(c-′2′) {case 0: case 1:putchar(c+4); case 2:putchar(c+4); case 3:putchar(c+3); case 4:putchar(c+3); } } printf(&\n&) } 从第一列开始输入以下数据&CR&代表一个回车符。 2743&CR& 程序的输出结果是 A)66877 B)668966 C)6677877 D)6688766 (18)若有说明:int *p,m=5,n;以下正确的程序段是 A)p=&n;scanf(&%d&,&p); B)p=&n;scanf(&%d&,*p) C)scanf(&%d&,&n);*p=n; D)p=&n;*p=m; (19) 以下程序的运行结果是 #include &stdio.h& main() {struct date {int year,month,} printf(&%d\n&,sizeof(struct date)); } A)6 B)8 C)10 D)12 (20)当运行以下程序时,从键盘输入;AhaMA(空格)Aha&CR&,则下面程序的运行结果是 #include&stdio.h& main() { char s[80],c=′a′; int i=0; scanf(&%s&,s); while(s[i]!=′\n′) { if(s[i]==c)s[i]-32; else if(s[i]==c-32)s[i]=s[i]+32; i++; } puts(s); } A)ahaMa B)AbAMa C)AhAMa[空格]ahA D)ahAMa[空格]ahA (21)有如下程序: main() {int n=9; while(n&6){n--; printf(&%d&,n);} } 该程序的输出结果是 A)987 B)876 C)8765 D)9876 (22)有以下程序: main() { int x=0,y=0,i; for (i=1;++i) {if (i%2==0) {x++;} if (i%5==0) {y++;} } printf (& %d,%d&,x,y); } 程序的输出结果是 A)2,1 B)2,2 C)2,5 D)5,2 (23)有以下函数定义: int mypr (double a,double b) {returna*b;} 若以下选项中所用变量都已正确定义并赋值,错误的函数调用是 A)if(mypr(x,y)){……} B)z=mypr(mypr(x,y),mypr(x,y)); C)z=mypr(mypr(x,y)x,y); D)mypr(x,y); (24)现有如下程序段 #include &stdio.h& main() {int a[5][6]={23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1}; int i=0,j=5; printf(&%d\n&,*(&a[0][0]+2*i+j-2)); } 则程序的输出结果为 A)21 B)78 C)23 D)28 (25)以下程序的输出结果是 #include&stdio.h& int a[3][3]={1,2,3,4,5,6,7,8,9,},*p; main() {p=(int*)malloc(sizeof(int)); f(p,a); printf(&%d\n&,*p); free(p); } f(int *s, int p[][3]) { *s=p[1][1];} A)1 B)4 C)7 D)5 (26)有以下语句,则对a数组元素的引用不正确的是(0≤i≤9) int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a; A)a[p-a] B)*(&a[i]) C)p[i] D)*(*(a+i)) (27)以下程序的输出结果是 void fun (float*p1, float*p2, float*s) { s=(float*)calloc(1,sizeof(float)); *s=*p1+*p2++; } main() { float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a; fun(a,b,s); printf(&%5.2f\n&,*s); } A)11.10 B)12.00 C)21.10 D)1.10 (28)有以下程序 int f(int n) { if(n==1)return 1; else return f(n-1)+1;} main() { int i,j=0; for(i=1;i&3;i++)j+=f(i); printf(&%d\n&,j);} 程序运行后的输出结果是 A)4 B)3 C)2 D)1 (29)在C语言中,变量的隐含存储类别是 A)auto B)static C)extern D)无存储类别(30)以下程序的输出结果是 union myun {struct { int x, y, }} main() {a.u.x=4; a.u.y=5; a.u.z=6; a.k=0; printf(&%d\n&,a.u.x); } A)4 B)5 C)6 D)0 (31)下面程序输出的结果是 main() { int a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i&3;i++) printf(&%d &,a[2-i][i]); } A)1 5 9 B)7 5 3 C)3 5 7 D)5 9 1 (32)有以下程序 #include &stdio.h& main() { FILE * int i=20,j=30,k,n; fp=fopen(&d1.dat&,&w&); fprintf(fp,&%d\n&,i);fprintf(fp,&%d\n&,j); fclose(fp); fp=fopen(&d1.dat&,&r&); fscanf(fp,&%d%d&,&k,&n); printf(&%d %d\n&,k,n); fclose(fp); } 程序运行后的输出结果是 A)20 30 B)20 50 C)30 50 D)30 20 (33)C语言规定,在一个源程序中,main函数的位置 A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后 (34)下面程序段的运行结果是 char a[]=&lanuage&,*p; p=a; while(*p!=′u′){printf(&%c&,*p-32);p++;} A)LANGUAGE B)language C)LAN D)langUAGE (35)若执行下述程序时,若从键盘输入6和8时,结果为 main() {int a,b,s; scanf(&%d%d&,&a,&b); s=a if(a&b) s=b; s*=s; printf(&%d&,s); } A)36 B)64 C)48 D)以上都不对二 填空题(每空 2 分,共 30 分) 请将每一个空的正确答案写在答题卡【1】-【15】序号的横线上,答在试卷上不得分.(1)长度为 n 的顺序存储线性表中,当在任何位置上插入一个元素概率都相等时,插入一个元素所需移动元素 的平均个数为 【1】 。 (2)用树型结构表示实体类型及实体间联系的数据模型称为 【2】 。 (3)类是一个支持集成的抽象数据类型,而对象是类的【3】 (4)数据流图的类型有【4】和事务型。 (5)当数据的物理结构(存储结构)改变时,不影响数据库的逻辑结构,从而不致引起应用程序的变化,这是 指数据的 【5】 。 (6)若已知a=10,b=20,则表达式!a&b的值为【6】。 (7)设有以下定义和语句,则*(*(p+2)+1)的值为 【7】。 int a[3][2]={10,20,30,40,50,60},(*p)[2]; p=a; (8)下面程序的功能是输出数组s中最大元素的下标,请填空。 main() { int k, p,s[]={1, -9, 7, 2, -10, 3}; for(p=0, k=p; p&6; p++) if(s[p]&s[k])【8】 printf(&%d\n&, k); } (9)以下程序运行结果是【9】。 #include&stdio.h& long fib(int g) {switch(g) {case 0:return 0; case 1: case 2:return 1; } return(fib(g-1)+fib(g-2)); } main() { k=fib(5); printf(&k=%5ld\n&,k); } (10) 设有以下程序, 为使之正确运行, 请在下划线中填入应包含的命令行。注:try_me()函数在a:\myfile.txt ( 中有定义。) 【10】 main() {printf(&\n&); try_me(); printf(&\n&); } (11)以下程序的输出结果是【11】。 #include&stdio.h& fun() {static int a=0; a+=2;printf(&%d&,a); } main () { for(cc=1;cc&4;cc++)fun(); printf(&\n&); } (12)本程序用改进冒泡法对数组a[n]的元素从小到大排序,请在程序空白处填空。 void bubble(int a[],int n) { int j, k, jmax, jmax=【12】; do { k=0; for(j=0;j&j++) if(a[j]&a[j+1]) { temp=a[j];a[j]=a[j+1];a[j+1]= k=【13】; } jmax=k; }while(jmax&0); } 13)以下程序建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输 入结束(键表头结点的data域不放数据,表空的条件是ph-&next==NULL),请填空。 #include&stdio.h& struct list { struct list *}; struct list*creatlist() {struct list *p,*q,*ph=(struct list *)malloc (sizeof(struct list)); p=q=printf(&Inp entre-1 to end:\n&); scanf(&%d&,&a); while(a!=-1) {p=(struct list*)malloc(sizeof(struct list)); 【14】=a;q-&next=p;【15】=p;scanf(&%d&,&a);} p-&next=′\0′;return(ph);} main() {struct list * head=creatlist();}练习题 1 答案及解析 一选择题(1) C 解析: 栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。二者的区别是:栈只允许在 表的一端进行插入或删除操作,是一种&后进先出&的线性表;而队列只允许在表的一端进行插入操作,在另一 端进行删除操作,是一种&先进先出&的线性表。 (2) D 解析: 依据后序遍历序列可确定根结点为c;再依据中序遍历序列可知其左子树由deba构成,右子树为空;又由左子树 的后序遍历序列可知其根结点为e,由中序遍历序列可知其左子树为d,右子树由ba构成,如下图所示。求得该 二叉树的前序遍历序列为选项D)。 (3)B 解析: 链表采用的是链式存储结构,它克服了顺序存储结构的缺点:它的结点空间可以动态申请和释放;它的数据元 素的逻辑次序靠结点的指针来指示,不需要移动数据元素。但是链式存储结构也有不足之处:① 每个结点中的 指针域需额外占用存储空间;② 链式存储结构是一种非随机存储结构。 (4)D 解析: 顺序结构、选择结构和循环结构(或重复结构)是结构化程序设计的3种基本结构。 (5)D 解析: 测试的目的是发现软件中的错误。经验表明,程序中存在错误的概率与该程序中已发现的错误数成正比。这 一现象说明,为了提高测试效率,测试人员应该集中对付那些错误群集的程序。 (6)C 解析: 算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。所谓算法的时间复杂度是指执行算法所需要 的计算工作量,即算法执行过程中所需要的基本运算的次数;算法的空间复杂度一般是指执行这个算法所需要 的内存空间。 (7)D 解析: 软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。本题中,详细设计、软件编码和软件测试都 属于软件开发阶段;维护是软件生命周期的最后一个阶段,也是持续时间最长,花费代价最大的一个阶段,软 件工程学的一个目的就是提高软件的可维护性,降低维护的代价。 (8)C 解析: 选项A)、B)显然不合题意。数据定义语言(Data Definition Language,简称DDL)负责数据的模式定义与 数据的物理存取构建;数据操纵语言(Data Manipulation Language,简称DML)负责数据的操纵,包括增、删、 改等操作。 (9) C 解析: 数据库(Database,简称DB)是数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应 用数据的集成,并可被各个应用程序所共享。数据库中的数据具有&集成&、&共享&之特点。 (10) D 解析: 数据处理是指将数据转换成信息的过程, 故选项A) 叙述错误; 数据的物理独立性是指数据的物理结构的改变, 不会影响数据库的逻辑结构,故选项B)叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列 称为属性,对应存储文件中的字段,故选项C)叙述错误。 (11) A 解析: 选项 B)项中,以 0 开头表示是一个八进制数,而八进制数的取值范围是 0~7,所以-080 是不合法的;选项 C)和 D)项中,e 后面的指数必须是整数,所以也不合法。 (12)C 解析: 算法具有的5个特性是:有穷性;确定性;可行性;有0个或多个输入;有一个或多个输出。所以说,用C程序 实现的算法可以没有输入但必须要有输出。 (13) B 解析: C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线,排除选项C) 和D)。C语言中还规定标识符不能为C语言的关键字,而选项A)中void为关键字,故排除选项A)。 (14) C 解析: 该题目的关键是要搞清楚&&&&和&‖&两个逻辑运算符的运算功能。运算符&&&&和&‖&是双目运算符,要求有 两个运算量。且规定逻辑与运算中,只有前面运算量的值为真时,才需要判别后面的值。只要前面为假,就不 必判别后面的值。 而逻辑或则为只要前为真, 就不必判别后面的值; 只有前为假, 才判别后。 本题中j++值为真, 不进行k++的运算,所以k的值保持不变。 (15) B 解析: 定义b为整型数,c为字符数组,所以在输入语句的地址表列中,要在b前加上取址符&&&,而c就是字符数组的 首地址,所以不用加上取址符&&&。 (16) D 解析: 本题是计算 50 之内的自然数相加之和,题中 if 语句括号中的条件表达式!(i%5)&&!(i%3)表明只有能同时被 5 和 3 整除的数才符合相加的条件,1~49 之间满足这个条件的只有 3 个数,15,30,45,因为 s 的初始值为 1, 所以 s=1+15+30+45=91。故正确答案为 D)。 (17)A 解析: 本题考查的是三目运算符的用法,三目运算符的形式为(表达式1)?(表达式2):(表达式3)。当(表达 式1)的值为真时,求(表达式2)的值为整个表达式的值;如果(表达式1)的值为假,则求(表达式3)的值 为整个表达式的值。题中,表达式x&12的结果为假,所以执行的语句是x-12,最终y的值应该是0。 (18) B 解析: t=1 是将 t 赋值为 1,所以循环控制表达式的值为 1。而判断 t 是否等于 1 时应用 t==1,注意&=&与&==& 的用法。 (19) D 解析: 本题考查了求数据类型长度的运算符sizeof和求字符串长度的函数strlen的区别。strlen计算的是一个字符 串的实际字符个数,如果字符串放在字符数组中,则函数strlen的值为'\0'之前的全部字符个数。而sizeof 求出的是数据占据存储空间的字节数,当然也要包括字符串的结束标志符'\0'。 (20) B 解析: 选项 A)中,定义的初值个数大于数组的长度;选项 C)中,数组名后少了中括号;选项 D)中,整型数组不 能赋予字符串。 (21) B 解析: 本题考查函数的综合知识。首先,我们可以利用强制转换类型转换运算符将一个表达式转换成所需类型。如: (double)a是将a转换成double类型;(int)(x+y)是将x+y的值转换成整型。 本题可按部就班地逐步运算: fun((int)fun(a+c,b),a-c) fun((int)fun(10,5),2-8) fun((int)15.) fun(15,-6) 9 (22) C 解析: 本题主要考查的用二维数组首地址和下标来引用二维数组元素的方法。 通过分析可知, 程序中的双重循环定 义了一个如下的二维数组: 0 1 2 2 3 4 4 5 6 由于数组的下标是从0开始的,所以二维数组元素a[i][j]表示的是二维数组a的第i+1行、第j+1列对应位置 的元素。 (23)A 解析: C语言中[ ]比*优先级高,因此line先与[5]结合,形成line[5]形式,这是数组形式,它有5个元素, 然后再与line前面的&*&结合,表示此数组是一个指针数组,每个数组元素都是一个基类型为char的指针变量。 (24) A 解析: 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传递 到另一个函数中。当数组名作参数时,如果形参数组中的各元素的值发生变化,实参数组元素的值随之发生变 化。 (25) C 解析: 该题稍微难一点。主要要搞清楚以下几点: ①定义了一个指针数组char *p[2]后,程序中第一个循环for(i=0;i&2;i++)p[i]=ch[i];的作用,是使 指针数组的p[0]元素(它本身是一个指针)指向了二维数组ch的第一行字符串,并使指针数组的p[1]元素 指向了二维数组ch的第二行字符串,这样,就使指针数组p和二维数组ch建立起了一种对应关系,以后对二维数 组ch的某个元素的引用就有两种等价的形式:ch[i][j]或p[i][j]。②对二维数组ch的初始化,使其第 一行ch[0]中存入了字符串&6937&,第二行ch[1]中的内容为字符串&8254&。③程序中第二个循环中的循环 体s=s*10+p[i][j]-'0';的功能是这样的,每执行一次,将s中的值乘以10(也即,将s中的数值整体向左 移动一位,并在空出来的个位上添一个0),再将当前p[i][j]中的字符量转换为相应的数字,然后把这个 数字加到s的个位上。④注意到内层循环的循环条件p[i][j]&′\0′是指p[i][j]中的字符只要不是字 符串结束标志′\0′就继续循环,语句j+=2;是使下标j每次增加2,也即一个隔一个地从p[i]所指向的字符 串中取出字符。经过上述解析后,不难看出,该程序首先从p[0]所指向的字符串&6937&中一个隔一个地取出 字符,分别是'6'和'3',然后从p[1]所指向的字符串&8254&中一个隔一个地取出字符,分别是'8'和'5',同 时经过转换和相加运算后,结果s中的值应该是6385,所以,正确答案是C)。 (26) B 解析: 在内存中,字符数据以 ASCII 码存储,它的存储形式就与整数的存储形式相类似。C 语言使字符型数据和整 型数据之间可以通用。也可以对字符数据进行算术运算,此时相当于对它们的 ASCII 码进行算术运算,在本题 中,s++相当于 s=s+1,即让 s 指向数组中的下一个元素。 (27)A 解析: 在 C 语言中, 数组元素是从 0 开始的。 指针变量 p 指向数组的首地址, (p+2) 就会指向数组中的第 3 个元素。 题目中要求输出的是元素的值。 (28) B 解析: 该题目测试考生对宏替换的理解。 这是一种简单的情况: 不带参数的宏。 关键要注意在对2*M+1进行宏替换时, 要将宏名M原封不动地代进去,得到NUM的形式为2*N+1+1(千万不要随意给N+1加上小括号,使NUM变为2*(N+1) +1,这就是宏名和变量名之间的区别),在将N代进去,得到NUM的值为6。 (29) A 解析: 本题中,首先定义了一个共用体pw,其中有两个域:整型变量i和字符数组ch,因为共用体中的域是共享内存 空间的,又数组的元素有低到高存储:ch[0]在低字节,ch[1]在高字节。整型变量i占两个字节,高位与ch [1]共用存储空间,低位与ch[0]共用存储空间。而高位ch[1]的值为0,所以输出的成员变量i的值就是ch [0]的值13。 (30) B 解析: 本题中,typedef 声明新的类型名 PER 来代替已有的类型名,PER 代表上面指定的一个结构体类型,此时,也 可以用 PER 来定义变量。 (31) B 解析: continue语句的作用是跳过本次循环体中余下尚未执行的语句,接着再一次进行循环条件的判定。当能被2 整除时,a就会增1,之后执行continue语句,直接执行到for循环体的结尾,进行i++,判断循环条件。 (32) B 解析: 考查指向字符串的指针变量。在该题中,指针变量p指向的应该是该字符串中的首地址,p+3指向的是字符串 结束标志'\0'的地址,因而*(p+3)的值为0。 (33) C 解析: 定义一个结构的一般形式为: struct 结构名 { 成员列表 }; 本题中,stutype是在声明类型的同时定义的struct stu类型的变量。而不是用户定义的结构体类型名。我们需 要注意以下几点:①类型与变量是不同的概念; ②对结构体中的成员,可以单独使用,它的作用与地位相当于 普通变量;③成员也可以是一个结构体变量; ④成员名可以与程序中的变量名相同,二者不代表同一对象。 (34) B 解析: 本题考查函数fseek的用法。fseek函数的调用形式为: fseek(文件指针,位移量,起始点) &起始点&用0,1或2代替,0代表&文件开始&,1为&当前位置&,2为&文件末尾&。&位移量&指以&起始点&为基点, 向前移动的字节数。ANSI C和大多数C版本要求位移量是long型数据。这样当文件的长度大于64k时不致出现问 题。ANSI C标准规定在数字的末尾加一个字母L,就表示long型。 (35) B 解析: 以&wt&方式写入的是字符文件,转义字符′\n′被看作两个字符来处理。而&wb&方式写入的是二进制文件, 转义字符′\n′是一个字符。故正确答案为选项B)。二填空题 (1) 有穷性。解析:算法是指解题方案的准确而完整的描述。它有4个基本特征,分别是可行性、确定性、有穷性和拥有足够的情 报。 (2) 19。解析: 在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。 (3) 对象。解析: 将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。(4) 软件生命周

我要回帖

更多关于 c语言中的形参和实参 的文章

 

随机推荐