c语言程序设计(第1部分)选择_第1页
c语言程序设计(第1部分)选择_第2页
c语言程序设计(第1部分)选择_第3页
c语言程序设计(第1部分)选择_第4页
c语言程序设计(第1部分)选择_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、选择题(第一部分)1、有以下程序void fun(int a,int i,int j) int t; if(i<j) t=ai;ai=aj;aj=t; i+; j-; fun(a,i,j); main() int x=2,6,1,8,i; fun(x,0,3); for(i=0;i<4;i+) printf("%2d",xi); printf("n");程序运行后的输出结果是_。A:1 2 6 8B:8 6 2 1C:8 1 6 2D:8 6 1 2答案:C评析: 本题考的是函数参数的传递。 当用数组名作函数参数时,数组名代表数组的首地址。f

2、un(x,0,3);是将数组名x作为实参,把数组x的首地址传送给形参(指针a),这样数组x与形参指针a共占同一段内存单元,所以在调用函数期间,如果改变了形参数组x的值,也就改变了实参指针a的值。 另外此题还考了个函数自身的调用,下面是调用fun()函数的运行过程: a=x,i=0,j=3,判断i<j,交换ai,aj,此时a0到a3里面的数分别为8,6,1,2,也即是 x0到x3中的数值,因为它们共用存储单元;i+; j-后继续调用fun(),此时i,j分别为1,2,交换a1,a2的值后a所指向的存储单元中的数据为8,1,6,2;继续i+; j-后判断i<j不成立,返回主函数,输出x

3、i即指针a所指向的数据8,1,6,2。 故本题答案为C。2、有以下说明和定义语句struct student int age; char num8;struct student stu3=20,"200401",21,"200402",19,"200403"struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是_。A:(p+)->numB:p->numC:(*p).numD:stu3.age答案:D评析: 本题考的是结构体变量的引用。 引用形式有以下三种:结构体变量. 成员名;(*p).成

4、员名;p成员名。所以A,B,C答案都是正确的。 故本题答案为D。3、有如下程序#include <stdio.h>main()FILE *fp1; fp1=fopen("f1.txt","w"); fprintf(fp1,"abc"); fclose(fp1);若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为_。A:goodabcB:abcdC:abcD:abcgood答案:C评析: 本题考的是文件类型指针。 fp1=fopen("f1.txt","w&

5、quot;)表示打开名为f1.txt 的文件,使用文件方式为向该文件写数据,如果原来不存在该文件,则在打开时新建一个以指定的名字命名的文件;如果原来已存在一个以该文件命名的文件,则在打开时将该文件删去,然后重新建立一个新文件,所以本题中f1.txt中原有内容good被删去了,fopen函数带回指向fp1文件的指针并赋给fp1。fprintf(fp1,"abc")的作用是将字符串abc输出到fp1指向的文件上。 故本题答案为C。4、以下不合法的用户标识符是_。A:j2_KEYB:DoubleC:4dD:_8_答案:C评析: 本题考查的是标识符。 C语言规定标识符只能由字母、数

6、字和下划线三种符号组成,而且第一个字符必须是字母或下划线。大写字母和小写字母被认为是两个不同的字符,用户在定义标识符时应做到"见名知意",且不允许使用关键字作标识符。 故本题答案为C。5、以下不合法的数值常量是_。A:011B:le1C:8.0E0.5D:0xabcd答案:C评析: 本题考查的是数值常量的定义。 数值常量区分为不同的类型,如12、0、-3为整型常量,4.6、-1.23为实型常量,'a','A'为字符常量。实数常量有两种表示形式:十进制小数形式和指数形式。用指数形式表示必须注意字母e(或E)之前必须有数字,且e(或E)后面的指数

