c语言笔试知识点汇总(精选)_第1页
c语言笔试知识点汇总(精选)_第2页
c语言笔试知识点汇总(精选)_第3页
c语言笔试知识点汇总(精选)_第4页
c语言笔试知识点汇总(精选)_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

笔试知识点讲解(精选),制作人:王淑琴 2008年8月,笔试考试,时间:90分钟题型:选择(40题)、填空(15题)内容:公共基础知识(30分)C语言(70分),讲解要点(笔试),表达式的计算switch语句字符串的处理sizeof的使用函数指针变量的作用域宏定义typedef的使用结构体共用体链表文件带形参的main函数,一、表达式的计算、数据类型,12、以下程序的输出结果是_C_。main() int a= -1,b=1, k; if( (+a0) A、-1 1B、0 1C、1 0D、0 0,注意:逻辑与(&)只要有一个表达式的值为0,后面的就不再计算,同样,如果是逻辑或(|)只要遇到一个值为1的表达式,后面的就不再计算。,*p+与(*p)+,13、请读程序: #include int a =2,4,6,8,; main( ) int i; int *p=a; for( i=0;i0程序运行后的输出结果是_A_。A)2345 B)0235 C)02356 D)2356,三、字符串处理函数strcpy/strlen/strcat /strcmp-p147,#include main()char p20=a,b,c,d,q=”abc”, r=”abcde”;strcpy(p+strlen(q),r); strcat(p,q);printf(“%d%dn”,sizeof(p),strlen(p);程序运行后的输出结果是( )A)20 9 B)9 9 C)20 11 D)11 11,C,#include main()char p20=a,b,c,d,q=”abc”, r=”abcde”strcat(p,r); strcpy(p+strlen(q),q);printf(“%d n”,strlen(p);程序运行后的输出结果是( )A)9 B)6 C)11 D)7,B,40、下面各语句行中,能正确进行给字符串赋值操作的语句行是_。 A、char st45=ABCDE; B、char s5=A,B,C,D,E; C、char *s=ABCDE; D、char *s; scanf(%s,*s); 15、下列选项中正确的语句组是_D_。A、char s8; s=BeijingB、char *s; s=BeijingC、char s8; s=BeijingD、char *s; s=Beijing,(30)有以下函数(07年连续考了两次)int aaa(char *s)char *t=s;while(*t+);t-;return(t-s);以下关于aaa函数的功能叙述正确的是_A_。A)求字符串s的长度 B)比较两个串的大小C)将串s复制到串t D)求字符串s所占字节数,用二维字符数组处理多个字符串,void fun(char s10,int n)char t;int i,j; for(i=0;isj0 ) t=si0; si0=sj0; sj0=t; main()char ss510=bcc,bbcc,xy,aaaacc,aabcc;int i;fun(ss,5); printf(%s,%sn,ss0,ss4);程序运行结果是(D)xy,aaaacc B) aaaacc,xy C) xcc,aabcc D) acc,xabcc,用二维字符数组处理多个字符串,#include void f(char p10, int n ) /* 字符串从小到大排序 */ char t10; int i,j; for(i=0;i0) strcpy(t,p); strcpy(p,pj); strcpy(pj,t); main()char p510=abc,aabdfg,abbd,dcdbe,cd;int i;f(p,5);printf(%dn,strlen(p0);程序运行后的输出结果是(C)A) 2 B) 4 C) 6 D) 3,用指针数组处理多个字符串,void fun(char *p)+p; printf(%sn,*p);main() char *a=Morning,Afternoon,Evening,Night;fun(a);程序的运行结果是_A_A)Afternoon B)fternoon C)Morning D)orning,指向指针的指针,main( ) int x=10;int *px;int *ppx;px=说明:地址是无符号长整型,故一般用%u输出,#include void fun(char *t,char *s)while(*t!=0)t+;while(*t+=*s+)!=0);main() char ss10=”acc”,aa10=”bbxxyy”; fun(ss,aa); printf(“%s,%sn”,ss,aa);程序运行结果是_D_A) accxyy , bbxxyy B) acc, bbxxyyC) accxxyy,bbxxyy D) accbbxxyy,bbxxyy,字符串的连接,四、求字节数运算符sizeof-p55,main() int x;int a10=1,2;char ch;char b20=a,b,c;char c =“abc”;printf(%d,%d,%d,%d,%dn,sizeof(x),sizeof(a),sizeof(ch),sizeof(b),sizeof(c); printf(“%d”,strlen(c);注:运行结果应该是2,20,1,20,4 3,(29)设有定义:char p=1,2,3,*q=p; ,以下不能计算出一个char型数据所占字节数的表达式是_A_ A)sizeof(p) B) sizeof(char) C) sizeof(*q) D) sizeof(p0),五、函数的调用、参数及传值方式,形参实参传值传址函数的调用函数的返回值,int max( int x,int y)void fun( int a ). max( );.void main( ) int a,b,t; int arr10; t=max(a,b); fun(arr); 说明:(1)函数的定义是平行的,不能嵌套定义(2)函数的调用是可以嵌套的,基本类型的变量做函数形参(传值),void swap(int x, int y)int t; t=x; x=y; y=t;main()int a=1,b=2; swap(a,b); printf(“%d,%dn”,a,b);程序运行后的输出结果是(D)A)2,1 B)2,4 C)1,4 D)1,2,结构体类型的变量做函数形参(传值),typedef structint b,p;A; void f(A c) /*注意:c是结构变量名 */int j;c.b+=1; c.p+=2;main()int i;A a=1,2;f(a);printf(“%d,%dn”,a.b,a.p);程序运行后的输出结果是(D)A)2,3 B)2,4 C)1,4 D)1,2,指针变量做函数形参(传址),void swap(int *x, int *y)int t; t=*x; *x=*y; *y=t;main()int a=1,b=2; swap(程序运行后的输出结果是(A)A)2,1 B)2,4 C)1,4 D)1,2,指针变量做函数形参(传址),(37)有以下程序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) A)Prohsbn B)PrphsbnC)Progsbn D)Program,(36) 有以下程序void f(int *q)int i=0;for( ; i5;i+) (*q)+; q+;main()int a5=1,2,3,4,5,i;f(a);for(i=0;i5;i+)printf(“%d,”,a);程序运行后的输出结果是(D)A)2,2,3,4,5,B)6,2,3,4,5, C)1,2,3,4,5, D) 2,3,4,5,6,void f(int *q) int i=0; for( ; i5;i+) (*q)+; ,void f(int *q) int i=0; for( ; i5;i+) *q+;,说明:如果f函数改成绿色背景下的,答案应该是B,如果f函数改成蓝色背景下的,答案应该是C,数组作为函数形参(传址),void f(int b)int i; for(i=0;i0) fun(k-1); printf(%d,k);main( ) int w=5; fun(w); printf(n); A、5 4 3 2 1B、0 1 2 3 4 5C、1 2 3 4 5D、5 4 3 2 1 0,六、指针变量的赋值(参见教材221页),(27)以下叙述中错误的是_C_A)改变函数形参的值,不会改变对应实参的值B)函数可以返回地址值C)可以给指针变量赋一个整数作为地址值D)当在程序的开头包含文件stdio.h时,可以给指针变量赋NULL,(24)若有说明语句:double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是A)*p= float *q=NULLint *t=0,正确,正确,正确,16、若程序中已包含头文件stdio.h,以下选项中,正确运用指针变量的程序段是_。A、int *i=NULL; scanf(%d,i);B、float *f=NULL; *f=10.5;C、char t=m,*c=,七、变量的存储类别,局部变量:在函数(main函数或自己函数)内部定义的变量全局变量:在所有函数外部定义的变量动态变量:与函数共存亡静态变量:与程序共存放说明:(1)全局变量都是静态存储的。(2)局部变量可通过在变量定义前加static关键字,将其指定为静态存储的。,全局变量 与 局部变量 重名,(30)有以下程序int m=13;int fun2(int x,int y) int m=3; return(x*y-m); main( ) int a=7,b=5; printf(%dn,fun2(a,b)/m);程序的运行结果是 (B)A、1 B、2C、7 D、10说明:当全局变量与局部变量重名时,局部变量的优先级高。,33、请选出以下程序的输出结果_C_。 #include sub(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、4321C、0000 D、4444,(41)有以下程序int a=1;int f(int c) static int a=2; c=c+1; return (a+)+c; main() int i,k=0;for(i=0;i2;i+)int a=3;k+=f(a);k+=a;printf(“%dn”,k);程序运行结果是(A)A) 14 B) 15C) 16 D) 17,八、宏定义(宏替换),35、以下叙述中正确的是_D_。A、预处理命令行必须位于源文件的开头B、在源文件的一行上可以有多条预处理命令C、宏名必须用大写字母表示D、宏替换不占用程序的运行时间void max( ) ; #define N 10main() int x,y,z; int aN; x=N; printf(“%d”,x);,30、若程序中有宏定义行:#define N 100 则以下叙述中正确的是_B_。A、宏定义行中定义了标识符N的值为整数100B、在编译程序对C源程序进行预处理时用100替换标识符NC、对C源程序进行编译时用100替换标识符ND、在运行时用100替换标识符N,22、有以下程序#include #define F(x,y) (x)*(y)main() int a=3,b=4; printf(%dn,F(a+,b+);程序运行后的输出结果是_A_。A、12B、15C、16D、20,14、请选出以下程序段的输出结果_C_。 #include #define MIN(x,y) (xnumB、p-numC、(*p).numD、stu3.age,十一、共用体(参见教材310页),union data int i; char c; float f; a;a.i=1;a.c=B;a.f=1.5; 在完成以上3个赋值运算后,只有a.f是有效的。共用体变量中起作用的是最后一次存放的成员,在存入一个新成员后原有的成员就失去作用。,34、设有以下定义union data int d1; float d2; demo;则下面叙述中错误的是_D_。A、变量demo与成员d2所占的内存字节数相同B、变量demo中各成员的地址相同C、变量demo和各成员的地址相同D、若给demo.d1赋99后,demo.d2中的值是99.0,18、若有以下定义和语句union date int i; char c; fioat f; x;int y;则以下语句正确的是_B_。A、x=10.5;B、x.c=101;C、y=x;D、printf(%dn, x);,25、有以下程序: #include union pw int i; char ch2; a; main() a.ch0=13; a.ch1=0; printf(%dn,a.i); 程序的输出结果是(注意:ch0在低字节,ch1在高字节)_A_。 A、13 B、14 C、208 D、209,36、有以下程序main() union char ch2; int d; s; s.d=0x4321; printf(%x,%xn,s.ch0,s.ch1);在16位编译系统上,程序执行后的输出结果是_A_。A、21,43B、43,21C、43,00D、21,00,22、有以下结构体说明和变量定义,如图所示:struct node int data; struct node *next; *p,*q,*r;现要将q所指结点从链表中删除,同时要保持链表的连续,以下不能完成指定操作的语句_D_。A、p-next=q-next;B、p-next=p-next-next; C、p-next=r;D、p=q-next;,十二、链表(参见教材294页),17、有以下程序#include struct NODE int num; struct NODE *next;main() struct NODE *p,*q,*r; int sum=0; p=(struct NODE *)malloc(sizeof(struct NODE); q=(struct NODE *)malloc(sizeof(struct NODE); r=(struct NODE *)malloc(sizeof(struct NODE); p-num=1;q-num=2;r-num=3; p-next=q;q-next=r;r-next=NULL; sum+=q-next-num;sum+=p-num; printf(%dn,sum);执行后输出结果是( B )。A、3 B、4 C、5 D、6,26、以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请为下划线处有号码的选择出正确的选项。#include stuct node char data; struct node *next; _ CreatList(char *s) struct node *h,*p,*q; h=(struct node *) malloc(sizeof(struct node); p=q=h; while(*s!=0) p=(struct node *) malloc(sizeof(struct node); p-data=_ ; q-next=p; q=_(50)_ ; s+; p-next=0; return h;main() char str=link list; struct node *head; head=CreatList(str); .A、p-next B、p C、s D、s-next,31、以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请为下划线处有号码的选择出正确的选项。#include stuct node char data; struct node *next;_(48)_ CreatList(char *s) struct node *h,*p,*q; h=(struct node *) malloc(sizeof(struct node); p=q=h; while(*s!=0) p=(struct node *) malloc(sizeof(struct node); p-data= _ ; q-next=p; q= _ ; s+; p-next=0; return h;main() char str=link list; struct node *head; head=CreatList(str); .A、char * B、struct node C、struct node *D、char,36、以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请为下划线处有号码的选择出正确的选项。#include stuct node char data; struct node *next; _ CreatList(char *s) struct node *h,*p,*q); h=(struct node *) malloc(sizeof(struct node); p=q=h; while(*s!=0) p=(struct node *) malloc(sizeof(struct node); p-data=_(49)_ ; q-next=p; q=_ ; s+; p-next=0; return h;main() char str=link list; struct node *head; head=CreatList(str); .A、*s B、s C、*s+ D、(*s)+,32、程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、p、q均已正确定义,并用于指向链表结点,指针变量s总是作为头指针指向链表的第一个结点。若有以下程序段q=s; s=s-next; p=s;while (p-next) p=p-next;p-next=q; q-next=NULL;该程序段实现的功能是_A_。A、首结点成为尾结点B、尾结点成为首结点C、删除首结点D、删除尾结点,十三、文件(参见教材332页),28、以下叙述中错误的是_C_。A、C语言中对二进制文件的访问速度比文本文件快B、C语言中,随机文件以二进制代码形式存储数据C、语句FILE fp;定义了一个名为fp的文件指针D、C语言中的文本文件以ASCII码形式存储数据,37、以下叙述中正确的是_D_。A、C语言中的文件是流式文件,因此只能顺序存取数据B、打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C、在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据D、当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失,31、以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是_D_。A、feof(fp)B、ftell(fp)C、fgetc(fp)D、rewind(fp)参见教材345页,31、有以下程序:#include main() FILE *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,执行后输出结果是_B_。A、1 2B、123 0C、1 23D、0 0,38、有以下程序(提示:程序中fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件末尾向前移2*sizeof(int)字节):#include main() FILE *fp; int i, a4=1,2,3,4,b;fp=fopen(data.dat,wb);for(i=0;i4;i+) fwrite(执行后输出的结果_D_。A、2 B、1 C、4 D、3,17、有如下程序#include main()FILE *fp1; fp1=fopen(f1.txt,w); fprintf(fp1,abc); fclose(fp1);若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为_C_。A、goodabcB、abcdC、abcD、abcgood,13、有以下程序#include main() FILE *fp; int i,k,n;fp=fopen(data.dat,w+);for(i=1;i6;i+)fprintf(fp,%d ,i);if(i%3=0) fprintf(fp,n);rewind(fp);fscanf(fp,%d%d, 程序运行后的输出结果是_D_。A、0 0B、123 45C、1 4D、1 2,19、有以下程序_。#include main() FILE *fp; int k,n,a6=1,2,3,4,5,6; fp=fopen(d2.dat,w); fprintf(fp,%

温馨提示

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

评论

0/150

提交评论