17.C语言(指针)单元练习五 36
c语言指针习题及答案
if (*s= = '\0'return 0 ; return (*s-*t);
}
B)strcmp2(char *s,char *t)
{ for ( ; *s++=*t++;)
if (!*s) return 0 ; return (*s-*t);
}
C)strcmp3(char *s,char *t)
{ 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。
6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是D
A)a,p,*&aB)&*a,&a,*pC)*&p,*p,&aD)&a,&*p,p
7.下面判断正确的是__C。
A)char *a= "ch in a”;等价于char *a; *a= "ch in a”;
B)char str[1O]={“hina"};等价于char str[1O]; str[ ]={“hina";}
{ for ( ; *t= =*s;)
{ if (!*t) return 0 ; t++ ; s++ ; } return (*s-*t);
C语言指针习题(共21张)
for(k=0;k<=7;k++) if(*(p1+k)= =*(p2+k))
printf(“%c”,*(p1+k));} A)gae B)ga C)language D)有语法错误
第17页0.,7共21页。
C程序设计
1.若有说明语句 : int a[10],*p=a; 则对数组元素的正确引用 是: A)a[10] B)p[a] C)*(p+2) D)p+2
B.*(*(a+i)) D.*(&a[i])
答案:B 分析:指针就变量p取得数组a的首地址,由指针与数组关系知,p[i]表示数组元素第i+1元素值, p[i]=a[i]正确,故A不能选。*(a+i)表示一维数组a第i+1元素值,*(*(a+i)表示对第i+1元 素值再取值是错误操作,所以选B。a[p-a]=a[0]正确,故不能选择C。*(&a[i])也正确, 也不能选D。
printf(“sum=%d”,s);}
第19页0.,9共21页。
C程序设计
3.下面程序的运行(yùnxíng)结果是: main( ) {int x[ ]={0,1,2,3,4,5,6,7,8,9}; int s,i,*p; s=0;p=&x[0];
for(i=1;i<10;i+=2) s+=*(p+i); printf(“sum=%d”,s);}
答案:25(1+3+5+7+9=25)
第1100页.1,0共21页。
C程序设计
4.下面程序的功能(gōngnéng)是删除字符串中的数字字符并输出,填空完成 序。 #include”stdio.h” void deln(char *s) {int i,j; for(i=0,j=0;s[i]!=‘\0’;i++) if(s[i]<‘0’ (1) s[i]>’9’) {s[j]=s[i];j++;}
C语言指针习题和答案精选文档
C语言指针习题和答案精选文档TTMS system office room 【TTMS16H-TTMS2A-TTMS8Q8-一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include <>void swap(int *pa,int *pb){int temp;temp = *pa;*pa = *pb;*pb = temp;}void main(){int a,b,c,temp;scanf("%d%d%d",&a,&b,&c);if(a>b)swap(&a,&b);if(b>c)swap(&b,&c);if(a>c)swap(&a,&c);printf("%d,%d,%d",a,b,c);}二、C语言用指针方法输入3个字符串按由小到大顺序输出#include ""#include ""int main(int argc, char* argv[]){char *t;char *p1=NULL,*p2=NULL,*p3=NULL;char ch1[20]={0},ch2[20]={0},ch3[20]={0};p1=ch1;p2=ch2;p3=ch3;printf("No1:");scanf("%s",p1);fflush(stdin);printf("No2:");scanf("%s",p2);fflush(stdin);printf("No3:");scanf("%s",p3);fflush(stdin);if(strcmp(p1,p2)>0){t=p1;p1=p2;p2=t;}if(strcmp(p1,p3)>0){t=p1;p1=p3;p3=t;}if(strcmp(p2,p3)>0){t=p2;p2=p3;p3=t;}printf("%s\n%s\n%s\n",p1,p2,p3);return 0;}编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#include<>void main(){int a=0,b=0,c=0,d=0,e=0,i=0;char *p,s[20];while((s[i]=getchar())!='\n')i++;p=s;while(*p!=10){if(*p>='A'&&*p<='Z')a++;else if(*p>='a'&&*p<='z')b++;else if(*p==' ')c++;else if(*p>='0'&&*p<='9')d++;else e++;p++;}printf("大写字母 %d 小写字母 %d\n",a,b);printf("空格 %d 数字 %d 非字符 %d\n",c,d,e);}写一个函数,将3 3矩阵转置#include ""void Transpose(int (*matrix)[3]){int temp;int i, j;for(i=1;i<3;i++)/*转置*/{for(j=0;j<i;j++){temp = *(*(matrix+j)+i);*(*(matrix+j)+i) = *(*(matrix+i)+j); *(*(matrix+i)+j) = temp;}}}void main(){int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Transpose(a);for(int i = 0;i<3;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}}用指向一维数组的指针做函数参数#include<>#include<>int main(){void sort(char (*s)[6]);3”n",*(month_name+n));elseprintf("It is wrong.\n");}运行结果:① Input month: 2↙It is February.② Input month: 8↙It is August.③ Input month: 13↙It is wrong.9.11c语言:将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该串。
C语言指针精选习题和答案(精心整理)
一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include <stdio.h>void swap(int *pa,int *pb){int temp;temp = *pa;*pa = *pb;*pb = temp;}void main(){int a,b,c,temp;scanf("%d%d%d",&a,&b,&c);if(a>b)swap(&a,&b);if(b>c)swap(&b,&c);if(a>c)swap(&a,&c);printf("%d,%d,%d",a,b,c);}二、C语言用指针方法输入3个字符串按由小到大顺序输出#include "stdio.h"#include "string.h"int main(int argc, char* argv[]){char *t;char *p1=NULL,*p2=NULL,*p3=NULL;char ch1[20]={0},ch2[20]={0},ch3[20]={0};p1=ch1;p2=ch2;p3=ch3;printf("No1:");scanf("%s",p1);fflush(stdin);printf("No2:");scanf("%s",p2);fflush(stdin);printf("No3:");scanf("%s",p3);fflush(stdin);if(strcmp(p1,p2)>0){t=p1;p1=p2;p2=t;}if(strcmp(p1,p3)>0){t=p1;p1=p3;p3=t;}if(strcmp(p2,p3)>0){t=p2;p2=p3;p3=t;}printf("%s\n%s\n%s\n",p1,p2,p3);return 0;}9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#include<stdio.h>void main(){int a=0,b=0,c=0,d=0,e=0,i=0;char *p,s[20];while((s[i]=getchar())!='\n')i++;p=s;while(*p!=10){if(*p>='A'&&*p<='Z')a++;else if(*p>='a'&&*p<='z')b++;else if(*p==' ')c++;else if(*p>='0'&&*p<='9')d++;else e++;p++;}printf("大写字母 %d 小写字母 %d\n",a,b);printf("空格 %d 数字 %d 非字符 %d\n",c,d,e);}9.5写一个函数,将3 3矩阵转置#include "stdio.h"void Transpose(int (*matrix)[3]){int temp;int i, j;for(i=1;i<3;i++)/*转置*/{for(j=0;j<i;j++){temp = *(*(matrix+j)+i);*(*(matrix+j)+i) = *(*(matrix+i)+j); *(*(matrix+i)+j) = temp;}}}void main(){int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};Transpose(a);for(int i = 0;i<3;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}}9.6用指向一维数组的指针做函数参数#include<stdio.h>#include<string.h>int main(){void sort(char (*s)[6]);//一维数组的指针做函数参数int i;char str[10][6];char (*p)[6];//定义一维数组的指针做函数参数printf("please input string:/n");for(i=0;i<10;i++)scanf("%s",&str[i]);p=str;//将str一维数组指针,赋值给p;sort(p);printf("the output sequence :/n");for(i=0;i<10;i++)printf("%s/n",str[i]);return 0;}void sort(char (*s)[6])//s指向一维数组的指针做函数参数;{int i,j;char temp[6], *t;t=temp;for(i=0;i<9;i++)//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for(j=0;j<9-i;j++)//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;if(strcmp(s[j],s[j+1])>0){strcpy(t,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],t);}}9.7编一程序,用指针数组在主函数中输入十个等长的字符串。
C语言指针习题__附答案
一、选择题1.变量的指针,其含义是指该变量的____b____.a)值b)地址c)名d)一个标志2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是___d__.a)a,point,*&a b)&*a,&a,*pointc)*&point,*point,&a d)&a,&*point ,point3.若有说明;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. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是_b__.main(){int *p,*q,a,b;p=&a;printf(“input a:”);scanf(“%d”,*p);……}a)*p表示的是指针变量p的地址b)*p表示的是变量a的值,而不是变量a的地址c)*p表示的是指针变量p的值d)*p只能用来说明p是一个指针变量5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是__d__.void print_value(int *x){ printf(“%d\n”,++*x);}a)23 b)24 c)25 d)266.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是aA) *p=&a;scanf("%ld",p);B) p=(long *)malloc(8);scanf("%ld",p);C) scanf("%ld",p=&a);D) scanf("%ld",&a);7.有以下程序#include<stdio.h>main(){ int m=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf("%d,%d,%d,%d\n",m,n,*p,*q);}程序运行后的输出结果是bA)1,2,1,2 B)1,2,2,1C)2,1,2,1 D)2,1,1,28.有以下程序main(){ int a=1, b=3, c=5;int *p1=&a, *p2=&b, *p=&c;*p =*p1*(*p2);printf("%d\n",c);}执行后的输出结果是cA)1 B)2 C)3 D)49. 有以下程序main(){ int a,k=4,m=4,*p1=&k,*p2=&m;a=p1==&m;printf("%d\n",a);}程序运行后的输出结果是(d)A)4 B)1 C)0 D)运行时出错,无定值10. 在16位编译系统上,若有定义int a[]={10,20,30}, *p=&a;,当执行p++;后,下列说法错误的是(a)A)p向高地址移了一个字节B)p向高地址移了一个存储单元C)p向高地址移了两个字节D)p与a+1等价11.有以下程序段int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是(d)A)5 B)6 C)8 D)912.若有以下定义,则对a数组元素的正确引用是___d______.int a[5],*p=a;a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)13.若有以下定义,则p+5表示___a____.int a[10],*p=a;a)元素a[5]的地址b)元素a[5]的值c)元素a[6]的地址d)元素a[6]的值14.设已有定义: int a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是(b)A) for(p=a;a<(p+10);a++);B) for(p=a;p<(a+10);p++);C) for(p=a,a=a+10;p<a;p++);D) for(p=a;a<p+10; ++a);15.有以下程序段#include <stdio.h>int main(){ int x[] = {10, 20, 30};int *px = x;printf("%d,", ++*px); printf("%d,", *px);px = x;printf("%d,", (*px)++); printf("%d,", *px);px = x;printf("%d,", *px++); printf("%d,", *px);px = x;printf("%d,", *++px); printf("%d\n", *px);return 0;}程序运行后的输出结果是( a)A)11,11,11,12,12,20,20,20 B)20,10,11,10,11,10,11,10C)11,11,11,12,12,13,20,20 D)20,10,11,20,11,12,20,2016.设有如下定义:int arr[]={6,7,8,9,10};int *ptr;ptr=arr;*(ptr+2)+=2;printf ("%d,%d\n",*ptr,*(ptr+2));则程序段的输出结果为 dA)8,10 B)6,8 C)7,9 D)6,1017.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是__4____. *(a+5)的值是_12________.18.若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是___d___.A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p[0]+2))19.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为___a___.a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j20.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是__8__. *(*(a+1)+0)的值是____8____.21.有以下定义char a[10],*b=a;不能给数组a输入字符串的语句是(b)A)gets(a) B)gets(a[0]) C)gets(&a[0]); D)gets(b);22.下面程序段的运行结果是____c_____.char *s="abcde";s+=2;printf("%d",s);a)cde b)字符'c' c)字符'c'的地址d)无确定的输出结果23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是(c)A) char s[10]="abcdefg"; B) char t[]="abcdefg",*s=t;C) char s[10];s="abcdefg"; D) char s[10];strcpy(s,"abcdefg");24.设已有定义: char *st="how are you"; 下列程序段中正确的是(c)A) char a[11], *p; strcpy(p=a+1,&st[4]);B) char a[11]; strcpy(++a, st);C) char a[11]; strcpy(a, st);D) char a[], *p; strcpy(p=&a[1],st+2);25.有以下程序main(){char a[]="programming",b[]="language";char *p1,*p2;int i;p1=a;p2=b;for(i=0;i<7;i++)if(*(p1+i)==*(p2+i))printf("%c",*(p1+i));}输出结果是(d)A)gm B)rg C)or D)ga26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是____b____.a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);27.以下正确的程序段是_____c____.a)char str[20]; b)char *p;scanf("%s",&str); scanf("%s",p);c)char str[20]; d)char str[20],*p=str;scanf("%s",&str[2]); scanf("%s",p[2]);28.若有说明语句char a[]="It is mine";char *p="It is mine";则以下不正确的叙述是___d_____.a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符29.下面程序的运行结果是___b____.#include <stdio.h>#include <string.h>main(){ char *s1="AbDeG";char *s2="AbdEg";s1+=2;s2+=2;printf("%d\n",strcmp(s1,s2));}a)正数b)负数c)零d)不确定的值30.有以下程序void f(int *x,int *y){int t;t=*x;*x=*y;*y=t;}main(){int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;p=a;q=&a[7];while(*p!=*q){f(p,q);p++;q--;}for(i=0;i<8;i++) printf("%d,",a[i]);}程序运行后的输出结果是__d____。
C语言指针习题及答案
B)ptr2=k
C)ptr1=ptr2
3、若有说明 :int *p,m=5,n; 以下程序段正确的就是
D
D)k=*ptr1*(*ptr2) 。
A)p=&n ; scanf( “%d ”,&p);
C)scanf( “%d”,&n); *p=n ;
4、已有变量定义与函数调用语句
B)p = &n ;
scanf(“%d ”,*p);
均在有效范围内 )
A)&a[0][0]+6*i+j
B)&a[0][0]+4*j+i
C)&a[0][0]+4*i+j
38、下面程序的运行结果就是
B
D)&a[0][0]+6*j+I 。
main ( ) { int x[5]={2,4,6,8,10}, *p, **pp ;
p=x , pp = &p ;
printf( “%d”,*(p++)); printf( “%3d”,**pp); }
A)a+1 表示的就是字符 t 的地址 B)p 指向另外的字符串时 ,字符串的长度不受限制
C 语言指针习题及答案
C)p 变量中存放的地址值可以改变
D)a 中只能存放 10 个字符
19、若已定义 char s[10]; 则在下面表达式中不表示 s[1] 的地址就是
B
。
A)s+1
B)s++
C)&s[0]+1
7、下面判断正确的就是
C
C)*&p,*p,&a 。
D)&a,&*p,p
指针例题经典c语言
指针例题经典c语言经典的 C 语言指针例题可以帮助你理解指针的基本概念和用法。
下面是一个简单的例题:#include <stdio.h>int main() {int num = 42;int *ptr;// 将指针指向变量 numptr = #// 输出变量 num 的值和地址printf("Value of num: %d\n", num);printf("Address of num: %p\n", &num);// 输出指针 ptr 的值(即 num 的地址)和内容printf("Value of ptr: %p\n", ptr);printf("Content of ptr: %d\n", *ptr);// 修改指针所指向的变量的值*ptr = 99;// 输出修改后的变量 num 的值printf("New value of num: %d\n", num);return 0;}这个例题演示了以下几个概念:声明指针:int *ptr; 表示声明了一个整型指针 ptr。
指针赋值:ptr = # 将指针指向变量 num。
输出变量地址:printf("Address of num: %p\n", &num); 输出变量 num 的地址。
输出指针内容:printf("Content of ptr: %d\n", *ptr); 输出指针 ptr 所指向的变量的值。
修改指针所指向的变量:*ptr = 99; 将指针所指向的变量的值修改为 99。
这个例题可以帮助你理解指针是如何存储变量地址、如何访问所指向变量的内容,以及通过指针如何修改变量的值。
你可以在实际编程中修改和扩展这个例题,以加深对指针的理解。
C语言指针单元练习
《C程序设计》函数单元练习学号姓名一、选择题1、对于同类型的指针变量P1和P2,不可能进行的运算是A.p1-p2 B. p1=p2C. p1+p2D. p1==p22、下列不正确的定义是A. int *p=&i,i;B. int *p=0, i;C. int i, *p=&i;D. int t, *p=0;3、下列正确的定义是A. int x=3,*p=1;B. int x=3,*p=0;C. int x=3,*p=x;D. int *p=&x=3;4、下列语句定义p为指向float类型变量d的指针,其中正确的是A. float d=0,*p=d;B. float d=0,*p=&d;C. float *p=&d,d=0;D. float d=0,p=d;5、对语句“int a[10],*p=a;”,下列表述中正确的是A. *p被赋初值为a数组的首地址B. *p被赋初值为数组元素a[0]的地址C. p被赋初值为数组元素a[1]的地址D. p被赋初值为数组元素a[0]的地址6、设有定义 int a=1, b, *p=&a; 则下列语句中使b不等于a的语句是A. b=*&a;B. b = *p;C. b=a;D. b = *a;7、p1指向某个整型变量,要使指针p2也指向同一变量,语句正确的是A. p2=p1;B. p2=**p1;C. p2=&p1;D. p2=*p1;8、假如指针p已经指向变量x,则&*p相当于A. xB. *pC. &xD. **p9、若有说明:int i, j=7,*p=&i; 则与 i=j;等价的语句是A. i=*p;B. *p=*&j;C. i=&j;D. i=**p;10、若有说明语句 int a[5], *p=a; 对数组元素的正确引用是A. a[p]B. p[a]C. *(p+2)D. p+211、假如指针p已经指向某个整型变量x,则(*p)++相当于A. p++B. x++C. *(p++)D. &x++12、若有以下定义,且0<=i<5, 则对数组元素地址的正确表示是int a[ ]={1,2,3,4,5},*p=a, i;A. &(a+i)B. a++C. &pD. &p[i]13、若有以下定义,则 *(p+5) 的值为char s[ ]=”Hello”, *p=s;A. '0'B. '\0'C. '0'的地址D. 不确定的值14、数组定义为“int a[4][5];”,引用“a+3”表示A. a数组第3列的首地址B. a数组第0行第3列元素的值C. 数组第3行的首地址D. a数组第0列第3行元素的值15、数组定义为“int a[4][5];”,引用“*(*a+1)+2”表示A. a[1][0]+2B. a数组第1行第2列元素的地址C. a[0][1]+2D. a数组第1行第2列元素的值16、设指针x指向的整型变量值为25,则printf("%d\n",++*x);的输出是A. 23B. 24C. 25D. 2617、下面各语句中,能正确进行赋字符串操作的语句是A. char s[5] ="ABCDE";B. char s[5] ={'A','B', 'C','D', 'E'};C. char *s; s="ABCDE";D. char *s; scanf("%s",&s);18、有定义如下:int a[5], *p; 则下列描述错误的是A.表达式p=p+1是合法的B.表达式a=a+1是合法的C.表达式p-a是合法的D.表达式a+2是合法的19、执行完C程序中的下列三条语句之后c指向int a, b, *c=&a; int *p= c; p= &b;A.p B. c C. b D.a20、字符串常量"ME"的字符个数为A.4 B. 3 C. 2 D. 121、下列对字符数组进行初始化的语句正确的是A.char a[]= “Hello”;B. char a[][]= {'H’,’e’,’l’,’l’,’o’};B.char a[5]=“Hello”;D. char a[2][5]= {"Hello","World"}22、下列关于指针运算的描述错误的是A.在一定条件下,两个指针可以相加B. 在一定条件下,两个指针可以进行逻辑判断C. 在一定条件下,指针可以为空值D. 在一定条件下,两个指针可以相互赋值23、int a= 10,*p=&a;语句中,p的值是A.10 B. 变量p的地址值C. 变量a的地址值D.无意义24、在下列四种字符串说明或赋值方式中,不正确的是:A. char *p;p=“I am a student”;B. char p1[8]={‘s’,’t’,’u’,’d’,’e’,’n’,’t’};C. char p2[20] ;p2=“I am a student”;D. char p3[ ]=“student”,p4[ ]=“teacher”;25、有说明语句char *name="newspaper"; 则可获取串中字符's'A. name[0]+3B. *name+3C. *(name+3)D. name[4]26、设有变量定义:int aval=2005;int *ap;double *dp;下面赋值正确的是A. ap=aval;B. *ap=&aval;C. dp=ap;D. *dp=*ap27、int a[ 3] [ 3] , *p, i; p=&a[0] [0] ; for(i=0; i<9; i++) p[i] =i; for(i=0;i<3; i++) printf("%d ", a[1] [i] ) ; 程序运行后的输出结果是A. 0 1 2B.1 2 3C. 2 3 4D.3 4 528、有以下程序int a[ 3] [ 3] , *p, i; p=&a [0] [0] ; for ( i=0 ; i<9 ; i++) p[i]=i+1; printf("%d\n", a[1] [2] ) ; 程序运行后的输出结果是A. 3B. 6C. 9D. 229、 int i, x[3] [3] ={ 9, 8, 7, 6, 5, 4, 3, 2, 1} , *p=&x[ 1] [ 1] ;for(i=0; i<4; i+=2) printf("%d ", p[i] ) ;的输出结果是A. 5 2B. 5 1C. 5 3D. 9 730、执行以下程序段后, int a[2] [3] ={ { 1, 2, 3} , { 4, 5, 6} } ; int m, *p; p=&a[0][0] ; m=(*p) *(*(p+2) ) *(*(p+4) ) ; m的值为A. 15B. 14C. 13D. 1231、指针可以用来表示数组元素,下列表示中____________是错误的。
(完整word版)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语言指针习题及答案
12、设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的就是D。
A)s与p完全相同
B)数组s中的内容与指针变量p中的内容相等
C)s数组长度与p所指向的字符串长度相等
D)*p与s[0]相等
指针习题及答案
一.选择题
1、变量的指针,其含义就是指该变量的B。
A)值B)地址C)名D)一个标志
2、已有定义int k=2;int *ptr1,*ptr2;且ptr1与ptr2均已指向变量k,下面不能正确执行的赋值语句就是B。
A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2)
{ for ( ; *s++=*t++; )
if (*s= =’\0’) return 0 ;
return (*s-*t) ;
}
B)strcmp2(char *s,char *t)
{ for ( ; *s++=*t++; )
if (!*s) return 0 ;
return (*s-*t) ;
}
C)strcmp3(char *s,char *t)
8、下面程序段中,for循环的执行次数就是C。
char *s=”\ta\018bc”;
for ( ; *s!=’\0’; s++) printf(“*”) ;
A)9 B)7 C)6 D)5
9、下面能正确进行字符串赋值操作的就是C。
A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’};
C语言指针习题---附复习资料1
一、选择题1. 变量的指针,其含义是指该变量的.a)值 b)地址c)名 d)一个标志2.若有语句 *4;和;下面均代表地址的一组选项是.a),* b)&*,*c)*,* d)*3.若有说明 *5;以下正确的程序段的是.a); b);(""); ("",*p);c)(""); d);4. 以下程序中调用函数给变量a输入数值的方法是错误的,其错误原因是.*p,*;(“ a:”);(“”,*p);a)*p表示的是指针变量p的地址b)*p表示的是变量a的值,而不是变量a的地址c)*p表示的是指针变量p的值d)*p只能用来说明p是一个指针变量5. 已有变量定义和函数调用语句: 25; (); 下面函数的正确输出结果是. ( *x){ (“\n”*x);}a)23 b)24 c)25 d)266.若有说明: *;则不能通过语句正确给输入项读入数据的程序段是A) *; ("",p);B) ( *)(8); ("",p);C) ("",);D) ("",);7.有以下程序{ 12,*,*,*r;("\n",*p,*q);程序运行后的输出结果是A)1,2,1,2 B)1,2,2,1C)2,1,2,1 D)2,1,1,28. 有以下程序{ 1, 3, 5;*p1, *p2, *;*p =*p1*(*p2);("\n");执行后的输出结果是A)1 B)2 C)3 D)49. 有以下程序{ 44,*p1,*p2;1;("\n");程序运行后的输出结果是()A)4 B)1 C)0 D)运行时出错,无定值10. 在16位编译系统上,若有定义 a[]={10,20,30}, *;,当执行;后,下列说法错误的是()A)p向高地址移了一个字节B)p向高地址移了一个存储单元C)p向高地址移了两个字节D)p与1等价11.有以下程序段a[10]={1,2,3,4,5,6,7,8,9,10},*[3];[5];b中的值是()A)5 B)6 C)8 D)912.若有以下定义,则对a数组元素的正确引用是.a[5],*;a)*[5] b)2 c)*(5) d)*(2)13.若有以下定义,则5表示.a[10],*;a)元素a[5]的地址 b)元素a[5]的值c)元素a[6]的地址 d)元素a[6]的值14.设已有定义: a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是()A) (<(10));B) (<(10));C) (10<);D) (<10; );15.有以下程序段<>{ x[] = {10, 20, 30};* = x;= x;= x;= x;(",", *); ("\n", *);0;程序运行后的输出结果是( )A)11,11,11,12,12,20,20,20 B)20,10,11,10,11,10,11,10C)11,11,11,12,12,13,20,20 D)20,10,11,20,11,12,20,20 16.设有如下定义:[]={6,7,8,9,10};*(2)2;("\n",*,*(2));则程序段的输出结果为A)8,10 B)6,8 C)7,9 D)6,1017.若有定义 a[]={2,4,6,8,10,12},*;则*(1)的值是. *(5)的值是.18.若有以下说明和语句,c[4][5],(*p)[5];能正确引用c数组元素的是.A) 1 B) *(3) C) *(1)+3 D) *(p[0]+2) )19.若有定义: a[2][3],则对a数组的第i行j列元素地址的正确引用为.a)*(a[i]) b)() c)*() d)a[i]20.若有以下定义a[2][3]={2,4,6,8,10,12};则a[1][0]的值是. *(*(1)+0)的值是.21.有以下定义a[10],*;不能给数组a输入字符串的语句是()A)(a) B)(a[0]) C)([0]); D)(b);22.下面程序段的运行结果是.2("");a) b)字符'c' c)字符'c'的地址 d)无确定的输出结果23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()A) s[10]=""; B) t[]="",*;C) s[10]""; D) s[10](s,"");24.设已有定义: *" "; 下列程序段中正确的是()A) a[11], *p; (1[4]);B) a[11]; (, );C) a[11]; (a, );D) a[], *p; ([1]2);25.有以下程序a[]=""[]="";*p1,*p2;i;p12;(0<7)(*(p1)*(p2))("",*(p1));输出结果是()A) B) C) D)26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是.a)*p1+*p2; b)p2 c)p12 d)*p1*(*p2);27.以下正确的程序段是.a) [20]; b) *p;c) [20]; d) [20],*;(""[2]); (""[2]);28.若有说明语句a[]=" ";则以下不正确的叙述是.a)1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符29.下面程序的运行结果是.{ *s1="";*s2="";s1222;("\n"(s12));a)正数 b)负数 c)零 d)不确定的值30.有以下程序f( * *y)t;*x;**y;*;a[8]={1,2,3,4,5,6,7,8},*p,*q;[7];(**q){f();}(0<8) (","[i]);程序运行后的输出结果是。
C语言程序设计(指针)习题与答案
return 0;
}
正确答案:Porm
9、如有定义char y[4]="321",*py=&y[0],则表达式*(py+2)的值是____。
正确答案:1
10、如有定义char z[2][4]={"MAT", "LAB"},*pz=&z[1][0];则表达式*pz+1的值是_____。
strcat(s,t);
D.char s[20]=" ", *t="12345";
strcat(s, t);
正确答案:D
8、下面程序段的运行结果是()。
#include <stdio.h>
int main()
{
char s[]="example!", *t;
t=s;
while( *t!='p')
{
printf("%c", *t-32);
6、指向函数的指针变量的值是一个函数的入口地址。(√)
7、作为函数形式参数时,int x[ ][5]与int (*x)[5]两种写法等价。(√)
8、二维M*N数组的名字是一个指向N元数组的指针常量。(√)
9、如果一个变量的值是一级指针变量的地址,则称这个变量为二级指针变量。(√)
10、可以利用指针实现函数返回多个值。(√)
gets(s1);
p1=s1;
p2=s2;
while(*p2++=*p1++);
printf("s2=%s",________);
return 0;
C语言综合训练5(指针)
一、选择题
1.以下叙述中错误的是() A.当在程序的开头包含头文件 stdio. h 时,可以给指针变量赋 NULL B.函数可以返回地址值 C.改变函数形参的值,不会改变对应实参的值 D.可以给指针变量赋一个整数作为地址值 2.以下关于指针的叙述正确是() A.所有类型的指针变量所占内存的大小是一样的 B.指针变量所占内存的大小与其类型有关,char 型指针变量只占 1 个字节, double 型指针变量占 8 个字节 C. 指针变量可直接指向任何类型的变量,而不会出现编译或运行错误 D. 指针变量既可以直接指向结构体,也可以直接指向结构体中某个成员, 而不会出现编译或运行错误 3 关于地址和指针,以下说法正确的是() A.通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量 B.可以取一个常数的地址赋值给同类型的指针变量 C.可以取一个表达式的地址赋值给同类型的指针变量 D.可以取一个指针变量的地址赋值给基类型相同的指针变量 4.以下关于指针的叙述,错误的是() 。 A.两个基类型相同的指针变量不能指向同一个对象 B.可以通过对指针变量自增、自减来移动指针 C.只有两个类型相同的指针才能进行减运算 D.一个指针变量可以通过不同的方式获得一个确定的地址值 5.以下叙述中错误的是( ) A.基类型不同的指针可以直接相互赋值 B.函数可以通过指针行参向所指单元传回数据 C.字符型指针可以指向一个字符串 D.一般情况下,指针的运用可使程序代码效率更高 6.有以下程序: #include<stdio.h>
3
printf(“%d\n”,c);} 执行后的输出结果是() 。 A. 4 B.2 C.1 D.3
18.以下叙述中正确的是() 。 A. 在对指针进行加、减算术运算时,数字 1 表示 1 个存储单位的长度 B.如果 p 是指针变量,则*p 表示变量 p 的地址值 C.如果 p 是指针变量,则&p 是不合法的表达式 D.如果 p 是指针变量,则*p+1 和*(p+1)的效果是一样的 19.以下叙述中正确的是() 。 A.函数的形参类型不能是指针类型 B.函数的类型不能是指针类型 C.设有指针变量为 doubie*p,则 p+1 将指针 p 移动 8 个字节 D.基类型不同的指针变量可以相互混用 20.若有定义语句 int year=2009,*p=&year; ,以下不能使用变量 year 中的值 增至 2010 的语句是。 A. *p+=1 B.(*p)++ C.++(*p) D.*P++ 21.有以下程序: #include <stdio.h> main( ) { int a 10 = { 1,3,5,7,11,13,17}, *p=a; printf(“%d,”, *( p++ ));printf(“%d,”, *( ++p ));} 程序运行后的输出结果是(). A. 3,7B. 3, 5C. 1, 5D.1, 3 22. 有以下程序: #include <stdio.h> main( ) { int a=0, *ptr; ptr = &a;*ptr =3;a = (*ptr) ++; printf(“%d,%d\n”,a,*ptr);} 程序运行后的输出结果是(). A. 4 ,4B. 0, 1C. 1, 4D.0, 4 23 有以下程序: #include <stdio.h>
C语言指针基本概念练习题及参考程序
1、定义整型变量a,实数型变量b,字符型变量c,定义指针变量pa指向a,pb指向b,pc指向c,在printf语句中分别输出&a,&b,&c和pa,pb,pc的值,观察它们的取值情况。
#include<stdio.h>int main(){int a,*pa=&a;float b,*pb=&b;char c,*pc=&c;printf("&a=%d,&b=%d,&c=%d\n",&a,&b,&c);printf("pa=%d,pb=%d,pc=%d\n",pa,pb,pc);return 0;}2、定义整型变量x,y,定义指针变量p1,p2,输入x和y的值,让指针变量p1指向x、y中的大值,p2指向小值,最后输出p1和p2指向的变量的值。
#include<stdio.h>int main(){int x, y, *p1,*p2 ;printf("x,y:");scanf("%d,%d",&x,&y);if(x>y){p1=&x; p2=&y;}else{p1=&y; p2=&x;}printf("%d,%d \n",*p1,*p2);return(0);}3、编程实现:定义整型变量a,b,c,定义指针变量并初始化,使p1指向a,p2指向b,p3指向c,输入变量a、b、c的值,让p1指向最大值,p3指向最小值,p2指向中间值。
#include<stdio.h>int main(){int a,b,c,*p1=&a,*p2=&b,*p3=&c,*t;printf("a,b,c:");scanf("%d,%d,%d",&a,&b,&c);if(*p1<*p2){t=p1;p1=p2;p2=t;}if(*p1<*p3){t=p1;p1=p3;p3=t;}if(*p2<*p3){t=p2;p2=p3;p3=t;}printf("%d,%d,%d\n",*p1,*p2,*p3);return(0);}。
C语言(指针)单元练习五
36 C语言(指针)单元练习五(答案见底)1 下列语句的输出结果是______。
int **pp,*p,a=5,b=8;pp=&p;p=&a;p=&b;printf("%d,%d",*p,**pp);A. 5,8B.8,5C. 8,8D. 5,52 如下程序的输出结果是______。
#include <stdio.h>#include <ctype.h>#include <string.h>void fun(char *p){ int i,k;char s[30];for(i=0,k=0;p[i]!='\0';i+=2)if(!isspace(*p+i)&&(*(p+i)!='a'))s[k++]=p[i];s[k]='\0';strcpy(p,s);}main(){ char s[30]="p r o g ra m e";fun(s);puts(s);return;}A. programeB. progrC. ameD. emargorp3 以下语句的输出结果是______。
char s[ ]="one",*p=s;printf("%d\n",*(p+3));A. 字符e的地址B. 0C. 12D. 204 以下函数的功能是比较两个字符串s和t的大小,函数中应填入______。
comp(char *s, char *t){ for (;*s==*t;______)if (*s=='\0')return(0);return(*s-*t); }A. s++B. t++C. s++;t++D. s++,t++5 以下程序段的结果为______。
static char s[ ]="language";char *p;for(p=s;p<s+8;p+=2)putchar(*p);A. languageB. lnugC. agaeD. 语法错误6 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是______。
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 ;sca nf( “ %d',&p); scanf(“%d' ,*p); C ) scanf( “ %c ”,&n); D ) p = &n ;*p=n ;*p = m ;4.已有变量定义和函数调用语句: int a=25;print_value(&a);下面函数的输出结果是D 。
void prin t_value(i nt *x) { printf( “ %d ,++*x); }A)23B )) 25 D )265.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是CA) p 仁&m; p2=&p1 ; B ) p 仁&m; p2=&n; *p1=*p2 ; A) C=*p1+*p2 B ) p2=c C ) p 仁p212.设有程序段:char s[ ]= ” china ” ; char*则下面叙述正确的是 A) s 和p 完全相同C ) p 仁&m; p2=p1 ; 6. 若有语句: A ) a,p,*&a7. 下面判断正确的是 A ) B ) C ) D ) p1=&m; *p1=*p2 ;int *p,a=4;和p=&a ;下面均代表地址的一组选项是 C ) *&p,*p,&aB ) &*a,&a,*pC 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指针单元练习五一.单选1.下列语句的输出结果是______。
int **pp,*p,a=5,b=8;pp=&p;p=&a;p=&b;printf("%d,%d",*p,**pp);A. 5,8B.8,5C. 8,8D. 5,52.如下程序的输出结果是______。
#include <stdio.h>#include <ctype.h>#include <string.h>void fun(char *p){ int i,k;char s[30];for(i=0,k=0;p[i]!='\0';i+=2)if(!isspace(*p+i)&&(*(p+i)!='a'))s[k++]=p[i];s[k]='\0';strcpy(p,s);}main(){ char s[30]="p r o g ra m e";fun(s);puts(s);return;}A.programeB.progrC. ameD. emargorp3. 以下语句的输出结果是______。
char s[]="one",*p=s;printf("%d\n",*(p+3));A. 字符e的地址B. 0C. 12D. 204. 以下函数的功能是比较两个字符串s和t的大小,函数中应填入______。
comp(char *s, char *t){ for (;*s==*t;______)if (*s=='\0')return(0);return(*s-*t); }A. s++B. t++C. s++;t++D. s++,t++5. 以下程序段的结果为______。
static char s[]="language";char *p;for(p=s;p<s+8;p+=2)putchar(*p);A. languageB. lnugC. agaeD. 语法错误6. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是______。
#include <stdio.h>void main(){ int *p,a; p=&a;printf("input a:");scanf("%d",*p);… }A. *p表示的是指针变量p的地址。
B. *p表示的是变量a 的值,而不是变量a的地址。
C. *p表示的是指针变量p的值。
D. *p只能用来说明p是一个指针变量。
7. 在int (*p)[3]; 定义中,标识符p______。
A.定义非法。
B.是一个指针数组,每个元素是一个指向整型变量的指针。
C.是一个指针,指向一个具有三个元素的一维数组。
D.是一个指向整型变量的指针。
8. 如下程序的执行结果是______。
#include <stdio.h>void 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+=*(*(p+i)+j);printf("%d\n",k); }A. 60B. 68C. 99D. 1089. 能正确执行x和y交换且返回结果的函数是______。
A. fun(int *x,int *y)B. fun(int x,int y){ int p; { int t;p=*x;*x=*y;*y=p; } t=x;x=y;y=t; }C. fun(int *x,int *y)D. fun(int *x,int *y){ *x=*y;*y=*x; } { *x=*x-*y; }10. 若已知:int x; int y; 则下面表达式合法的是______。
A. &xB. &(x+y)C.&5D.&(y+1)11. 下列程序段运行后输出______。
char s1[5],s2[]="enjoy";s1=s2;printf("%s",s1);A.enjoyB.joyC. enD. 编译出错12. 以下程序调用findmax函数返回数组中的最大值,在下划线处应填入的是______。
#include <stdio.h>findmax(int *a,int n){ int *p,*s;for(p=a,s=a; n>0;n--,p++)if (_______) s=p;return(*s); }main(){ int x[5]={12,21,13,6,18};printf("%d\n",findmax(x,5)); return;}A. p>sB. *p>*sC. a[p]>a[s]D. p-a>p-s13. 以下程序的执行结果是______。
#include <stdio.h>void main(){ int a=100,b=10,*p1,*p2;p1=&b;p2=&a;printf("%d,%d\n",*p1,*p2); return;}A.分别是a和b的地址B. 不确定的值C. 10,100D. 100,1014. 如下程序的执行结果是______。
#include <stdio.h>void main(){ char a[]="you are a boy",b[20];int i;for (i=0;*(a+i)!='\0';i++) *(b+i)=*(a+i);*(b+i)='\0';for (i=0;b[i]!='\0';i++) printf("%c",b[i]); }A.不确定的值B.字符串a的地址C. you are a boyD.数组b的地址15. 若有以下说明和语句, 则p2-p1的值为多少______。
int a[10], *p1, *p2;p1=a;p2=&a[5];A. 5B. 6C. 10D. 没有指针与指针的减法16. 已定义以下函数:fun(int *p) { return *p; }该函数的返回值是______。
A.不确定的值B.形参p中存放的值C.形参p所指存储单元中的值D.形参p的地址值17. 以下程序的运行结果是______。
#include <stdio.h>void main(){ int a[4][3]={ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12};int *p[4], j;for(j=0; j<4; j++)p[j]=a[j];printf("%2d,%2d,%2d,%2d\n", *p[1], (*p)[1], p[3][2], *(p[3]+1));}A. 4, 4, 9, 8B. 程序出错C. 4, 2,12,11D. 1, 1, 7, 518. 以下程序的输出结果是______。
#include <stdio.h>char cchar(char ch){ if(ch>='A'&&ch<='Z') ch=ch-'A'+'a';return ch; }main(){ char s[]="ABC+abc=defDEF",*p=s;while(*p){ *p=cchar(*p);p++; }printf("%s\n",s); return; }A. abc+ABC=DEFdefB. abc+abc=defdefC. abcaABCDEFdefD. abcabcdefdef19. 已定义以下函数fun(char *p2, char *p1){ while((*p2=*p1)!='\0'){ p1++;p2++; } }函数的功能是:______。
A.将p1所指字符串复制到p2所指内存空间。
B.将p1所指字符串的地址赋给指针p2。
C.对p1和p2两个指针所指字符串进行比较。
D.检查p1和p2两个指针所指字符串中是否有'\0'。
20. 执行以下语句后,a的值为______。
int a,b,c,x=3,y=7,z=6;int *p1=&x,*p2=&y,*p3;a=p1==&x;b=2*(-*p2)/(*p1)+5;c=*(p3=&z)=*p1*(*p2);A. -1B. 0C. 1D. 2121. 有以下程序:#include <stdio.h>void main(){ char str[]="xyz",*ps=str;while(*ps) ps++;for(ps--; ps-str>=0;ps--) puts(ps); }执行后输出结果是______。
A. yzB. zC. zD. xxyz yz yz xy xyz xyz22. 有以下程序:#include <stdio.h>void main(){ int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;pa=a;for(i=0; i<3; i++)if(i<2) pa[1][i] = pa[1][i]-1;else pa[1][i]=1;printf("%d\n",a[0][1]+a[1][1]+a[1][2]); }执行后输出结果是______。
A.7B.6C.8D.无确定值23. 下列语句执行后输出的结果是______。
char *s1="world",*s2="word";printf("%d\n",strlen(strcpy(s1,s2)));A.4B.5C. 6D. 724. 如下程序的执行结果是______。
#include <stdio.h>void main(){ static char a[3][3]={{'A','B','C'},{'D','E','F'},{'G','H','I'}};int i;for (i=0;i<3;i++) printf("%c",*(*(a+i)+i)); }A. AEIB. 不确定的值C. ABCD. 分别为a[i][j]的地址25. 执行以下程序后,b的值为______。