C语言指针-练习
c语言指针编程题
1.统计一字符串在另一个字符串中出现的次数
参考答案
2.从命令行输入两个实型数据,请比较大小并输出。
参考答案
3.输入3个数a,b,c,按大小顺序输出。
利用指针方法
参考答案
4.输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
参考答案
5.有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
参考答案
6.有n个人围成一圈,顺序排号。
从第一个人开始报数(从1到3报数),凡报到3的人
退出圈子,问最后留下的是原来第几号的那位。
参考答案
7.写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
参考答案
8.编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调
用函数1/1+1/3+…+1/n(利用指针函数)
参考答案
9.八进制转换为十进制
参考答案
10.编一个函数fun(int *a,int n,int *odd,int *even),函数的功能是分别求出数组中所有奇数之
和以及所有偶数之和。
形参n给了数组中数据的个数:利用指针odd返回奇数之和,利用指针even返回偶数之和。
例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。
参考答案
11.复制字符串(不采用库函数strcpy( ))。
参考答案。
c语言指针的习题答案
指针练习题1.有以下程序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));}输出结果是A)gm B)rg C)or D)ga2.设有说明int(*ptr)[m];其中的标识符ptr是A)M个指向整型变量的指针B)指向M个整型变量的函数指针C)一个指向具有M个整型元素的一维数组的指针D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量3.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是A) p+1 B) a+1 C) a++ D) ++p4.若有语句int *point ,a=4;和point =&a;下面均代表地址的一组选项是A. a,point,*&aB. &*a,&a,*pointC. &point,*point,&aD. &a,&*point,point5.下面程序段的运行结果是char a[]=”language”,*p;p=a;while(*p!=’u’) {printf(“%c”, *p-32);p++;}A. LANGUAGEB. LANGuageNGngUAGE6.以下程序的运算结果是*p=1,m=3,n=5 。
#include<stdio.h>void main(){int a[5]={1,2,3,-4,5};int m,n,*p;p=&a[0];m=*(p+2);n=*(p+4);printf("*p=%d,m=%d,n=%d",*p,m,n);}7.写一通用函数slength,求出一个字符串的长度,并用main函数调用slength。
c语言第8章练习题--指针
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语言-指针选择提32道+填空题12道
(1)设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是()A)*p=*q; B)p=q; C)*p=&n1; D)p=*q;(2)若有定义:int x=0, *p=&x;,则语句printf("%d\n",*p);的输出结果是()A)随机值B)0 C)x的地址D)p的地址(3) 以下定义语句中正确的是()A) char a='A'b='B'; B) float a=b=10.0; C) int a=10,*b=&a; D) float *a,b=&a;(4) 有以下程序()main(){ int a=7,b=8,*p,*q,*r;p=&a;q=&b;r=p; p=q;q=r;printf("%d,%d,%d,%d\n",*p,*q,a,b);}程序运行后的输出结果是A) 8,7,8,7 B) 7,8,7,8 C) 8,7,7,8 D) 7,8,8,7(5) 设有定义:int a,*pA=&a;以下scanf语句中能正确为变量a读入数据的是()A) scanf(“%d”,pA) ;B) scanf(“%d”,a) ;C) scanf(“%d”,&pA) ; D) scanf(“%d”,*pA) ;(6) 设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是()A) p=1; B) *q=2; C) q=p; D) *p=5;(7) 有以下程序()以下是引用片段:void fun(char *a, char *b){ a=b; (*a)++; }main (){ char c1="A", c2="a", *p1, *p2;p1=&c1; p2=&c2; fun(p1,p2);printf(“%c%c\n”,c1,c2);}程序运行后的输出结果是A) Ab B) aa C) Aa D) Bb(8) 若程序中已包含头文件stdio.h, 以下选项中,正确运用指针变量的程序段是()A) int *i=NULL; B) float *f=NULL;scanf("%d",i); *f=10.5;C) char t="m", *c=&t; D) long *L;*c=&t; L=…\0‟;(9) 有以下程序()以下是引用片段:#inc1udemain(){ printf("%d\n", NULL); }程序运行后的输出结果是A) 0 B) 1 C) -1 D) NULL没定义,出错(10) 已定义以下函数()fun (int *p){ return *p;}该函数的返回值是A) 不确定的值B) 形参p中存放的值C) 形参p所指存储单元中的值D) 形参p的地址值(11) 下列函数定义中,会出现编译错误的是()A) max(int x, int y,int *z) B) int max(int x,y){ *z=x>y ? x:y; } {int z ;z=x>y? x:y;return z ;}C) max (int x,int y) D) int max(int x,int y){ int z; { return(x>y?x:y) ; }z=x>y?x:y; return(z);}(12) 有以下程序段()以下是引用片段:main(){ int a=5, *b, **c;c=&b; b=&a;……}程序在执行了c=&b;b=&a;语句后,表达式:**c的值是A) 变量a的地址B) 变量b中的值C) 变量a中的值D) 变量b的地址(13) 有以下程序()以下是引用片段:main(){ char a,b,c,*d;a=‟\‟; b=…\xbc‟;c=…\0xab‟; d="\017";print("%c%c%c\n",a,b,c,*d);}编译时出现错误,以下叙述中正确的是A) 程序中只有a=‟\‟;语句不正确B) b=…\xbc‟;语句不正确C) d="\0127";语句不正确D) a=‟\‟;和c=…\0xab‟;语句都不正确(14) 若有以下定义和语句()以下是引用片段:#includeint a=4,b=3,*p,*q,*w;p=&a; q=&b; w=q; q=NULL;则以下选项中错误的语句是AA) *q=0; B) w=p; C) *p=a; D) *p=*w;(15) 有以下程序以下是引用片段:int *f(int *x,int *y){ if(*x<*y) return x;else return y;}main(){ int a=7,b=8,*p=&a,*q=&b,*r};r=f(p,q);printf(“%d,%d,%d”,*p,*q,*r); }执行后输出结果是()A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,8(16) 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是()A) p=q; B) *p=*q; C) n=*q; D) p=n;(17) 有以下程序()以下是引用片段: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(18) 若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是()A) scanf("%d%d%d",&a,&b,d); B) scanf("%d%d%d",&a,&b,&d);C) scanf("%d%d%d",a,b,d); D) scanf("%d%d%d",a,b,*d);(19) 若定义:int a=511,*b=&a;, 则printf("%d\n",*b);的输出结果为()A) 无确定值B) a的地址C) 512 D) 511(20) 若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是()A) i=*p; B) p*=*&j; C) i=&j; D) i=**p;(21) 下列程序段的输出结果是()A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4 D) 2 1 1 2以下是引用片段: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);}(22) 下列程序的运行结果是()A) 6 3 B) 3 6 C) 编译出错D) 0 0以下是引用片段: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);}(23) 有如下程序段()int *p,a=10,b=1p=&a; a=*p+b;执行该程序段后,a的值为A) 12 B) 11 C) 10 D) 编译出错(24) 有以下函数()char fun(char *p){ return p; }该函数的返回值是A) 无确切的值B) 形参p中存放的地址值B) 一个临时存储单元的地址D) 形参p自身的地址值(25) 请选出正确的程序段()A) int *p; B) int *s, k;scanf("%d",p); *s=100;… …C) int *s, k; D) int *s, k;char *p, c; char *p, e;s=&k; s=&k;p=&c; p=&c;*p='a'; s=p;… *s=1;…(26) 若有以下定义和语句:()double r=99,*p=&r;*p=r;则以下正确的叙述是A) 以下两处的*p含义相同,都说明给指针变量p赋值B) 在"double r=99,*p=&r;"中,把r的地址赋值给了p所指的存储单元C) 语句"*p=r;"把变量r的值赋给指针变量pD) 语句"*p=r;"取变量r的值放回r中(27) 以下程序运行后,a的值是()A) 4 B) 1 C) 0 D) 运行时出错,a无定值以下是引用片段:main(){ int a,k=4,m=6,*p1=&k,*p2=&m;a=p1==&m;printf("%d\n",a);}(28) 有以下程序()以下是引用片段:int fun(int x,int y,int *cp,int *dp){ *cp=x+y; *dp=x-y; }main(){ int a, b, c, d;a=30; b=50;fun(a,b,&c,&d);printf("%d,%d\n", c, d);}输出结果是A) 50,30 B) 30,J50 C) 80,-20 D) 80,20(29) 若有定义和语句()int **pp,*p,a=10,b=20;pp=&p;p=&a;p=&b;printf("%d\n",*p,**pp);则输出结果是:A)10,20 B)10,10 C)20,10 D)20,20(30) 以下程序的输出结果是()以下是引用片段:#includesubl(char a,char b) {char c; c=a;a=b;b=c;}sub2(char* a,char b) {char c; c=*a;*a=b;b=c;}sub3(char* a,char*b) {char c; c=*a;*a=*b;*b=c;} { char a,b;a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);a='A';b='B';sub2(&a,b);putchar(a);prtchar(b);a='A';b='B';sub1(a,b);putchar(a);putchar(b);}A) BABBAB B) ABBBBA C) BABABA D) BAABBA(31) 若有说明:int i,j=7,*p=&i;,则与i=j;等价的语句是()A) I= *P; B) *P=*&J; C) i=&j; D) i=* *p;(32) 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。
C语言指针习题 附答案
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。
c语言 指针编程题
c语言指针编程题以下是一个简单的C语言指针编程题,可以通过指针操作实现字符串的反转:```c#include <stdio.h>#include <string.h>void reverseString(char* str) {int i, j;char temp;for (i = 0, j = strlen(str) - 1; i < j; i++, j--) {temp = str[i];str[i] = str[j];str[j] = temp;}}int main() {char str[] = "Hello, world!";printf("Original string: %s\n", str);reverseString(str);printf("Reversed string: %s\n", str);return 0;}```在这个程序中,我们定义了一个名为`reverseString`的函数,该函数接受一个字符串作为参数,并通过指针操作实现字符串的反转。
具体来说,我们使用两个指针i和j来遍历字符串,将i指向的字符与j指向的字符交换位置,直到i指向字符串的第一个字符,j指向字符串的最后一个字符为止。
在主函数中,我们定义了一个字符串`str`,并调用`reverseString`函数来反转该字符串。
最后,我们输出反转后的字符串和原始字符串,以便进行比较和验证。
需要注意的是,在使用指针操作时,一定要确保指针指向的内存区域已经分配并且不会被释放,否则可能导致程序崩溃或数据损坏。
同时,在使用指针操作时,还需要注意指针的类型和大小,以确保指针操作的正确性和有效性。
(完整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语言链表指针编程题
以下是一个使用链表和指针的 C 语言编程题:题目:将一个无序整数数组按照升序排列,并存储在链表中。
要求:1.定义一个链表节点结构体,包含一个整数和一个指向下一个节点的指针。
2.实现一个函数,将无序整数数组按照升序排列,并将结果存储在链表中。
3.实现一个函数,遍历链表并输出每个节点的值。
示例:输入:复制代码无序整数数组:[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]输出:复制代码链表节点值:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]以下是一个可能的实现:c复制代码#include<stdio.h>#include<stdlib.h>// 定义链表节点结构体typedef struct Node {int value;struct Node* next;} Node;// 插入节点到链表尾部Node* insertNode(Node* head, int value) {Node* newNode = (Node*)malloc(sizeof(Node));newNode->value = value;newNode->next = NULL;if (head == NULL) {head = newNode;} else {Node* current = head;while (current->next != NULL) {current = current->next;}current->next = newNode;}return head;}// 将无序整数数组按照升序排列,并将结果存储在链表中Node* sortAndBuildList(int arr[], int n) {Node* head = NULL; // 头节点指针,初始为空for (int i = 0; i < n; i++) { // 将数组元素插入链表尾部head = insertNode(head, arr[i]);}// 对链表进行排序(可以使用快速排序、归并排序等算法)// 这里简单起见,只使用了冒泡排序算法进行排序,实际应用中应使用更高效的排序算法。
C语言指针练习题
C语言指针练习题指针练习题1 填空题【1】下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。
int add( int x, int y, ){ =x+y;}【2】若有定义: char ch;(1) 使指针p 可以指向变量ch的定义语句是。
(2) 使指针p指向变量ch的赋值语句是。
(3) 通过指针p给变量ch读入字符的scanf函数调用语句是。
(4) 通过指针p 给变量ch赋字符A的语句是。
(5) 通过指针p输出ch中字符的语句是。
(6) 在16位微机上,指针变量p在内存中所占字节数是,变量ch 在内在所占字节数是。
2 选择题【3】若有说明:int i,j=7,*p=&i则与i=j;等价的语句是()。
A.i=*p;B.*p=*&jC.i=&jD.i=**p;【4】若有定义:int x,*pb;则正确的赋值表达式是()。
A.pb=&xB.pb=xC. *pb=&xD.*pb=*x【5】对于类型相同的指针变量,不能进行的运算是()。
A.< B. = C. + D. –【6】以下程序的输出结果是()。
A.23 B. 24 C. 25 D. 26Void fun ( int *x){ printf(%d\n”,++*x); }main( ){ int a=25;fun (&a);}【7】以下程序的输出结果是()。
A.6 B. 7 C. 8 D. 9main(){int k=2,m=4,n=6;int *pk=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf("%d\n",n);}【8】以下程序的输出结果是()。
A.100 B. 50 C. 101 D.200main(){int *v,b;v=&bb=100;*v+=b;printf("%d\n",b);}【9】以下程序的输出结果是()。
C语言习题指针1
C语言习题指针1页眉内容C语言(指针一)单元练习五一.选择题1.下列程序的输出结果是______。
A #include#includemain(){ char *p1,*p2,s[10]="12345";p1="abcde";p2="ABCDE";strcpy(s+2,p1+3);strcat(s,p2+2);printf("%s",s);return;}A. 12deCDEB.12abcABC. cdABC45D. abcBDE2. 以下程序运行之后的输出结果是______。
B #include void main(){ int *p,*p1,*p2,a=3,b=7;p1=&a p2=&bif(a<="">printf("%d,%d ",*p1,*p2);printf("%d,%d",a,b);}A. 3,7 7,3B. 7,3 3,7C. 7,3 7,3D. 3,7 3,73. 以下函数的功能是______。
B fun(int *p1,*p2) {int *p;*p=*p1;*p1=*p2;*p2=*p;}A. 正确,但没有交换*p1和*p2的值。
B. 使用了空指针,可能造成系统故障。
C. 能成功交换*p1和*p2的值。
D. 能成功交换*p1和*p2的地址。
4. 有以下程序: B#includevoid main(){ int x[8]={8,7,6,5,0,0},*s;s=x+3;printf("%d\n",s[2]); }执行后输出结果是______。
A.随机值B.0C.5D.65. 以下程序的输出结果是______。
D#include#includevoid main(){ char b1[8]="abcdefg",b2[8],*pb=b1+3; while (--pb>=b1) strcpy(b2,pb);printf("%d\n",strlen(b2)); }A. 8B. 3C. 1D. 76. 若有以下说明: Dint w[3][4]={{0,1},{2,4},{5,8}};int (*p)[4]=w;则数值为4的表达式是______。
C语言习题十指针
习题十指针1. 有以下程序void f(int *q){ int i=0;for( ;i<5;i++) (*q)++;}main(){ int a[5]={1,2,3,4,5},i;f(a);for(i=0;i<5;i++) printf("%d,",a[i]);}程序运行后的输出结果是______。
A、2,2,3,4,5,B、6,2,3,4,5,C、1,2,3,4,5,D、2,3,4,5,6,解析:本题考查的是指针作为函数的参数和函数的调用。
题目中定义了一个指针变量作为函数f()的形参。
主函数main()中调用f()函数,当i=0时,执行语句(*q)++,此处*q代表的就是数组元素a[0]的值,即将1进行加1操作;当i=1时,q仍指向数组元素a[0]的地址,因为在函数f()中并未对指针变量q作任何变动,也即*q仍代表了数组元素a[0]的值,所以此次(*q)++即2+1,所以a[0]的值变为3;……直到i=4时,执行(*q)++(即5+1)后a[0]的值变为6。
所以最后的输出结果为:6,2,3,4,5,。
故本题答案选B。
2. 有以下程序#include <stdio.h>main(){ int n, *p=NULL;*p=&n; printf("Input n:");scanf("%d",&p); printf("output n:"); printf("%d\n",p);}该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是______。
A、int n , *p=NULL;B、*p=&n;C、scanf("%d",&p)D、printf("%d\n",p);解析:本题考查的是指针的赋值。
C语言指针选择题
A) *(p+2)
B) *(s+2)
C) p="ABCD"
D) s="ABC"
D 33. 设有定义语句"double d[3][5]={{1},{2},{3}},(*p)[5]=d;", 则下列表达式中值不为 0.0 的表达式是
A) *&d[1][2]
B) p[1][2]
C) *(p+1*5+2)
D) *(*p+1)+2)
C) char *s; s="ABCDE";
D) char *s; scanf("%s",&s);
C
20. 若有以下定义语句,则不能表示 a 数组元素的表达式是
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
A) *p
B) a[10]
C) *a
D) a[p-a]
B
21. 若有以下定义语句,则值为 3 的表达式是
D) *P=*P*(*q)
B 38. 设有变量定义语句"int a[2][3];",能正确表示数组 a 中元素 地址的表达式是
A) a[1]+3
B) *(a+2)
C) *(a[1]+2)
D) *(a+1)
D
6
39. 设有变量定义语句"int b[5];", 能正确引用数组 b 中元素的 表达式是
A) *&b[5]
B) A B C D
C) B
D) BCD
C
CD
D
D
D
12. 下列程序的输出结果是
C语言练习之指针
1.设有说明int s[2]={0,1},*p=s;则下列错误的C语句是(A )。
A)s+=1; B)p+=1; C)*p++; D)(*p)++;数组名是常量不能自加!2.int array[10] = {1,2,3,4,5,6,7,8,9,10};int *p = NULL; p = array;p+1; *(p + 1); (p + 10); *(p + 10); p = array + 2; p—; &(p = p+3); 各个语句的值。
3.下面程序的输出: C#include <stdio.h>fun(int x, int y, int *cp, int *dp){*cp=x+y;*dp=x-y;}int main( ){int a,b,c,d;a=30; b=50;fun(a, b, &c, &d);printf("%d,%d\n", c, d);return 0;}A)50,30 B)30,50 C)80,-20 D)80,204.若有定义和语句:int **pp,*p,a=10,b=20;pp=&p; p=&a; p=&b;printf("%d,%d\n",*p,**pp);则输出结果是(D)A)10,20 B)10,10 C)20,10 D)20,205.下面程序的运行结果:char s[80], *sp = "HELLO!"sp = strcpy(s,sp);s[0] = 'h';puts(sp);hELLO!6.程序中输入apple<CR> cat <CR>,输出结果是atmain (){char *s , c[80];s = c;gets(s);while ((*(++s))!='\0'){if (*s == 'a')break;else{s++;gets(s);}}puts(s);}7.mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。
指针练习题及答案
指针练习题及答案1. 请编写一个程序,交换两个变量的值,并通过指针来实现。
```c#include<stdio.h>void swap(int *a, int *b){int temp = *a;*a = *b;*b = temp;}int main(){int num1 = 10, num2 = 20;printf("交换前的值:num1=%d, num2=%d\n", num1, num2);swap(&num1, &num2);printf("交换后的值:num1=%d, num2=%d\n", num1, num2);return 0;}```2. 编写一个函数,统计字符串中某个字符出现的次数,并通过指针返回结果。
```c#include<stdio.h>int countChar(const char *str, char target){int count = 0;while(*str != '\0'){if(*str == target)count++;str++;}return count;}int main(){char str[] = "hello world";char target = 'l';int count = countChar(str, target);printf("字符 %c 出现的次数为:%d\n", target, count); return 0;}```3. 编写一个函数,找到整型数组中的最大值,并通过指针返回结果。
```c#include<stdio.h>int findMax(const int *arr, int size){int max = *arr;for(int i = 1; i < size; i++){if(*(arr+i) > max)max = *(arr+i);}return max;}int main(){int arr[] = {10, 20, 30, 40, 50};int size = sizeof(arr) / sizeof(arr[0]);int max = findMax(arr, size);printf("数组中的最大值为:%d\n", max);return 0;}```4. 编写一个函数,将字符串反转,并通过指针返回结果。
c语言指针习题及答案
c语言指针习题及答案C语言指针习题及答案C语言作为一门广泛应用于软件开发和系统编程的编程语言,指针是其重要的特性之一。
掌握指针的使用对于理解和编写高效的C程序至关重要。
本文将介绍一些常见的C语言指针习题,并提供相应的答案,帮助读者更好地理解和掌握指针的概念和用法。
1. 习题一:交换两个变量的值请编写一个函数,接受两个整型指针作为参数,实现交换两个变量的值。
例如,如果输入a=10,b=20,函数执行后,a=20,b=10。
答案:```cvoid swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}```2. 习题二:查找数组中的最大值和最小值请编写一个函数,接受一个整型数组和数组长度作为参数,返回数组中的最大值和最小值。
例如,对于数组[5, 2, 9, 1, 7],函数应该返回最大值9和最小值1。
答案:```cvoid findMinMax(int *arr, int length, int *max, int *min) {*max = *min = arr[0];for (int i = 1; i < length; i++) {if (arr[i] > *max) {*max = arr[i];}if (arr[i] < *min) {*min = arr[i];}}}```3. 习题三:计算字符串长度请编写一个函数,接受一个字符串作为参数,返回字符串的长度。
例如,对于字符串"Hello, World!",函数应该返回12。
答案:```cint stringLength(char *str) {int length = 0;while (*str != '\0') {length++;str++;}return length;}```4. 习题四:复制字符串请编写一个函数,接受两个字符串指针作为参数,将第一个字符串复制到第二个字符串中。
C语言指针练习题.
一、知识点1.掌握指针、地址、指针类型、空指针(NULL)等概念;2.掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算、指针变量比较运算和指针表达式;3.掌握指针与数组、函数、字符串等的联系;4.掌握动态空间操作(new,delete);5.掌握引用参数的使用。
二、例题分析与解答例题1:若有以下定义,则说法错误的是( )。
int a=100,*p=&a ;A.声明变量p,其中*表示p是一个指针变量B.变量p经初始化,获得变量a的地址C.变量p只可以指向一个整形变量D.变量p的值为100答案:D分析:有指针变量定义可知A、C说法是正确的,故不能选。
在语句中&p=a,表示指针变量取得变量a地址,B说法也正确,也不能选择。
D中不能说变量p的值为100,应该*p的值为100,所以选择D。
例题2:若有以下定义,则赋值正确的是( )。
int a ,b , *p;float c, *q;A.p=&c B.q=p C.p=NULL D.q=new int答案:C分析:指针变量使用规定,不同类型的指针变量不能赋值,也不能取得普通变量地址,故A、B不正确,不能选择。
因为q是float类型指针变量,不能申请int 类型地址,D不正确,也不能选择。
因为任何类型的指针变量都能取得NULL指针,所以C正确。
例题3:如果x是整型变量,则合法的形式是( )。
A.&(x+5)答案:D分析:因为C++语言表达式没有地址,A不正确。
C++语言普通变量不能用*运算,因此B和C也不正确。
&x表示变量x的地址,*&x是x 地址的值,所以D 正确。
B.*x C.&*x D.*&x例题4:若要建立如下关系,错误的语句组是( )。
spanstyle='mso-ignore:vglayout; ;z-index:1;left:0px;margin-left:144px;margin-top:1px; width:256px;height:38px'A. B. C. D.int *p=&x, x; int x, p=&x; int *p, x=10; int *p, x; *p=10; *p=10; *p=&x; p=&x ; x=10; 答案:A分析:在变量类型说明语句中 *表示变量是指针变量,在其他语句中,*称为指针运算,用于访问指针所指向的对象的值,&称为取地址运算,用来得到一个对象的地址。
c语言指针例题及解析
c语言指针例题及解析题目:已知 char **p 指向一个字符指针数组的首地址,其中数组的每个元素指向一个字符串,要求将数组中的字符串按顺序输出。
解析:首先,需要理解指针的指针的含义。
在 C 语言中,指针的指针是指向指针的指针,即一个指针变量中存储的是另一个指针变量的地址。
在本题中,char **p 指向一个字符指针数组的首地址,即 p 是一个指向指针的指针变量。
接下来,需要了解如何通过指针访问数组元素。
在 C 语言中,可以通过解引用运算符 * 来访问指针所指向的内容。
在本题中,数组的每个元素指向一个字符串,因此可以通过*p[i] 来访问第 i 个字符串。
最后,需要使用 printf 函数输出字符串。
在 C 语言中,printf 函数用于格式化输出,可以通过 %s 格式化符来输出字符串。
根据以上解析,可以使用以下代码实现题目要求的功能:c#include <stdio.h>int main() {char *strs[] = {"hello", "world", "C","language"};char **p = strs; // p 指向 strs 的首地址// 输出每个字符串for (int i = 0; i < 4; i++) {printf("%s\n", *p[i]); // 通过解引用运算符 * 来访问第 i 个字符串}return 0;}在上面的代码中,首先定义了一个字符指针数组 strs,其中包含了四个字符串。
然后定义了一个指向指针的指针变量 p,并将其初始化为 strs 的首地址。
接下来使用 for 循环遍历数组中的每个字符串,并使用 printf 函数输出每个字符串。
在输出时,通过解引用运算符 * 来访问第 i 个字符串。
最后返回 0 表示程序正常退出。
指针 练习题
指针练习题指针是C语言中非常重要的概念之一。
掌握指针的使用和理解对于C语言程序的编写至关重要。
本文将介绍一些指针的练习题,帮助读者巩固对指针的理解和应用。
练习题一:交换变量的值请编写一个函数,使用指针作为参数,交换两个整型变量的值。
函数原型为:void swap(int* p1, int* p2);在主函数中调用该函数进行测试,并输出交换后的结果。
练习题二:查找数组中的最大值和最小值请编写一个函数,使用指针作为参数,实现在一个整型数组中查找最大值和最小值的功能。
函数原型为:void findMinMax(int* arr, int size, int* max, int* min);其中,arr表示整型数组的首地址,size表示数组的大小,max和min分别表示最大值和最小值的指针。
在主函数中调用该函数进行测试,并输出最大值和最小值。
练习题三:统计字符出现次数请编写一个函数,使用指针作为参数,统计一个字符串中某个字符的出现次数。
函数原型为:int countChar(char* str, char ch);其中,str表示字符串的首地址,ch表示要统计的字符。
在主函数中调用该函数进行测试,并输出字符出现的次数。
练习题四:字符串反转请编写一个函数,使用指针作为参数,将一个字符串进行反转。
函数原型为:void reverseString(char* str);其中,str表示字符串的首地址。
在主函数中调用该函数进行测试,并输出反转后的字符串。
练习题五:动态分配内存并初始化请编写一个函数,使用指针作为参数,动态分配一块内存,并将其中的每个元素初始化为给定的初始值。
函数原型为:int* initArray(int size, int initialValue);其中,size表示要分配的内存块的大小,initialValue表示初始化的值。
在主函数中调用该函数进行测试,并输出分配的内存块中的元素。
通过以上的练习题,读者可以进一步巩固和提升对指针的理解和应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
复习题(二)一、基础题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)。
A)12 B)11 C)10 D)编译出错3、若定义:int i,j=2,*p=&i ; 则能完成i=j赋值的功能的语句是(B)。
A)i=*p; B)*p=*&j; C)i=&j; D)i=**p;4、若定义:double *p,a;则下列能通过scanf()正确输入项读入数据的程序段是(D)。
A)*p=&a; scanf(“%lf”,p); B)p=a; scanf(“%f”,p);C) p=&a; scanf(“%lf”,a); D) p=&a; scanf(“%lf”,p);5、若有以下定义语句:int a[]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为3的表达式是(D )。
A) p+=2,++*p B) p+=2,*++p C) p+=3,*p++ D)p+=2,*(p++)6、设p1和p2是指向同一个int型一维数组的指针变量,k为int 型变量,则下列不能正确执行的语句是(B)。
A)k=*p1+*p2; B) p2=k; C) p1=p2; D) k=*p1*(*p2);7、设有以下定义:int a[]={6,7,8,9,10}; int *p;则下列程序的输出结果为(D)。
p=a; *(p+2)+=2; printf(“%d,%d \n”,*p,*(p+2));A)8,10 B)6,8 C)7,9 D)6,108、下面程序输出结果是(C)。
main(){ int a[]={2,4,6,8,10};int y=1,x,*p;p=&a[1];for(x=0;x<3;x++)y+=*(p+x);printf(“%d\n”,y);}A)17 B)18 C)19 D)209、下列程序输出数组中的最大值,由s指针指向该元素,则在if语句中的判断表达式应该是(B)。
void main(){ int a[10]={6,7,2,9,1,10,5,8,4,3},*p,*s;for(p=a,s=a;p-a<10;p++)if( ) s=p;printf(“The max:%d\n”,*s);}A) p>s B) *p>*s C) a[p]>a[s] D) p-a>p-s10、以下选项中,错误的赋值是(A)。
A)char s1[10];s1=”Ctest”; B)char s2[]={…C‟,‟t‟,‟e‟,‟s‟,‟t‟};C) char s3[20]=”Ctest”; D)char *s[4]=”Ctest\n”;11、若有以下定义:char s[20]=”programming”,*ps=s; 则下列不能代表字符‟o‟的表达式是(A)。
A) ps+2 B) s[2] C) ps[2] D) ps+=2,*ps12、若有定义和语句:int **pp,*p,a=10,b=20;pp=&p; p=&a; p=&b;printf(“%d %d \n”,*p,**pp);则输出结果是(D )。
A)10 20 B)10 10 C)20 10 D)20 2013、下面程序的输出是(A)。
char s[]=”ABCD”;main(){ char *p;for(p=s;p<s+4;p++)\printf(“%s\n”,p);}A)ABCD B)A C)D D)ABCDBCD B C ABCCD C B ABD D A A三、程序填空题1、函数strlink把b字符串连接到a字符串的后面,并返回a中的新字符串。
#include <stdio.h>char *strlink(char a[],char b[]){ char *p=a;while(*a++);--a;while(*a++=*b++);*b='\0' ;return p ;}void main(){ char s1[80],s2[40],*ps;gets(s1);gets(s2) ;ps=strlink(s1,s2);puts(ps);}2、函数trans仅把字符串s中的小写字母转为大写字母,其他字符不变。
#include<stdio.h>void trans(char s[]){ int i;for(i=0; s[i]; i++)if(s[i]<= 'a'&&s[i]>= 'z' )s[i]= s[i]- 'a'+'A' ;}void main(){ char s[10];gets(s);trans(s) ;printf("\n%s", s);}四、改错题1、从键盘上输入一个字符串,并调用函数funo实现字符串的倒置,输出字符串。
(本小题一共3个错)#include<stdio.h> 改正:void func(char st[50]) void func(char st[]){ char *p,*q , t;q=st;while( *q!='\0' ) q++;for(p=st, q--; p<q; p++) for(p=st, q--; p<q; p++, q--){ t=*p;*p=*q;*q=t;}}void main(){ char s[50] ;gets (s);func (s);puts (s);}从键盘上输入一个字符串s,并调用函数copy将字符串s中的数字字符复制到字符串t中,输出字符串t。
(本小题一共3个错)#include<stdio.h> 改正:void copy(char *t, char *s){while(*s!='\0'){if(*s>=0 && *s<=9) if(*s>='0'&& *s<='9'){ *t=*s;t++;}s++;}*t='\0';}main(){char s[50], t[50];gets(s);copy(s,t); copy(t,s);puts (t);}2、五、编程题1、设计一个函数,在一个整型数组中求最大数及最大数的个数。
函数原型:int max(int a[], int n, int *mc) 其中:最大值有函数返回值获得;最大值的个数存放在mc指向的变量中;a为被求整型数组,n为整型数组中元素个数。
int max(int a[],int n,int *mc){ int i, max=a[0],c=0;for(i=1;i<n;i++) if(max<a[i]) max=a[i];for(i=0;i<n;i++) if(max==a[i]) c++;*mc=c;return max;}2、设计一函数,判断s字符串是否是回文。
若是回文返回值为1;否则返回值为0。
(回文是顺读和倒读都一样的字符串)函数原型:int fun(char *s)int fun(char *s){ char *p, *q;p=s;for(q=s;*q;q++);q--;while(p<q){ if(*p!=*q) break; p++; q--;}if(p>=q) return 1;else return 0;}3、设计一个函数,实现把两个字符串连接后生成一个新的字符串返回。
如:void fun(char *s, char *t, char *str){ int i,j;for(i=0;*(s+i);i++) *(str+i)=*(s+i);for(j=0;*(t+j);j++,i++) *(str+i)=*(t+j);*(str+i)='\0';}4、字符串s为:"abcd",字符串t为:"1234",连接后的字符串str为:"abcd1234" 。
函数原型:void fun(char *s, char *t, char *str)。