C语言习题集合(指针)
C语言指针-练习

复习题(二)一、基础题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语言 数组和指针练习题

若当堂没做完,下周四之前上交也可。
至ftp://211.64.82.253/用户名和密码:stuC语言程序设计练习题——数组一、选择题77、以下对一维数组a的正确说明是_d ___A、char a(10);B、int a[ ];C、int k=5,a[k];D、char a[ ]={'a' , 'b' , 'c'};78、若有说明语句:int a[2][4];,则对a数组元素的正确引用是_a___A、a[0][3]B、a[0][4]C、a[2][2]D、a[2][2+1]79、以下能对二维数组y进行初始化的语句是_b__A、static int y[2][ ]={{1,0,1}, {5,2,3}};B、static int y[ ][3]={{1,2,3}, {4,5,6}};C、static int y[2][4]={{1,2,3}, {4,5} , {6}};D、static int y[ ][3]={{1,0,1,0}, { }, {1,1}};80、若有说明语句:int y[ ][4]={0,0};则下面叙述不正确的是_d___A、数组y的每个元素都可得初值0B、二维数组y的行数为1C、该说明等价于int y[ ][4]={0};D、只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值081、以下各组选项中,均能正确定义二维实型数组s的选项是_c___A、float s[3][4];B、float s(3,4);float s[ ][4]; float s[ ][ ]={{0};{0}};float s[3][ ]={{1},{0}}; float s[3][4];C、 float s[3][4];D、float s[3][4];static float s[ ][4]={{0},{0}}; float s[3][ ];auto float s[ ][4]={{0},{0},{0}}; float s[ ][4];82、若有说明语句:int a[ ][3]={1,2,3,4,5,6,7,8}; ,则a数组的行数为__a__A、3B、2C、无确定值D、183、若二维数组y有m列,则在y[i][j]前的元素个数为_B___A、j*m+iB、i*m+jC、i*m+j-1D、i*m+j+184、下面程序中有错误的行是____1、 main( )2、 {3、 int x[3]={1};4、 int k;5、 scanf("%d", &x);6、 for (k=1; k<3; k++)7、 x[0]=x[0]+x[i];8、 printf("x[0]=%d\n", x[0]);9、 }A、3B、6C、7D、585、若有以下语句,则正确的描述是__b__char x[ ]="12345";char y[ ]={'1', '2', '3', '4', '5'};A、x数组与y数组的长度相同B、x数组长度大于y数组长度C、x数组长度小于y数组长度D、x数组等价于y数组86、以下不正确的数组定义语句是__b__A、double x[5]={2.0, 4.0, 6.0, 8.0, 10.0};B、int y[5]={0, 1, 3, 5, 7, 9};C、char ch1[ ]={'1', '2', '3', '4', '5'};D、char ch2[ ]={'\x10', '\xa', '\x8'};87、以下正确的数组定义语句是_c___A、char a[5]={'1', '2', '3', '4', '5', '\0'};B、int b[2][ ]={{1}, {2}};C、float c[ ][3]={1, 2, 3, 4, 5};D、char d[5]="CHINA";88、判断字符串str1是否大于字符串str2,应当使用__d__A、if (str1>str2)B、if (strcmp(str1, str2))C、if (strcmp(str2, str1)>0)D、if (strcmp(str1, str2)>0)89、下面程序段的运行结果是_c___char x[5]={'a', 'b', '\0', 'c', '\0'};printf("%s", x);A、'a''b'B、abC、ab└┘cD、abc90、有两个字符数组a,b,则以下能正确为a,b进行赋值的语句是_d___A、gets(a, b);B、scanf("%s%s", &a, &b);C、getchar(a); getchar(b);D、gets(a); gets(b);91、有字符数组s1[80]和s2[80],则以下能正确对s1, s2进行输出的语句是___b_A、puts(s1, s2)B、printf("%s, %s", s1, s2);C、putchar(s1, s2);D、puts(s1), puts(s2);92、以下程序段的运行结果是_c___char a[7]="abcdef";char b[4]="ABC";strcpy(a, b);printf("%c", a[5]);A、└┘B、\0C、eD、f93、以下描述正确的是_d___A、两个字符串所包含的字符个数相同时,才能比较字符串B、字符个数多的字符串比字符个数少的字符串大C、字符串"STOP└┘"与"STOP"相等D、字符串"That"小于字符串"The"94、以下对字符数组的描述中错误的是_c___A、字符数组中可以存放字符串B、字符数组中的字符串可以整体输入、输出C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值D、不可以用关系运算符对字符数组中的字符串进行比较95、若有语句:char s1[10], s2[10]={"books"},则能将字符串books赋给数组s1的正确语句是_b___A、s1={"books"};B、strcpy(s1, s2);C、s1=s2;D、strcpy(s2, s1);96、以下printf语句的输出结果是____printf("%d\n", strlen("school");A、7B、6C、存在语法错误D、不定值97、下面程序的功能是将字符串s中所有的字符c删除。
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语言指针习题及答案

