2012级C语言指针摸底试卷.doc_第1页
2012级C语言指针摸底试卷.doc_第2页
2012级C语言指针摸底试卷.doc_第3页
2012级C语言指针摸底试卷.doc_第4页
2012级C语言指针摸底试卷.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

2012级C语言高级专题摸底试卷注:不用太在意成绩,只是对大家的指针等高级内容掌握程度进行摸底考试方式: 开卷,但不允许讨论和交流。一、选择题(每题1分,共20分)1、若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是( C )。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ;C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;/A不能用&p1赋值 B n没有初始化 D p2没有指向任何地址,所以没有值2、下面判断正确的是( C )。A)char *a=”china”; 等价于 char *a; *a=”china” ; B)char str10=“china”; 等价于 char str10; str =“china”;C)char *s=”china”; 等价于 char *s; s=”china” ; D)char c4=”abc”,d4=”abc”; 等价于 char c4=d4=”abc” ;/A 无法赋值 B str =“”是错的 D 不能整体赋值,除非初始化赋值3、下面程序段中,for循环的执行次数是( )。 /题目有问题char *s=”ta018bc” ; for ( ; *s!=0 ; s+) printf(“*”) ; A)9 B)7 C)6 D)54、.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是( B )。 A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2)/c为字符变量,p2为指向字符串的指针变量,无法把一个变量直接赋值给指针,应该吧变量c的地址赋值给指针。5、设有程序段:char s =”china”; char *p ; p=s ;则下面叙述正确的是( D )。A)s和p完全相同 B)数组s中的内容和指针变量p中的内容相等C)s数组长度和p所指向的字符串长度相等 D)*p与s0相等/A s是字符数组的首地址,s是指向数组s的首地址的指针 /B s是字符c,p是指向c的地址/C s长度为5,p指向的字符串长度为5还要加上字符串结束标志 06、以下与库函数strcpy(char *p1,char *p2)功能不相等的程序段是( D )。 A)strcpy1(char *p1,char *p2) while (*p1+=*p2+)!=0) ; B)strcpy2(char *p1,char *p2) while (*p1=*p2)!=0) p1+; p2+ C)strcpy3(char *p1,char *p2) while (*p1+=*p2+) ; D)strcpy4(char *p1,char *p2) while (*p2) *p1+=*p2+ ; /D中当p2指向字符串结束标志0时while语句还是没有结束7、若有说明:char *language=“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”;则language2的值是( B )。 A)一个字符 B)一个地址 C)一个字符串 D)一个不定值/*language为指针数组,每一个指向一个地址8、若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是( C )。 A)(*p)max(a,b) B)*pmax(a,b); C)(*p)(a,b); D )*p(a,b);/*p即为max9、.已知学生记录描述为: struct student int no ; char name20; char sex; struct int year; int month ; int day ; birth ; s ; 设结构变量s中的“birth”应是“1985年10月1日”,则下面正确的赋值方式是( D )。 A)year=1985 B)birth.year=1985 month=10 birth.month=10day=1 birth.day=1C)s.year=1985 D)s.birth.year=1985s.month=10 s.birth.month=10s.day=1 s.birth.day=1/结构体中有结构体,所以首先要选择以一个大结构体s,在s中还有一个小结构体birth,所以需要再调用birth中的数据10、以下引用不合法的是( D )。 struct s int i1; struct s *i2,*i0 ; a3=2,&a1,0, 4,&a2,&a0, 6,0,&a1 , *ptr=a; A) ptr-i1+ B)*ptr-i2 C)+ptr-i0 D)*ptr-i1/a0的数据成员为 2,a1, 0/a1的数据成员为 4, a2, a0/a2的数据成员为 6, 0, a1/D应该改为 prt-i1;11、若要利用下面的程序段使指针变量p指向一个存储整型变量的存储单元,则在【】中应有的内容是( D )。 int *p ; p = 【】malloc(sizeof(int); A) int B)int * C)(*int) D)(int*)/malloc开辟内存空间指定结构12、下面程序的输出是( A )。A) 60 B) 68 C) 99 D) 108main() int a34= 1,3,5,7,9,11,13,15,17,19,21,23;int ( *p)4=a,i,j,k=0;for(i=0; i3; i+)for(j=0; j2; j+)k=k+*( *(p+i)+j);printf(%dn,k);/3行4列,数据为1,3,5,79,11,13,1517,19,21,23,黄色区域语句第i行第j列数据相加,结果为1+3+9+11+17+19=6013、设有以下定义:int a43=1,2,3,4,5,6,7,8,9,10,11,12;int (*prt)3=a,*p=a0;则下列能够正确表示数组元素a12的表达式是( D )。A) *(*prt+1) 2) B) *(*(p+5) C) (*prt+1)+2 D) *(*(a+1)+2)/A *prt指下标为0的那一行,加1为那一行下标为1的那一列14、下列程序的输出结果是( C )。main( ) int a5=2,4,6,8,10,*P,* *k;p=a; k=&p;printf(%d,*(p+); printf(%dn,* *k); A) 4 4 B) 2 2 C) 2 4 D) 4 6/p是指向a的首地址的,k是指向指针的指针,k指向指针p,第一个输出语句首先先输出p所指的数为2,然后再自增,指向a的下一个地址,里面的数值为4,所以第二个输出语句输出的为4;15、以下程序的输出结果是( C )。fut (int*s,int p23) *s=p11; main( ) int a23=1,3,5,7,9,11,*p;p=(int*)malloc(sizeof(int);fut(&p,a);printf(%dn,*p); A) 1 B) 7 C) 9 D) 11/fun函数让p的值为a11即为9,fun函数中*s为*&p为*p=a1116、以下程序的输出结果是( D )。#includectype.hspace (char *str) int i,t;char ts81;for(i=0,t=0;stri!=0;i+=2)if(! isspace(*str+i)&(*(str+i)!=a)tst+=toupper(stri);tst=0;strcpy(str,ts); mian( ) char s81=a b c d e f g;space(s);puts(s); A) abcdeg B) bcde C) ABCDE D) BCDE/由黄色区域可看出没有a,绿色区域函数功能为把小写变大写17、设有如下定义:int arr=6,7,8,9,10;int * ptr;则下列程序段的输出结果为( D )。ptr=arr;* (ptr+2)+=2;printf (%d,%dn,*ptr,*(ptr+2);A) 8,10 B) 6,8 C) 7,9 D) 6,10/绿色区域代码说明ptr指向数组首地址,黄色区域括号内为将下标为2的数组arr2的值增加2,指针ptr所指地址不变。18、以下程序运行后,如果从键盘上输入ABCDE,则输出结果为( D )。A) 8 B) 7 C) 6 D) 5 #include #include func(char str) int num=0; while(*(str+num)!=0) num+; return(num); main() char str10,*p=str; gets(p); printf(%dn,func(p); /黄色区域代码即为求数组长度19、以下程序运行后,输出结果是( C )A) 1 B) 7 C) 9 D) 11 fut(int *s, int p23) *s=p11; main() int a23=1,3,5,7,9,11, *p; p=(int *) malloc(sizeof(int); fut(&p,a); printf(%dn,*P); /和15题一样*p的值为a11=920、有以下程序:#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/黄色区域代码为求长度并用t记录,绿色区域为把aa的值一个一个赋值给ss,由于t记录了长度,所以aa的数据是接着ss原来数据后面的,即ss输出为accbbxxyy二、填空题(每空2分,共46分)1、.若有定义: struct num int a ; int b ; float f ; n = 1,3,5.0 ; struct num *pn = &n ; 则表达式pn-b/n.a,n.a*+pn-b的值是【3,4】。表达式(*pn).a+pn-f的值是【6.0】。/pn-b = 3, n.a = 1 绿色区域看成整体,然后其值自增,然后乘以n.a2、 若有定义语句:int a4=0,1,2,3,*p;p=&a1;则+(*p)的值是 2 。/p指向a1,然后其值自增。3、 若有定义:int a23=2,4,6,8,10,12;则*(&a00+2*2+1)的值是【12】,*(a1+2)的值是【12】 。/括号内是改变取值地址,为从数组首地址往后去4+1个位置,即为a11的地址,然后用*取值4、下面min3函数的功能是:计算单向循环链表first中每3个相邻结点数据域中值的和,返回其中最小的值。请填空。datalinkfirstdatalinkdatalinkstruct node int data; struct node * link;int min3(struct node * first) struct node *p=first;int m,m3=p-data+p-link-data+p-link-link-data;for(p=p-link; p! =first; p= 【p-link】 )/int m,m3=p-data+p-link-data+p-link-link-data; m=p-data+p-link-data+p-link-link-data;if( 【mm3】 ) m3=m;return(m3);5、 下面h函数的功能是计算如下数学函数H的值。请填空。double fgh(double ( *f)(double a),double ( *g)(double b),double x, double y) return(【(*f)(x+y)/(*g)(y-x)】 );double h(double a, double b)return(fgh( sin,cos,a,b)*fgh( 【cos,sin,a,b】 ); 6、以下程序由终端输入一个文件名,然后把从终端键盘输入的字符依次存放到该文件中,用#作为结束输入的标志.请填空.#include main() FILE * fp;char ch,fname10;printf(lnput the name of filen);gets(fname);if(fp=【fopen(fname,”w”)】)=NULL) printf(Cannot openn); exit(0);printf(Enter datan);while(ch=getchar()!=#) fputc(【ch】,fp);fclose(fp); 7、以下函数creat用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。单向链表的头指针作为函数值返回.请填空:#includestruct list char data; struct list * next; ;struct list * creat() struct list * h,* p,* q;char ch;h=【(struct list*)】 malloc(sizeof(struct list);p=q=h;ch=getchar();while(ch!=?) p=【(struct list*)】 malloc(sizeof(struct list);p-data=ch;p-next=p;q=p;ch=getchar();p-next=0;【return h;】8、以下程序的输出结果是 35 # includemain()char *s1,*s2,m;s1=s2=(char*)malloc(sizeof(char);*s1=15;*s2=20;m=*s1+*s2;printf(“%dn”,m);/两数相加9、函数main()的功能是:在带头结点的单链表中查找数据域中值最小的结点.请填空#include struct node int data;struct node *next;int min(struct node *first)/*指针first为链表头指针*/ struct node *p; int m;p=first-next; m=p-data;p=p-next;for(;p!=NULL;p= 【p-next】 )if(p-datadate;return m;10、写出下面程序的运行结果 3 func(char *s,char a,int n) int j; *s=a; j=n ; /E赋值给c0,5赋值给j while (*ssj) j- ; /比较大小后j为3 return j; main ( ) char c6 ; int i ; for (i=1; i=5 ; i+) *(c+i)=A+i+1; /数组下标1到5赋值CDEFG printf(“%dn”,fun(c,E,5); 11、 写出下面程序的运行结果 6 。 fun (char *s) char *p=s; /定义一个字符指针p并指向a while (*p) p+ ; /取最后一个值f return (p-s) ; /地址相减(求数据长度)为6 main ( ) char *a=”abcdef” ; /指针a指向a的地址 printf(“%dn”,fun(a) ; 12、 写出下面程序的运行结果 abcdefglkjih 。 sub(char *a,int t1,int t2) char ch; while (t1t2) /此while语句为吧s7到s12之间的数两两交换 ch = *(a+t1); *(a+t1)=*(a+t2) ; *(a+t2)=ch ; /交换t1与t2的值 t1+ ; t2- ; main ( ) char s12; int i; for (i=0; i12 ; i+) si=A+i+32 ; /赋值abcdefghijkl sub(s,7,11); for (i=0; i12 ; i+) printf (“%c”,si); printf(“n”); 13、当运行以下程序时,写出输入 6 的程序运行结果 976531 。 sub(char *a,char b) while (*(a+)!=0) ; /一直到数组结束while (*(a-1)b) /只要满足数组里面的值小于6执行 *(a-)=*(a-1); /把a所指的前一个值给a当前所指地址,然后自减*(a-)=b; main ( ) char s=”97531”,c; c = getchar ( ) ; /c为6 fun(s,c); puts(s) ; 14、函数fun的功能是:将带头结点的单向链表结点数据域中的数据从小到大排序,请填空。#include #include #define N 6typedef struct node int data; struct node *next; NODE;void fun(NODE *h) NODE *p, *q; int t; p = 【h-next】 ; while (p) /和冒泡法很相似 q =【p-next】 ; while (q) if (p-data 【】q-data) t = p-data; p-data = q-data; q-data = t; q = q-next; p = p-next; NODE *creatlist(int a) NODE *h,*p,*q; int i; h = (NODE *)malloc(sizeof(NODE); h-next = NULL; for(i=0; idata=ai; q-next = NULL; if (h-next = NULL) h-next = p = q; else p-next = q; p = q; return h;void outlist(NODE *h) NODE *p; p = h-next; if (p=NULL) printf(The list is NULL!n); else printf(nHead ); do printf(-%d, p-data); p=p-next; while(p!=NULL); printf(-Endn); main() NODE *head; int aN= 0, 10, 4, 2, 8, 6 ; head=creatlist(a); printf(nThe original list:n); outlist(head); fun(head); printf(nThe list after sorting :n); outlist(head);三、程序改错题(每题4分,共12分)1、函数fun的功能是:在p所指字符串中找出ASCII码最大的字符,将其放在第一个位置,并将该字符串钱的原字符向后顺序移动。例如,调用fun函数前给的字符串输入:ABCDeFGH,调用后字符串内容为:eABCDFGH。修改fun中错误,使其正确(不要改动main,不得增行或删行,也不得改程序结构)。#include fun( char *p ) char max,*q; int i=0; max=pi; while( pi!=0 ) if( maxp ) /while *q=*(q-1); q-; p0=max;main() char str80; printf(Enter a string: ); gets(str); printf(nThe original string: ); puts(str); fun(str); printf(nThe string after moving: ); puts(str); printf(nn);2、函数fun的功能是:逐个比较p,q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放在c所指的数组中,形成一个新的字符串。例如,若主函数中a字符串为:a

温馨提示

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

评论

0/150

提交评论