C语言指针练习题
- 格式:doc
- 大小:77.00 KB
- 文档页数:8
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编一程序,用指针数组在主函数中输入十个等长的字符串。
1、int *p 的含义是(B)A.p是一个指针, 用来存放一个整型数B.p是一个指针, 用来存放一个整型数据在内存中的地址C.p是一个整型变量D. 以上都不对2、以下函数用来求出两整数之和,并通过形参将结果传回,请填空。
void func(int x,int y, ___int*____ z){ *z=x+y; }3、有如下程序段(B)int *p,a=10,b=1;p=&a; a=*p + b;执行该程序段后,a的值是A. 12B. 11C. 10D. 编译出错4、若己定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是( C)A) p+1B) a+1C) a++D) ++p5、以下程序运行后的输出结果是(A)void main( ){ int a[ ]={1,2,3,4,5,6,7,8,9,0},*p;for(p=a;p<a+10;p++) printf("%d,",*p);}A)1,2,3,4,5,6,7,8,9,0,B)2,3,4,5,6,7,8,9,10,1,C)0,1,2,3,4,5,6,7,8,9,D)1,1,1,1,1,1,1,1,1,1,6、下面程序的输出是(D)void prtv(int *x)printf("%d\n", ++*x);}main(){ int a=25;prtv(&a);}A) 23 B) 24 C) 25D) 267、有以下函数(B)char fun(char *p){ return p; }该函数的返回值是A) 无确切的值B) 形参p中存放的地址值C) 一个临时存储单元的地址D) 形参p自身的地址值8、下列程序的输出结果是(7)#include<stdio.h>void fun (int *p1, int *p2){ if (*p1>*p2) printf ("%d\n",*p1);else printf ("%d\n",*p2);}void main ( ){ int a=3,b=7;fun (&a, &b);}9、下列程序的运行结果是(B)void fun(int *a, int *b){ int *k;k=a; a=b; b=k;}main(){ int a=3, b=6, *x=&a, *y=&b;fun(x,y);printf("%d %d", a, b);}A) 6 3 B) 3 6 C) 编译出错D) 0 010、以下程序调用findmax函数返回数组中的最大值(B)findmax(int *a,int n){ int *p,*s;for(p=a,s=a; p-a<n; p++)if ( ) s=p;return(*s);}main(){ int x[5]={12,21,13,6,18};printf("%d\n",findmax(x,5));}在下划线处应填入的是(B)A) p>s B) *p>*s C) a[p]>a[s] D) p-a>p-s11、下列程序段的输出结果是(A)void fun(int *x, int *y){ printf("%d %d", *x, *y); *x=3; *y=4;}main(){ int x=1,y=2;fun(&y,&x);printf("%d %d",x, y);}A) 2 1 4 3 B) 2 1 3 4 C) 1 2 1 2 D) 2 1 1 212、以下程序执行后输出的结果是___84________。
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分配( )字节的空间。
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语言指针习题附答案c语言指针习题--附答案一、选择题1.变量的指针,其含义就是指本变量的_________.a)值b)地址c)名d)一个标志2.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是_____.a)a,point,*&ab)&*a,&a,*pointc)*&point,*point,&ad)&a,&*point,point3.若有说明;int*p,m=5,n;以下正确的程序段的是________.a)p=&n;b)p=&n;scanf(\scanf(\c)scanf(\d)p=&n;*p=n;*p=m;4.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是________.main(){int*p,*q,a,b;p=&a;printf(“inputa:”);scanf(“%d”,*p);……}a)*p则表示的就是指针变量p的地址b)*p表示的是变量a的值,而不是变量a的地址c)*p表示的是指针变量p的值d)*p 只能用来说明p是一个指针变量5.尚无变量定义和函数调用语句:inta=25;print_value(&a);下面函数的恰当输入结果就是________.voidprint_value(int*x){printf(“%d\\n”,++*x);}a)23b)24c)25d)266.若有说明:long*p,a;则不能通过scanf语句正确给输入项读入数据的程序段是a)*p=&a;scanf(\,p);b)p=(long*)malloc(8);scanf(\,p);c)scanf(\,p=&a);d)scanf(\,&a);7.有以下程序#includemain(){intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(\}程序运行后的输出结果是a)1,2,1,2c)2,1,2,18.存有以下程序main(){inta=1,b=3,c=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf(\}继续执行后的输入结果就是a)19.有以下程序main(){inta,k=4,m=4,*p1=&k,*p2=&m;a=p1==&m;printf(\}程序运行后的输出结果是()a)410.在16十一位编译系统上,若存有定义inta[]={10,20,30},*p=&a;,当继续执行p++;后,以下观点错误的就是()a)p向低地址安远了一个字节c)p向低地址安远了两个字节b)p向高地址移了一个存储单元d)p与a+1等价b)1c)0d)运行时出错,无定值b)2c)3d)4b)1,2,2,1d)2,1,1,211.存有以下程序段inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是()a)5b)6c)8d)912.若有以下定义,则对a数组元素的正确引用是_________.inta[5],*p=a;a)*&a[5]b)a+2c)*(p+5)d)*(a+2)13.若有以下定义,则p+5表示_______.inta[10],*p=a;a)元素a[5]的地址b)元素a[5]的值c)元素a[6]的地址d)元素a[6]的值14.设尚无定义:inta[10]={15,12,7,31,47,20,16,28,13,19},*p;以下语句中恰当的就是()a)for(p=a;ad)for(p=a;a15.存有以下程序段#includeintmain(){intx[]={10,20,30};int*px=x;printf(\printf(\px=x;printf(\printf(\px=x;printf(\printf(\px=x;printf(\printf(\return0;}程序运行后的输入结果就是()a)11,11,11,12,12,20,20,20b)20,10,11,10,11,10,11,10c)11,11,11,12,12,13,20,20d)20,10,11,20,11,12,20,2016.设有如下定义:intarr[]={6,7,8,9,10};int*ptr;ptr=arr;*(ptr+2)+=2;printf(\则程序段的输出结果为a)8,10b)6,8c)7,9d)6,1017.若有定义:inta[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是______.*(a+5)的值是_________.18.若存有以下表明和语句,intc[4][5],(*p)[5];p=c;能够恰当提及c数组元素的就是______.a)p+1b)*(p+3)c)*(p+1)+3d)*(p[0]+2))19.若存有定义:inta[2][3],则对a数组的第i行j列元素地址的恰当提及为______.a)*(a[i]+j)b)(a+i)c)*(a+j)d)a[i]+j20.若有以下定义:inta[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____.*(*(a+1)+0)的值是________.21.存有以下定义chara[10],*b=a;不能给数组a输入字符串的语句是()a)gets(a)b)gets(a[0])c)gets(&a[0]);d)gets(b);22.下面程序段的运行结果是_________.char*s=\s+=2;printf(\a)cdeb)字符'c'c)字符'c'的地址d)并无确认的输入结果23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()a)chars[10]=\c)chars[10];s=\24.设已有定义:char*st=\下列程序段中正确的是()a)chara[11],*p;strcpy(p=a+1,&st[4]);b)chara[11];strcpy(++a,st);c)chara[11];strcpy(a,st);d)chara[],*p;strcpy(p=&a[1],st+2);25.存有以下程序main(){chara[]=\char*p1,*p2;inti;p1=a;p2=b;for(i=0;i<7;i++)if(*(p1+i)==*(p2+i))printf(\}输出结果是()a)gmb)rgc)ord)ga26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.a)c=*p1+*p2;b)p2=cc)p1=p2d)c=*p1*(*p2);27.以下正确的程序段是_________.a)charstr[20];b)char*p;scanf(\scanf(\c)charstr[20];d)charstr[20],*p=str;scanf(\scanf(\28.若有说明语句chara[]=\char*p=\则以下不正确的叙述是________.a)a+1则表示的就是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符29.下面程序的运转结果就是_______.#include#include。
第七章指针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 指针练习题C 指针练习题1. 介绍在C语言中,指针是一种非常重要的概念。
通过指针,我们可以直接访问和操作内存中的数据。
本文将为您提供一些C指针练习题,以帮助您更好地理解和掌握指针的用法。
2. 指针基础题2.1 编写一个程序,声明一个整型变量x,并定义一个指向该变量的指针p。
通过指针p修改变量x的值,并输出修改后的结果。
2.2 编写一个程序,声明一个整型数组a,并定义一个指向数组元素的指针p。
通过指针p遍历数组,并输出每个元素的值。
2.3 编写一个程序,声明一个字符型数组str,并定义一个指向字符串的指针p。
通过指针p遍历字符串,并输出每个字符。
3. 指针与函数题3.1 编写一个函数swap,交换两个整型变量的值。
在主函数中调用该函数,并输出交换后的结果。
3.2 编写一个函数reverse,接受一个字符型字符串作为参数,并将其逆序存储。
在主函数中调用该函数,并输出逆序后的字符串。
4. 动态内存分配题4.1 编写一个程序,使用malloc函数动态分配一个包含10个整型元素的数组,并通过指针遍历数组,并输出每个元素的值。
4.2 编写一个程序,使用calloc函数动态分配一个包含5个双精度浮点数的数组,并通过指针遍历数组,并输出每个元素的值。
4.3 编写一个程序,使用realloc函数动态分配一个包含5个整型元素的数组,并增加3个元素。
然后通过指针遍历数组,并输出每个元素的值。
5. 多级指针题5.1 编写一个程序,声明一个字符型变量c,并定义一个指向该变量的一级指针p1和一个指向p1的二级指针p2。
通过p2修改变量c的值,并输出修改后的结果。
6. 总结通过以上指针练习题,我们可以加深对C指针的理解和应用。
掌握指针的用法对于C语言编程非常重要,它能够提高程序的效率和灵活性。
希望本文能够帮助您更好地理解和运用C指针的知识。
祝您在C语言的学习中取得更好的成果!。
指针练习题(一)选择题1.若有以下定义,则对a数组元素的正确引用是_________.int a[5],*p=a; a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)2.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为______.a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j3.若有以下定义,int a[10],*p=a; 则p+5表示_______.a)元素a[5]的地址 b)元素a[5]的值 c)元素a[6]的地址 d)元素a[6]的值4.下面程序段的运行结果是_________.char *s="abcde"; s+=2;printf("%d",s);a)cde b)字符'c' c)字符'c'的地址 d)无确定的输出结果5.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);6.以下正确的程序段是_________.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]);7.若有说明语句char a[]="It is mine"; char *p="It is mine"; 则以下不正确的叙述是________.a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符8.下面程序的运行结果是_______.#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)不确定的值9.下面程序的运行结果是_______.#include <stdio.h>#include <string.h>fun(char *w,int n){char t,*s1,*s2; s1=w;s2=w+n-1;while(s1<s2){t=*s1++;*s1=*s2--;*s2=t;} }main(){char *p; p="1234567"; fun(p,strlen(p)); puts(p); }a)7654321 b)1714171 c)1711717 d)717717110.变量的指针,其含义是指该变量的_________.a)值 b)地址 c)名 d)一个标志11.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____.a)a,point,*&a b)&*a,&a,*pointc)*&point,*point,&a d)&a,&*point ,point12.若有说明;int *p,m=5,n;以下正确的程序段的是________.a)p=&n; b)p=&n;scanf("%d",&p); scanf("%d",*p);c)scanf("%d",&n); d)p=&n;*p=n; *p=m;13.已知有以下的说明,int a[]={8,1,2,5,0,4,7,6,3,9};那么a[*(a+a[3])]的值为_ __.14.对于指向同一数组的指针变量,不能进行哪种运算? ()A. +B. -C. =D. ==15.若有以下说明和语句,且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])16.若有以下说明和语句,且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]17.以下程序的输出结果是哪一项? ()#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]);}A. 输出项不合法B. . 7 D. 1018.有以下说明和语句,, 则p2-p1的值为多少?(单选) ()int a[10], *p1, *p2; p1=a; p2=&a[5];A. 5B. . 10 D. 没有指针与指针的减法19.若有以下定义和语句:int s[4][5],(*ps)[5]; ps=s; 则对s数组元素的正确引用形式是()A) ps+1 B) *(ps+3) C) ps[0][2] D) *(ps+1)+320.若有以下的定义,int t[3][2];能正确表示t数组元素地址的表达式是()A) &t[3][2] B) t[3] C) t[1] D) *t[2]21.以下程序的输出结果是a= _, b= _, c= _。
#include <stdio.h>int func(int a,int *p);void main(){ int a=1,b=2,c; c=func(a,&b); a=1,b=4,c=6;b=func(c,&a); c=6,a=9,b=16 a=func(b,&c); b=16,c=19,a=36;printf("a=%d,b=%d,c=%d",a,b,c); }int func(int a,int *p){ a++; *p=a+2; return(*p+a);}22.有以下程序void fun(char *c,int d){*c=*c+1;d=d+1; printf("%c,%c,",*c,d); }main(){char a='A',b='a'; fun(&b,a); printf("%c,%c\n",a,b); }程序运行后的输出结果是()。
A) B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b 23.在说明语句:int *f();中,标识符f代表的是()A) 一个用于指向整型数据的指针变量 B) 一个用于指向一维数组的行指针C) 一个用于指向函数的指针变量 D) 一个返回值为指针型的函数名24.以下程序段给数组所有元素输入数据,应在下划线处添入的是()A)a+(i++) B)&a[i+1] C)a+i D)&a[++i]main( ){ int a[10], i=0;while(i<10) scanf(“%d”,_____);……}25.以下程序的输出结果是()A)17 B))19 D)20main( ){int a[ ]={2,4,6,8,10},y=1,x,*p; p=&a[1];for (x=0;x<3;x++) y+=*(p+x); printf(“%d\n”,y); }26、若有定义:int x,*pb; 则以下正确的赋值表达式是()A、pb=&xB、pb=xC、*pb=&xD、*pb=*x27、以下程序的输出结果是()A、因变量无定义输出不定值B、0C、-1D、1#include "Stdio.h"#include "Conio.h"int main(void){ printf("%d\n",NULL); getch(); return 0;}28、以下程序的输出结果是()A、5,2,3B、-5,-12,-7C、-5,-12,-17D、5,-2,-7#include "Stdio.h"#include "Conio.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("%d,%d,%d\n",a,b,c); getch(); return 0;}29、以下程序的输出结果是()A、4B、6C、8D、10#include "Stdio.h"#include "Conio.h"int main(){ int k=2,m=4,n=6; int *pk=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm);printf("%d\n",n); getch(); return 0;}30、已知指针p的指向如图所示,则执行语句*p++;后,*p的值是()A、20B、30C、21D、3131、已知指针p的指向如5题中图所示,则表达式*++p的值是()A、20B、30C、21D、3132、已知指针p的指向如5题中图所示,则表达式++*p的值是()A、20B、30C、21D、3133、以下程序的输出结果是()#include "Stdio.h"#include "Conio.h"void prtv(int *x){ printf("%d\n",++*x); }int main(){ int a=25; prtv(&a); getch(); return 0;}A、23B、24C、25D、2634、以下程序的输出结果是()#include "Stdio.h"#include "Conio.h"int main(){ int **k,*a,b=100; a=&b; k=&a; printf("%d\n",**k);getch(); return 0;}A、运行出错B、100C、a的地址D、b的地址35、以下程序的输出结果是()#include "Stdio.h"#include "Conio.h"void fun(float *a,float *b){ float w; *a=*a+*a; w=*a; *a=*b; *b=w;}int main(){ float x=2.0,y=3.0; float *px=&x,*py=&y;fun(px,py);printf("%2.0f,%2.0f\n",x,y); getch(); return 0;}A、4,3B、2,3C、3,4D、3,236、以下程序的输出结果是()#include "Stdio.h"#include "Conio.h"void sub(float x,float *y,float *z){ *y=*y-1.0; *z=*z+x;}int main(){ float a=2.5,b=9.0,*pa,*pb; pa=&a; pb=&b;sub(b-a,pa,pb);printf("%f\n",a); getch(); return 0;}A、9.000000B、1.500000C、8.000000D、10.50000037、设有以下定义: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]的表达式是()A、*((*prt+1)[2])B、*(*(p+5))C、(*prt+1)+2D、*(*(a+1)+2)(二)填空题1.以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。