1、二级 C语言笔试-329 及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:70.00)1.有如下程序 main() char ch25=“6937“,“8254“,*p2; int i,j,s=0; for(i=0;i2;+)pi=chi; for(i=0;i2;i+) for(j=0;pij/0;j+=2) s=10*s+pij-0; printf(“%d/n“,s); 该程序的输出结果是(分数:2.00)A.69825B.63825C.6385D.6938252.如果进栈序列为 e1,e2,e3,e4,则可能的出栈序列是(分数:2.00)A.e3
2、,e1,e4,e2B.e2,e4,e3,e1C.e3,e4,e1,e2D.任意顺序3.有以下程序 #includestring.h main() charp=a,b,c,q10=a,b,c; printf(“%d%d/n“,strlen(p),strlen(q); 以下叙述中正确的是(分数:2.00)A.在给 p和 q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为 3B.由于 p数组中没有字符串结束符,长度不能确定,但 q数组中字符串长度为 3C.由于 q数组中没有字符串结束符,长度不能确定,但 p数组中字符串长度为 3D.由于 p和 q数组中都没有字符串结束符,故长度都不能确定4
3、.下列有关数据库的描述,正确的是(分数:2.00)A.数据处理是将信息转化为数据的过程B.数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变C.关系中的每一列称为元组,一个元组就是一个字段D.如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键宇,则称其为本关系的外关键字5.以下错误的定义语句是(分数:2.00)A.int x3=0,1,1,2,3;B.int x43=1,2,3,1,2,3,1,2,3,1,2,3;C.int x4=1,2,3,1,2,3,1,2,3,1,2,3;D.int x3=1,2,3,4;6.以下定义语句中正确的是(分数:2.00)A.i
4、nt a=b=0;B.char A=65+1,b=b;C.float a=1,*b=50;i+) if(!(i%5)in-1;+) for(j=i+1;jn;j+) if(strlen(si)strlen(sj) t=si;si;sj;sj=t; main() char *ss=“bcc“,“bbcc“,“xy“,“aaaacc“,“aabcc“;fun(ss,5); printf(“%s,%s/n“,ss0,ss4); 程序的运行结果是(分数:2.00)A.xy,aaaaccB.aaaacc,xyC.bcc,aabccD.aabcc,bcc37.下列程序的输出结果是 #include“std
5、io.h“ main() int i,a=0,b=0; for(i=1;i10;i+) if(i%2=0) a+; continue; b+; printf(“a=%d,b=%d“,a,b);(分数:2.00)A.a=4,b=4B.a=4,b=5C.a=5,b=4D.a=5,b=538.为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为(分数:2.00)A.PAD图B.N-S图C.结构图D.数据流图39.若有以下定义 struct link int data; struct link *next; a,b,c,*p,*q; 且变量 a和b之间已有如
6、下图所示的链表结构: (分数:2.00)A.next=C;next=b;B.next=q;next=next;C.p-next=i+1;i+) if(i4) printf(“%d/n“,i); break; printf(“%d/n“,i+);(分数:2.00)填空项 1:_49.以下程序的定义语句中,x1的初值是U 9 /U,程序运行后输出的内容是U 10 /U。#include stdio.h main() int x=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,*p4,i; for(i=0;i4;i+) pi=50;i+) if(!(i%5)in-1;+
7、) for(j=i+1;jn;j+) if(strlen(si)strlen(sj) t=si;si;sj;sj=t; main() char *ss=“bcc“,“bbcc“,“xy“,“aaaacc“,“aabcc“;fun(ss,5); printf(“%s,%s/n“,ss0,ss4); 程序的运行结果是(分数:2.00)A.xy,aaaacc B.aaaacc,xyC.bcc,aabccD.aabcc,bcc解析:解析 函数 fun(char*s,int n)的功能是对字符串数组的元素按照字符串的长度从小到大排序。在主函数中执行 fun(ss,5)语句后,*ss=“xy“,“bcc“
8、,“ bbcc“,“aabcc“,“aaaacc“,ss0,ss4的输出结果为 xy,aaaacc。37.下列程序的输出结果是 #include“stdio.h“ main() int i,a=0,b=0; for(i=1;i10;i+) if(i%2=0) a+; continue; b+; printf(“a=%d,b=%d“,a,b);(分数:2.00)A.a=4,b=4B.a=4,b=5 C.a=5,b=4D.a=5,b=5解析:解析 continue 语句的作用是跳过本次循环体中余下尚未执行的语句,接着再一次进行循环条件的判定。当能被 2整除时,a 就会增 1,之后执行 contin
9、ue语句,直接执行到 for循环体的结尾,进行i+,判断循环条件。38.为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为(分数:2.00)A.PAD图B.N-S图 C.结构图D.数据流图解析:解析 N-S 图是由 Nassi和 Shneiderman提出的一种符合程序化结构设计原则的图形描述工具。它的提出是为了避免流程图在描述程序逻辑时的随意性上灵活性。39.若有以下定义 struct link int data; struct link *next; a,b,c,*p,*q; 且变量 a和b之间已有如下图所示的链表结构: (分数:2.00)A.
10、next=C;next=b;B.next=q;next=next;C.p-next=i+1;i+) if(i4) printf(“%d/n“,i); break; printf(“%d/n“,i+);(分数:2.00)填空项 1:_ (正确答案:1)解析:3 5 解析 本题考查了 for循环语句的使用,break 语句用在本题中是结束 for循环直接跳出循环体外。当 i=1时,因为 if语句条件不满足,所以直接执行 printf(“%d/n“,i+);输出 1,同时 i自加1;执行第二次 for循环时,i=3;同样的 if语句条件不满足,所以直接执行 printf(“%d/n“,i+);输出
11、3,同时 i自加 1;执行第三次 for循环时,i=5,if 语句条件满足,所以执行 printf(“%d/n“,i),输出 5,然后 break语句跳出了 for循环。49.以下程序的定义语句中,x1的初值是U 9 /U,程序运行后输出的内容是U 10 /U。#include stdio.h main() int x=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,*p4,i; for(i=0;i4;i+) pi=&x2*i+1; printf(“%d“,pi0); printf(“/n“); (分数:4.00)填空项 1:_ (正确答案:9 2)解析:10 2
12、 4 6 8 解析 在主函数中根据整型数组 x的定义可知,x1的初值等于 2。在 for循环语句中;当 i=0时,p0=&x1,p00=2;当 i=1时,P1;&x3,p10=4;当 i=2时,p2=及 x5,p20=6;当 i=3时,p3=&x7, p30=8,所以程序输出的结果为 2、4、6、8。50.以下程序的输出结果是_。 #include stdio.h void swap(int *a, int *b) int *t t=a; a=b; b=t main() int i=3,j=5,*p=&i,*q=&j; swap(p,q); printf(“%d %d/n“,*p,*q); (
13、分数:2.00)填空项 1:_ (正确答案:3 5)解析:解析 函数 swap(int*a,int*b)的功能是实现*a 和 *b 中两个数据的交换,在主函数中调用swap(p,q)后,形参指针变量 a和 b分别指向 i和 j,在 swap(int*a,int*b)执行完后,指针变量 a和 b分别指向 j和 i,而指针变量 p,q 所指向变量的值没有发生变化,所以输出结果为 3 5。51.以下程序的输出结果是_。 main() char s=“ABCD“,*p; for(p=s+1;ps+4;p+)printf(“%s/n“,p);(分数:2.00)填空项 1:_ (正确答案:BCD)解析:C
14、D D 解析 本题考查指向字符串的指针的运算方法。指针变量 p首先指向字符串中的第一个字符A,执行 p=s+1后,p 指向字符串中的第二个字符 B,然后输出值“BCD”并换行,依次执行循环语句。52.以下程序的输出结果是_。 float fun(int x,int y) return(x+y); main() int a=2,b=5,c=8; printf(“%3.Of/n“,fun(int)fun(a+c,b),a-c);(分数:2.00)填空项 1:_ (正确答案:9)解析:解析 本题考查函数的综合知识。首先,我们可以利用强制转换类型转换运算符,将一个表达式转换成所需类型。如:(doubl
15、e)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.000000,-6) fun(15,-6) 953.有如下图所示的双链表结构,请根据图示完成结构体的定义: lhead data rchildstruct aa int data;_ node;(分数:2.00)填空项 1:_ (正确答案:struct aa,lhead,*rchild;)解析:解析 结构体对链表的定义。54.fseek函数的正确调用形式是_。(分数:2.00)填空项 1:_ (正确答案:fseek(文件指针,位移量,起始点))解析:解析 本题考查函数 fseek的用法。fseek 函数的调用形式为: fseek(文件指针,位移量,起始点) “起始点”用 0,1 或 2代替,其中,0 代表“文件开始”;1 为“当前位置”;2 为“文件末尾”。“位移量”指以“起始点”为基点,向前移动的字节数。ANSIC 和大多数 C版本要求位移量是 long型数据,这样当文件的长度大于 64k时不致出现问题。ANSIC 标准规定在数字的末尾加一个字母 L,就表示long型。