C语言程序设计指针练习题
- 格式:ppt
- 大小:34.50 KB
- 文档页数:13
复习题(二)一、基础题1、设有:int k[]={2,4,6,8,10,12}, *p=k+2; 表达式*(p+2)*p[2] 的值:100 。
2、设有:int a[10], *p1, *p2; 则执行语句:p1=a; p2=&a[5]; 则p2-p1的值:5。
3、设有:int x[]={4,3,2,1},q,*p=&x[1];则执行语句:q=(*--p)++ ; 后;变量q的值为4。
4、设有:int *p, a=10, b=1; 则执行以下语句:p=&a; a=*p+b; 后;a的值为:11。
5、下列程序段的输出结果是2,1 。
int k=1, j=2, *p=&k, *q=p;p=&j;printf("%d, %d",*p, *q);6、设x为整型变量,p为指向整型的指针变量,则让p指向x变量的赋值表达式是P=&x。
7、设有变量定义:float d[]={1.0,2.0,3.0,4.0,5.0}, *p=d+3;请写出printf("\n %f %f", *p, d[0]); 的输出结果为:4.0和 1.0。
8、设有变量定义如下:char s[]="Hello!", *p=s; int i;执行完for(i=0; *(p+i); i++); 后,变量i的值是_6_;*(p+i)的值是‟\0‟_。
9、函数void f(char s[ ], char t[ ]){ int k=0;while (s[k]=t[k]) k++;}等价于void f(char *s, char *t)1、{ while (*s++=*t++); }二、选择题1、下面的程序段用来定义指针并赋值,请选出语法正确的程序段( C )。
A)int *p; scanf(“%d”,p); B)int *s,k; *s=100;C) int *s,k; D) int *s,kchar *p,*c; char *p,*c;s=&k; p=&c; s=&k; p=&c;*p=‟a‟; s=p; *s=1;2、程序段:int *p,a,b=1; p=&a; *p=10; a=*p+b; 执行后,a的值(B)。
c语言指针题目及答案一选择题(7分,每小题0.5分)1.C语言源程序的基本单位是( )。
A 过程B 函数C 子程序D 标识符2.下列程序的输出结果是( )。
main( ){ int a=7,b=5;printf("%d",b=b/a);}A 5B 1C 0 D不确认值3.假设变量a,b均为整型,表达式(a=5,b=2,a>b?a++:b++,a+b)的值是( )。
A 7B 8C 9D 24.设a为int型变量,执行下列赋值语句后,a的取值分别是( )。
a=125.534; a=(int)125.521%4; a=5<<2;A 125,31,1B 125,1,20C 125,31,20D 125.534,2,205.建有如下程序段,下面叙述中恰当的就是 ( )。
int k=10; while(k=0) k=k-1;A 循环继续执行一次 B循环就是无穷循环 C循环体语句一次也不继续执行 D循环体语句继续执行一次6.以下程序的输出结果为( )。
int i;void prt( ){ for(i=5;i<8;i++) printf("%c",'*');printf(" ");}main( ){ for(i=5;i<=8;i++) prt( );}A ***B *** *** *** ***C *** ***D * * *7.在C语言程序中,以下说法正确的是( )。
A函数的定义可以嵌套,但函数的调用不可以嵌套B函数的定义不可以嵌套,但函数的调用可以嵌套C函数的定义和函数的调用都不可以嵌套D函数的定义和函数的调用都可以嵌套8.以下函数调用语句中所含( )个实参。
func((e1,e2),(e3,e4,e5));A 2B 3C 5D 语法错误9.以下程序的输出结果为( )。
#define ADD(x) x*xmain( ){ int a=4,b=6,c=7,d=ADD(a+b)*c;printf("d=%d",d);}A d=70B d=80C d=140D d=70010.未知职工记录叙述如下,在Turbo C中,系统为变量w分配( )字节的空间。
一、单选题1、如有下面的语句说明, 则表达式 *(p+3) 的值是 ( )。
int a[]={2,3,4,5,6,7};int *p=a;A.5B.6C.4D.3正确答案:A2、如有下面的语句说明, 则正确的赋值语句是 ( )。
char a[10], *p=a;A.a=”VC++”;B.p=”VC++”;C.a[10]=”VC++”;D.*p=”VC++”;正确答案:B3、若有以下语句,则&a[2]-p的值是()。
int a[3],*p=a;A.3B.1C.2D.不确定正确答案:C4、若有程序段int b[4],*p,*q;p=&b[1]; q=&b[3];则q-p表示的意义是()。
A.p与q之间的字节数B.p占据的字节数C.p与q之间数据个数D.表达式错误正确答案:C5、若有定义: float *p,m; , 则以下正确的表达式是()。
A.*p=&mB.p=&mC. p=mD.*p=*m正确答案:B二、判断题1、地址运算符”&”可作用于变量和数组元素,分别获得变量和数组元素的地址。
正确答案:√2、只可以通过求地址运算”&”获得地址值。
正确答案:×3、空指针p是指向地址为0的存贮单元的指针。
正确答案:×4、如有变量的定义char s[]=”abc”; 语句char *p=s; 是合法的。
正确答案:√5、如有变量的定义int *r; double x; 则语句 r=&x; 是合法的。
正确答案:×三、填空题1、若有定义:char ch;使指针p指向变量ch的定义语句是_______。
正确答案:char *p=&ch;2、若有定义:char ch,*p=&ch;通过指针p给变量ch赋字符'a'的语句是______。
正确答案:*p='a';3、若有定义:char ch,*p=&ch;通过指针p用格式输出函数输出ch中字符的语句是______。
C语言程序设计作业五1.对于类型相同的指针变量,不能进行哪种运算?(单选)A. +B. -C. =D. = =2. 若有以下说明和语句,且0<=i<10, 则下面哪个是对数组元素的错误引用?(单选)int a[]={1,2,3,4,5,6,7,8,9,0}, *p, i;p=a;A. *(a+i)B. a[p-a]C. p+iD. *(&a[i])3. 若有以下说明和语句,且0<=i<10,则下面哪个是对数组元素地址的正确表示?(单选)int a[]={1,2,3,4,5,6,7,8,9,0}, *p,i;p=a;A. &(a+1)B. a++C. &pD. &p[i]4. 以下程序的输出结果是___。
#include <stdio.h>main(){int a[]={1,2,3,4,5,6},*p;p=a;*(p+3)+=2;printf("%d,%d\n",*p,*(p+3));}A. 0,5B. 1,5C. 0,6D. 1,65. 以下程序的输出结果是哪一项?(单选)#include <stdio.h>main(){int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}, *p[4],i;for(i=0;i<4;i++)p[i]=&a[i*3];printf("%d\n",p[3][2]);}A. 输出项不合法B. 6C. 8D. 126. 如果有以下的定义:(多选)struct person{char name[20];int age;char sex;};struct person a={"xiao min",20,'m'},*p=&a;则对字符串"li ning"的引用方式可以是下面哪些?A. (*p).nameB. C. D. p->name7. 下面哪些定义的结构在内存分配是等价的。
C语言指针习题及答案指针习题及答案一?选择题1.变量的指针,其含义是指该变量的 BA )值B )地址C )名D )一个标志 2.已有定义int k=2;int *ptr1,*ptr2; 且ptr1和ptr2 均已指向变量k ,下面不能正确执行的赋值语句是 B。
A ) k=*ptr1+*ptr2B ) ptr2=kC ) ptr1=ptr2D ) k=*ptr1*(*ptr2)3.若有说明:int *p,m=5,n; 以下程序段正确的是 D 。
A ) p=&n ;B ) p = &n ;scanf( %d ",&p);scanf( %d ",*p);C ) scanf( %d",&n);D ) p = &n ;*p=n ;*p = m ;4.已有变量定义和函数调用语句: int a=25;print_value(&a);下面函数的输出结果是 ______D _____ 。
A) c=*p1+*p2B ) p2=cC ) p 仁p2D ) c=*p1*(*p2) 12.设有程序段:char s[ ]= "china ";char *p ; p=s ;则下面叙述正确的是 DA) s 和p 完全相同void prin t_value(i nt *x) { printf( %d\n ",++*x); }A ) 23B ) 245. 若有说明:int *p1, *p2,m=5,n; A ) p 仁&m p2=&p1 ;C ) p 仁&m p2=p1 ;6. 若有语句:A ) a,p,*&a 7. 下面判断正确的是 C)25 D ) 26 以下均是正确赋值语句的选项是CB ) p 仁&m p2=&n *p1 =* p2 ;D) p 仁&m *p 仁*p2 ; int *p,a=4; 和p=&a ;下面均代表地址的一组选项是B ) &*a,&a,*pC ) *&p,*p,&aC D ) &a,&*p,pA )B )C )D )char *a= "ch in a "; 等价于char *a; *a= "ch in a "; char str[10]={ “hina"};等价于char str[10]; str[ ]={ “hina";} char *s= "ch in a "; 等价于 char *s; s= "ch in a "; char c[4]= "abc ",d[4]= "abc ";等价于 8. 下面程序段中,for 循环的执行次数是char *s= "\ta\018bc "; for ( ; *s!= '\0'; s++)printf( *");A ) 9B ) 79. 下面能正确进行字符串赋值操作的是 A ) char s[5]={ ABCDE ”}; C ) char *s ; s= "ABCDE "; 10. 下面程序段的运行结果是char *s= "abcde"; s+=2 ; printf( %d",s); A ) cdeB )字符}'11. 设pl 和p2是指向同一个字符串的指针变量,值语句是—Bchar c[4]=d[4]= "abc ” ;CC ) 6 CB ) D )C )char s[5]={ A ', 'B ','C','D','E'}; char *s; scanf( %s",s);字符’c'的地址 D )不确定c 为字符变量,则以下不能正确执行的赋B) 数组s中的内容和指针变量p中的内容相等C) s数组长度和p所指向的字符串长度相等D) *p与s[0]相等13. 以下与库函数strcpy(char *p1,char *p2) 功能不相等的程序段是 D __________A) strcpy1(char *p1,char *p2){ while ((*p1++=*p2++)!= ''); }B) strcpy2(char *p1,char *p2){ while ((*p1=*p2)!= '){ p1++; p2++ } }C) strcpy3(char *p1,char *p2){ while (*p1++=*p2++); }D) strcpy4(char *p1,char *p2){ while (*p2) *p1++=*p2++ ; }14. 下面程序段的运行结果是__C ___________ 。
第七章指针7.1 选择题1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。
A. p=q; B. *p=*q; C. a=*q; D. q=a;a是整型数,int *p,*q定义了指针,p,q是指向整型的指针。
p取得a的地址,而q取得p的地址p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值)。
A)把q的地址赋给p,则p和q完全一样了,都指向一个数2B)把q中数据个pC)把q中数据给aD)a中数据是2,不能够给一个地址。
除非*q=a2.若定义:int a=511, *b=&a;,则printf("%d\n", *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511int a=511,*b=&a;a 是整形变量b 是整形指针变量,指向 aprintf("%d\n",*b);就是输出指针变量 b,所指变量的值输出结果5113.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。
A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);47、已知在程序中定义了如下的语句:int *P1,*P2;int k;p1=&k;p2=&k;则下列语句中不能正确执行是( B )A、k=*P1+*P2;B、p2=k;C、P1=P2;D、K=*P1 * (*P2);P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢?A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K)C是赋值语句D其实执行了K=K*K4.变量的指针,其含义是指该变量的(B)。
A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。
C指针练习题带答案1、设有下列定义char s[ ]={“12345”},*p=s,则下列表达式中不正确的是()。
A、p+1B、*(s+2)C、P=“abcd”D、*S=”ABC”2、设有下列定义static int x,*p=&x,*q;q=p;scanf(“%d,%d”,p,q);若输入“3,4”,则x的值为()A、3 B、4 C、0 D、无法确定3、以下程序的运行结果是:A、6 B、6789 C、‘6’ D、789includemain(){char b[10]={'1','2','3','4','5','6','7','8','9','\0'},*p=b;int k;k=8;p=b+k;printf("%s\n",p-3);}4、有以下程序的输出结果是()main(){int v[]={1,3,5,7,2,4,6,8};int I,*p;p=v;for(i=0;i<8;i++) if(*(p+i)==i+1) printf((“%d”,*(p+i));A、1B、18C、35D、165、若有语句int* p,a=4;p=&a下面均代表地址的一组选项是A.a,p,*&aB.&*a,&a,*pC.*&p,*p,&aD.&a,&*p,p6.若有说明int* p,m=5,n;以下正确的程序段是A.p=&nscanf("%d",&p);B.p=&n scanf("%d",*p);C.scanf("%d",&n); *p=n;D.p=&n *p=m;7.下列程序的运行结果是:swap(int *pt1,int *pt2){int p;p=*pt1;*pt1=*pt2;*pt2=p;}main(){int a=5,b=7,*p1,*p2;p1=&ap2=&bswap(p1,p2);printf("*p1=%d,*p2=%d\n",*p1,*p2);printf("a=%d,b=%d\n",a,b);}A、*p1=7,*p2=5B、*p1=7,*p2=5C、*p1=7,*p2=7D、*p1=5,*p2=5 a=5,b=7 a=7,b=5 a=5,b=5 a=5,b=7 (7)下列程序的运行结果是:main(){void swap1();void swap2();int a=3,b=4;swap1(a,b);printf(“%d,%d\n”,a,b);a=3,b=4;swap2(&a,&b);printf(“%d,%d”,a,b);}void swap1(x,y)int x,y;{int t;t=x;x=y;y=t;}void swap2(x,y)int *x,*y;{int t;t=*x;*x=*y;*y=t;}A、3,4B、4,3C、3 4D、4 34,3 3,4 4 3 3 48.若有定义int a[]={2,4,5,8,10,12},*p=a;则*(p+1)的值是()*(a+5)的值是()*p+1的值是()。
C语言指针习题及答案1.变量的指针,其含义是指该变量的地址。
2.已有定义int k=2.int *ptr1.*ptr2.且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是ptr2=k。
3.若有说明:int *p。
m=5.n。
以下程序段正确的是p=*p=m。
4.已有变量定义和函数调用语句:int a=25.print_value(&a)。
下面函数的输出结果是26.void print_value(int *x){ printf("%d\n"。
++*x)。
}5.若有说明:int *p1.*p2.m=5.n。
以下均是正确赋值语句的选项是p1= p2=p1.6.若有语句:int *p。
a=4.和p=&a;下面均代表地址的一组选项是&*p。
&a。
p。
7.下面判断正确的是char *s="china"。
等价于char *s。
s="china";8.下面程序段中,for循环的执行次数是6.char*s="\ta\018bc"。
for (。
*s!='\0'。
s++) printf("*");9.下面能正确进行字符串赋值操作的是charstr[10]="china"。
1.strcmp1(char *s,char *t)改写为:int strcmp1(char *s。
char *t) { while (*s == *t) {if (*s == '\0') {return 0;s++;t++;return (*s - *t);2.strcmp2(char *s,char *t)改写为:int strcmp2(char *s。
char *t) {while (*s++ = *t++) {if (!*s) {return 0;return (*s - *t);3.strcmp3(char *s,char *t)改写为:int strcmp3(char *s。
班级:学号:姓名:《C程序设计》单元练习(指针)一、选择题1、若有定义: int x,*pb;则以下正确的赋值表达式是。
(1)pb=&x (2)pb=x (3)*pb=&x (4)*pb=*x2、以下程序的输出结果是main(){ int k=2,m=4,n=6;int *pk=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf(“%d\n”,n);}(1)4 (2)6 (3)8 (4)103、已知指针P的指向如下图所示,则执行*P++;后*P的值是。
a[0] a[1] a[2] a[3] a[4](1)20 (2)30 (3)21 (4)314、以下程序的输出结果是。
void sub(int x,int y,int *z){ *z=y-x;}main(){ int a,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf(“%d,%d,%d\n”,a,b,c);}(1)5,2,3 (2)-5,-12,-7 (3)-5,-12,-17 (4)5,-2,-75、以下程序的输出结果是。
void prtv(int *x){ printf(“%d\n”,++*x);}main( ){ int k=25; prtv(&k):}(1)23 (2)24 (3)25 (4)266、以下程序的输出结果是。
void fun(float *a,float *b){ float w;*a=*a+*a; w=*a; *a=*b; *b=w;}main(){ float x=2.0,y=3.0;float *px=&x,*py=&y;fun(px,py);printf(“%2.0f,%2.0f\n”,x,y); }(1)4,3 (2)2,3 (3)3,4 (4)3,27、下程序的输出是。