当前位置:首页 > 2012级C语言指针摸底试卷
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 str[10]={“china”}; 等价于 char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于 char *s; s=”china” ;
D)char c[4]=”abc”,d[4]=”abc”; 等价于 char c[4]=d[4]=”abc” ; //A 无法赋值 B str[ ]={“”}是错的 D 不能整体赋值,除非初始化赋值 3、下面程序段中,for循环的执行次数是( )。 //题目有问题
char *s=”\\ta\\018bc” ; for ( ; *s!=’\\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5
4、.设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与s[0]相等
//A s是字符数组的首地址,s是指向数组s的首地址的指针 //B s是字符c,p是指向c的地址
//C s长度为5,p指向的字符串长度为5还要加上字符串结束标志 \\0
6、以下与库函数strcpy(char *p1,char *p2)功能不相等的程序段是( D )。 A)strcpy1(char *p1,char *p2)
{ while ((*p1++=*p2++)!=’\\0’) ; }
1
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”};则language[2]的值是( 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即为max
9、.已知学生记录描述为: struct student {
int no ; char name[20]; 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=10 day=1 birth.day=1 C)s.year=1985 D)s.birth.year=1985 s.month=10 s.birth.month=10 s.day=1 s.birth.day=1
//结构体中有结构体,所以首先要选择以一个大结构体s,在s中还有一个小结构体birth,所以需要再调用birth中的数据 10、以下引用不合法的是( D )。 struct s {
2
int i1; struct s *i2,*i0 ;
} a[3]={2,&a[1],’\\0’, 4,&a[2],&a[0], 6,’\\0’,&a[1]} , *ptr=a; A)ptr->i1++ B)*ptr->i2 C)++ptr->i0 D)*ptr->i1 //a[0]的数据成员为 2,a[1], ‘\\0’ //a[1]的数据成员为 4, a[2], a[0] //a[2]的数据成员为 6, ‘\\0’, a[1] //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) 108
main()
{ int a[3][4]={ 1,3,5,7,9,11,13,15,17,19,21,23}; int ( *p)[4]=a,i,j,k=0; for(i=0; i<3; i++)
for(j=0; j<2; j++)
k=k+*( *(p+i)+j);
printf(\
//3行4列,数据为{1,3,5,7}{9,11,13,15}{17,19,21,23},黄色区域语句第i行第j列数据相加,结果为1+3+9+11+17+19=60 13、设有以下定义:
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*prt)[3]=a,*p=a[0];
则下列能够正确表示数组元素a[1][2]的表达式是( 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 a[5]={2,4,6,8,10},*P,* *k;
3
p=a; k=&p;
printf(\
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 p[2][3]) { **s=p[1][1]; } main( )
{ int a[2][3]={1,3,5,7,9,11},*p;
p=(int*)malloc(sizeof(int)); fut(&p,a);
printf(\
A) 1 B) 7 C) 9 D) 11
//fun函数让p的值为a[1][1]即为9,fun函数中**s为**&p为*p=a[1][1] 16、以下程序的输出结果是( D )。
#include\space (char *str)
{ int i,t;char ts[81];
for(i=0,t=0;str[i]!='\\0';i+=2)
if(! isspace(*str+i)&&(*(str+i)!='a'))
ts[t++]=toupper(str[i]);
ts[t]='\\0';
strcpy(str,ts); } mian( )
{ char s[81]={\
space(s); puts(s); }
A) abcdeg B) bcde C) ABCDE D) BCDE //由黄色区域可看出没有a,绿色区域函数功能为把小写变大写 17、设有如下定义:
int arr[]={6,7,8,9,10};
4
共分享92篇相关文档