7、必须为整数。如:e3、7e3.5、8.0E0.5都是不合法的。 故本题答案为C。6、以下能正确定义字符串的语句是_。A:char str='064'B:char str="x43"C:char str=''D:char str="0"答案:D评析: 本题考查的是字符串的定义。 C语言中,字符串是用一对双引号括起来的字符序列,并用字符型数组来存放,故选项A、C不属于字符串, 选项B定义的是一个字符变量str,却用来存放字符串,显然也不正确,所以选项D正确。 故本题答案为D。7、若要求从键盘读入含有空格字符的字符串,应该使用函

8、数_。A:getc()B:gets()C:getchar()D:scanf()答案:B评析: 本题考查的是字符串的读写。 函数getchar( )的作用是从终端(或系统隐含指定的输入设备)输入一个字符,且只能接受一个字符(回车符也算是一个字符),所以getchar()不能用来读入字符串。scanf()函数要求按一定的格式来输入,若同时输入多个字符串,则以空格或回车分割,所以空格不能被识别为一个字符,也就无法读入空格字符。函数gets()的作用是从终端输入一个字符串(包括空格)到字符数组,直到遇到换行符为止,所以可以用来键盘读入空格字符。 故本题答案为B。8、以下四个程序中,完全正确的是_。A:

9、#include <stdio.h>main(); /*programming*/ printf("programming!n");B:#include<stdio.h>main() /*/programming/*/ printf("programming!n");C:#include <stdio.h>main() /*programming*/ printf("programming!n"); D:include<stdio.h> main() /*/*programming*/*

10、/ printf("programming!n");答案:C评析: 本题考查的是C语言中注释的格式。 C语言中注释用"/*"和"*/"括起来,它可以出现在程序中任何合适的地方。选项A 中"main();"是一个函数声明语句,下面的大括号及其内容作为一个语句块,应放在程序的大括号中,故选取项A错误;选项B中的注释语句不正确,因为程序在编译时认别到两次"/*"作为注释的开始,但未识别到"*/"作为注释的结束,故选项B错误;选项D的"include"前缺少&qu

11、ot;#",故选项D错误。 故本题答案为C。9、若各选项中所有变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是_。A:main() x=fun(2,10); float fun(int a,int b) B:float fun(int a,int b)main() x=fun(i,j); C:float fun(int int);main() x=fun(2,10); float fun(int a,int b) D:main() float fun(int i, int j); x=fun(i,j); float fun(int a,int b

12、) 答案:A评析: 本题考查的是函数的调用。 C语言程序是由一个主函数和若干个其他函数组成的,主函数的函数名为:main(),main()函数在程序中的位置是任意的。C语言程序是从main()函数开始执行,当程序中定义了多个函数时,通常情况下是先定义后调用,若被调函数定义在主调函数之后,则必须先声明后调用。在选项A中,先执行main()函数,此时对fun()函数进行调用,由于fun函数在此调用之前无定义也无声明,故无法正常识别调用,所以选项A的程序错误。 故本题答案为A。10、在以下给出的表达式中,与while(E)中的(E)不等价的表达式是_。 A:(!E=0) B:(E>0|E<

13、;0) C:(E=0)D:(E!=0)答案:C评析: 本题考查的是while条件表达式的判断。 while(表达式)语句用来实现"当型"循环结构,当表达式为非0值时,执行while语句中的内嵌语句。选项A非零即为1,选项B与选项D的结果也为1,只有选项C为0。 故本题答案为C。11、已定义以下函数int fun(int *p)return *p;fun函数返回值是_。A:不确定的值B:一个整数C:形参p中存放的值D:形参p的地址值答案:B评析: 本题考查的是函数的返回值。 函数值的类型应当是在定义函数时指定的。在定义函数时对函数值说明的类型一般和return语句中的表达式类

14、型一致,即函数类型决定返回值的类型。此题中定义函数类型为int型,故函数返回值也为整型。 故本题答案为B。12、若有说明语句:double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是_。A:*p=&a; scanf("%lf",p);B:*p=&a; scanf("%f",p);C:p=&a; scanf("%lf",*p);D:p=&a; scanf("%lf",p);答案:D评析: 本题考查的是数据输入。 p=&a的意思是指将a的地址赋给指针变量p。*

