1、二级 C语言笔试 90及答案解析(总分:94.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:60.00)1.若有一些定义和语句: #include stdio.h int a=4,b=3,*p,*q,*w; p= q= w=q; q=NULL; 则以下选项中错误的语句是( )。(分数:2.00)A.*q=0;B.w=p;C.*p=a;D.*p=*w;2.某二叉树中有 n个度为 2的结点,则该二叉树中的叶子结点数为( )。(分数:2.00)A.n+1B.n-1C.2nD.n/23.有以下程序: #include stdio.h int fun(char s) int n=0;
2、 while(*s=9s+; return(n); main() char s10=6,1,*,4,*,9,*,0,*; printf(“%d/n“,fun(s); 程序的运行结果是( )。(分数:2.00)A.9B.61490C.61D.54.在结构化程序设计中,模块划分的原则是( )。(分数:2.00)A.各模块应包括尽量多的功能B.各模块的规模应尽量大C.各模块之间的联系应尽量紧密D.模块内具有高内聚度、模块间具有低耦合度5.有以下程序: #include stdio.h main() int a=1,b=2,c=3,x; x=(ab) printf(“%d/n“,x); 程序的运行结果
3、是( )。(分数:2.00)A.0B.1C.2D.36.若整型变量 a、b、c、d 中的值依次为:1、4、3、2。则条件表达式 ab?a:cd?c:d 的值是( )。(分数:2.00)A.1B.2C.3D.47.以下数组定义中错误的是( )。(分数:2.00)A.int x3=0;B.int x23=1,2,3,4,5,6;C.int x3=1,2,3,4,5,6;D.int x23=(1,2,3,4,5,6;8.以下程序的输出结果是( )。 main() int a=0,i; for(i=1;i5;i+) switch(i) casc 0: case 3:a+=2; case 1: case
4、 2:a+=3; default:a+=5; printf(“%d/n“,a); (分数:2.00)A.31B.13C.10D.209.有以下程序: point(char *p) p+=3; main() char b4=a,b,c,d, *p=b; point(p); printf(“%c/n“,*p); 程序运行后的输出结果是( )。(分数:2.00)A.aB.bC.cD.d10.下列叙述中正确的是( )。(分数:2.00)A.在面向对象的程序设计中,各个对象之间具有密切的联系B.在面向对象的程序设计中,各个对象都是公用的C.在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小D.上
5、述 3种说法都不对11.下面选项中不属于面向对象程序设计特征的是( )。(分数:1.00)A.继承性B.多态性C.类比性D.封装性12.有以下计算公式: (分数:1.00)A.if(x=0) y=sqrt(; else y=sqrt(-;B.y=sqrt(; if(x0) y=sqrt(-;C.if(x=0) y=sqrt(; if(x0) =sqdrt(-;D.y=sqrt(x=0?x:-;13.若有以下函数首部: int fun(double x10,int *n) 则下面针对此函数的函数声明语句中正确的是( )。(分数:1.00)A.int fun(double x, int *;B.i
6、nt fun(double, in;C.int fun(double *x, int ;D.int fun(double*, int*);14.程序中已构成如下图所示的不带头结点的单向链表结构,指针变量 s、p、q 均已正确定义,并用于指向链表结点,指针变量 s总是作为头指针指向链表的第一个结点。 (分数:1.00)A.首结点成为尾结点B.尾结点成为首结点C.删除首结点D.删除尾结点15.以下选项中非法的表达式是( )。(分数:1.00)A.0=x100B.i=j=0C.(cha(65+3)D.x+1=x+116.有定义语句:int b;char c10;,则正确的输入语句是( )。(分数:1
7、.00)A.scanf(“%d%s“,B.scanf(“%d%s“,C.scanf(“%d%s“,b,;D.scanf(“%d%s“,b,&;17.设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是( )。(分数:1.00)A.c1c2B.c1 ps=s; printf(“%c/n“,*ps+4); 程序运行后的输出结果是( )。(分数:1.00)A.aB.eC.uD.元素 s4的地址19.以下不能定义为用户标识符的是( )。(分数:1.00)A.scanfB.VoidC._3com_D.int20.有以下程序: #include stdio.h main() FILE
8、 *fp; int i,k=0, n=0; fp=fopen(“d1.dat“,“w“); for(i=1;i4;i+) fprintf(fp,“%d“,i); fclose(fp); fp=fopen(“d1.dat“,“r“); fscanf(fp,“%d%d“, printf(“%d%d/n“,k,n); fclose(fp); 执行后输出结果是( )。(分数:1.00)A.1 2B.123 0C.1 23D.0 021.有以下程序: #include stdio.h main() FILE *fp; int i,k,n; fp=fopen(“data.dar“,“w+“); for(i
9、=1;i6;i+) fprintf(fp,“%d “,i); if(i%3=0) fprintf(fp,“/n“); rewind(fp); fscanf(fp,“%d%d“, printf(“%d%d/n“,k,n); fclose(fp); 程序运行后的输出结果是( )。(分数:1.00)A.0 0B.123 45C.1 4D.1 222.数据库技术的根本目标是要解决数据的( )。(分数:1.00)A.存储问题B.共享问题C.安全问题D.保护问题23.有以下程序: main() char str=“xyz“,*ps=str; while(*ps) ps+; for(ps-;ps-str=0
10、;ps-) puts(ps); 执行后输出结果是( )。(分数:1.00)A.yz xyZB.z yzC.z yzD.x xy xyz xyz24.以下程序中,while 循环的循环次数是( )。 main() int i=0; while(i10) if(i1) continue; if(i=5) break; i+; (分数:1.00)A.1B.10C.6D.死循环,不能确定次数25.有以下程序段: main() int a=5,*b,*c; c= b= 程序在执行了“c= b=”语句后,表达式“*c”的值是( )。(分数:1.00)A.变量 a的地址B.变量 b中的值C.变量 a中的值D
11、.变量 b的地址26.可在 C程序中用作用户标识符的一组标识符是( )。(分数:1.00)A.and _2007B.Date y-m-dC.Hi DTomD.case Bigl27.有以下程序; void f(int *x,int *y) int t; t=*x; *x=*y; *y=t; main() int a8=1,2,3,4,5,6,7,8,i,*p,*q; p=a; q= while (pq) f(p,q);p+; q-; for(i=0;i8; i+) printf(“%d,“,ai); 程序运行后的输出结果是( )。(分数:1.00)A.8,2,3,4,5,6,7,1,B.5,6
12、,7,8,1,2,3,4,C.1,2,3,4,5,6,7,8,D.8,7,6,5,4,3,2,1,28.以下程序调用 fmdmax函数返回数组中的量大值: findmax(int *a,int n) int *p,*s; for(p=a,s=a;p-an;p+) if(_)s=p; return(*s); main() int x5=12,21,13,6,18; printf(“%d/n“,findmax(x,5); 在下划线处应填入的是( )。(分数:1.00)A.psB.*p*sC.aaD.p-ap-s29.下列叙述中错误的是( )。(分数:1.00)A.在数据库系统中,数据的物理结构必须
13、与逻辑结构一致B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统的基础上建立数据库D.数据库系统需要操作系统的支持30.有以下程序: #include string.h main() char str20=“Hello“,“beijing“,*p=str; ptintf(“%/n“,strlen(p+20); 程序运行后的输出结果是( )。(分数:1.00)A.0B.5C.7D.2031.有以下程序: main() int a10=1,2,3,4,5,6,7,8,9,10),*p= printf(“%d/n“,*p+*q); 程序运行后的输出结果是( )。(分
14、数:1.00)A.16B.10C.8D.632.以下叙述中错误的是( )。(分数:1.00)A.C程序必须由一个或一个以上的函数组成B.函数调用可以作为一个独立的语句存在C.若函数有返回值,必须通过咖语句返回D.函数形参的值也可以传回给对应的实参33.一棵二叉树中共有 70个叶子结点与 80个度为 1的结点,则该二叉树中的总结点数为( )。(分数:1.00)A.221B.219C.231D.22934.以下叙述中正确的是( )。(分数:1.00)A.构成 C程序的基本单位是函数B.可以在一个函数中定义另一个函数C.main()函数必须放在其他函数之前D.所有被调用的函数一定要在调用之前进行定义
15、35.下面程序的功能是输出以下形式的金字塔图案: * * * * main() int i,j; for(i=1;i=4;i+) for(j=1;j=4-i;j+)printf(“ “); for(j=1;j=( );j+)printf(“*“); printf(“/n“); 在下划线处应填入的是( )。(分数:1.00)A.iB.2*1-1C.2*i+1D.i+236.有以下程序: void sum(int a) a0=a-1+a1; main() int a10=1,2,3,4,5,6,7,8,9,10; sum( printf(“%d/n“,a2); 程序运行后的输出结果是( )。(分数
16、:1.00)A.6B.7C.5D.837.有定义语句:“int x,y;”,若要通过“scanf(“%d,%d“,”语句使变量 x得到数值 11,变量y得到数值 12,下面四组输入形式中,错误的是( )。(分数:1.00)A.11 12回车B.11, 12回车C.11,12回车D.11,回车 12回车38.有以下程序: main() char a1=M,a2=m; printf(“%c/n“,(a1,a2); 以下叙述中正确的是( )。(分数:1.00)A.程序输出大写字母 MB.程序输出小写字母 mC.格式说明符不足,编译出错D.程序运行时产生出错信息39.若变量 x、y 已正确定义并赋值,
17、以下符合 C语言语法的表达式是( )。(分数:1.00)A.+x,y=x-B.x+1=yC.x=x+10=x+yD.double(/1040.下列选项中不属于结构化程序设计方法的是( )。(分数:1.00)A.自顶向下B.逐步求精C.模块化D.可复用41.在关系数据库中,用来表示实体之间联系的是( )。(分数:1.00)A.树结构B.网结构C.线性表D.二维表42.有以下程序段: int k=0,a=1,b=2,c=3; k=ab ? b:a; k=kc ? c:k; 执行该程序段后,k 的值是( )。(分数:1.00)A.3B.2C.1D.043.有以下程序: main() int y=10
18、; while(y-); printf(“y=%d/n“,y); 程序执行后的输出结果是( )。(分数:1.00)A.y=0B.y=-1C.y=1D.while构成无限循环44.有以下程序: void sort(int a, int n) int i,j,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(aiaj) t=ai; ai=aj; aj=t; main() int aa10=1,2,3,4,5,6,7,8,9,10,i; sort(aa+2,5); for(i=0;i10;i+)printf(“%d,“,aai); printf(“/n“); 程序运行后
19、的输出结果是( )。(分数:1.00)A.1,2,3,4,5,6,7,8,9,10,B.1,2,7,6,3,4,5,8,9,10,C.1,2,7,6,5,4,3,8,9,10,D.1,2,9,8,7,6,5,4,3,10,45.设有如下 3个关系表: (分数:1.00)A.T=RSB.T=RSC.T=RSD.T=R/S46.以下不能正确计算代数式 sin2()值的 C语言表达式是( )。(分数:1.00)A.1/3*sin(1/2)*sin(1/2)B.sin(0.5)*sin(0.5)/3C.pow(sin(0.5),2)/3D.1/3.0*pow(sin(1.0/2),2)47.已有定义:
20、char a=“xyz“,b=x,y,z;,以下叙述中正确的是( )。(分数:1.00)A.数组 a和 b的长度相同B.a数组长度小于 b数组长度C.a数组长度大于 b数组长度D.以述说法都不对48.有以下程序: main() int c=35; printf(“%d/n“,c 程序运行后的输出结果是( )。(分数:1.00)A.0B.70C.35D.149.下列叙述中正确的是( )。(分数:1.00)A.break语句只能用于 switch语句B.在 switch语句中必须使用 defaultC.break语句必须与 switch语句中的 case配对使用D.在 switch语句中,不一定使
21、用 break语句50.设有定义:int a=2,b=3,c=4;,则以下选项中值为 0的表达式是( )。(分数:1.00)A.(!a=1) a=(3*5,a+4); printf(“a=%d/n“,a); (分数:2.00)填空项 1:_57.以下程序运行后的输出结果是U 【7】 /U。 main() int m=011,n=11; printf(“%d %d/n“,+m,n+); (分数:2.00)填空项 1:_58.有以下程序: main() int t=1,i=5; for(; i=0;i-) t*=i; printf(“%d/n“,t); 执行后输出结果是U 【8】 /U。(分数:2
22、.00)填空项 1:_59.以下程序的运行结果是U 【9】 /U。 main() int a=2,b=7,c=5; switch(a0) case 1: switch (b0) case 1:printf(“); break; case 2:pnntf(“!“); break; case 0: switch (c=5) case 0:pnntf(“*“); break; case 1:printf(“#“); break; case 2:printf(“$“); break; default: printf(“ printf(“/n“); (分数:2.00)填空项 1:_60.有以下程序段,且
23、变量已正确定义和赋值。 for(s=1.0, k=1; k=n;k+) s=s+1.0/(k*(k/1); printf(“s=%f/n/“,s); 请填空,使下面程序段的功能与之完全相同。 s=1.0; k=1; while(U 【10】 /U) s=s+1.0/(k*(k+1); U【11】 /U; printf(“s-=%f/n/n“,s);(分数:2.00)填空项 1:_61.以下程序的输出结果是U 【12】 /U。 #include stdio.h main() int i; for(i-a; if; i+,i+) printf(“%c“,i-a+A); printf(“/n“);
24、(分数:2.00)填空项 1:_62.函数 YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 其构成规律是: 第 0列元素和主对角线元素均为 1。 其余元素为其左上方和正上方元素之和。 数据的个数每行递增 1。 请将程序补充完整。 #define N 6 void yanghui(int xNN) int i,j; xO0=1; for(i=1;iN;i+) xi0=U 【13】 /U=1; for(j=1;ji;j+) xij=U 【14】 /U; )(分数:2.00)填空项 1:_63.以下 sstrcp
25、y()函数实现字符串复制,即将 t所指字符串复制到 s所指向内存空间中,形成一个新的字符串 s。请填空。 void sstrcpy(char *s,char *t) while(*s+=U 【15】 /U); main() char str1100,str2=“abcdefgh“; sstrcpy(str1,str2); printf(“%s/n“,str1); (分数:2.00)填空项 1:_64.请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。 U 【16】 /U(double,double); main() double x,y; scanf(“%1f%1f“, printf
26、(“%1f/n“,max(x,y); double max(double a,double B) return(ab ? a:b);(分数:2.00)填空项 1:_65.以下程序的功能是输入任意整数给 n后,输出 n行由大写字母 A开始构成的三角形字符阵列图形。例如,输入整数 5时(注意:n 不得大于 10),程序运行结果如下: ABCDE FGHI JKL MN O 请填空完成该程序。 main() int i,j,n; char ch=A; scanf(“%d“, if(n11) for(i=1;i=n;i+) for(j=1;j=n-i+1;j+) printf(“%2c“,ch); U
27、【17】 /U; U【18】 /U; else printf(“n is too large!/n“) printf(“/n“0); (分数:2.00)填空项 1:_66.设有说明; struct DATE int year; int month; int day; 请写出一条定义语句,该语句定义 d为上述结构体类型变量,并同时为其成员 year、month、day 依次赋初值 2006、10、1:U 【19】 /U。(分数:2.00)填空项 1:_67.以下程序的功能是将宁符串 s中的数字字符放入 d数组中,最后输出 d中的字符串。例如,输入字符串:abcl23edf4568h,执行程序后输
28、出:123456。请填空。 #include stdio.h #include ctype.h main() char s80,d80; int i,j; gets(s); for(i=j=0;si!=/0;i+) if(U 【20】 /U) dj=si;j+; dj=/0; puts(d); (分数:2.00)填空项 1:_二级 C语言笔试 90答案解析(总分:94.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:60.00)1.若有一些定义和语句: #include stdio.h int a=4,b=3,*p,*q,*w; p= q= w=q; q=NULL; 则以下选
29、项中错误的语句是( )。(分数:2.00)A.*q=0; B.w=p;C.*p=a;D.*p=*w;解析:解析 本题中定义了 3个指向整型的指针变量 p、q、w,并让 p指向 a,让 q指向 b,通过将 q的值赋给 w,使 w也指向 b,最后将 NULL赋值给 q。由整形变量指针的定义可知,可以给整型指针指向的变量赋一个常数值(表达式),故选项 C和选项 D是正确的;可以给指针变量赋一个同种类型的指针变量(或地址值),故选项 B也是正确的:选项 A错误,因为 q不指向任何变量,给一个空指针指向的单元赋值是错误的。所以,应该选 A。2.某二叉树中有 n个度为 2的结点,则该二叉树中的叶子结点数为
30、( )。(分数:2.00)A.n+1 B.n-1C.2nD.n/2解析:解析 对任意一棵二叉树,若终端结点(即叶子结点)数为 n0,而其度数为 2的结点数为 n2,则n0=n2+1。由此可知,若二叉树中有 n个度为 2的结点,则该二叉树中的叶子结点数为 n+1。3.有以下程序: #include stdio.h int fun(char s) int n=0; while(*s=9s+; return(n); main() char s10=6,1,*,4,*,9,*,0,*; printf(“%d/n“,fun(s); 程序的运行结果是( )。(分数:2.00)A.9B.61490C.61
31、D.5解析:解析 题目 fun()函数中 while循环的意思是:判断 s所指内容是否为数字字符,如果是数字字符,则计算表达式 n=10*n+*s-0;。其中*s-0的作用是将相应的数字字符转换为数值,例如字符8减去字符0后,得到的结果就是数值 8了。n=10*n+的作用是将累计变量 n中原来内容乘以 10,然后再加上刚转换的数字字符的数值,例如原来 n的值为 1,*s 现在的内容为2,那么执行了 n=10*n+*s-0;语句后,n 的值变为 12,如果接下来再来一个8字符,执行 n=10*n+*s-O;语句后,n 的值就是 128了。故不难看出 fun()函数的作用是“将数字字符串转换为相应
32、的十进制数值,碰到非数字字符时结束”。从主函数中定义的字符数组 s的初始化内容可以看出,fun()函数返回值应该是 61。故应该选择 C。4.在结构化程序设计中,模块划分的原则是( )。(分数:2.00)A.各模块应包括尽量多的功能B.各模块的规模应尽量大C.各模块之间的联系应尽量紧密D.模块内具有高内聚度、模块间具有低耦合度 解析:解析 模块划分的原则有:模块的功能应该可预测,如果包含的功能太多,则不能体现模块化设计的特点,选项 A错误。模块规模应适中,一个模块的规模不应过大,选项 B错误。改进软件结构,提高模块独立性。通过模块的分解或合并,力求降低耦合提高内聚,所以选项 C错误,选项 D正
33、确。5.有以下程序: #include stdio.h main() int a=1,b=2,c=3,x; x=(ab) printf(“%d/n“,x); 程序的运行结果是( )。(分数:2.00)A.0B.1C.2D.3 解析:解析 在 C语言中,整型数据在内存中是按二进制形式存放的,位运算就是直接对这些二进制进行操作的一系列运算符。例如题目中 a、b、c 的值分别为 1、2、3,那它们在内存中存放的样子就是;0001、0010、0011(由于数据不大,int 类型本来要占 4字节也就是 32位二进制的,这里就省写为 4位了)。“”运算符的作用是:按位异或。意思是:两个操作数对应的二进制位
34、如果相异,则结果对应的二进制位为 1,否则结果对应二进制位为 0。所以 00010010=0011。“B.int x23=1,2,3,4,5,6; C.int x3=1,2,3,4,5,6;D.int x23=(1,2,3,4,5,6;解析:解析 选项 B的第 1维长度为 2,而初始化列表外花括号中包含了 3个内花括号,所以该选项的定义错误,故应该选择 B。8.以下程序的输出结果是( )。 main() int a=0,i; for(i=1;i5;i+) switch(i) casc 0: case 3:a+=2; case 1: case 2:a+=3; default:a+=5; prin
35、tf(“%d/n“,a); (分数:2.00)A.31 B.13C.10D.20解析:解析 在本题中,因为每个 case语句后面都没有 break语句,所以,第一轮循环(i1)执行过后a的值为 8,第 2轮(i=2)执行过后 a的值为 16,第 3轮(i=3)执行过后 a的值为 26,第 4 轮(i=4)执行过后 a的值为 31,然后执行“i+”语句,这时循环条件为假,循环结束。所以,4 个选项中 A正确。9.有以下程序: point(char *p) p+=3; main() char b4=a,b,c,d, *p=b; point(p); printf(“%c/n“,*p); 程序运行后的
36、输出结果是( )。(分数:2.00)A.a B.bC.cD.d解析:解析 本题的函数只是改变了形参指针变量 p的值,这对程序没有任何影响,主函数中 p一开始就是指向 b0,最后输出时还是 b0的值a。所以应该选择 A。10.下列叙述中正确的是( )。(分数:2.00)A.在面向对象的程序设计中,各个对象之间具有密切的联系B.在面向对象的程序设计中,各个对象都是公用的C.在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小 D.上述 3种说法都不对解析:解析 在面向对象的程序设计中,对象是面向对象的软件的基本模块。从模块的独立性考虑,对象内部各种元素彼此结合得很紧密,内聚性强。由于完成对象
37、功能所需要的元素(数据和方法)基本上都被封装在对象内部,它与外界的联系自然就比较少,所以,对象之间的耦合通常比较松。所以,选项 A与选项 B错误,选项 C正确。11.下面选项中不属于面向对象程序设计特征的是( )。(分数:1.00)A.继承性B.多态性C.类比性 D.封装性解析:解析 面向对象方法具有封装性、继承性、多态性几大特点。12.有以下计算公式: (分数:1.00)A.if(x=0) y=sqrt(; else y=sqrt(-;B.y=sqrt(; if(x0) y=sqrt(-; C.if(x=0) y=sqrt(; if(x0) =sqdrt(-;D.y=sqrt(x=0?x:-
38、;解析:解析 选项 B一开始就调用了 sqrt(x)而没有判断 x的正负,所以是错误的。故应该选 B。13.若有以下函数首部: int fun(double x10,int *n) 则下面针对此函数的函数声明语句中正确的是( )。(分数:1.00)A.int fun(double x, int *;B.int fun(double, in;C.int fun(double *x, int ;D.int fun(double*, int*); 解析:解析 本题中的 fun函数有两个参数,一个类型是 double型一维数组,另个是 int型指针。而在 C语言中,一维数组用作函数参数和该数组元素的指
39、针类型是等价的。所以本题的正确答案是选项 D。14.程序中已构成如下图所示的不带头结点的单向链表结构,指针变量 s、p、q 均已正确定义,并用于指向链表结点,指针变量 s总是作为头指针指向链表的第一个结点。 (分数:1.00)A.首结点成为尾结点 B.尾结点成为首结点C.删除首结点D.删除尾结点解析:解析 因为刚开始时 s指向 a结点(链表头),所以语句 q=s;使 q也指向 a结点。s=s-next;语句使 s指向 a的下一个结点 b。p=s;语句使 p也指向 b结点。接下来是一个 while循环,循环条件为 p-next,即当 p没有指向链表尾时执行循环体 p=p-next;让 p指向下一
40、个结点,所以当循环结束时,p指向链表尾(c 结点)。执行到此时,s、p、q 分别指向的结点是 b、c、a。然后执行 p-next=q;,使 c结点的后续指针指向了 a结点。最后执行 q-next=NULL;,使 a结点的后续指针为 NULL。由此可见,该程序段实现了将 a结点移动到 c结点之后,即首结点成为尾结点。故应该选择 A。15.以下选项中非法的表达式是( )。(分数:1.00)A.0=x100B.i=j=0C.(cha(65+3)D.x+1=x+1 解析:解析 选项 D中将表达式的值赋给表达式,在 C语言中是不允许给表达式赋值的,故选项 D 是非法的表达式,所以,4 个选项中选项 D符
41、合题意。16.有定义语句:int b;char c10;,则正确的输入语句是( )。(分数:1.00)A.scanf(“%d%s“,B.scanf(“%d%s“, C.scanf(“%d%s“,b,;D.scanf(“%d%s“,b,&;解析:解析 本题中 4个选项的格式控制字符串都是“%d%s”,其中包括两个格式控制符%d 和%s,它们分别表示输入一个十进制整数和输入一个字符串,其对应的参数应该分别为一个整型变量的地址和一个字符型数组的首地址。变量的地址可以通过对变量做取地址( ps=s; printf(“%c/n“,*ps+4); 程序运行后的输出结果是( )。(分数:1.00)A.aB.
42、e C.uD.元素 s4的地址解析:解析 程序首先定义了一个字符数组 s,然后让字符指针 ps指向该数组的首地址。最后按字符形式输出*ps+4 的值,即 s0+4的值,a+4=e。故应该选择 B。19.以下不能定义为用户标识符的是( )。(分数:1.00)A.scanfB.VoidC._3com_D.int 解析:解析 选项 D中 int为 C语言中的保留字,不能作为用户的标识符;选项 A、B、C 都为合法的标识符。所以,4 个选项中选项 D符合题意。20.有以下程序: #include stdio.h main() FILE *fp; int i,k=0, n=0; fp=fopen(“d1
43、.dat“,“w“); for(i=1;i4;i+) fprintf(fp,“%d“,i); fclose(fp); fp=fopen(“d1.dat“,“r“); fscanf(fp,“%d%d“, printf(“%d%d/n“,k,n); fclose(fp); 执行后输出结果是( )。(分数:1.00)A.1 2B.123 0 C.1 23D.0 0解析:解析 本题中首先定义了一个文件指针 fp,然后通过函数 fopen以“w”的方式打开文件“d1.dat”,直接通过一个 for循环,每循环一次调用函数 fprintf将 i的值写进 fp所指的文件中,该循环共循环 3次,循环完后 fp
44、所指文件的内容为 123。然后通过 fclose函数关闭 fp所指文件。接着通过 fscanf函数将 fp所指文件的内容读出并赋值给变量 k和变量 n,由于 fp所指文件中只有 123没有分隔符,故只给 k赋值为 123,变量 n的值依然为以前的值,故最后输出 k和 n的值为 123。所以,4 个选项中选项 B符合题意。21.有以下程序: #include stdio.h main() FILE *fp; int i,k,n; fp=fopen(“data.dar“,“w+“); for(i=1;i6;i+) fprintf(fp,“%d “,i); if(i%3=0) fprintf(fp,
45、“/n“); rewind(fp); fscanf(fp,“%d%d“, printf(“%d%d/n“,k,n); fclose(fp); 程序运行后的输出结果是( )。(分数:1.00)A.0 0B.123 45C.1 4D.1 2 解析:解析 程序首先定义了一个文件指针 fp,并使用 fopen()函数以“w+”方式新建一个可读写文件“data.dat”。然后使用一个 for循环,循环变量 i从 1递增到 5,在循环体中每次写入循环变量 i的值和 4 个空格,当 i能被 3整除的时候写入一个换行符。所以循环结束时,文件中的内容应该为: 1 2 3 4 5 接下来程序使用 rewind()
46、函数,将文件的读写指针调回起始位置。并调用 fscanf()函数从文件中读取两个整数到变量 k和 n。所以最终输出应该为:1 2。故本题选 D。22.数据库技术的根本目标是要解决数据的( )。(分数:1.00)A.存储问题B.共享问题 C.安全问题D.保护问题解析:解析 数据库产生的背景就是计算机的应用范围越来越广泛,数据量急剧增加,对数据共享的要求越来越高。数据库技术的根本目标就是解决数据的共享问题。23.有以下程序: main() char str=“xyz“,*ps=str; while(*ps) ps+; for(ps-;ps-str=0;ps-) puts(ps); 执行后输出结果是( )。(分数:1.00)A.yz xyZB.z yzC.z yz D.x xy xyz xyz解析:解析 执行 while循环