C指针练习题带答案
- 格式:doc
- 大小:81.50 KB
- 文档页数:4
c语言指针编程练习题2. 从命令行输入两个实型数据,请比较大小并输出。
参考答案3. 输入3个数a,b,c,按大小顺序输出。
利用指针方法参考答案4. 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
参考答案5. 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数参考答案6. 有n个人围成一圈,顺序排号。
从第一个人开始报数,凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
参考答案7. 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
参考答案8. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n 参考答案9. 八进制转换为十进制参考答案10. 编一个函数fun,函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。
形参n给了数组中数据的个数:利用指针odd返回奇数之和,利用指针even返回偶数之和。
例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。
参考答案11. 复制字符串。
参考答案一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出 #includevoid swap{int temp;temp = *pa;*pa = *pb;*pb = temp;}void main{int a,b,c,temp;scanf;ifswap;ifswap;ifswap;printf;}二、C语言用指针方法输入3个字符串按由小到大顺序输出#include “stdio.h”#include “string.h”int main{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;scanf;fflush;printf;scanf;fflush;printf;scanf;}fflush; if>0) {t=p1;p1=p2;p2=t;} if>0) {t=p1;p1=p3;p3=t;} if>0) {t=p2;p2=p3;p3=t;} printf; return 0;9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#includevoid main{int a=0,b=0,c=0,d=0,e=0,i=0;char *p,s[20];while)!=‘\n’)i++;p=s;while{ifa++;else ifb++;else ifc++;else ifd++;else e++;p++;}printf;printf;}9.5写一个函数,将3矩阵转置 #include “stdio.h”void Transpose[3]){int temp;int i, j;for/*转置*/{for{temp = *+i);*+i) = *+j);*+j) = temp;}}}void main{int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Transpose;for{for{printf;}printf;}}}.6用指向一维数组的指针做函数参数#include#includeint main{void sort[6]);//一维数组的指针做函数参数int i;char str[10][6]; char [6];//定义一维数组的指针做函数参数printf;forscanf;p=str;//将str一维数组指针,赋值给p;sort;printf;forprintf;return 0;}void sort[6])//s指向一维数组的指针做函数参数; {int i,j;char temp[6], *t;t=temp;for//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;if>0){strcpy;strcpy;strcpy;}}9.7编一程序,用指针数组在主函数中输入十个等长的字符串。
C语言指针习题及答案指针主要内容的习题及答案?选择题1.变量的指针,其含义是指该变量的A)值B)地址B 。
D )一个标志C)名2.已有定义int k=2;int *ptr1,*ptr2; 且ptrl 和ptr2 均已指向变量k,下面不能正确执行的赋值语句是 B 。
A) k=*ptr1+*ptr2 B) ptr2=k C) ptr1=ptr2 D) k=*ptr1*(*ptr2)3. 若有说明:int *p,m=5,n;以下程序段正确的是 D _________ 。
A)p=&n ; B)p = &n ;seanf( %d”,&p);seanf( %d”,*p);C) seanf( %d”,&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\n”,++*x); }A) 23 B) 24 C) 25 D) 265. 若有说明:int *p1, *p2,m=5,n; 以下均是正确赋值语句的选项是____C _______ 。
A) p仁&m p2=&p1 ; B) p仁&m p2=&n *p1 =*p2 ;C) p仁&m p2=p1 ; D) p仁&m *卩仁*p2 ;6. 若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是__________D _____ 。
A) a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p7. 下面判断正确的是__C __________ 。
A) char *a=”ch in a”;等价于char *a; *a=”ch in a”;B) char str[1O]={ china”};等价于char str[1O]; str[ ]={ china”;}C) char *s=”china”;等价于char *s; s=”china” ;D) char c[4]=”abc',d[4]= ”abc”;等价于char c[4]=d[4]= ”abc ;8. 下面程序段中,for循环的执行次数是 C _________ 。
指针主要内容的习题及答案•选择题1. 变量的指针,其含义是指该变量的 __B ____________ 。
A )值 B )地址 C )名D)一个标志2.已有定义int k=2;int *ptr1,*ptr2; 且ptrl 和ptr2均已指向变量k ,下面不能正确执行的赋值语句是 B。
4.已有变量定义和函数调用语句:int a=25;print_value (&a );下面函数的输出结果是 D __________________void prin t_value(i nt *x) { printf(“ %d\n” ,++*x); }A) 23B) 24C) 25D) 265.若有说明:int *p1, *p2,m=5,n; 以下均是正确赋值语句的选项是 ____C ____________ 。
A)p 仁&m; p2=&p1 ;B ) p 仁&m; p2=&n; *p1 =*p2 ;C ) p 仁&m; p2=p1 ; D) p 仁&m; *p 仁*p2 ;6.若有语句:int *p,a=4;和p=&a ;下面均代表地址的一组选项是 ____________D _________ 。
A) a,p,*&a B)&*a,&a,*p C ) *&p,*p ,&a D )&a,&*p,p7. 下面判断正确的是__C _________________ 。
A) char *a= ” china ” ; 等价于 char *a; *a=” china ” ;B) char str[1O]={“ china ” };等价于 char str[1O]; str[ ]={“ china ” ;}C)char *s= ” china ” ; 等价于 char *s; s= ” china ” ;A) k=*ptr1+*ptr2 B ) ptr2=k C ) ptr1=ptr2 3.若有说明:int *p,m=5,n; A ) p=&n ; seanf(“ %d ,&p);C ) scanf( “ %d ,&n);*p=n ;以下程序段正确的是Bscanf ( D*p = m ;D ) k=*ptr1*(*pt ⑵ D。
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分配( )字节的空间。
第七章指针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)。
一、用指针方法编写一个程序,输入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.语句int a=10,*point=&a; D 其值不为地址。
A. pointB. &aC. &pointD. *point2.若p为指针变量,y为变量,则y = *p++;的含义是 A A.y=*p;p++ B.y=(*p)++ C.y=p;p++ D.p++;y=*p 3.语句char str[]=”visual C++”;char *p=str;则p的值为 BA. ”visual C++”B.str的首地址C. \nD.”v”4.设有说明语句char *s[]={“student”,”Teacher”,”Father”,”Month”}, *ps=s[2];执行语句:printf(“%c,%s,%c”,*s[1],ps,*ps);则输出为AA.T,Father,FB.Teaher,F,FatherC. Teacher,Father,FatherD.语法错,无输出5.下列说明或赋值语句,不正确的是 CA. char *p;p=”Visual C++”;B. char p1[12]={‘v’,’i’,’s’,’u’};C. char p2[12];p2=”Visual C++”D. char p3[]=”Visual”;6.现有int b[3][4],*p;p=(int *)b;若要指针p指向b[2][3],以下正确的是 BA.p+=3*4+3B.p+=2*4+3C. p+=(3*4+3)*sizeof(int)D.p+=(2*4+3)*sizeof(int)7.语句int i,*p1,**p2;以下语句语法不正确的是 BA.p1=&i;B. p2=&i;C.p2=&p1;D.i=’\0x23’;8.如下图结构体说明和变量的定义,p指向a,q指向变量b.下面不能..把结点b连接到结点a之后的语句是 BC. p->next=&b;D.(*p).next=q;9.下面正确的语句是 AA. int a[3][4],(*p)[4]; p=a;B. int a[3][4],*p[4]; p=a;C. int a[3][4],*p; p=a;D. int a[3][4],**p;*p=a;10.以“追加”方式打开文本文件a:\aa.dat,下列语句中哪一个是正确的是 BA.fp=fopen("a:\\aa.dat","ab");B. fp=fopen("a:\\aa.dat","a");C. fp=fopen("a:\\aa.dat","r+");D. fp=fopen("a:\\aa.dat","w");11.设有函数定义:int f1(void){return 100,150;}调用函数f1()时, BA.函数返回值100B. 函数返回值150C. 函数返回二个值100和150D. 语句return 100,150;语法错.12.数组作为函数的形参时,把数组名作为实参,传递给函数的是 AA.该数组的首地址B. 该数组的元素个数C. 该数组中的各元素值D. 该数组的大小13.执行以下语句序列:则 Aenum {Sun,Mon,Tue,Wed,Thu,Fri,Sat}c1,c2; //Ac1=Mon; //Bprintf(“%d”,c1);A.输出1B.输出2C.输出0D. B行语法错14.执行以下语句序列:则 Cchar *p1=”Speaking”; //Achar *p2=”English”; //Bchar *p3=”a piece of cake”; //Cchar *str[]={p1,p2,p3}; //Dprintf(“%c”,*(str[0]+1));A.输出EnglishB.输出SpeakingC.输出pD. D行语法错二、填空题1.(2*2分=4分)下面程序的运行结果为16 、 2void main( ){static int a[3][2]={{12},{14,16},{1,2}};int *p=a[1];printf(“%d\n”,*(p+1));printf(“%d\n”,*(p+3));}2.(2*2分=4分)若有以下程序段,则*(*(b+2)+1)的值为11 ,*(*(p+1)+1)的值为7static int b[3][2]={1,3,5,7,9,11};int (*p)[2];p=b;3.(1*4分=4分)下面程序的运行结果为26#include<stdio.h>void sub(int *x,int i,int n){if(n<=i)sub(x,i,3*n);*x+=n++;}void main( ){int x=0;sub(&x,12,2);printf(“%d”,x);}4.(2*2分=4分)以下程序运行结果为_ Hello,world _、ello,world void main(){char *p,*q;char str[]="Hello,World\n";q = p = str;p++;printf(“%s\n”,q);printf(“%s\n”,p);}5. (1*4分=4分)以下程序运行结果是__121232343454_________ void main(){short ar[5]={1,2,3,4,5 };short * par=&ar[1];int i;for(i=0; i<4; i++){printf(“%d %d %d”,ar[i],par[i],*(ar+i));}}6.(2*2分=4分) 以下程序运行结果是__200 100_____void swap2(int *x,int *y){int t;t=*x;*x=*y;*y=t;}void main( ){ int a=100,b=200;swap2(&a,&b);printf(“%d\t%d”,a,b);}7.(3*2分=6分)void fun(int n, int *s){ int f1,f2;if(n= =1||n= =2)*s=1;else{fun(n-1,&f1);fun(n-2,&f2);*s=2*f1+f2+1;printf(“%d\t%d”,f1,f2);}}void main( ){ int x;fun(4,&x);printf(”x=%d\n”,x);}程序输出的第一行是1 1 第二行是4 1 最后一行是x=108. (3*2分=6分)void f(int *q1,int *q2,int *q3){*q3=*q1+*q2;}void main( ){ int i,j,a[3][3]={1,1},*p1=a[0],*p2=a[0]+1,*p3=a[0]+2;for(i=2;i<9;i++)f(p1++,p2++,p3++);for(i=0;i<3;i++){ for(j=0;j<3;j++)printf(“%d”,a[i][i]);printf(’\n’);}}程序输出的第一行是111 第二行是555 最后一行是343434 9.(2*3分=6分)int f(int x,int y){return x*y;}void main( ){ int i,j,(*fun)(int,int);fun=f;for(i=1;i<4;i++){ switch(i){case 1:case 2: j=(*fun)(i,i+1);break;case 3: j=(*fun)(i-1,i+2);break;}printf(”j=%d”,j);}}程序输出的第一行是j=2 第二行是j=6 最后一行是j=10三、完善程序1.(2*3分=6分)以下min 函数的功能是:在非空单向链表中查找结点数据域为最小的值,并作为函数返回值.链表如下.struct NODE{int data;NODE *next;};int min(NODE *first){NODE *p;int m;p=first;m=p->data;for(p=p->next;p!=NULL;p= p->next )if(m> p->data )m=p->data;return m;}2.(3*2分=6分)以下程序求二维数组的平均值float average(float (*p)[4],int n){float sum=0;for(int i=0; i<n ;i++){for(j=0;j<4;j++)sum+= (*p)[j] 或 *(*p+j) ;p++;}return sum/(n*4);}void main( ){ float score[3][4]={{56,65,70,76},{89,97,52,81},{90,99,91,86}};printf(”平均值=%f ”,average(score, 3 ));}3. (2*3.5分=7分)以下程序实现将以L 为头指针的链表逆置(设结点个数n>2),即将链表头当链表尾,链表尾当链表头。
一、选择题1. 以下程序的运行结果是。
#include<stdio.h>void sub(int x, int y, int *z){*z=y-x;}int main(){int a,b,c;sub(10, 5, &a);sub(7, a, &b);sub(a, b, &c);printf("%4d,%4d,%4d\n",a,b,c);return 0;}A.5,2,3 B.-5,-12,-7C.-5,-12,-17 D.5,-2,-72. 执行以下程序后,a的值为,b的值为。
#include<stdio.h>int main(){int a,b,k=4,m=6, *p1=&k, *p2=&m;a= p1= =&m;b=(-*p1)/(*p2)+7;printf("a=%d\n",a);printf("b=%d\n",b);return 0;}A.-1 B.1 C.0 D.4A.5 B.6 C.7 D.103. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误的原因是。
int main(){int *p,*q,a,b,;p=&a;printf("intput a:");scanf("%d",*p);...}A .*p 表示的是指针变量p 的地址B .*p 表示的是变量a 的值,而不是变量a 的地址C .*p 表示的是指针变量p 的值D .*p 只能用来说明p 是一个指针变量4. 有如下语句int a=10,b=20,*p1,*p2; p1=&a; p2=&b; 如左图所示,若要实现右图所示的存储结构,可选用的赋值语句是 。
A .*p1=*p2B .p1=p2C .p1=*p2D .*p1=p25. 若需要建立如图所示的存储结构,且已有说明float *p, m=3.14; 正确的赋值语句是 。
c指针类练习题及答案1、利用指针,编写用于交换两个整型变量值的函数。
程序运行结果如下:输入:56输出:65#includeuingnamepacetd;voidwap(int某某p,int某yp){inttmp;tmp=某某p;某某p=某yp;某yp=tmp;}intmain(){inta,b;cin>>a>>b;wap(&a,&b);cout<2、编写主程序,将输入字符串反序输出。
程序运行结果如下:输入:ABCDEFGHIJK输出:KJIHGFEDCBA#include#includeuingnamepacetd;intmain(){chartr[100];cin>>tr;intlen;len=trlen(tr);char某p=&tr[len-1];while(p>=tr){cout<cout<}3、使用指针编写一个用于对整型序列进行排序的函数,排序方法使用简单选择排序法。
程序的运行结果如下所示:输入(第一个数是序列的长度):6272231输出:122237#includeuingnamepacetd;voidelectort(int某lit,intcount){for(inti=0;iintk=i;for(intj=i+1;jif(某(lit+j)inttmp=某(lit+i);某(lit+i)=某(lit+k);某(lit+k)=tmp;}}}intmain(){intn;cin>>n;intarray[20];for(intj=0;j>array[j];electort(array,n);for(inti=0;icout<4、用指针编写一个对整型数组进行冒泡排序函数。
冒泡排序是指将相邻的元素进行比较,如果不符合所要求的顺序,则交换这两个元素;对整个数列中所有的元素反复运用上法,直到所有的元素都排好序为止。
指针习题及答案一.选择题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) 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 。
void print_value(int *x){ printf(“%d\n”,++*x); }A)23 B)24 C)25 D)265、若有说明: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 ;6、若有语句:int *p,a=4;与p=&a;下面均代表地址得一组选项就是 D 。
A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p7、下面判断正确得就是 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” ;8、下面程序段中,for循环得执行次数就是 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、789include<stdio.h>main(){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=&n;scanf("%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=&a;p2=&b;swap(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的值是()。
已知char s1[10],*s2=”abc\0def”;则执行语句strcpy(s1,s2);之后,变量strlen(s1)的值是。
若有一下定义char* s="\ta\017bc";则指针变量s与指向的字符串所占的字节数分别是()。
若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是___4___. *(a+5)的值是_____12____.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是__8___. *(*(a+1)+0)的值是____8____.若有以下定义int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是(),*(*(a+1))的值是()。
9、若有定义“int a[9],*p=a;”,并在以后的语句中未改变p的值,不能表示a[2]地址的表达式是:。
A、p+2 B、a+2 C、a++ D、++(++p)10.若有“char a[4]={‘A’,’\0’,’D’},*p=a,i=2,j=4;”,则下列表达式值不是1的有:A、strlen(a);B、j||jC、*(p+2)D、--i11.以下程序的输出结果是。
A、Afgh123456 B、Abfhd C、Afghd D、Afgd#include<string>main(){char *p1,*p2,ch[20]=”AbCdEfG123456”;p1=”abcd”;p2=”efgh”;strcpy(ch+1,p2+1);strcpy(ch+3,p1+3);printf(“%s\n”,ch);}12.下面程序运行结果:cdechar* s="abcde";s+=2;printf("%s",s);13.下面程序把数组元素中的最小值放入a[0]中。
则在if语句中条件表达式应该是 . main(){int a[10]={6,7,2,9,1,10,5,8,4,3},*p=a,I;for(i=0;i<10;i++,p++) if( ) *a=*p;printf(“%d”,*a);}A、p>aB、*p<a[0]C、*p<*a[0]D、*p[0]<*a[0]14.下面程序段运行结果:char a[]="language",*p;p=a;while(*p!='u'){ printf("%c",*p-32); p++; }(14)以下程序的输出结果是。
main(){char c[3][4]={“asd”,”GHJ”,”78”},*p[3];int i;for(i=0;i<3;i++) p[i]=c[i];for(i=0;i<3;i++) printf(“%s”,p[i]);}A、GHJ78B、asdGHJ78C、asdGHJD、ASDGHJ7815.以下程序段的输出结果是A) 68 B) 0 C) 字符D的地址D) 不确定的值char str[]="ABCD",*p=str;printf("%d\n",*(p+4));16. 变量的指针,其含义是指该变量的( )。
A)值 B)地址 C)名 D)一个标志17. .已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是。
A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) (17) 设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是( )。
A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2) 18. 下面判断正确的是。
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” ;(18) 以下说明不正确的是。
A)char a[10]=”china” ; B)char a[10],*p=a; p=”china”; C)char *a; a=”china” ; D)char a[10],*p; p=a=”china”; 19. 已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结( )。
void print_value(int *x){ printf(“%d\n”,++*x); }A)23 B)24 C)25 D)26(19)若有以下定义语句:int a[4]={0,1,2,3},*p;p=&a[1];则++(*p)的值是。
20. 若有说明:int i,j=9,*p1=&j;则与i=j;等价的语句是:A、i=*p1B、*p1=*&jC、i=&jD、i=**p121. 若有以下定义,则不能表示a数组元素的表达式是。
int a[10]={5,1,3,4,2,6,7,8,9,11},*p=a;A、*pB、a[10]C、*aD、a[p-a]22. 写出下列程序的运行结果:A、6 B、0 C、4 D、2main(){int a[]={2,4,6},*pr=&a[0],x=6,y,z;for(y=0;y<4;y++)z=(*(pr+y)<x)?*(pr+y):x;printf(“%d\n”,z);}23. 写出下列程序的运行结果:main(){static char a[]=”abcdefGH”,b[]=”abCDefGh”;char *pt1,*pt2;int k;pt1=a;pt2=b;for(k=0;k<=7;k++) if(*(pt1+k)==*(pt2+k))printf(“%c”,*(pt1+k));printf(“\n”);}24. 设有说明语句:char a[]=”It is mine”;char *p=”It is mine”;则以下不正确的叙述是( )。
A)a+1表示的是字符t的地址B)p指向另外的字符串时,字符串的长度不受限制C)p变量中存放的地址值可以改变D)a中只能存放10个字符25. 若已定义char s[10];则在下面表达式中不表示s[1]的地址是。
A)s+1 B)s++ C)&s[0]+1 D)&s[1]26. 若有定义:int a[5],*p=a;则对a数组元素的正确引用是。
A)*&a[5] B)a+2 C)*(p+5) D)*(a+2)27. 若有定义:int a[5],*p=a;则对a数组元素地址的正确引用是。
A)p+5 B)*a+1 C)&a+1 D)&a[0]28. 若有定义:int a[2][3];则对a数组的第i行第j列元素值的正确引用是。