15、p=&a是错误的书写方式,其正确的表达形式为"int *p=&a;",它等效于:int *p; p=&a;, scanf()语句的格式是"scanf(格式控制,地址列表)", 在选项D中,"p"本身就代表着一个地址。 故本题答案为D。13、现有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中连续的三个结点。struct node char data; struct node *next;*p,*q,*r;现要将q和r 所指结点交换前后位置,同时要保持链表的连续,以下不能完成此操作的语句是_。

16、 A:q->next=r->next;p->next=r;r->next=q; B:p->next=r;q->next=->next;r->next=q; C:q->next=r->next;r->next=q;p->next=r; D:r->next=q;p->next=r;q->next=r->next;答案:D评析: 本题考查的是链表。 选项D中首先将q赋给r->next,也就是将结点q的地址存放在结点r的指针域中;接着将r赋给p->next,也就是将结点r的地址存放在结点p的指针

17、域中,此时完成了q和r所指结点的交换。q->next=r->next的目的是想将q的指针域指向下一个结点的数据地址,但由于一开始执行了r->next=q,即已将r的指针域中存放了q结点的地址,所以再做操作"q->next=r->next"就相当于将q指向了其本身,也就是和下一个结点断开了,所以选项D操作错误。 故本题答案为D。14、有以下程序段struct stint x;int *y;*pt; int a=1,2,b=3,4; struct st c2=10,a,20,b; pt=c;以下选项中表达式的值为11的是_。 A:*pt->y

18、 B:pt->x C:+pt->x D:(pt+)->x答案:C评析: 本题考查的是结构体类型的指针。 题目中定义了一个st结构体类型,然后定义了st型的结构体指针变量*pt及结构体数组c,并对结构体数组进行了初始化,且将结构体指针变量pt指向了数组c,则pt->x的值为10,则+pt->x的值为11(注:"->"运算符的优先级高于"+"),故选项C正确。 故本题答案为C。15、设有以下语句int a=1,b=2,c;c=a(b<<2);执行后,c的值为_。 A:6 B:7 C:8 D:9答案:D评析: 本

19、题考查的是位运算。 有括号的先算括号内的数据,所以先对b进行左移运算:b换算成二进制0000 0010,左移后变为0000 1000,然后再与a进行异或运算(参与运算的两个对应位相同,则为0,相异则为1)结果为0000 1001,换算成十进制数结果为9。对于左移运算也可直接用此规则:左移1位相当于该数乘以2,左移2位相当于该数乘以22=4,依此类推。 故本题答案为D。16、#include <stdio.h>main() char c1,c2,c3,c4,c5,c6; scanf("%c%c%c%c",&c1,&c2,&c3,&c

20、4); c5=getchar(); c6=getchar(); putchar(c1); putchar(c2); printf("%c%cn",c5,c6);程序运行后,若从键盘输入(从第1列开始)123<回车>45678<回车>则输出结果是_。 A:1267 B:1256 C:1278 D:1245答案:D评析: 本题考查的是字符输入输出函数的应用。 getchar()函数只能接收一个字符,即使输入多个字符后再按回车还是只能将第一个字符读入。scanf()和printf()是按格式输入输出的函数,当输入123<回车>,scanf()分

21、别读入字符"1"、"2"、"3"、"<回车>";接下来输入45678<回车>,则getchar()读入字符"4"赋值给c5,字符"5" 赋值给c6,所以输出语句输出结果为1245。 故本题答案为D。17、有以下程序main() int i,j,x=0; for(i=0;i<2;i+) x+; for(j=0;j<=3;j+) if(j%2) continue; x+; x+; printf("x=%dn",x);程序执行

