1、二级 C语言笔试-471 及答案解析(总分:97.00,做题时间:90 分钟)一、选择题(总题数:40,分数:65.00)1.1. 下列叙述中正确的是( )。A一个逻辑数据结构只能有一种存储结构B逻辑结构属于线性结构,存储结构属于非线性结构C一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率(分数:1.00)A.B.C.D.2.按照“先进先出”组织数据的数据结构是( )。A) 队列 B) 栈 C) 双向链表 D) 二叉树(分数:2.00)A.B.C.D.3.对于循环队列,下列叙述中正确的是A) 队头指针是
2、固定不变的B) 队头指针一定大于队尾指针C) 队头指针一定小于队尾指针D) 队头指针可以大于队尾指针,也可以小于队尾指针(分数:2.00)A.B.C.D.4.软件是指_。A) 程序 B) 程序和文档C) 算法加数据结构 D) 程序、数据与相关文档的完整集合(分数:2.00)A.B.C.D.5.栈通常采用的两种存储结构是A) 顺序存储结构和链式存储结构 B) 散列方式和索引方式C) 链表存储结构和数组 D) 线性存储结构和非线性存储结构(分数:2.00)A.B.C.D.6.下列工具中,不属于结构化分析的常用工具的是( )。 A) 数据流图 B) 数据字典 C) 判定树 D) N.S 图(分数:2
3、.00)A.B.C.D.7.设计程序时,应采纳的原则之一是( )。A) 程序的结构应有助于读者的理解 B) 限制 GOTO语句的使用C) 减少或取消注释行 D) 程序越短越好(分数:2.00)A.B.C.D.8.从工程管理角度,软件设计一般分为两步完成,它们是_。(A) 概要设计与详细设计(B) 数据设计与接口设计(C) 软件结构设计与数据设计(D) 过程设计与数据设计(分数:2.00)A.B.C.D.9.数据库技术的根本目标是要解决数据的A) 存储问题 B) 共享问题 C) 安全问题 D) 保护问题(分数:2.00)A.B.C.D.10.下列叙述中正确的是A) 程序设计的任务就是编写程序代码
4、并上机调试B) 程序设计的任务就是确定所用数据结构C) 程序设计的任务就是确定所用算法D) 以上 3种说法都不完整(分数:1.00)A.B.C.D.11.请选出以下程序的输出结果_。#includestdio.hsub(x,y,z)int x,y*z;*z=y-x;main()int a,b,c;sub(10,5,sub(7,a,sub(a,b,(B) double int_;(C) char for;(D) float US$(分数:1.00)A.B.C.D.13.若有说明:int *p,m=5,n;以下正确的程序段是( )。A) p= B) scanf(“%d%d%d“,C) scanf(
5、“%d%d%d“,x,y,z); D) read(“%d %d %d“,(分数:2.00)A.B.C.D.16.以下不能正确计算代数式 (分数:1.00)A.B.C.D.17.17. 有以下程序:#includestdio.hmain()int x=8;for(; x0; x-)if(x%3)printf(“%d,“,x-);continue;)printf(“%d,“,-x);程序的运行结果是_。A) 7,4,2 B) 8,7,5,2C) 9,7,6,4 D) 8,5,4,2(分数:1.00)A.B.C.D.18.有下列程序:main()int x=5;doprintf(“%d“,x-=4)
6、;while(!(-x);程序的输出结果是( )。A) 1 B) 20 C) 1 4 D) 死循环(分数:1.00)A.B.C.D.19.若变量已正确定义,下列正确的程序段是( )。A) while(ch=getchar()=/N)putchar(ch);B) while(ch=getchar()=/n)putchar(ch);C) while(ch=getchar()!=/N)putchar(ch);D) while(ch=getchar()!=/n)putchar(ch);(分数:2.00)A.B.C.D.20.以下叙述错误的是( )。 A) 变量的作用域取决于变量定义语句的位置 B) 全
7、局变量可以在函数以外的任何部位进行定义 C) 局部变量的作用域可用于其他函数的调用 D) 一个变量说明为 static存储类型是为了限制其他编译单元的引用(分数:2.00)A.B.C.D.21.有如下程序main()char ch25=“6937“,“8254“,*p2;int i,j,s=0;for(i=0;i2;i+)pi=chi;for(i=0;i2;i+)for(j=0;pij/0; j+=2)s=10*s+pij-0;printf(“%d/n“,s);该程序的输出结果是A) 69825 B) 63825 C) 6385 D) 693825(分数:2.00)A.B.C.D.22.C语言
8、规定,调用一个函数时,实参变量和形参变量之间的数据传递是( )。A) 地址传递B) 值传递C) 由实参传给形参,并由形参传回给实参D) 由用户指定传递方式(分数:1.00)A.B.C.D.23.阅读下列程序段,则程序的输出结果为#include“stdio.h“#defineM(X,Y)(X)*(Y)#defineN(X,Y)(X)/(Y)main()f int a=5,b=6,c=8,k;k=N(M(a,b),c);printf(“%d/n“,k);A) 3 B) 5 C) 6 D) 8(分数:2.00)A.B.C.D.24.下列说法中不正确的是( )。A) 指针是一个变量B) 指针中存放的
9、是数值C) 指针可以进行加、减等算术运算D) 指针变量占用存储空间(分数:2.00)A.B.C.D.25.若有定义语句:char *s1=“OK“,*s2=“ok“;,以下选项中,能够输出“OK“的语句是( )。A)if(strcmp(s1,s2)=0) puts(s1); B)if(strcmp(s1,s2)!=0) puts(s2);C)if(strcmp(s1,s2)=1) puts(s1,); D)if(strcmp(s1,s2)!=0)puts(s1);(分数:2.00)A.B.C.D.26.有以下程序:#includestring.hmain()char p20=a,b,c,d,q
10、=“abc“,r=“abcde“;strcpy(p+strlen(q),r);strcat(p,q);printf(“%d%d/n“,sizeof(p),strlen(p);程序运行后的输出结果是_。A) 20 9 B) 9 9C) 20 11 D) 11 11(分数:2.00)A.B.C.D.27.下列程序中函数 sort()的功能是对数组 a中的数据进行由大到小的排序。#include stdiohvoid 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
11、 a10=1,2;3,4,5,6,7,8,9,10,i;sort( int num1; double num2; t1, t2;,若变量均已正确赋初值,则以下语句中错误的是_。A) t1=t2; B) t2.num1=t1.num1;C) t2.mark=t1.mark; D) t2.num2=t1.num2;(分数:1.00)A.B.C.D.31.31. 有以下程序:struct STUchar name10;int num;float TotalScore;void f(struct STU*P)struct STU s2=“SunDan“,20044,550,“Penghua“,2004
12、5,537,*q=s;+P;+q;*P=*q;main()struct STU s3=“YangSan“,20041,703),“LiSiGuo“,20042,580;f(s);printf(“%s%d%3.0f/n“,s1.name,s1.num,s1.TotalScore);程序运行后的输出结果是_。A) SunDan 20044 550 B) Penghua 20045 537C) LiSiGuo 20042 580 D) SunDan 20041 703(分数:2.00)A.B.C.D.32.下面结构体的定义语句中,错误的是A) struct ordint x; int y; int
13、z; struct ord a;B) struct ordint x; int y; int z; struct ord a;C) struct ordint x; int y; int z; a;D) structint x; int y; int z; a;(分数:2.00)A.B.C.D.33.有以下程序:#include stdio.hvoid f(int v, int w)int t;t=v; v=w; w=t;main()int x=1,y=3,z=2;if(xy) f(x,y);else if(yz) f(y,z);else f(x,z);printf(“%d,%d,%d/n“,
14、x,y,z);执行后的输出结果( )。A) 1,2,3 B) 3,1,2 C) 1,3,2 D) 2,3,1(分数:1.00)A.B.C.D.34.有以下结构体说明和变量定义,如图所示, 指针 p、q、r 分别指向此链表中的三个连续结点。Struct nodeint data; struct node *next;*p,*q,*r;现要将 q所指结点从链表中删除,同时要保持链表的连续,(分数:2.00)A.B.C.D.35.以下结构体类型说明和变量定义中正确的是_。A) typedef struct B) struct REC;int n;char c;REC; int n;char c;RE
15、C t1,t2; REC t1,t2;C) typedef struct REC; D) structint n=0;char c=A;t1,t2; int n;char c;REC;REC t1,t2;(分数:2.00)A.B.C.D.36.假定已建立以下链表结构,且指针 p和 q已指向如图所示的结点:(分数:2.00)A.B.C.D.37.在 C语言中,下列关于文件操作的叙述正确的是( )。A) 对文件操作必须先关闭文件 B) 对文件操作必须先打开文件C) 对文件操作顺序没有统一规定 D) 以上三种说法全错(分数:1.00)A.B.C.D.38.fgets(str,n,fp)函数从文件中读
16、入一个字符串,以下错误的叙述是( )。A) 字符串读入后会自动加入/0B) fp是指向该文件的文件型指针C) fgets函数将从文件中最多读入 n个字符D) fgets函数将从文件中最多读入 n-1个字符(分数:2.00)A.B.C.D.39.请选出以下程序的输出结果( )。#include stdio.hsub(int *s,int y)static int t=3;y=st;t-;main()int a=1,2,3,4,i,x=0;for(i=0;i4;i+)sub(a,x);printf(“%d“,x); printf(“/n“);A) 1234 B) 4321 C) 0000 D) 4
17、444(分数:2.00)A.B.C.D.40.若有下面的说明和定义,则 sizeof(struct aa)的值是( )。struct aaint r1; double r2; float r3;union uuchar u15;long u22;ua;mya;A) 30 B) 29 C) 24 D) 22(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:32.00)41.在数据的存储结构中,不仅需要存储各数据元素的信息,还要存放各元素之间 1 的信息。(分数:2.00)填空项 1:_42.数据库的逻辑模型设计阶段的任务是将 1 转换成关系模式。(分数:2.00)填空项 1:_4
18、3.下列软件系统结构图的宽度为_。(分数:2.00)填空项 1:_44.E-R图中,矩形表示 1。(分数:2.00)填空项 1:_45.若有以下程序:int f(int x,int y)return (y-x)*x;main()int a=3,b=4,c=5,d;d=f(f(3,4),f(3,5);printf(“%d/n“,d);执行后的输出结果是U/U。(分数:2.00)填空项 1:_46.若有以下程序:main()int a=4,b=3,c=5,t=0;if(ab)t=a;a=b;b=t;if(ac)t=a; a=c; c=t;printf(“%d %d %d/n“,a,b,c);执行后
19、的输出结果是U /U。(分数:2.00)填空项 1:_47.若有定义:int k;,以下程序段的输出结果是_。 for(k=2;k6;k+,k+) printf(“*%d“,k);(分数:2.00)填空项 1:_48.有以下函数void prt(char ch, int n)int i;for(i=1; i=n; i+)printf(i%6!=0? “%c“: “%c/n“, ch);执行调用语句 prt(*, 24) ;后,函数共输出了_行*号。(分数:2.00)填空项 1:_49.当执行以下程序时,输入 1234567890回车,则其中 while循环体将执行_次。# includemai
20、n()char ch;while(ch=getchar()=0) printf(“#“);(分数:2.00)填空项 1:_50.以下程序运行后的输出结果是_。#includestdio.hmain()int a=1, b=7;do b=b/2; a+=b;while(b1);printf(“%d/n“, a);(分数:2.00)填空项 1:_51.以下程序的输出结果是_。#include stdio.hvoid swap(int *a, int *b)int *tt=a; a=b; b=tmain()int i=3,j=5,*p=while(x15) y+,x+=+y;pfintf(“%d,%
21、d“,y,x);(分数:2.00)填空项 1:_53.以下程序运行后的输出结果是 1。int f(int a, int n)if (n = 1) return f(a, n-1)+an-1;else return 0;main2int aa5=1,2,3,4,5, s;s=f(aa, 5); printf(“%d/n“, s);(分数:2.00)填空项 1:_下面程序的功能是将一个字符串 str的内容倒序。请填空。#includestring.hmain( )int i,j,U /U;char str=“1234567“;for(i=0,j=strlen(str)U /U;ij;i+,j-)k
22、=stri;stri=strj;strj=k;printf(“%s/n“, str):(分数:4.00)填空项 1:_填空项 1:_54.下列程序运行后的输出的结果是_。#includestdio.hmain()char s20;scanf(“%s“,s);printf(“%s“,s);运行程序,输入 HOW ARE YOU。(分数:2.00)填空项 1:_二级 C语言笔试-471 答案解析(总分:97.00,做题时间:90 分钟)一、选择题(总题数:40,分数:65.00)1.1. 下列叙述中正确的是( )。A一个逻辑数据结构只能有一种存储结构B逻辑结构属于线性结构,存储结构属于非线性结构C
23、一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率(分数:1.00)A.B.C.D. 解析:解析 数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,存储结构有顺序和链式结构。用不同的存储结构,其处理的效率是不同的。2.按照“先进先出”组织数据的数据结构是( )。A) 队列 B) 栈 C) 双向链表 D) 二叉树(分数:2.00)A. B.C.D.解析:解析 队列是一种特殊的线性表,只允许在表的一端插入元素,在表的另一端删除元素,插入元素的一端叫“队尾
24、”,删除元素的一端叫“队头”,先插入的元素先被删除,是按“先进先出”的原则组织数据的。3.对于循环队列,下列叙述中正确的是A) 队头指针是固定不变的B) 队头指针一定大于队尾指针C) 队头指针一定小于队尾指针D) 队头指针可以大于队尾指针,也可以小于队尾指针(分数:2.00)A.B.C.D. 解析:解析 循环队列是将顺序队列首尾相连形成的,随着插入元素或删除元素的进行,其队头指针及队尾指针是在不断变化的,有时可能会出现队头指针大于队尾指针的情况,也可能是队尾指针大于队头指针。4.软件是指_。A) 程序 B) 程序和文档C) 算法加数据结构 D) 程序、数据与相关文档的完整集合(分数:2.00)
25、A.B.C.D. 解析:解析 计算机软件是包括程序、数据及相关文档的完整集合。5.栈通常采用的两种存储结构是A) 顺序存储结构和链式存储结构 B) 散列方式和索引方式C) 链表存储结构和数组 D) 线性存储结构和非线性存储结构(分数:2.00)A. B.C.D.解析:解析 和线性表类似,栈也有两种存储方法,一是顺序栈,二是链式栈。栈的顺序存储结构是利用一组地址连续的存储单元一次存储自栈底到栈顶的数据元素,同时附设指针 top指示栈顶元素的位置,由于栈的操作是线性表操作的特例,相对而言,链式栈的操作更易于实现。6.下列工具中,不属于结构化分析的常用工具的是( )。 A) 数据流图 B) 数据字典
26、 C) 判定树 D) N.S 图(分数:2.00)A.B.C.D. 解析:解析结构化分析的常用工具有数据流图、数据字典、判定树和判定表。7.设计程序时,应采纳的原则之一是( )。A) 程序的结构应有助于读者的理解 B) 限制 GOTO语句的使用C) 减少或取消注释行 D) 程序越短越好(分数:2.00)A. B.C.D.解析:解析 程序设计的风格主要强调程序的简单、清晰和可理解性,以便读者理解。程序滥用 GOTO语句将使程序流程无规律,可读性差;添加注释行有利于对程序的理解,不应减少或取消,程序的长短要依据实际的需要而定,并不是越短越好。8.从工程管理角度,软件设计一般分为两步完成,它们是_。
27、(A) 概要设计与详细设计(B) 数据设计与接口设计(C) 软件结构设计与数据设计(D) 过程设计与数据设计(分数:2.00)A. B.C.D.解析:9.数据库技术的根本目标是要解决数据的A) 存储问题 B) 共享问题 C) 安全问题 D) 保护问题(分数:2.00)A.B. C.D.解析:解析 由于数据的集成性使得数据可被多个应用程序共享,特别是在网络发达的今天,数据库与网络的结合扩大了数据库的应用范围,所以数据库技术的根本问题是解决数据的共享问题。10.下列叙述中正确的是A) 程序设计的任务就是编写程序代码并上机调试B) 程序设计的任务就是确定所用数据结构C) 程序设计的任务就是确定所用算
28、法D) 以上 3种说法都不完整(分数:1.00)A.B.C.D. 解析:解析 选项 A、B、C 的说法都不完整。程序设计应根据计算机要完成的任务进行数据结构和算法的设计,并且编写其程序代码,然后进行调试,直到得出正确结果。11.请选出以下程序的输出结果_。#includestdio.hsub(x,y,z)int x,y*z;*z=y-x;main()int a,b,c;sub(10,5,sub(7,a,sub(a,b,(B) double int_;(C) char for;(D) float US$(分数:1.00)A.B.C.D. 解析:13.若有说明:int *p,m=5,n;以下正确的
29、程序段是( )。A) p= B) scanf(“%d%d%d“,C) scanf(“%d%d%d“,x,y,z); D) read(“%d %d %d“,(分数:2.00)A.B. C.D.解析:解析 选项 A和选项 D都不是 C语言中的输入方法,选项 C中的变量名前面缺少取地址符“for(; x0; x-)if(x%3)printf(“%d,“,x-);continue;)printf(“%d,“,-x);程序的运行结果是_。A) 7,4,2 B) 8,7,5,2C) 9,7,6,4 D) 8,5,4,2(分数:1.00)A.B.C.D. 解析:解析 本题考查 for循环沿句。x=8,for
30、 循环条件为真,8%3=2,不等于 0,则 if条件表达式为真,执行第一个输出讲句,先输出 x的值 8,然后将 x的值减 1,此时 x=7。然后执行 continue语句结束本次循环。执行 x-表达式,得 x=6,for 循环条件为真,6%3=0,则 if条件表达式为假,执行第二个输出语句,先将 x的值减 1得 x=5,然后输出 x的值 5。执行 x-表达式。得 x=4,for 循环条件为真,4%3=1,不等于 0,则 if条件表达式为真,执行第一个输出语句,先输出 x的值 4,然后将 x的值减 1,此时 x=3。然后执行 continue语句结束本次循环。执行 x-表达式,得 x=2,for
31、 循环条件为真,2%3=2,不等于 0,则 if条件表达式为真,执行第一个输出语句,先输出 x的值 2,然后将 x的值减 1,此时x=1。执行 x-表达式,得 x=0,for 循环条件为假,循环结束。18.有下列程序:main()int x=5;doprintf(“%d“,x-=4);while(!(-x);程序的输出结果是( )。A) 1 B) 20 C) 1 4 D) 死循环(分数:1.00)A.B.C. D.解析:解析 本题考查 dowhile循环。执行 printf语句,x=x-4 1,输出 1,判断 while循环的控制条件,-x=0,则(!(-x)非零,循环条件成立,执行下一次循环
32、;执行 printf语句,x=x-4=-4,输出-4,判断 while循环的控制条件,-x=-5,则(!(-x)为零,循环条件不成立,结束循环。19.若变量已正确定义,下列正确的程序段是( )。A) while(ch=getchar()=/N)putchar(ch);B) while(ch=getchar()=/n)putchar(ch);C) while(ch=getchar()!=/N)putchar(ch);D) while(ch=getchar()!=/n)putchar(ch);(分数:2.00)A.B.C.D. 解析:解析 本题考查两个知识点:C 语言用/n这个字符常量表示换行;函
33、数 getchar()的作用是从终端输入一个字符,当遇到换行时结束输入。20.以下叙述错误的是( )。 A) 变量的作用域取决于变量定义语句的位置 B) 全局变量可以在函数以外的任何部位进行定义 C) 局部变量的作用域可用于其他函数的调用 D) 一个变量说明为 static存储类型是为了限制其他编译单元的引用(分数:2.00)A.B.C.D. 解析:解析 本题考查函数调用的变量作用域。全局变量不在任何函数体内定义,作用域为整个文件;局部变量在函数体内定义,作用域仅为本次函数;static 类型是静态变量,为了方便其他编译单元的引用,不能随意改变。 一个函数包含两部分:函数首和函数体,函数体包括
34、花括号内的所有语句。21.有如下程序main()char ch25=“6937“,“8254“,*p2;int i,j,s=0;for(i=0;i2;i+)pi=chi;for(i=0;i2;i+)for(j=0;pij/0; j+=2)s=10*s+pij-0;printf(“%d/n“,s);该程序的输出结果是A) 69825 B) 63825 C) 6385 D) 693825(分数:2.00)A.B.C. D.解析:解析 该题稍微难一点。主要要搞清楚以下几点:定义了一个指针数组 char *p2后,程序中第一个循环 for(i=0;i2;i+)pichi;的作用,是使指针数组的 p0元
35、素(它本身是一个指针)指向了二维数组 ch的第一行字符串,并使指针数组的 p1元素指向二维数组 ch的第二行字符串。这样,就使指针数组 p和二维数组 ch建立起了一种对应关系,以后对二维数组 ch的某个元素的引用就有两种等价的形式:chij或 pij。对二维数组 ch的初始化,使其第一行 ch0中存入了字符串“6937”,第二行 ch1中的内容为字符串“8254”。程序中第二个循环中的循环体 ss*10+pi j-0;的功能是这样的,每执行一次,将 s中的值乘以 10(也即将 s中的数值整体向左移动一位,并在空出来的个位上添一个 0),再将当前 pii中的字符量转换为相应的数字,然后把这个数字
36、加到 s的个位上。注意到内启循环的循环条件 pij/0是指 pij中的字符只要不是字符串结束标志/0就继续循环。语句 j+2;是使下标 j每次增加 2,也即一个隔一个地从 pi所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从 p0所指向的字符串“6937”中一个隔一个地取出字符,分别是“6”和“3”,然后从 p1)所指向的字符串“8254”中一个隔一个地取出字符,分别是“8”和“5”,同时经过转换和相加运算后,结果 s中的值应该是 6385。22.C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递是( )。A) 地址传递B) 值传递C) 由实参传给形参,并由形参传回给
37、实参D) 由用户指定传递方式(分数:1.00)A.B. C.D.解析:解析本题考查函数调用时的参数传递。在函数调用时,实参和其所对应的形参分别占用不同的存储单元,彼此之间只是实参将值传递给形参。23.阅读下列程序段,则程序的输出结果为#include“stdio.h“#defineM(X,Y)(X)*(Y)#defineN(X,Y)(X)/(Y)main()f int a=5,b=6,c=8,k;k=N(M(a,b),c);printf(“%d/n“,k);A) 3 B) 5 C) 6 D) 8(分数:2.00)A. B.C.D.解析:解析 带参数的宏定义命令行形式如下:#de-fine 宏名
38、(形参表)替换文本。首先进行 M的宏替换,之后再进行 N的宏替换,替换后的表达式为(a)*(b)/(c)。24.下列说法中不正确的是( )。A) 指针是一个变量B) 指针中存放的是数值C) 指针可以进行加、减等算术运算D) 指针变量占用存储空间(分数:2.00)A.B. C.D.解析:解析 指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是个存储单元,而不是一个字节。25.若有定义语句:char *s1=“OK“,*s2=“ok“;,以下选项中,能够输出“OK“的语句是( )。A)if(strcmp(s1,s2)=0) puts(s1); B)if(strcmp(s1,
39、s2)!=0) puts(s2);C)if(strcmp(s1,s2)=1) puts(s1,); D)if(strcmp(s1,s2)!=0)puts(s1);(分数:2.00)A.B.C.D. 解析:解析 字符串比较函数 strcmp的功能是对 s1和 s2所指字符串进行比较。如果 s1s2,返回负数,如果 s1=s2,返回 0,如果 s1s2,返回正数,所以对于本题来说,能够输出“OK”的语句是 D)选项所指的语句。26.有以下程序:#includestring.hmain()char p20=a,b,c,d,q=“abc“,r=“abcde“;strcpy(p+strlen(q),r)
40、;strcat(p,q);printf(“%d%d/n“,sizeof(p),strlen(p);程序运行后的输出结果是_。A) 20 9 B) 9 9C) 20 11 D) 11 11(分数:2.00)A.B.C. D.解析:解析 题目中 p+strlen(q)的作用是在数组元素 p0地址的基础上向后移动三位,然后再将 r所指字符串内容复制到 p所指的存储空间中,字符 d被覆盖,p20=a,b,c,a,b,c,d,e。然后通过“strcat(p,q);”将 q所指的字符串内容连接到 p所指的字符串后面,p20=a,b,c,a,b,c,d,e,a,b,c,。在输出语句中 strlen(p)是求
41、字符串的长度,值为 11;sizeof(p)用来求数组 p占多少字节,值为 20。27.下列程序中函数 sort()的功能是对数组 a中的数据进行由大到小的排序。#include stdiohvoid 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 a10=1,2;3,4,5,6,7,8,9,10,i;sort( int num1; double num2; t1, t2;,若变量均已正确赋初值,则以下语句中错误的是_。A) t1=t2; B) t2.num
42、1=t1.num1;C) t2.mark=t1.mark; D) t2.num2=t1.num2;(分数:1.00)A.B.C. D.解析:解析 结构体中的字符串赋值不能通过指针来赋值。31.31. 有以下程序:struct STUchar name10;int num;float TotalScore;void f(struct STU*P)struct STU s2=“SunDan“,20044,550,“Penghua“,20045,537,*q=s;+P;+q;*P=*q;main()struct STU s3=“YangSan“,20041,703),“LiSiGuo“,20042,
43、580;f(s);printf(“%s%d%3.0f/n“,s1.name,s1.num,s1.TotalScore);程序运行后的输出结果是_。A) SunDan 20044 550 B) Penghua 20045 537C) LiSiGuo 20042 580 D) SunDan 20041 703(分数:2.00)A.B. C.D.解析:解析 本题将结构体数组 s的首地址传给了结构体指针变量 p,并在函数 f中改变了指针变量 p所指向的第二个结构体中的成员变量,这一改变,也就改变了主函数中 s1的成员变量。32.下面结构体的定义语句中,错误的是A) struct ordint x; i
44、nt y; int z; struct ord a;B) struct ordint x; int y; int z; struct ord a;C) struct ordint x; int y; int z; a;D) structint x; int y; int z; a;(分数:2.00)A.B. C.D.解析:解析 对于选项 B,结构体类型声明和定义分开时,在声明后应有分号“;”。33.有以下程序:#include stdio.hvoid f(int v, int w)int t;t=v; v=w; w=t;main()int x=1,y=3,z=2;if(xy) f(x,y);e
45、lse if(yz) f(y,z);else f(x,z);printf(“%d,%d,%d/n“,x,y,z);执行后的输出结果( )。A) 1,2,3 B) 3,1,2 C) 1,3,2 D) 2,3,1(分数:1.00)A.B.C. D.解析:解析 程序中 if语句的条件只有 yz 为真,所以执行 f(y,z)。函数 f的功能是交换两形参的值,但由于实参和形参都是一般变量,因此形参变量值的交换不能影响实参的值,main 函数中的 y和 z并来互换,因此输出结果为:1,3,2。34.有以下结构体说明和变量定义,如图所示, 指针 p、q、r 分别指向此链表中的三个连续结点。Struct no
46、deint data; struct node *next;*p,*q,*r;现要将 q所指结点从链表中删除,同时要保持链表的连续,(分数:2.00)A.B.C.D. 解析:35.以下结构体类型说明和变量定义中正确的是_。A) typedef struct B) struct REC;int n;char c;REC; int n;char c;REC t1,t2; REC t1,t2;C) typedef struct REC; D) structint n=0;char c=A;t1,t2; int n;char c;REC;REC t1,t2;(分数:2.00)A. B.C.D.解析:解析 选项 A中用 typedef定义结构体类型名 REC后,REC 能够唯一地标识这种结构体类型,可以用 REC定义变量,这是正确的结构体类型变量的定义,选项 C是错误的。选项 B中“struct REC;”后面不应该加分号。选项 D中的结构体是一个无名结构体类型,REC 是结构体变量,不是结构体类型,因此不能用来定义结构体变量。36.假定已建立以下链表结构,且指针 p和 q已指向如图所示的结点:(分数:2.00)A.B.C.D. 解析:评析 本题题面要求删除 q所指结点并释放该结点,而选项 A中虽然是删除了 q所指鲒点,但并未释放 q