1、二级 C 语言笔试 50 及答案解析(总分:88.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:50.00)1.有以下程序 main() int i,s=0; for(i=1;i10;i+=2)s+=i+1, printf(“%d/n“,s); 程序执行后的输出结果是(分数:1.00)A.自然数 19 的累加和B.自然数 110 的累加和C.自然数 19 中奇数之和D.自然数 110 中偶数之和2.有以下程序 #include stringh main(int argc,char *argv) int i,len=0; fot(i=1;iargc;i+=2)len+=str
2、len(argvi); printf(“%d/n“,len); 经编译连接后生成的可执行文件是 exexe,若运行时输入以下带参数的命令行 ex abcd efg h3 k44 执行后输出结果是(分数:1.00)A.14B.12C.8D.63.设有以下语句 typedef struct s int g;char h;T 则下面叙述中正确的是(分数:1.00)A.可用 S 定义结构体变量B.可以用 T 定义结构体变量C.S 是 struct 类型的变量D.T 是 structS 类型的变量5.若程序中定义了以下函数 double myadd(double a,double b) return(a
3、+b) ; 并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下选项中错误的说明是(分数:1.00)A.double myadd(double a, ;B.double myadd(double,doubl;C.double myadd(double b,double ;D.double myadd(double x,double ;6.下面描述中,不符合结构化程序设计风格的是(分数:1.00)A.使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑B.注重提高程序的可读性C.模块只有一个人口和一个出口D.使用 goto 语句7.在数据库管理系统提供的数据语言中,负责数据的查
4、询及增、删、改等操作的是(分数:1.00)A.数据定义语言B.数据转换语言C.数据操纵语言D.数据控制语言8.下列关于队列的叙述中,正确的是(分数:1.00)A.在队列中只能插入数据B.在队列中只能删除数据C.队列是先进先出的线性表D.队列是先进后出的线性表9.有以下程序(提示:程序中 fseek(fp,-2L*sizeof(int),SEEK_END) ;语句的作用是使位置指针从文件末尾向前移 2*sizeof(int)字节) #include stdioh main() FILE*fp;int i,a4=1,2,3,4,b; fp=fopen(“data.dat“,“wb“); for(i
5、=0;i4;i+)fwrite(/*从文件中读取 sizeof(int)字节的数据到变量 b 中*/ felose(fp); printf(“%d/n“,b) ; 执行后输出结果是(分数:1.00)A.2B.1C.4D.310.关系数据库的数据及更新操作必须遵循()等完整性规则。(分数:1.00)A.实体完整性和参照完整性B.参照完整性和用户定义的完整性C.实体完整性和用户定义的完整性D.实体完整性、参照完整性和用户定义的完整性11.有以下程序 void sort(int a,int n) int i,j,t; for(i=0;in-1;i+2) for(j=i+2;jn;j+=2) if(a
6、iaj)t=ai;ai=aj;aj=t; main() int aa10=1,2,3,4,5,6,7,8,9,10,i; sort(aa,10); for(i=0;i10;i+)printf(“%d,“,aai); printf(“/n“); 其输出结果是:(分数:1.00)A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,5,4,3,2,1,C.9,2,7,4,5,6,3,8,1,10,D.1,10,3,8,5,6,7,4,9,2,12.设有以下定义 int a=0; double b=1.25; charc c=A; #define d 2 则下面语句中错误的是(分数
7、:1.00)A.a+;B.b+;C.c+;D.d+;13.实体一联系模型中,实体与实体之间的联系不可能是(分数:1.00)A.一对一B.多对多C.一对多D.一对零14.有以下程序 void swapl(int c) int t; t=c0;c0=c1;c1=t; void swap2(int c0,int c1) int t; t=c0;c0=c1;c1=t; main() int a2=3,5,b2=3,5; swapl(a) ;swap2(b0,b1);printf(“%d%d%d%d/n“,a0,a1,b0,b1); 其输出结果是:(分数:1.00)A.5 3 5 3B.5 3 3 5C
8、.3 5 3 5D.3 5 5 315.下面程序的功能是输出以下形式的金字塔图案: * * * * * * * * * * * * * * * * main() int i,j; for(i=1;i=4;i+) ror(j=1;j4-i;j+)printf(“); for(j=1;j_;j+)printf(“*“); printf(“/n“); 在下划线处应填入的是(分数:1.00)A.iB.2*i-1C.2*i+1D.i+216.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是:(分数:1.00)A.char s10=“abcdefg“;B.char t=“abcdefg“,*s=
9、t;C.char s10;s=“abcdefg“;D.char s10;strcpy(s,“abcdefg“);17.设有定义:int a,*pa=,则以下选项中,正确的赋值语句是(分数:1.00)A.p=1;B.*q=2;C.q=p;D.*p=5;22.以下 4 个选项中,不能看作一条语句的是(分数:1.00)A.;B.a=0,b=0,c=0;C.if(a0);D.if(b=0)m=1;n=2;23.有以下程序 void 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
10、(y,z); else f(x,z); pfintf(“%d,%d,%d/n“,x,y,2); 执行后输出结果是(分数:1.00)A.1,2,3B.3,1,2C.1,3,2D.2,3,124.有以下程序段 int a 10=1,2,3,4,5,6,7,8,9,10,*P= b=p5; b 中的值是(分数:1.00)A.5B.6C.8D.925.软件需求分析阶段的工作可以分为 4 个方面:需求获取、需求分析、编写需求分析说明书和(分数:1.00)A.阶段性报告B.需求评审C.总结D.都不正确26.有以下程序 char fun(char x,char y) if(xy)return x; retu
11、rn y; main() int a=9,b=8,c=; printf(“%c/n“,fun(fun(a,b) ,fun(b,c) ); 程序的执行结果是(分数:1.00)A.函数调用出错B.8C.9D.727.一个算法应该具有“确定性”等 5 个特性,下面对另外 4 个特性的描述中错误的是(分数:1.00)A.有零个或多个输入B.有零个或多个输出C.有穷性D.可行性28.以下 4 组用户定义标识符中,全部合法的一组是(分数:1.00)A._main enclude sinB.If _max turboC.txt REAL 3COMD.int k_2 _00129.有以下程序 void sum
12、(int *a) a0=a1; main() int aa10=1,2,3,4,5,6,7,8,9,10,i; for(i=2;i=0;i-)sum(537,*p5,*t; int i,j; for(i=0;i5;i+)pi=i4;i+) for(j=i+1;j5;j+) if(pi-Scorepj-Score) t=pi;pi=pj;pi=t; printf(“%d%d/n“,s1.Score,p1-Score); 执行后输出结果是(分数:1.00)A.550550B.680680C.580550D.58068036.有以下程序 int f(int b4) int i,j,s=0; for(
13、j=0;j4;j+) i=j; if(i2)i=3-j; s+=bij; return s; main() int a44=1,2,3,4,0,2,4,6,3,6,9,12,3,2,1,0; printf(“%d/n,f(a) ); 执行后的输出结果是:(分数:1.00)A.12B.11C.18D.1637.以下叙述中正确的是(分数:1.00)A.C 语言的源程序不必通过编译就可以直接运行B.C 语言中的每条可执行语句最终都将被转换成二进制的机器指令C.C 源程序经编译形成的二进制代码可以直接运行D.C 语言中的函数不可以单独进行编译38.以下符合 C 语言语法的实型常量是(分数:1.00)A
14、.1.2E0.5B.3.14159EC.5E-3D.E1539.有以下程序 #define f(x) x*x main() int i; i=f(4+4)/f(2+2); printf(“%d/n“,i); 执行后输出结果是(分数:1.00)A.28B.22C.16D.440.有以下程序 main() char k;int i; for(i=1;i3;i+) scanf(“%c“,f2( printf(“%d%d/n“,a.num,b.num); 执行后输出结果是(分数:1.00)A.2041 2044B.2041 2043C.2042 2044D.2042 204342.若以下选项中的变量已
15、正确定义,则正确的赋值语句是(分数:1.00)A.x1=26.8%3;B.1+2=x2;C.x3=0x12;D.x4=1+2=3;43.有以下程序 main() char*p10=“abc“,aabdfg“,“dedbe“,“abbd“,“cd“; printf(“%d/n“,stxlen (p4); 执行后输出结果是(分数:1.00)A.2B.3C.4D.544.有以下程序 main() int x=0,y=5,z=3; while(z-0i5;i+) do if(i%3)continue; n+; while(!i);n+; printf(“n=%d/n“,n); 程序执行后输出结果是(分
16、数:1.00)A.n=5B.n=2C.n=3D.n=446.以下程序中与语句 k=ab?(bc?1:0):0;功能等价的是(分数:1.00)A.if(a 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“, if(ij) t=ai;ai=aj;aj=t; f(a,i+1,j-1); main() int i,aa5=1,2,3,4,5; f(aa,0,4); for(i=0;i5;i+)printf
17、(“%d,“,aai;printf(“/n“); 执行后输出结果是(分数:1.00)A.5,4,3,2,1B.5,2,3,4,1,C.1,2,3,4,5D.1,5,4,3,2,二、B填空题/B(总题数:19,分数:38.00)51.一般来说,算法可以用顺序、选择和U 【1】 /U三种基本控制结构组合而成。(分数:2.00)填空项 1:_52.按照逻辑结构分类,数据结构可分为线性结构和非线性结构,队列属于U 【2】 /U。(分数:2.00)填空项 1:_53.按数据流的类型,结构化设计方法有两种设计策略,它们是变换分析设计和U 【3】 /U。(分数:2.00)填空项 1:_54.数据库系统在其内
18、部分为三级模式,即概念模式、内模式和外模式。其中,U 【4】 /U是用户的数据视图,也就是用户所见到的数据模式。(分数:2.00)填空项 1:_55.在关系模型中,把数据看成一个二维表,每一个二维表称为一个U 【5】 /U。(分数:2.00)填空项 1:_56.已知字符 A 的 ASCII 码值为 65,以下语句的输出结果是U 【6】 /U。 char ch=b; printf(“%c%d/n“,ch,ch);(分数:2.00)填空项 1:_57.有以下语句段 int n1=10,n2=20; printf(“U 【7】 /U“,n1,n2); 要求按以下格式输出 n1和 n2 的值,每个输出
19、行从第一列开始,请填空。 n1=10 n2=20(分数:2.00)填空项 1:_58.有以下程序 main() int t=1,i=5; for(;i0;i-)t*=i; printf(“%d/n“,t); 执行后输出结果是U 【8】 /U。(分数:2.00)填空项 1:_59.有以下程序 main() int n=0,m=1,x=2; if(!n)x-=1; if(m)x-=2; if(x)x-=3; printf(“%d/n“,x); 执行后输出结果是U 【9】 /U。(分数:2.00)填空项 1:_60.有以下程序 #includestdioh main() char ch1,ch2;i
20、nt n1,n2; ch1=getchar();ch2=getchar(); n1=ch1-();n2=n1*10+(ch2-(); printf(“%d/n“,n2); 程序运行时输入:12回车,执行后输出结果是U 【10】 /U。(分数:2.00)填空项 1:_61.有以下程序 void f(int y,int*x) y=y+ *x; *x=*x+y; main() int x=2,y=4; f(y,double y=1;for(i=1;in;i+)y=y*x;return y;主函数中已正确定义 m、a、b 变量并赋值,并调用 fun 函数计算:m=a 4+b4-(a+b)3。实现这一计
21、算的函数调用语句为U 【12】 /U。(分数:2.00)填空项 1:_63.下面 rotate 函数的功能是:将 n 行 n 列的矩阵 A 转置为 A,例如: (分数:2.00)填空项 1:_64.以下 sstrcpy()函数实现字符串复制,即将 t 所指字符串复制到 s 所指内存空间中,形成一个新字符串 s。 请填空。 void sstrcpy(char*s,char*t) while(*s+=U 【15】 /U); main() char strl100,str2=“abcdefgh“; sstrcpy(strl,str2); printf(“%s/n“,strl); (分数:2.00)填
22、空项 1:_65.下列程序的运行结果是:U 【16】 /U。 #includestringh char*ss(char*s) return s+strlen(s)/2; main() char*p,*str=“abcdefgh“; p=ss(str);printf(“%s/n“,p); (分数:2.00)填空项 1:_66.下面程序的运行结果是:U 【17】 /U。 int f(int a,int n) if(n1)return a0+f(p1=2.5;p2=3.5; printf(“%f%f%f/n“,p0,p1,p2); (分数:2.00)填空项 1:_68.以下程序的运行结果是U 【19
23、】 /U。 #includestringh typeaef struct student char name10; long sno; float score; STU; main() STUa=“zhangsan“,2001,95,b=“Shangxian“,2002,90,c=“Anhua“,2003,95,d,*p=i10;i+=2)s+=i+1, printf(“%d/n“,s); 程序执行后的输出结果是(分数:1.00)A.自然数 19 的累加和B.自然数 110 的累加和C.自然数 19 中奇数之和D.自然数 110 中偶数之和 解析:解析本题中 i 赋初值为 1,并对其每次进行加
24、 2 操作,即 i 每次均为 110 之间的奇数,s+=i+1,即 s=s+i+1,相当于 s 等于原来的 s 每次加上 110 之间的偶数,直到 i10 不成立。当 i=1 时,s=0+1+1=2;当 i=3 时,s=2+3+1=2+4;当 i=5 时, s=2+4+5+1=2+4+6;当 i=7 时,s=2+4+6+7+1=2+4+6+8;当 i=9 时,s=2 +4+6+8+9+1=2+4+6+8+10;当 i=11 时,i10 不成立,结束循环。2.有以下程序 #include stringh main(int argc,char *argv) int i,len=0; fot(i=1
25、;iargc;i+=2)len+=strlen(argvi); printf(“%d/n“,len); 经编译连接后生成的可执行文件是 exexe,若运行时输入以下带参数的命令行 ex abcd efg h3 k44 执行后输出结果是(分数:1.00)A.14B.12C.8D.6 解析:解析主函数的第一个参数 argc 为整型参数,记下从命令行输入的参数的个数;第二个参数 argv是一个字符型的指针数组,它的每一个元素指向命令行输入的参数字符数。在本例中 argc 的值为5,argv0指向字符串“ex”,argv1指向参数字符串“abed”, argv2指向字符串“efg”,argv3指向参数
26、字符串“h3”,argv4指向参数字符串“k44”。在 main()函数中,for 循环执行了 2 次,当 i=1时,len=0+strlen(argv1),而其中 argv1=“abcd”,故此时 len 的值为 4;当 i=3 时,len=4+strlen(argv3),而其中 argv3=“h3”,故此时 len 的值为 6;当 i=5 时,退出循环,故最后输出的 len 的值为 6。3.设有以下语句 typedef struct s int g;char h;T 则下面叙述中正确的是(分数:1.00)A.可用 S 定义结构体变量B.可以用 T 定义结构体变量 C.S 是 struct
27、类型的变量D.T 是 structS 类型的变量解析:解析结构体类型的定义格式为 struct 结构体名 成员说明列表; 结构体变量的定义有 3 种形式:第一种:定义结构体类型的同时定义结构体变量如: street 结构体名成员说明列表变量;第二种先定义一个结构体类型,然后使用该类型来定义结构体变量,如:struct student成员说明列表;student 变量;第三种:定义一个无名称的结构体类型的同时定义结构体变量,如:struct student成员说明列表变量。解析:解析本题中定义了一个结点 struct NODE,在主函数中定义了三个结点变量指针 p、q 和 r,接着通过 mall
28、oc 函数分配了三个结点并让 p、q 和 r 分别指向他们,再接着给 p、q 和 r 所指向的结点的 num域赋值为 1、2、3,然后让结点 p 指向 q,让 q 指向 r,r 指向 NULL。显然 q-next-num 的值为指针 r所指向结点的 num 域的值为 3,p-hum 的值为指针 P 所指向结点的 num 域的值为 1,故最后输出 s 的值为 3+1=4。5.若程序中定义了以下函数 double myadd(double a,double b) return(a+b) ; 并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下选项中错误的说明是(分数:1.00)A.doub
29、le myadd(double a, ; B.double myadd(double,doubl;C.double myadd(double b,double ;D.double myadd(double x,double ;解析:解析函数声明是对所用到的函数的特征进行必要的声明,编译系统以函数声明中给出的信息为依据,对调用表达式进行检测,以保证调用表达式与函数之间的参数正确传递。函数声明的一般格式为: 类型标识符 函数名(类型标识符 形参,); 这些信息就是函数定义中的第一行的内容。这里形参的名字是不重要的,重要的是类型标识符,函数声明中也可以不写形参名只写该形参的声明类型,但不能只写形参名
30、而不写该形参的类型。本题中,选项 A 中 double myadd(double a,b) ,没写出形参 b 的类型。6.下面描述中,不符合结构化程序设计风格的是(分数:1.00)A.使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑B.注重提高程序的可读性C.模块只有一个人口和一个出口D.使用 goto 语句 解析:解析在结构化程序设计中,应严格控制使用 GOTO 语句,必要时才可以使用。7.在数据库管理系统提供的数据语言中,负责数据的查询及增、删、改等操作的是(分数:1.00)A.数据定义语言B.数据转换语言C.数据操纵语言 D.数据控制语言解析:解析在数据库管理系统提供的数据
31、语言中,数据操纵语言负责数据的查询及增、删、改等操作。8.下列关于队列的叙述中,正确的是(分数:1.00)A.在队列中只能插入数据B.在队列中只能删除数据C.队列是先进先出的线性表 D.队列是先进后出的线性表解析:解析对队列可以进行插入和删除数据的操作,只是插入数据只能在队尾,删除数据只能在队头。所以队列是先进先出的线性表。9.有以下程序(提示:程序中 fseek(fp,-2L*sizeof(int),SEEK_END) ;语句的作用是使位置指针从文件末尾向前移 2*sizeof(int)字节) #include stdioh main() FILE*fp;int i,a4=1,2,3,4,b
32、; fp=fopen(“data.dat“,“wb“); for(i=0;i4;i+)fwrite(/*从文件中读取 sizeof(int)字节的数据到变量 b 中*/ felose(fp); printf(“%d/n“,b) ; 执行后输出结果是(分数:1.00)A.2B.1C.4D.3 解析:解析函数 fopen(eonst char*filename,cortst char*mode)的功能是以 mode 指定的模式打开filename 指定的磁盘文件;fclose(FILE*fp)的功能是关闭文件指针 fp 指向的文件;函数fscanf(FILE*fp,const char*forma
33、taddress,-)的功能是根据 for- mat 中的格式从 fp 指向的文件中读取数据,并存入到相应的 address 指向的变量中。函数 fprintf(FILE*fp,const char * format,argument,-)的功能是把 argument 列表中的表达式值写到 fp 所指向的文件中;函数fwrlte(void*ptr,int size,int n,FILE*fP)的功能是把 ptr 指向的缓冲区中的 sizen 个字节写到文件指针 fP 指向的文件中。本题中首先定义了一个文件指针 fp,然后通过函数 fopen 以“wb”的方式打开文件“datadat”,直接通过
34、一个 for 循环,每循环一次调用函数 fwrite 将数组中的元素 ai的值写进 fp 所指的文件中,该循环共循环 4 次,循环完后 fp 所指文件的内容为 123,然后通过 fclose 函数关闭 fp 所指文件。接着通过函数 fopen 以“rb”的方式打开文件“datadat”,通过 fseek 函数让指针fp 从文件末尾向前移动 2 个 int 型大小字节的,然后通过函数 fread 从 fp 所指的文件中读取一个 int 型大小的数据到变量 b 中,故此时 b 的值为 3,因此最后输出的 b 的值为 3。10.关系数据库的数据及更新操作必须遵循()等完整性规则。(分数:1.00)A
35、.实体完整性和参照完整性B.参照完整性和用户定义的完整性C.实体完整性和用户定义的完整性D.实体完整性、参照完整性和用户定义的完整性 解析:解析关系模型中包括关系的数据结构、关系的操纵和关系中的数据约束。关系完整性约束即数据完整性,包括实体完整性、参照完整性和用户自定义完整性。11.有以下程序 void sort(int a,int n) int i,j,t; for(i=0;in-1;i+2) for(j=i+2;jn;j+=2) if(aiaj)t=ai;ai=aj;aj=t; main() int aa10=1,2,3,4,5,6,7,8,9,10,i; sort(aa,10); for
36、(i=0;i10;i+)printf(“%d,“,aai); printf(“/n“); 其输出结果是:(分数:1.00)A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,5,4,3,2,1,C.9,2,7,4,5,6,3,8,1,10, D.1,10,3,8,5,6,7,4,9,2,解析:解析sort()函数作用是将数组 aa 中伪下标为偶数的元素按大到小排序。主函数中首先定义了一个长度为 10 的数组并赋值,然后调用 sort()函数,将数组 aa 中奇数个元素的值按大到小排序,因此执行完该函数后,数组中奇数个元素的值为 9、7、5、3 和 1,故主函数中最后通过一个
37、 for 循环输出数组aa 各元素的值为 9、2、7、4、5、6、3、8、1 和 10。12.设有以下定义 int a=0; double b=1.25; charc c=A; #define d 2 则下面语句中错误的是(分数:1.00)A.a+;B.b+;C.c+;D.d+; 解析:解析自加运算对象可以是整型变量也可以是实型变量,但不能是表达式和常量。本题中,#define d 2 定义了 d 为常数 2,不能再对 d 进行自加运算。13.实体一联系模型中,实体与实体之间的联系不可能是(分数:1.00)A.一对一B.多对多C.一对多D.一对零 解析:解析实体联系模型中实体与实体之间的联系有
38、一对一(1:1),一对多或多对一(1:m 或 m:1),多对多(m:n)其中一对一是最常用的关系。14.有以下程序 void swapl(int c) int t; t=c0;c0=c1;c1=t; void swap2(int c0,int c1) int t; t=c0;c0=c1;c1=t; main() int a2=3,5,b2=3,5; swapl(a) ;swap2(b0,b1);printf(“%d%d%d%d/n“,a0,a1,b0,b1); 其输出结果是:(分数:1.00)A.5 3 5 3B.5 3 3 5 C.3 5 3 5D.3 5 5 3解析:解析函数间的参数的传递
39、有两种情况,第一种情况变量作为形参时的参数传递,变量作为形参时,要求对应的实参应为变量或表达式,变量作为函数的参数其传递方式是“值传递”,该种情况下,形参被赋值为实参的值,然后实参与形参再无联系。也就是说对形参的改变将不再影响实参;第二种情况是地址或数组名作为形参时的参数传递,该种情况下对形参的改变将对实参产生影响。本题中函数 swapl()是传递的地址。所以对该形参 c 的改变将影响实参,分析可知该函数的作用,是使数组 c 的第一个元素和第二个元素的值互换。主函数中调用该函数将 a 作为实参传递给形参 c,故执行该函数后 a 的第一个元素和第二个元素的值将交换。分别为 5 和 2。函数 sw
40、ap2()是值传递的,所以该函数执行后对数组 b 将没有任何改变,此时该数组的第一个和第二个元素依然为 3 和 5,因此最后的输出为 5、3、3 和 5。15.下面程序的功能是输出以下形式的金字塔图案: * * * * * * * * * * * * * * * * main() int i,j; for(i=1;i=4;i+) ror(j=1;j4-i;j+)printf(“); for(j=1;j_;j+)printf(“*“); printf(“/n“); 在下划线处应填入的是(分数:1.00)A.iB.2*i-1 C.2*i+1D.i+2解析:解析通过观察可知图形共 4 行,主函数中通
41、过一个 for 循环四次,输出 4 行。第一行输出 3 个空格和 1 个“*”,第 2 行输出 2 个空格和 3 个“*”,第 3 行输出 3 个空格和 5 个“*”,第四行输出 7 个“*”,主函数中通过第二个循环控制每行的输出空格数,第三个 for 循环控制输出的“*”的个数,总结规律:每行输出的“*”的个数,总比前一行的多 2 个,且第一行的个数为 1,可以断定每行输出的“*”的个数组成了一个公差为 2 的等差数列,所以每行输出“*”的个数即该等差数列的通项,故该空格处应该填写 2*i-1。16.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是:(分数:1.00)A.char
42、s10=“abcdefg“;B.char t=“abcdefg“,*s=t;C.char s10;s=“abcdefg“; D.char s10;strcpy(s,“abcdefg“);解析:解析选项 A 中定义了一个字符型数组并赋初值;选项 B 定义了一个字符型数组 t 并初始化,然后定义了一个指针变量 s 并让它指向 t;选项 C 先定义了一个长度为 10 的字符型数组,然后再给它赋值,这时应该分别给数组中的每个元素赋值;选项 D 中先定义了一个长度为 10 的字符型数组 s,然后通过字符串拷贝函数将字符串“abcdefs”赋值给它。17.设有定义:int a,*pa=,则以下选项中,正确
43、的赋值语句是(分数:1.00)A.p=1;B.*q=2;C.q=p;D.*p=5; 解析:解析指针变量定义和赋值语句的基本应用,在使用一个指针变量之前,先要用声明语句对其进行定义,在定义了一个指针变量之后,系统就为这个指针变量分配了一个存储单元,用它来存放地址。在 C语言中有两个有关指针的运算符:B.a=0,b=0,c=0;C.if(a0);D.if(b=0)m=1;n=2; 解析:解析C 语言是一种表达式语言,所有的操作运算都通过表达式来实现,由表达式组成的语句称为表达式语句,它由一个表达式后接一个分号组成。本题中,选项 D 中 if(b=0)m=1;n=2;是两个表达式语句。23.有以下程
44、序 void 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); pfintf(“%d,%d,%d/n“,x,y,2); 执行后输出结果是(分数:1.00)A.1,2,3B.3,1,2C.1,3,2 D.2,3,1解析:解析C 语言规定 else 总是和离它最近的 if 语句配对。分析可以知道,函数 f()作用是让形参 v和形参 w 的值交换。在主函数中首先定义了三个变量 x、y 和 z。 然后再执行下面的 if-else 语句。由程序
45、可以看出第一个 else 和第一个 if 搭配,第二个 else 和第二个 if 搭配。由于调用函数时是进行值传递的。即将实参 x,y,z 传给形参 v 和 w,以后形参和实参再无联系,故通过 if 语句调用 f()函数后,x、y 和 x 的值并没有改变。故最后输出的 x、y 和 z 的值为 1、3 和 2。24.有以下程序段 int a 10=1,2,3,4,5,6,7,8,9,10,*P= b=p5; b 中的值是(分数:1.00)A.5B.6C.8D.9 解析:解析C 语言中规定:一个数组名代表它的起始地址。本题中,定义了一个长度为 10 的数组 a 并赋初值,数组名 a 就是数组的起始
46、地址,由于数组下标是从 0 开始,因此 a0的地址也是 a 的值,a1的地址可以用 a+1 表示,也就是说 a+1 指向数组 a 中下标为 1 的元素,同样 a+i 是 ai的地址,*p= main() int aa10=1,2,3,4,5,6,7,8,9,10,i; for(i=2;i=0;i-)sum(537,*p5,*t; int i,j; for(i=0;i5;i+)pi=i4;i+) for(j=i+1;j5;j+) if(pi-Scorepj-Score) t=pi;pi=pj;pi=t; printf(“%d%d/n“,s1.Score,p1-Score); 执行后输出结果是(分数:1.00)A.550550B.680680C.580550 D.580680解析:解析本题中首先定