22、后的输出结果是_。 A:x=4 B:x=8 C:x=6 D:x=12答案:B评析: 本题考查的是循环嵌套和continue语句的应用。 continue语句的作用是用于结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。当外层循环for(i=0;i<2;i+)满足条件的情况下执行循环体,循环体中包含了嵌套的内层循环for(j=0;j<=3,j+),在内层循环中,当if条件语句不成立时执行continue语句,其作用是跳过"x+;",继续执行内层循环的for语句,直到内层循环条件不满足,则执行跳出内层循环,执行外层循环的"x

23、+;"语句,然后再对i进行判断,直到外层循环条件不满足,跳出外层循环,执行输出语句,结果为8。 故本题答案为B。18、有以下程序int fun1(double a)return a*=a;int fun2(double x,double y) double a=0,b=0; a=fun1(x);b=fun1(y); return(int)(a+b);main()double w;w=fun2(1.1,2.0);程序执行后变量w中的值是_。 A:5.21 B:5 C:5.0 D:0.0答案:C评析: 本题考查的是数值类型的定义与强制转换。 本题在进行调用函数fun2()时,又对函数fu

24、n1()进行了调用,由于函数fun1()定义为整型,所以第一次调用fun1()时返回的值为1,然后再将1赋值给a,此时由于a为double型,则系统自动类型转换,将1转换成了1.000000赋值给了变量a,以此类推,得b的值为4.000000,然后通过"return(int)(a+b);"将a+b的值强制转换为int型5返回给主函数,此时又由w的类型为double,所以返回的整型值5又被转换为double型。故输出结果为5.0。 故本题答案为C。19、有以下程序main() int i,t3=9,8,7,6,5,4,3,2,1; for(i=0;i<3;i+) pri

25、ntf("%d ",t2-ii);程序执行后的输出结果是_。 A:7 5 3 B:3 5 7 C:3 6 9 D:7 5 1答案:B评析: 本题考查的是二维数组的应用。 将初始值放在一对大括号内,按数组元素排列的顺序对各元素赋值,二维数组中行下标可以省略,但列下标必须要指定,由此题可以看出数组t是一个三行三列的二维数组,执行for循环语句t2-ii分别为t20,t11,t02,得出输出结果为3 5 7。 故本题答案为B。20、有以下程序fun(char p10) int n=0,i; for(i=0;i<7;i+) if(pi0= 'T')n+; re

