telesky
2005年考前密卷——选择261-280题 | |
(261)已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-l&&y+z/2的值是_______。 A)6 B)0 C)2 D)l (261)D 知识点:运算符的优先级 评 析:在本题中,运算符的优先级分别为:!>/>+,->&&,即:!(3+4)+5-1&&4+5/2=O+5-1&&4+2=4&&6=1。 (262)以下选项中,与l(=n++完全等价的表达式是_______。 A)k=n,n=n+1 B)n=n+1,k=n C)k=++n D)k+=n+1 (262)A 知识点:自增及赋值运算 评 析:n++是自增运算,是先使用,然后再使n加l,分开来写即为:k=n,n=n+l。 (263)以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,程序如下: main() { int n,k; float score,sum,ave; sum=O.O; for(n=l;n<=10;n++) { for(k=1;k<=4;k++) {scanf("%f",&score); sum+=score; } ave=sum/4.0; printf("NO%d:%f\n",n,ave); } } 上述程序运行后结果不正确,调试中发现有一条语句在程序中的位置不正确。这条语 句是_______。 A)sum=O.O; B)sum+=score; C)ave=sum/4.0; D)printf("NO%d:%f\n",n,ave); (263)A 知识点:for循环语句的使用 评 析:题目中要求每位学生的平均分数,首先要求每位学生的总分,也就是程序中的sum,所以sum应在第一个for循环体内赋初值,如果在循环体外赋初值就会得到所有学生的分数总和,不合题意。 (264)有以下程序 main() { int a=15,b=21,m=O; switch(a%3) { case 0:m++;break; case l:m++: switch(b%2) { default:m++; case 0:m++;break; } } printf("%d\n",m); } 程序运行后的输出结果是_______。 A)l B)2 C)3 D)4 (264)A 知识点:switch语句 评 析:因为a%3是个常数,所以只执行一次就跳出switch结构。即只执行m++,此时m为1。 (265)若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是_______。 A)p=q; B)*p=*q; C)n=*q; D)p=n; (265)D 知识点:指针变量的引用 评 析:指针变量不同于整型变量和其他类型的变量,它是用来存放地址(指针)的,不能将一个整型变量(或任何其他非地址类型的数据)赋给一个指针变量,这样的赋值是不合法的。本题中的答案D就属于这种情况,所以p=n;是非法的赋值语句。 (266)有以下程序 Void fun(char*c,int d) {*c=*c+l;d=d+l; printf("%c,%c,",*c,d); } main() { char a=‘A’,b=‘a’; fun(&b,a); printf("%c,%c\n",a,b); } 程序运行后的输出结果是_______。 A)B,a,B,a B)a,B,a,B C)A,b,A,b D)b,B,A,a (266)D 知识点:函数的调用 评 析:将a,b代入函数得*&b=*&b+1=a+l=b,所以打印出第一个字母b: a=a+1=A+1=B,打印出第二个字符B: a:=‘A’,输出字母A; b=‘a’,输出字母a。 (267)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。 Void sort(int a[],int n) { int i,j,t; for(i=0;i<n-l;i++) for(j=i+1;j<n;j++) if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;} } main() {int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5); for(i=0;i<10;i++) printf("%d,",aa[i]); printf("\n"); } 程序运行后的输出结果是_______。 A)1,2,3,4,5,6,7,8,9,10, B)10,9,8,7,6,5,4,3,2,1, C)l,2,3,8,7,6,5,4,9,10, D)1,2,10,9,8,7,6,5,4,3, (267)C 知识点:对数组的操作 评 析:本题并不是对数组的所有元素进行排序,而是对从a[3]开始往后的5个元素进行排序。 (268)有以下程序 main() {char a[]={‘a’,‘b’,‘c’,‘d’‘e’,‘f’,‘g’,‘h’,‘\0’};int i,j; i=sizeof(a);j=strlen(a); printf("%d,%d\n",i,j); } 程序运行后的输出结果是________。 A)9,9 B)8,9 C)1,8 D)9,8 (268)D 知识点:计算字符数组与字符串的长度 评 析:sizeof()函数是计算字符数组的长度,因为‘\0’也是一个字符,要计算在内。在字符数组末尾加上‘\O’作为字符串结束标志,strlen()是计算字符串长度的函数,遇到 ‘\O’即认为是字符串结束,不把空字符计入字符串的长度。 (269)以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a[],int n) {int i,t; for(i=0;i<n/2;i++) {t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} } main() {int b[10]={l,2,3,4,5,6,7,8,9,10};int i,s=0; reverse(b,8); for(i=6;i<10;i++)s+=b[i]; printf("%d\n",s); } 程序运行后的输出结果是________。 A)22 B)10 C)34 D)30 (269)A 知识点:对数组的操作 评 析:本题并不是将整个数组中的内容逆置,而是逆置前8个元素。逆置后的数组为:8,7,6,5,4,3,2,l,9,10通过for循环计算b[6]+b[7]+b[8]+b[9]即2+1+9+10=22。 (270)有以下程序 #include<string.h> main() { char*p="abcde\0fghjik\0"; printf("%d\n",strlen(p)); } 程序运行后的输出结果是________。 A)12 B)15 C)6 D)5 (270)D 知识点:计算字符串的长度 评 析:“\0”是字符串标志,当遇到此标志时字符串已结束.所以字符串的长度为5. (271)程序中头文件typel.h的内容是: #define N 5 #define Ml N*3 程序如下: #include"typel.h" #define M2 N*2 main() { int i; i=M1+M2; printf("%d\n",i); } 程序编译后运行的输出结果是________。 A)10 B)20 C)25 D)30 (271)C 知识点:宏定义 评 析:宏定义就是用一个指定的标识符(即名字 )来代表一个字符串,它的一般形式为: #define 标识符 字符串 这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符(名字)称为 ”宏名”宏名一般习惯用大写字母表示,以与变量名相区别。使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量。如本题用宏名M1代替字符串N*3; M2代替字符串N*2。 i=M1+M2=N*3+N*2=5*3+5*2=25。 (272)以下叙述中错误的是_______。 A)二进制文件打开后可以先读文件的末尾,而顺序文件不可以 B)在程序结束时,应当用fclose函数关闭已打开的文件 c)利用fread函数从二进制文件中读数据,可以用数组名给数组中所有元素读入数 据 D)不可以用FILE定义指向二进制文件的文件指针 (272)D 知识点:对文件的操作 评 析:每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息,这些信息是保存在一个名为FILE的结构体类型的结构体变量中的。而文件又分为ASCII文件和二进制文件,所以,可以用FILE定义指向二进制文件的文件指针。 (273)有以下程序 #include<string.h> main(int argc,char*argv[]) {int i,len=O; for(i=1;i<argc;i++)len+=strlen(argv[i]); printf("%d\n",len); } 程序编译连接后生成的可执行文件是exl.exe,若运行时输入带参数的命令行是: exl abcd efg 10/ 则运行的结果是_______。 A)22 B)17 C)12 D)9 (273)D 知识点:指针数组作main函数的形参 评 析:本题主函数带有两个参数,一个int型变量argc,另一个是char型的一维一级指针数组argv。当主函数被执行时,系统自动将根据命令行的情况,分别给主函数的两个参数赋值。argc用于存放命令行中命令字和参数的总和的个数4,argv用来存放命令行中命令字和所有参数的字符串,并规定argv[0]存放命令字字符串exl,argv[1]用来存放第一个参数的字符串abcd,argv[2]用来存放第二个参数的字符串 efg,argv[3]用来存放第三个参数的字符串10。那么for循环将循环3次分别将argv数组中元素的长度累加到len中,所以答案为9。 (274)有以下程序 int fa(int x) { return x*x;} int fb(int x) {return x*x*x;} int f(int(*f1)(),int(*f2)(),int x) { return f2(X)-fl(x);} main() {int i; i=f(fa,fb,2);printf("%d\n",i); } 程序运行后的输出结果是_______。 A)-4 B)l C)4 D)8 (274)C 知识点:函数的嵌套调用 评 析:f(fa,fb,2)即为fb(2)-fa(2)=2*2*2-2*2=8-4=4。 (275)有以下程序 void ss(char*s,char t) {while(*s) {if(*S==t)*s=t-‘a’+‘A’; S++: } } main() {char strl[100]= "abcddfefdbd",c=‘d’; ss(strl,c);printf("%s\n",strl); } 程序运行后的输出结果是_______。 A)ABCDDEFEDBD B)abcDDfefDbD C)abcAAfefAbA D)Abcddfefdbd (275)B 知识点:将字符串中指定的小写字母转换为大写字母 评 析:在主函数中因为c被赋值为字符’d’,所以函数的功能是将字符串中的小写字母d转换为大写。 (276)设有如下定义: struct sk { int a; floatb: }data; int *p; 若要使p指向data中的a域,正确的赋值语句是_______。 A)p=&a; B)p=data.a; C)p=&data.a; D)*p。data.a (276)C 知识点:指向结构体变量的指针 评 析:将data.a的起始地址赋给指针变量p,也就是使p指向data.a。 (277)有以下程序 #include<stdlib.h> struct NODE { int num;struct NODE *next;} main() {struct NODE *p,*q,*r; p=(struct NODE*)malloc(sizeof(struct NODE)); q=(struct NODE*)malloc(sizeof(struct NODE)); r=(struct NODE*)malloc(sizeof(struct NODE)); p->num=10;q->num=20;r->num=30: p->next=q;q->next=r; printf("%d\n",p->num+q->next->num); } 程序运行后的输出结果是_______。 A)10 B)20 C)30 D)40 (277)D 知识点:用指针处理链表 评 析:p->num即为10,q->next->num即为r->num,为30,所以p->num+q->next->ntun=10+30=40。 (278)若有以下说明和定义 typedef int *INTEGER INTEGER p,*q; 以下叙述正确的是_______。 A)p是int型变量 B)p是基类型为int的指针变量 C)q是基类型为int的指针变量 D)程序中可用INTEGER代替int类型名 (278)B 知识点:用typedef定义类型 评 析:typedef int*INTEGER;(声明INTEGER为整型指针类型); INTEGER p,*q;(定义p,*q为整型指针类型),所以p是基类型为int的指针变量;*q是基类型为int的指针变量;程序中可用*INTEGER代替int类型名。 (279)有以下程序 main() {unsigned char a,b,c; a=0x3;b=a10x8;c=b<<1; printf("%d%d\n",b,c); } 程序运行后的输出结果是_______。 A)-11 12 B)-6 -13 C)12 24 D)ll 22 (279)D 知识点:位运算 评 析:0x3表示16进制表,”|”为按位或,”<<”为按位左移,将a,b转换为二进制数进行位运算,再将结果以十进制打印出来,结果为11 22。 (280)以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。 #include<string.h> void f(char p[][10],int n) {chart[20];int ij; for(i=0;i<n-l;i++) for(j=h1.j<n.j++) if(strcmp(p[i],p[j])<O) {strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} } main() {char p[][10]={ "abc","aabdfg","abbd","dcdbe","cd"};int i; f(p,5);printf("%d\n",strlen(p[0])); } 程序运行后的输出结果是________。 A)6 B)4 C)5 D)3 (280)C 知识点:比较字符串的大小 评 析:比较字符串的大小是从字符串的第一个字母开始比较,如果第一个字母相同则比较第二个字母,以此类推,直至字符串结束。strcmp(字符串l,字符串2)的作用是比较字符串l和字符串2:字符串l=字符串2,函数值为0;字符串1>字符串2,函数值为l;字符串1<字符串2,函数值为一1。Strcpy(字符数组l,字符串2)的作用是将字符串2复制到字符数组l中去。结合本题可知,比较后的字符串数组为: p[O]=“dcdbe” p[l]=“cd” p[2]=“abc” p[3]=“abbd” p[4]="aabdfg” 所以,strlen(p[0])=5。 |