指针习题及答案一.选择题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。
C语言习题集合7(指针)

第七部分 指针7.1 选择题1. 若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是()。
A . p=q;B . *p=*q;C . a=*q;D . q=a;2. 若定义:int a=511, *b=&a ;,则printf("%d\n ", *b);的输出结果为:A . 无确定值B . a 的地址C . 512D . 5113. 已有定义 int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是()。
A . a=*p1+*p2;B . p1=a;C . p1=p2;D . a=*p1*(*p2);4. 变量的指针,其含义是指该变量的()。
A . 值B . 地址C . 名D . 一个标志5. 若有说明语句: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);6. 若已定义int a=5; 下面对(1)、(2)两个语句的正确解释是()。
(1) int *p=&a; (2) *p=a;A . 语句(1)和(2)中的*p 含义相同,都表示给指针变量p 赋值。
B . (1)和(2)语句的执行结果,都是把变量a 的地址值赋给指针变量p 。
C . (1)在对p 进行说明的同时进行初始化,使p 指向a ;(2)变量a 的值赋给指针变量p 。
D . (1)在对p 进行说明的同时进行初始化,使p 指向a ;(2)将变量a 的值赋予*p 。
c语言指针例题

以下是一个简单的 C 语言指针例题:
c复制代码
#include<stdio.h>
int main() {
int a = 10;
int *p = &a; // 定义一个指向整型变量 a 的指针 p
printf("a 的值为:%d\n", a);
printf("p 所指向的值为:%d\n", *p); // 通过指针访问变量的值
*p = 20; // 通过指针修改变量的值
printf("a 的新值为:%d\n", a);
return0;
}
在这个例子中,我们定义了一个整型变量 a,然后定义了一个指向整型变量 a 的指针 p,并将指
针 p 的初始值设置为变量 a 的地址。
接着,我们通过指针访问变量的值,并修改了变量的值。
最后,我们输出了变量 a的新值。
需要注意的是,在使用指针时需要特别小心,因为指针操作涉及到内存地址的操作,如果操作不当可能会导致程序崩溃或者出现其他不可预期的错误。
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) B.*x C.&*x D.*&x答案:D分析:因为C++语言表达式没有地址,A不正确。
C++语言普通变量不能用*运算,因此B和C也不正确。
&x 表示变量x的地址,*&x是x 地址的值,所以D正确。
例题4:若要建立如下关系,错误的语句组是( )。
span style='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语言第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________。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七章指针7.1 选择题1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是()。
A.p=q; B.*p=*q; C.a=*q; D.q=a;2.若定义:int a=511, *b=&a;,则printf("%d\n", *b);的输出结果为:A.无确定值B.a的地址C.512 D.5113.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是()。
A.a=*p1+*p2; B.p1=a; C.p1=p2; D.a=*p1*(*p2);4.变量的指针,其含义是指该变量的()。
A.值B.地址C.名D.一个标志5.若有说明语句: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);6.若已定义int a=5; 下面对(1)、(2)两个语句的正确解释是()。
(1) int *p=&a; (2) *p=a;A.语句(1)和(2)中的*p含义相同,都表示给指针变量p赋值。
B.(1)和(2)语句的执行结果,都是把变量a的地址值赋给指针变量p。
C.(1)在对p进行说明的同时进行初始化,使p指向a;(2)变量a的值赋给指针变量p。
D.(1)在对p进行说明的同时进行初始化,使p指向a;(2)将变量a的值赋予*p。
7.若有语句int *p, a=10; p=&a; 下面均代表地址的一组选项是()。
A.a, p, *&a B.&*a, &a, *pC.*&p, *p, &a D.&a, &*p, p8. 若需要建立如图所示的存储结构,且已有说明double *p, x=0.2345; 则正确的赋值语句是()。
A . p=x;B . p=&x;C . *p=x;D . *p=&x;9. 若有说明:int *p, a=1, b; 以下正确的程序段是()。
A . p=&b;B . scanf("%d ", &b);scanf("%d ", &p); *p=b;C . p=&b;D . p=&b;scanf("%d ", *p); *p=a;10.有如下语句:int m=6, n=9, *p, *q; p=&m; q=&n; 如图1所示,若要实现下图所示的存储结构,可选用的赋值语句是()。
A . *p=*q;B . p=*q;C . p=q;D . *p=q;11.以下程序中调用scanf 函数给变量a 输入数值的方法是错误的,其错误原因是()。
#include <stdio.h>main(){int *p, *q, a, b;p=&a;printf("input a:");scanf("%d ", *p);…}A . *p 表示的是指针变量p 的地址B . *p 表示的是变量a 的值,而不是变量a 的地址C . *p 表示的是指针变量p 的值p xm p nqp q nD.*p只能用来说明p是一个指针变量12.下面程序的功能是从输入的十个字符串中找出最长的那个串。
请在________处填空。
#include "stdio.h"#include "string.h"#define N 10main(){char s[N][81], * t;int j;for (j=0; j<N; j++)gets (s[j]);t= *s; // 等价于t=*(s+0);for (j=1; j<N; j++)if (strlen(t)<strlen(s[j])) ________;printf("the max length of ten strings is: %d, %s\n", strlen(t), t);}A.t=s[j] B.t=&s[j] C.t= s++ D.t=s[j][0]13.下面判断正确的是()。
A.char *s="girl"; 等价于char *s; *s="girl";B.char s[10]={"girl"}; 等价于char s[10]; s[10]={"girl"};C.char *s="girl"; 等价于char *s; s="girl";D.char s[4]= "boy", t[4]= "boy"; 等价于char s[4]=t[4]= "boy"14.设char *s="\ta\017bc";则指针变量s指向的字符串所占的字节数是()。
A.9 B.5 C. 6 D.715.下面程序段中,for循环的执行次数是()。
char *s="\ta\018bc";for (;*s!='\0';s++) printf("*");A.9 B.5 C. 6 D.716.以下不能正确进行字符串赋初值的语句是()。
A.char str[5]= "good!";B.char *str="good!";C.char str[]="good!";D.char str[5]={'g', 'o','o', 'd'};17.若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是()。
A.p=2*(int *)malloc(sizeof(int));B.p=(int *)malloc(2*sizeof(int));C.p=(int *)malloc(2*2);D.p=(int*)calloc(2, sizeof(int));18.下面程序段的运行结果是()。
char *s="abcde";s+=2;printf("%d", s);A.cde B.字符'c'C.字符'c'的地址D.无确定的输出结果19.设有如下的程序段:char s[]="girl", *t; t=s;则下列叙述正确的是()。
A.s和t完全相同B.数组s中的内容和指针变量t中的内容相等C.s数组长度和t所指向的字符串长度相等D.*t与s[0]相等20.以下正确的程序段是()。
A.char s[20]; B.char *s;scanf("%s", &s); scanf("%s", s);C.char s[20]; D.char s[20], *t=s;scanf("%s", &s[2]); scanf("%s", t[2]);21.下面程序段的运行结果是()。
#include "stdio.h"main(){int m=10, n=20;char *format="%s, m=%d, n=%d\n";m*=n;printf(format, "m*=n", m,n);}A.format, "m*=n", m, n B.format, "m*=n"C.m*=n, m=200, n=20 D.以上结果都不对22.以下与库函数strcpy(char *p, char *q)功能不相等的程序段是()。
A.strcpy1(char *p, char *q){ while ((*p++=*q++)!='\0');}B.strcpy2( char *p, char *q){ while((*p=*q)!='\0'){p++; q++;}}C.strcpy3(char *p, char *q){ while (*p++=*q++);}D.strcpy4( char *p, char *q){ while(*p)*p++=*q++;}23.下面程序段的运行结果是()。
#include "stdio.h"main(){char s[]="example!", *t;t=s;while( *t!='p'){ printf("%c", *t-32);t++;}}A.EXAMPLE! B.example! C.EXAM D.example!24.以下正确的程序段是()。
A.char s[]="12345", t[]="6543d21"; strcpy( s,t);B.char s[20], *t="12345"; strcat(s,t);C.char s[20]="", *t="12345"; strcat(s, t);D.char *s="12345", *t="54321"; strcat (s,t);25.以下与库函数strcmp(char *s, chat *t)的功能相等的程序段是()。
A.strcmp1( char *s, chat *t){ 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){ for ( ;*t==*s ;){ if (!*t) return 0;t++;s++;}return (*s-*t);}D.strcmp4( char *s, char *t){ for( ;*s==*t;s++,t++)if (!*s) return 0;return (*t-*s);}26.若有以下定义和语句:int s[4][5], (*ps)[5];ps=s;则对s数组元素的正确引用形式是()。