26、turn n;main() char str10= "Mon","Tue","Wed","Thu","Fri","Sat","Sun" printf("%dn",fun(str);程序执行后的输出结果是_。 A:1 B:2 C:3 D:0答案:B评析: 本题考查的是数组名作为函数参数。 当数组名作为函数参数时,是将实参数组的起始地址传送给形参数组,作为形参数组的首地址,当形参发生变化主函数中的实参数组也发生变化。调用fun()函数执行f

27、or循环语句,n=2,传递给实参其输出值相应的也为2。 故本题答案为B。21、有以下程序void fun1(char *p) char *q; q=p; while(*q!= '0') (*q)+;q+;main() char a="Program",*p; p=&a3;fun1(p); printf("%sn",a);程序执行后的输出结果是_。 A:Prohsbn B:Prphsbn C:Progsbn D:Program答案:A评析: 本题考查的是指向数组的指针作为函数的参数及指针的运算。 如果形参数组中的元素发生变化,实参也

28、将发生相应变化。指针p指向数组的第三位地址(即字符"g"的地址),q=p也就相当于指针q指向数组的第三位地址。表达式(*q)+,首先根据()的优先级得到a3的值"g",再进行加1运算,所以g也就变成了h;表达式q+是将地址加1,也就是指向下一个地址a4。然后再执行while()语句,直到遇到'0'结束循环,返回形参。 故本题答案为A。22、有以下程序void swap(char *x,char *y) char t; t=*x;*x=*y;*y=t;main() char s1="abc",s2="123&q

29、uot; swap(s1,s2); printf("%s,%sn",s1,s2);程序执行后的输出结果是_。 A:123,abc B:abc,123 C:1bc,a23 D:321,cba答案:C评析: 本题考查的是指针变量值的交换。 C语言中,字符串常量在内存中是以字符数组的形式进行存放的,因此字符指针x和y指向的是各字符串的首地址,也就是字符串第一个字符的地址,则*x与*y交换的是字符串的第一个字符,即字符"a"与"1"的交换,而字符串中其它字符保持不变。 故本题答案为C。23、有以下程序int fun(int n) if(n=1

30、) return 1; else return(n+fun(n-1);main() int x; scanf("%d",&x);x=fun(x);printf("%dn",x);执行程序时,给变量x输入10,程序的输出结果是_。 A:55 B:54 C:65 D:45答案:A评析: 本题考查的是函数的递归调用。 在调用一个函数的过程中又出现直接或间接地调用该函数本身。函数调用中因为实参x=10不符合条件语句n=1,所以执行else语句,调用fun函数。fun函数共被调用8次,即fun(9)、fun(8)、fun(7)、fun(6)、fun(5)、

31、fun(4) 、fun(3) 、fun(2),n=10+9+8+7+6+5+4+3+2+1=55, 所以x=55。 故本题答案为A。24、有以下程序main() union char ch2; int d; s; s.d=0x4321; printf("%x,%xn",s.ch0,s.ch1);在16位编译系统上,程序执行后的输出结果是_。 A:21,43 B:43,21 C:43,00 D:21,00答案:A评析: 本题考查的是共用体。 int类型变量和字符数组ch共用两个字节的相同的存储单元,通常ch0位于低字节,ch1位于高字节,所以s.ch0=21,s.ch1=43

32、。 故本题答案为A。25、有以下程序main() char p5="3697","2548" int i,j; long num=0; for(i=0;i<2;i+) j=0; while(pij!= '0') if(pij- '0')%2) num=10*num+pij- '0' j+=2; printf("%dn",num);程序执行后的输出结果上_。 A:35 B:37 C:39 D:3975答案:C评析: 本题考查的是数组。 题目中定义的数组"p4"相当

33、于一个两行四列的数组。执行for()语句i=0,j=0,pij=p00=3,满足while循环条件,执行循环体中的if语句得num=3,j=2,此时pij=p02=9,满足循环条件,执行while循环体得num=39,j=4,判断while条件且不符合并退出while循环;再次执行for()语句i=1,j=0,pij=p10=2,满足while条件,执行循环体中的if语句,但不符合if条件,所以num不进行运算, j进行加2运算j=2,此时pij=p12=4,if条件还是为假,num不进行运算,j进行加2运算j=4,再执行while语句,条件不符合退出循环。所以结果为39。 故本题答案为C。2

34、6、执行以下程序后,test.txt文件的内容是(若文件能正常打开)_。#include <stdio.h>main() FILE *fp; char *s1="Fortran",*s2="Basic" if(fp=fopen("test.txt","wb")=NULL) printf("Can't open test.txt filen"); exit(1); fwrite(s1,7,1,fp); /*把从地址s1开始的7个字符写到fp所指文件中*/ fseek(fp, 0

35、L,SEEK_SET); /*文件位置指针移到文件开头*/ fwrite(s2,5,1,fp); fclose(fp); A:Basican B:BasicFortran C:Basic D:FortranBasic答案:A评析: 本题考查的是文件的读写。 定义一个FILE类型结构体的指针fp,以"只写"方式打开一个test.txt文件,并向文件输入指针变量s1指向的7个字符,则文件内的内容为"Fortran",执行fseek函数文件位置指针移到文件的开头,再次向文件输入指针变量s2指向的5个字符,虽然此时的文件前5个字符字符已被"Forta&

36、quot;所占用,但当向文件输入"Basic"这五个字符时,系统会覆盖原有的内容"Forta",所以最后test.txt里的内容为:Basican。 故本题答案为A。27、以下叙述中错误的是_。 A:可以通过typedef增加新的类型 B:可以用typedef将已存在的类型用新的名字来代表 C:用typedef定义新的类型名后,原有类型名仍有效 D:用typedef可以为各种类型起别名,但不能为变量起别名答案:A评析: 本题考查的是C语言程序的基本组成。 在C语言中,注释是用于协助读者更好地理解程序,它不会被系统转换成二进制,所以非执行语句是不会被转换成

37、二进制的机器指令。 故本题答案为D。28、设有以下定义和语句char str20= "Program",*p;p=str;则以下叙述中正确的是_。 A:*P与str0中的值相等 B:str与p的类型完全相同 C:str数组长度和p所指向的字符串长度相等 D:数组str中存放的内容和指针变量p中存放的内容相同答案:A评析: 本题考查的是指针变量对数组的引用。 选项A正确,原因是语句p=str表示指针变量p指向数组str20的首地址也就是str0。所以*p与str0中的值相等。 29、以下叙述中正确的是_。 A:预处理命令行必须位于C源程序的起始位置 B:在C语言中,预处理命令

38、行都以"#"开头 C:每个C程序必须在开头包含预处理命令行:#include<stdio.h> D:C语言的预处理不能实现宏定义和条件编译的功能答案:B评析: 本题考查的是预处理命令。 选项B正确,原因是这部分语句与C程序其他部分的语句是有区别的,所以在每个预处理语句之前都有一个"#"符号以示区别。C提供三种预处理语句:(1)宏替换,(2)文件包含,(3)条件编译。如果一个文件中要引用另外一个文件时才需要在开头包含预处理命令行:#include<stdio.h>。 故本题答案为B。30、下列叙述错误的是_。 A:一个C语言程序只能

39、实现一种算法 B:C程序可以由多个程序文件组成 C:C程序可以由一个或多个函数组成 D:一个C函数可以单独作为一个C程序文件存在答案:A评析: 本题考查的是C程序的构成。 一个C语言程序可以实现多种算法。一个C程序可以由一个或多个源程序文件组成,一个源程序文件由一个或多个函数组成,构成C语言程序的基本单位是函数,函数也是C程序中模块化程序设计的基础,C函数可分为标准库函数和用户定义函数两类。 故本题答案为A。31、下列叙述中正确的是_。 A:每一个C程序文件中都必须要有一个main()函数 B:在C程序中main()函数的位置是固定的 C:C程序中所有函数之间都可以相互调用,与函数所在位置无关

40、 D:在C程序的函数中不能定义另一个函数答案:D评析: 本题考查的是函数的定义方法。 每一个C程序由多个C程序文件组成,而每个C程序都必须有一个main()函数,故每一个C程序文件中都必须有一个main()函数的说法是错误的。在C程序中所有函数都是平行的,即在定义函数时是相互独立的,一个函数并不能从属于另一个函数,即函数不能嵌套定义,函数间可以相互调用,但不能调用main()函数,main()函数的位置也不是固定的。 故本题答案为D。32、下列定义变量的语句中错误的是_。 A:int _int; B:double int_; C:char For; D:float US$;答案:D评析: 本题

41、考查的是C数据类型及其定义。 C语言中用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符,C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。选项D中含有"$",故不符合标识符的定义。 故本题答案为D。33、以下关于逻辑运算符两侧运算对象的叙述中正确的是_。 A:只能是整数0或1 B:只能是整数0或非0整数 C:可以是结构体类型的数据 D:可以是任意合法的表达式答案:D评析: 本题考查的是C语言运算符的基本应用。 逻辑运算符两侧的运算对象不但可以是0和1,也可以是任意基本类型或指针类型的数据,还可以是任意合法

42、表达式。 故本题答案为D。 34、有以下程序 main() int x, y, z; x=y=1; z=x+,y+,+y; printf("%d,%d,%dn",x, y, z); 程序运行后的输出结果是_。 A:2,3,3 B:2,3,2 C:2,3,1 D:2,2,1答案:C评析: 本题考查的是C语言的运算规则。 x+:表示在使用x之后,使x的值加1;y+:表示在使用y之后,使y的值加1;+y:表示在使用y之前,使y的值加1。此题中执行z=x+,是将x的值先赋给z,所以z=1,接下来x自行加1,其结果为2;执行y+后,y=2,执行+y后,y=3。 故本题答案为C。35、

43、在嵌套使用if语句时,C语言规定else总是_。 A:和之前与其具有相同缩进位置的if配对 B:和之前与其最近的if配对 C:和之前与其最近的且不带else的if配对 D:和之前的第一个if配对答案:C评析: 本题考查的是IF语句的使用规则。 在嵌套使用if语句时,C语言规定else总是和之前与其最近的且不带else的if配对。 故本题答案为C。 36、有以下程序main(int argc,char *argv)int n=0,i; for(i=1;i<argc;i+) n=n*10+*argvi-'0' printf("%dn",n);编译连接后生成

44、可执行文件tt.exe。若运行时输入以下命令行tt 12 345 678程序运行后的输出结果是_。 A:12 B:12345 C:12345678 D:136答案:D评析:本题考查的是带参数的main()函数。main()函数可以带参数,并且参数只能有两个,第1个参数(argc)类型为整型,用来记下命令行的参数个数,第2个参数(argv)为一个字符型指针数组,其各个元素用来记下命令行各参数字符串的首地址。题目中argc的值为4,循环中依次求出argv1、argv2、argv3指向的字符串("12"、"345"、"678")首字符。其中

45、*argvi用于指向求出的字符串的首地址的值,即分别为:1、3、6;n=n*10+*argvi-'0'语句用于连接各字符串首字符,所以结果为136。 故本题答案选D。37、有以下程序int a=4;int f(int n) int t=0; static int a=5; if(n%2) int a=6; t+=a+; else int a=7; t+=a+; return t+a+;main() int s=a,i=0; for(;i<2;i+) s+=f(i); printf("%dn",s);程序运行后的输出结果是_。 A:24 B:28 C:3

46、2 D:36答案:B评析:本题考查的是函数调用和变量的作用域。在主函数main()中定义了两个变量s和i,同时给s赋初值a=4,i赋初值0。当i=0时,执行"s+=f(i);"语句,调用f()函数并将i的初值0传递给形参n。首先执行if语句中的条件:n%3,条件为假,执行else下的语句,a=7,t=7+0=7,使用return返回t,t=7+(a+)=7+5=12,此时a运算完后自行加1为6;返回主函数中,s=4+12=16。当i=1时,执行"s+=f(i);"语句,调用f()函数并将i的初值1传递给形参n。首先执行if语句中的条件: n%3,条件为真

47、,执行if下的语句,t=0,a=6,t=0+6=6,使用return返回t,t=6+6=12,返回主函数中,s=16+12=28。最后的输出结果为28。 故本题答案选B。38、有一个名为init.txt的文件,内容如下:#define HDY(A,B) A/B#define PRINT(Y) printf("y=%dn",Y)有以下程序#include "init.txt"main() int a=1,b=2,c=3,d=4,k; k=HDY(a+c,b+d); PRINT(k);下面针对该程序的叙述正确的是_。 A:编译出错 B:运行出错 C:运行结果

48、为 y=0 D:运行结果为 y=6答案:D评析:本题考查的是带参数的宏定义。宏替换后,表达式k=HDY(a+c,b+d)即变为k=a+c/b+d=1+3/2+4=6。故本题答案选D。39、有以下程序main() char ch="uvwxyz",*pc; pc=ch; printf("%cn",*(pc+5);程序运行后的输出结果是_。 A:z B:0 C:元素ch5的地址 D:字符y的地址答案:A评析:本题考查的是指向数组的指针。本题中定义了一个字符串数组和指针,并将指针pc指向该数组的首地址,执行输出语句"printf("%cn&

49、quot;,*(pc+5);"。语句中的*(pc+5)指的就是pc5的值,所以最后输出的结果为z。 故本题答案选A。40、有以下程序struct Sint n; int a20;void f(struct S *p) int i,j,t; for(i=0;i<p->n-1;i+) for(j=i+1;j<p->n;j+) if(p->ai>p->aj) t=p->ai; p->ai=p->aj; p->aj=t;main() int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f(&a

50、mp;s); for(i=0;i<s.n;i+)printf("%d,",s.ai);程序运行后的输出结果是_。 A:1,2,3,4,5,6,7,8,9,10, B:10,9,8,7,6,5,4,3,2,1, C:2,3,1,6,8,7,5,4,10,9, D:10,9,8,7,6,1,2,3,4,5,答案:A评析:本题考查的是结构体成员的引用。在主函数main()中定义了一个整型变量i和一个结构体变量s。f()函数中,定义了一个结构体类型的指针p,外层循环变量i表示数组的第i个元素,内层循环变量j表示数组的第i+1个元素,调用f()函数,通过指针变量p来引用结构体成

51、员。执行if语句,当p->ai>p->aj时进行互换,其作用就是从小到大进行排序,最后将排序后的元素输出:1,2,3,4,5,6,7,8,9,10,。 故本题答案选A。41、有以下程序struct Sint n; int a20;void f(int *a, int n) int i; for(i=0;i<n-1;i+) ai+=i;main() int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f(s.a,s.n); for(i=0;i<s.n;i+) printf("%d,",s.ai);程序运行后的输出

52、结果是_。 A:2,4,3,9,12,12,11,11,18,9, B:3,4,2,7,9,8,6,5,11,10, C:2,3,1,6,8,7,5,4,10,9, D:1,2,3,6,8,7,5,4,10,9,答案:A评析:本题考查的是结构体成员的引用。在主函数main()中定义了一个整型变量i和一个结构体变量s。f()函数中,通过指针a来引用数组中的元素;通过for循环语句将数组中除最后一个元素外的其它元素(由条件i<n-1决定的)分别加上由0开始的递增数据(即0、1、28),所以最后的输出结果为2,4,3,9,12,12,11,11,18,9,。 故本题答案选A。42、有以下程序段

53、typedef struct nodeint data; struct node *next; *NODE;NODE p; 以下叙述中正确的是_。 A:p是指向struct node结构变量的指针的指针 B:NODE p;语句出错 C:p是指向struct node结构变量的指针 D:p是struct node结构变量答案:C评析:本题考查的是对用户自定义类型的理解。本题中定义了一个指针类型的"用户类型名" NODE,通过"用户类型名"可以定义该类型的结构体变量,所以选项C的叙述是正确的。 故本题答案选C。43、有以下程序main() unsigned

54、char a=2,b=4,c=5,d; d=a|b; d&=c; printf("%dn",d);程序运行后的输出结果是_。 A:3 B:4 C:5 D:6答案:B评析: 本题考查的是逻辑运算。 本题中主要是进行位的逻辑运算。将a的值转换为二进制为:0000 0010,b的值转换为二进制为:0000 0100,将a、b进行按位或运算(参加计算的两个位只要有一个为1,那么运算结果为1),因此此时d的二进制为:0000 0110,c的值转换为二进制为:0000 0101,接下来将d和c进行按位与运算(参加计算的两个位都为1,则结果为1,否则为0),结果为:0000 01

55、00,转换成十进制数结果为4。 故本题答案选B。44、有以下程序_。#include <stdio.h>main() FILE *fp; int k,n,a6=1,2,3,4,5,6; fp=fopen("d2.dat","w"); fprintf(fp,"%d%d%dn",a0,a1,a2); fprintf(fp,"%d%d%dn",a3,a4,a5); fclose(fp); fp=fopen("d2.dat","r"); fscanf(fp,"%d%d",&k,&n); printf("%d %dn",k,n); close(fp);程序运行后的输出结果是_。 A:1 2 B:1 4 C:123 4 D:123 456答案:D评析:本题考查的是文件的综合应用。本题首先以创建方式打开文件"d2.d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论