第七章 指针练习题

合集下载

指针习题

指针习题

一、
1.若有说明:inta=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.511
3.已有定义int a=2, *p1=&a, *p2=&a;下面不能正确执行的赋值语句是()。
A.a, p, *&a B.&*a, &a, *p
C.*&p, *p, &a D.&a, &*p, p
8.若需要建立如图所示的存储结构,且已有说明double *p, x=0.2345;则正确的赋值语句是()。
A.p=x;B.p=&x;
C.*p=x; D.*p=&x;
9.若有说明:int *p, a=1, b;以下正确的程序段是()。
{ 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"
A.*p=*q;B.p=*q;
C.p=q;D.*p=q;

练习题--指针(答案)

练习题--指针(答案)

指针一、选择题1、以下程序的运行结果是( B )sub(int x,int y,int *z){*z=y-x;}void 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);}(A) 5, 2, 3(B) -5, -12, -7(C) -5, -12, -17(D) 5, -2, -72、执行以下程序后,a的值为( C ),b的值为( C )void 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);}① (A) -1(B) 1(C) 0(D) 4② (A) 5(B) 6(C) 7(D) 103、下面程序应能对两个整型变量的值进行交换。

以下正确的说法是( D )void main(){int a=10,b=20;pirntf("(1) a=%d,b=%d\n",a,b);swap(&a,&b);printf("(2) a=%d,b=%d\n",a,b);}swap(int p,int q){int t;t=p;p=q;q=t;}(A) 该程序完全正确(B) 该程序有错,只要将语句swap(&a,&b); 中的参数改为a,b即可(C) 该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可(D) 以上说法都不正确4、有四组对指针变量进行操作的语句,以下判断正确的选项是( D )(1) int *p,*q; q=p;int a,*p,*q; p=q=&a;(2) int a,*p,*q; q=&a; p=*q;int a=20,*p; *p=a;(3) int a=b=0,*p; p=&a; b=*p;int a=20,*p,*q=&a; *p=*q;(4) int a=20,*p,*q=&a; p=q;int p,*q; q=&p;(A) 正确:(1) 不正确:(2)(3)(4)(B) 正确:(1)(4) 不正确:(2)(3)(C) 正确:(3) 不正确:(1)(2)(4)(D) 以上结论都不正确5、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是( B )void 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是一个指针变量6、以下程序有错,错误原因是( D ) //此题不严密,ch虽未置初值,但*p=*q无语法上的错误。

C语言教材第七章指针实验

C语言教材第七章指针实验

C语⾔教材第七章指针实验第七章指针第⼀部分知识训练【知识要点】1. 地址与指针指针变量的概念:⽤⼀个变量专门来存放另⼀个变量的地址。

2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。

3. 指针与数组引⽤⼀个数组元素可以⽤下标法和指针法;可以⽤数组名作函数的参数。

4.指针与函数函数指针变量定义的⼀般形式为:类型说明符 (*指针变量名)();⼀个函数的返回值可以是⼀个函数。

【典型习题与解析】5. char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p; //常量指针,p的值不可以修改;char const * p;//指向常量的指针,指向的常量值不可以改;const char *p; //和char const *p。

6. main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执⾏结果是2,5。

&a+1不是⾸地址+1,系统会认为加⼀个a数组的偏移,是偏移了⼀个数组的⼤⼩(本例是5个int)。

1)&a是数组指针,其类型为 int (*)[5];⽽指针加1要根据指针类型加上⼀定的值,不同类型的指针+1之后增加的⼤⼩不同。

2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],但是prt与(&a+1)类型是不⼀样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是⼀样的,但意思不⼀样。

3)a是数组⾸地址,也就是a[0]的地址,&a是对象(数组)⾸地址,a+1是数组下⼀元素的地址,即a[1],&a+1是下⼀个对象的地址,即a[5]。

指针练习题

指针练习题

编程题1用指向数组的指针变量输出数组的全部元素2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出练习题:一判断题1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。

2.指针的类型是它所指向的变量或对象的类型。

3.定义指针时不可以赋初值。

4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。

5.指针可以加上或减去一个int型数,也可以加上一个指针。

6.两个指针在任何情况下相减都是有意义的。

7.数组元素可以用下标表示,也可以用指针表示。

8.指向数组元素的指针只可指向数组的首元素。

9.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。

10.引用是一种变量,它也有值和地址值。

11.引用是某个变量的别名,引用是被绑定在被引用的变量上。

12.创建引用时要用一个同类型的变量进行初始化。

13.指针是变量,它可以有引用,而引用不能有引用。

二单选题1.下列关于定义一个指向double型变量的指针,正确的是()。

A.int a(5);double *pd=a;B.double d(2.5),*pd=&d;C.double d(2.5),*pd=d;D.double a(2.5),pd=d;2.下列关于创建一个int型变量的引用,正确的是()。

A.int a(3),&ra=a;B.int a(3),&ra=&a;C.double d(3.1);int &rd=d;D.int a(3),ra=a;3.下列关于指针概念的描述中,错误的是()。

A.指针中存放的是某变量或对象的地址值B.指针的类型是它所存放的数值的类型C.指针是变量,它也具有一个内存地址值D.指针的值是可以改变的4.下列关于引用概念的描述中,错误的是()。

A.引用是变量,它具有值和地址值B.引用不可以作数组元素C.引用是变量的别名D.创建引用时必须进行初始化5.已知:int a[5],*p=a;则与++*p相同的是()。

第7章 指针(答案)

第7章 指针(答案)

p=&a; printf("%d\n",++*p); } A)23 B)24 C)25 D)26 9、下列函数的功能是(A) int fun (char *x){ char *y=x; while(*y++); return(y-x-1); } A)求字符串的长度 B)比较两个字符串的大小 C)将字符串x复制到字符串y C)将字符串x连接到字符串中y后面 10、设有如下定义 char *aa[2]={"abcd","ABCD"}; 则以下说法正确的是(C) A)aa数组的元素的值分别是“abcd”和“ABCD”。 B)aa是指针变量,它指向含有两个数组元素的字符型一维数组。 C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地 址。 D)aa数组的两个元素中各自存放了字符'a'和'A'的地址。 11、若有以下定义和语句 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则不能表示a数组元素的表达式是(B) A)*p B)a[10] C)*a D)a[p-a] 12、下面定义不正确的是(B) A)int *p; B)int p[n]; C)int *p(); D)int (*p)(); 13、有下面程序(假设int 类型为2个字节) main() { int a[10]={1,2,3,4,5,6,7,8,9,0},*p; p=a; printf("%x\n",p); printf("%x\n",p+9); } 该程序有两个printf函数,如果第一个printf输出的是194,则第二个 printf输出的结果是(D) A)203 B)204 C)1a4 D)1a6 14、下面程序的输出结果是(D)

指针基础练习题

指针基础练习题

指针基础练习题
指针是C语言中非常重要的概念之一,掌握指针的基本使用方法对于理解和编写复杂的程序至关重要。

本文将提供一些指针的基础练习题,帮助读者巩固和提升对指针的理解和应用。

请读者根据每个题目的要求完成代码,并注明每一步的思路和解答。

题目一:交换两个变量的值
要求:编写一个函数,使用指针交换两个整数变量的值,并在主函数中调用该函数进行测试。

题目二:计算数组元素的平均值
要求:编写一个函数,使用指针计算给定整型数组的元素平均值,并在主函数中调用该函数进行测试。

数组长度和元素的值可由用户输入。

题目三:查找数组中的最大值和最小值
要求:编写一个函数,使用指针查找给定整型数组中的最大值和最小值,并在主函数中调用该函数进行测试。

数组长度和元素的值可由用户输入。

题目四:字符串反转
要求:编写一个函数,使用指针将输入的字符串反转,并在主函数中调用该函数进行测试。

要求不能使用任何库函数。

题目五:动态分配内存
要求:编写一个函数,使用指针动态分配内存,在堆中存储指定数量的整型数据,并在主函数中调用该函数进行测试。

要求用户输入存储的整数个数,然后输入每个整数。

题目六:指针数组的排序
要求:编写一个函数,通过指针数组实现对字符串数组的排序,并在主函数中调用该函数进行测试。

要求用户输入字符串的个数和每个字符串的值。

以上是指针基础练习题的要求和内容,通过完成这些题目,读者可以加深对指针概念和使用方法的理解,在实际编程中能够熟练地运用指针操作。

希望读者能够通过不断的练习和实践,掌握指针的应用技巧,并在编程中取得更好的成果。

指针练习题

指针练习题

指针一、选择题1、若有定义:intx,*pb;则以下正确的赋值表达式是()。

A)pb=&x B)pb=x C)*pb=&x D)*pb=*x2、已知指针p的指向如图所示,则执行语句*p++;后,*p的值是()。

A)20 B)30 C)21 D)313、已知指针p的指向如图所示,则表达示*++p的值是()。

A)20 B)30 C)21 D)314、已知指针p的指向如图所示,则表达示++*p的值是()。

A)20 B)30 C)21 D)315、以下程序的输出结果是()。

A)23 B)24 C)25 D)26void prtv(int *x){ printf(“%d\n”,++*x);}main(){ int a=25;prtv(&a);}6、以下程序的输出结果是()。

a)17 b)18 c)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);}7、以下程序的输出结果是( )。

A)6 B)8 C)4 D)2main(){ int a[]={2,4,6,8},*p=a,i;for(i = 0;i < 4;i++)a[i]=*p++;printf(“%d\n”,a[2]);}8、以下程序的输出结果是()。

A)4 4 B)2 2 C)2 4 D)4 6main(){ int a[5]={2,4,6,8,10},*p,**k;p=a;k=&p;printf(“%d”,*(p++));printf(“%d\n”,**k);}9、若已定义:int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素的引用不正确的是()。

A)a[p-a] B)*(&a[I])C)p[i] D)&a[++i]10、以下程序的输出结果是()。

指针习题——精选推荐

指针习题——精选推荐

指针习题指针的基本概念⼀、选择题1.有如下程序段int *p ,a=10 ,b=1 ;p=&a ; a=*p+b ;执⾏该程序段后,a 的值为。

A. 12B. 11C. 10D. 编译出错2.若有以下定义和语句: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 中3.分析下⾯函数,以下说法正确的是。

swap(int *p1,int *p2){ int *p;*p=*p1; *p1=*p2; *p2=*p;}A. 交换*p1和*p2的值B. 正确,但⽆法改变*p1和*p2的值C. 交换*p1和*p2的地址D. 可能造成系统故障,因为使⽤了空指针⼆、读程序题,写出程序运⾏的结果。

4.#includevoid main(){ int *p1,*p2,*p;int a=5,b=8;p1=&a p2=&bif(aprintf("%d,%d\n",*p1,*p2);printf("%d,%d\n",a,b);}5.void prtv(int * x){ printf("%d\n",++*x);}void main(){ int a=25 ;prtv(&a);}6.void ast(int x,int y,int *cp,int *dp){ *cp=x+y; *dp=x-y; }void main(){ int a,b,c,d;a=4; b=3;ast(a,b,&c,&d);printf("%d,%d\n",c,d);}指针和数组⼀维:7.若有以下定义和语句,且0≤i<10则对数组元素的错误引⽤是。

指针练习题答案(1)

指针练习题答案(1)
{int num=0;
while(*(str+num)!=‘\0’) num++;
return(num);}
A.7B.6C.5D.10
19.下面程序的运行结果是()
# include <stdio.h>
main( )
{static char a[ ]=“Language”,b[ ]=“programe”;
2.执行以下程序后,a的值为(),b的值为()
main(0
{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);}
[1]A.-1B.1C.0D.4
[2]A.5 B.6C.7D.10
D.*p只能用来说明p是一个指针变量
4.以下程序有错,错误原因是()
main()
{int *p,i;
char *q,ch;
p=&i;
q=&ch;
*p=40;
*p=*q;……….}
A.p和q的类型不一致,不能执行*p=*q;语句;
B.*p中存放的是地址值,因此不能执行*p=40;语句
C.q没有指向具体的存储单元,所以*q没有实际意义
指针单元练习题
一、选择题:
1.以下程序的运行结果是()
sub(int x,int y,int *z)
{*z=y-x;}
main()
{int a,b,c;
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);

指针经典练习题及答案

指针经典练习题及答案

二、程序题1、计算字符串中子串出现的次数。

要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。

2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。

算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。

例如,China转换成密文为G l m r e。

要求:在函数change中完成字母转换,在函数insert中完成增加空格,用指针传递参数。

3、字符替换。

要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E),并返回替换字符的个数。

4、编写一个程序,输入星期,输出该星期的英文名。

用指针数组处理。

5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。

要求:利用字符串指针和指针数组实现。

6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值,然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。

7、实现模拟彩票的程序设计:随机产生6个数字,与用户输入的数字进行比较,输它们相同的数字个数(使用动态内存分配)。

/*1、计算字符串中子串出现的次数。

要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。

*/#include<stdio.h>int subString(char *a, char *b){int i = 0;int j = 0;int m = 0;char *p = b;while(*a){while(*a){if(*a == *b){break;}a++;}while(*b){if(*a != *b){return m;}else{m = m;}b++;a++;}// a++;b = p;++m;}return m;}int main(){char a[100];char b[100];printf("请输入字符串a:");gets(a);printf("请输入字符串b:");gets(b);printf("%d", subString(a, b));return 0;}/*2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。

第7章 指针习题(C语言程序设计)

第7章 指针习题(C语言程序设计)

×
B. s[2]
*(s+2) D. s+=2,*ps; × ps+=2,*ps;
*(ps+2)
一单项选择题. 一单项选择题 10 程序中对fun函数有如下说明: void*fun( ) 此说明的含义是: A. fun函数无返回值 B. fun函数的返回值可以是任意的数据类型 C. fun函数的返回值是无值型的指针类型 D. 指针fun()指向一个函数
二填空. 二填空 1 设有以下定义和语[句: int a[3][2]={10,20,30,40,50,60},(*p)[2]; p=a; 则*(*(p+2)+1)的值为_________
*(p[2]+1) p[2][1] *(p+2)[1] 60
二填空. 二填空 3 以下程序运行后输出结果是: 以下程序运行后输出结果是: main() { char s[]=“9876” *p; p s +1 for(p=s;p<s+2;p++) s+2 printf(“%s\n”,p); } 9876 876
9 6
5 2 4 i=2
ki
9 6
5 2 4 i=n-2
ki k
}}
*p1 *p2
C. a=p1-p2;
p1:
p2:
a:
一单项选择题. 一单项选择题 8 若有以下定义: 若有以下定义: s ps ps+2 char s[20]=“programming”,* ps=s; 则下列不能代表字符 的表达式是 ( ) 则下列不能代表字符o的表达式是 不能代表字符 A . ps+2 C. ps[2]
3,5, 5,3

第七章 练习题参考答案

第七章  练习题参考答案

V1 V3 V6
7. 对下图所示的有向图
(1) 画出它的邻接表 (2) 根据邻接表写出其拓扑排序序列
解:(1)邻接表为
0
2
5∧
2
3
4∧
2 3∧
4∧
1
2
3
6∧
1
4∧
(2)由邻接表可得拓朴排序序列:
1 5 2 3 64
8.已知n个顶点的有向图用邻接矩阵表示,编 写函数,计算每对顶点之间的最短路径。
4 18 ∧
2
1 12
32
5 22 ∧
3
1 16
22
44∧
4
1 18
34
5 10 ∧
5
2 22
4 10 ∧
解:(1) V1
12 V2
16 2
18
4 V3 22
V4
10 V5
(2)深度优先遍历的结点序列:v1,v2,v3,v4,v5
广度优先搜索的结点序列:v1,v2,v3,v4,v5
(3)最小生成树
CD CA CAB
CD CA CAB
CD CA CABΒιβλιοθήκη CD3DB
DB
DB DBC
DBCA DB DBC
DBCA DB DBC
10.对于如图所示的AOE网,求出各活动可能 的最早开始时间和允许的最晚开始时间, 哪些是关键活动?
a1=4
v2
v1
a3=2
a2=3
v3
a5=6 v4
a4=4
解:
顶点 Ve Vl V1 0 0 V2 4 4 V3 6 6 v4 10 10
if(length[i][k]+length[k][j]<length[i][j]) { length[i][j]=length[i][k]+length[k][j];

c 指针练习题

c  指针练习题

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.抗日战争胜利后,中国社会的主要矛盾是(D )A.中美民族矛盾B.中日民族矛盾C.资产阶级同资产阶级的矛盾D.中国人民同美帝国主义支持的国民党反动派之间的矛盾2.1945年8月25日中国共产党在对时局的宣言中明确提出( C )的口号。

A.避免内战,和平建国B.建立民主联合政府C.和平、民主、团结D.打到蒋介石,解放全中国3.1946年10月10日,国共两党签订《政府与中共代表会谈纪要》,确定( B )。

A.建立民主联合政府B.和平建国的基本方针C.实行宪政、结束训政D.保护人民的民主、自由权利4.1946年6月底,国民党军以进攻(A )为起点,挑起全国性的内战。

A.中原解放区B.华北解放区C.华中解放区D.东北解放区5.1947年6月底,根据中共中央的决策和部署,(C)率领的晋冀鲁豫野战军主力,千里跃进大别山。

A.陈毅、粟裕B.陈庚、谢富治C.刘伯承、邓小平D.谭震林、许世友6.揭开人民解放军全国性战略进攻序幕的是( B )A.孟良崮战役开始B.刘邓大军挺进大别山C.三大战役开始D.渡江战役开始7.解放战争时期,最早与蒋介石集团决裂的民主党派是(A)A.中国民主同盟B.民主建国会C.中国民主促进会D.中国国民党革命委员会8.解放战争时期,国民党统治区人民民主运动高涨的根本原因是( C )A.中国共产党组织了反蒋统治的第二条战线B.上海学生举行了声势浩大的“三反”斗争C.国民党蒋介石集团的经济崩溃和政治危机D.民主党派的联合斗争和人民起义遍及各地9.对第三次国内革命战争时期反蒋斗争第二条战线的准确表述是( D )A.国统区的学生运动B.国统区的工农运动C.国统区的地下斗争D.国统区的民主运动10.在全面内战爆发前夕,中共中央发出(D ),决定将党在抗日战争时期实行的减租减息政策改变为“耕者有其田”的政策。

A.《关于土地问题的指示》B.《中国土地法大纲》C.《关于发展农业生产的决议》D.《五四指示》11.解放战争时期制定的《中国土地法大纲》规定(A)A.废除封建性及半封建性剥削的土地制度B.调整减租减息政策C.按贫雇农人口分配土地D.没收地主、富农的土地12.解放战争期间,台湾人民反抗国民党暴政的重要活动是(B )A.五二0运动B.二二八起义C.一二九运动D.一二一运动13.我国最早建立的少数民族自治区是(C )A.新疆维吾尔族自治区B.广西壮族自治区C.内蒙古自治区D.宁夏回族自治区14.1949年蒋介石发表“求和”声明,其真实意图是(D )A.希望结束内战B.希望国共两党关系恢复到政协协议的框架下C.与中共和谈,划江而治D.争取时间,准备卷土重来15.中共七届二中全会需要解决的重要问题是(C)A.如何夺取全国革命胜利B.如何解决民主革命遗留的任务的问题C.党的工作重心转移问题D.民主革命向社会主义革命转变的问题16.七届二中全会召开的地点是(C )A.北平B延安C.西柏坡D.上海17.1949年6月30日毛泽东发表了(B),向全中国人民阐述了中国共产党在建立新中国问题上的主张。

指针习题答案

指针习题答案

指针习题答案1.已知有以下的说明,int a[]={8,1,2,5,0,4,7,6,3,9};那么a[*(a+a[3])]的值为_ 0__.2.对于指向同一数组的指针变量,不能进行哪种运算? (A)A. +B. -C. =D. ==3.若有以下说明和语句,且0<=i<10, 则下面哪个是对数组元素的错误引用?(C)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])4.若有以下说明和语句,且0<=i<10,则下面哪个是对数组元素地址的正确表示? (D)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]5.以下程序的输出结果是哪一项? (D)#includemain(){ 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. 4C. 7D. 106.有以下说明和语句,, 则p2-p1的值为多少?(单选) (A)int a[10], *p1, *p2;p1=a;p2=&a[5];A. 5B. 6C. 10D. 没有指针与指针的减法7.若有以下定义和语句:int s[4][5],(*ps)[5];ps=s;则对s数组元素的正确引用形式是(C)A) ps+1 B) *(ps+3) C) ps[0][2] D) *(ps+1)+38.若有以下的定义,int t[3][2];能正确表示t数组元素地址的表达式是(C)A) &t[3][2]B) t[3]C) t[1]D) *t[2]9.以下程序的输出结果是a= 36 _, b= 16 _, c= 19 _。

C语言练习题第七章

C语言练习题第七章

C语⾔练习题第七章第七章常见题型⼀.选择题:1.C语⾔标准库函数"fgets(string,n,fp)"的功能是________。

A.从⽂件fp中读取长度为n的字符串存⼊指针string指向的内存B.从⽂件fp中读取长度为n-1的字符串存⼊指针string指向的内存C.从⽂件fp中读取n个字符串存⼊指针string指向的内存D.从⽂件fp中读取长度不超过长度为n的字符串存⼊指针string指向的内存2.参考下⾯函数f的定义:f(int a){printf("%d",a);}函数f的返回类型________。

A.同参数a的类型相同B.是void类型C.没有返回值D.⽆法确定3.函数NewPring⽤于打印sin(x)、cos(x)和ln(x)等函数的曲线模拟,其参数就是上述函数,则NewPring的原型为________。

A.double NewPrint(double x)B.void NewPrint(double(*f)(double X))C.void (*NewPrint)(double X)D.void (*NewPrint)(double f(double x))4.数组名作为参数传递给函数,此时作为实在参数的数组名被处理为________。

A.该数组的长度B.该数组的元素个数C.该数组中各元素的值D.该数组的⾸地址5.执⾏完下⾯的程序段后,屏幕显⽰的内容为何。

main(){int a=2,i;for(i=0;i<3;i++) printf("%d",f(a));}f(a)int a;{int b=0;static c=3;b++;c++;return(a+b+c);}A.777B.7 7 7C.789D.7 8 96.C程序中若函数类型未加显式说明,则函数的隐含类型为________类型。

A.voidB.intC.charD.double7.对于C程序的函数,下列叙述中正确的是________。

指针经典练习题及答案教学教材

指针经典练习题及答案教学教材

指针经典练习题及答案二、程序题1、计算字符串中子串出现的次数。

要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。

2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。

算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。

例如,China转换成密文为G l m r e。

要求:在函数change中完成字母转换,在函数insert中完成增加空格,用指针传递参数。

3、字符替换。

要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E),并返回替换字符的个数。

4、编写一个程序,输入星期,输出该星期的英文名。

用指针数组处理。

5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。

要求:利用字符串指针和指针数组实现。

6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值,然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。

7、实现模拟彩票的程序设计:随机产生6个数字,与用户输入的数字进行比较,输它们相同的数字个数(使用动态内存分配)。

/*1、计算字符串中子串出现的次数。

要求:用一个子函数subString()实现, 参数为指向字符串和要查找的子串的指针,返回次数。

*/#include<stdio.h>int subString(char *a, char *b){int i = 0;int j = 0;int m = 0;char *p = b;while(*a){while(*a){if(*a == *b){break;}a++;}while(*b){if(*a != *b){return m;}else{m = m;}b++;a++;}// a++;b = p;++m;}return m;}int main(){char a[100];char b[100];printf("请输入字符串a:");gets(a);printf("请输入字符串b:");gets(b);printf("%d", subString(a, b));return 0;}/*2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。

课后习题 第七章 指针与引用

课后习题 第七章 指针与引用
int *t,n; n=a;t=&n; return t; } a.一个不可用的存储单元地址值 b.一个可用的存储单元地址值 c.n 中的值 d.形参 a 中的值
一:选择题:
1.A 2.C 3.A 4.D 5.C 6.A 7.C 8.B 9.B 10.A 二:填空题 1、 给出以下程序的输出结果是___________ #include<stdio.h> void main() { int *v,b; v=&b; b=100; *v+=b; printf("%d\n",b); } 2、 说明语句"int (* p)();"的含义是____________ 3、 已知函数说明语句:void *fun();则它的含义是___________ 4、 已知:int i;char *s="a\045+045\'b";执行语句"fot(i=0;*s++;i++);"之后,变量 i 的结果是__________ 5、下面的程序是求两个整数之和,并通过形参传回结果。 int add(intx,int y, ___________z) {_________=x+y;}
} void main() {
char a[50]; cout<<"请输入一字符串:"; cin>>a; char b[30]; cout<<"请输入上字符串的一个子串:"; cin>>b; cout<<strstr_rep(a,b)<<endl; }
2.根据运算符的优先级,表达式*--p=*(--p)。所以,先执行--p 操作,使指针 p 向低地址方向移动 一个存储单元,指向 a[1]。然后用运算符"*"取得该地址所存储的数据,即 20。

C语言指针练习+答案+讲解.

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)。

指针习题——精选推荐

指针习题——精选推荐

指针习题⼀.选择题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;以下程序段正确的是 C 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.已有变量定义野指针和函数调⽤语句:inta=25;print_value(&a);下⾯函数的输出结果是D 。

void print_value(int *x){ printf(“%d\n”,++*x); }A)23 B)24 C)25D)265.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项有哪些 B 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循环的执⾏次数是 A C。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

10.假如有语句char * s1 = “abc”; char s2[] = “xyz”; 下列 _____语句是错误的。 A *s1++; B *s2++; C *(s1 + 1); D *(s2 + 1);
11.执行下列语句后,屏幕上输出的是_____。 #define TEST char s[] = “xyz”, *p = s; #ifndef TEST while(*p++); while(--p >= s) printf(“%c”,*p); #else while(*p) printf(“%c”,*p++); #endif A xyz B zyx C 无输出 D 乱码
分析下面程序的运行结果
int a[3] [3]={10,9,8,7,6,5,4,3,2}; int *pa[3]={a[0],a[1],a[2]}; int *p=a[0]; main ( ) { int i; for (i = 0 ; i<3 ; i++) printf("%d\t%d\t%d\n", *a[i], *(*(pa+i)) , p [i]) ; }
3. 对表达式 double (*f)(int, char *) 的正确理解为_____。 A f 是一个返回双精度指针的函数 B f 是一个需要两个参数的函数,该函数为double型 C 该函数是一个返回double型的需要两个参数的双精度指针 D f 是一个需要两个参数的返回double型的函数指针
12. 对表达式 int * (*fp[5])(char *)的正确理解为_____。 A fp 是一个返指针的函数,需要一个字符型指针参数 B fp 是一个需要字符型指针参数的函数,该函数返回int * 型 C fp是一个指向一个返回int *型的需要一个char *参数的函数 指针 D fp 是一个指针数组、数组的元素是指向返回int *,需要char * 做参数的函数的指针
改错 3. 函数revs将一个字符串反转 void revs(char * s) { char t, * p = s; while(*p++); p--; while(p-- > s) { t = *p; *p = *s; *s = t; }}
改错 4.下列程序的功能是将两个字符串链接起来 #include <string.h> void strcat (char *s,char *t) { for(; *s++;); s++; while(*s == *t) s++; t++; }
第七章指针练习题
1.假如p是一个指针变量,下列表达式中正确的是_____。 A *(p--)-=2 B (++p)++ C ++(p++) D ++p++
2.假定有数组a[3][7],下列表达式中_____是错误的。 A *(*a+2) B *(*(a + 1)) C *(&a[0][0] +2) D *(a+2)[5]
编写一个函数delodds。功能是从字符串s中删除 所有ASCII码位奇数的字符,串中剩余字符形成一 个新串放在t所指的数组中。函数原型如下:(10 分) void delidds(char * s, char t[ ])
六.分析下面程序的运行结果(10分) #include <stdio.h> void main() { char s1[] = “gawsie”; char s2[] = “bletonism”; char *ps; int i = 0; for(ps=s1;*ps;ps++) { if(*ps == „a‟ || *ps == „e‟) putchar(*pቤተ መጻሕፍቲ ባይዱ); else (*ps)--; putchar(*ps); } putchar(„\n‟); while(s2[i]) { printf(“%c” , i % 3 ? s2[i] : „*‟); i++; } }
8.假定有int a[3][7], *pt, (*pa)[7]; 下列语句_____是错误的。 A pt=&a[0][0]; B pt = a[0]; C pa = a; D pt = a;
9. 对表达式 char * (* pa[3])(char *)的正确理解为_____。 A pa 是一个返指针的函数数组,需要一个字符指针参数 B pa 是一个需要字符指针参数的函数,该函数返回char * 型 C 该函数是一个返回char *型的需要一个char *参数指针数组 D 由3个指针组成的数组,每个指针指向返回char *型,需要 char *型参数的函数
14.设有int arr[3][3], * p, (*pa)[3]; 表达式( A arr B &arr[0] C &arr[0][0];
)的类型是int *型: D pa
改错 1. /* strcmp: return <0 if s < t,0 if s==t,>0 if s>t */ #include <string.h> int strcmp (char *s,char *t) { for(; *s == *t; s++, t++) if(*s = „\0‟) return 0; return *(s – t); }

6.假定有数组int a[4][4],下列表达式中_____不是a[2][3]的地址。 A a[2] +3 B *(a+2)+3 C &a[2][3] D *(a[2]+3)
7. 已知函数fp原型是:int fp(double * (*)[10]),下列数组_____ 可作为参数: A double * arr[10]; B double * arr[5][10]; C double arr[5][10]; D double ** arr[10];
改错 2. 下列函数的功能是用冒泡法对6个字符串由小到大排序。 void bubblesort(int * a[6]){ int i,j; char *p; for(j = 0; j < 5; j++){ for(i=j + 1; i < 6; i++) if(strcmp(*(a+j),a + i) > 0) { {p = *(a+j); *(a+j) = a+i; *(a+I) = p; } }}
六. 假定内存的初始分配如下图左方所示,执行下述语句后, 分析内存分配情况,将结果写在右边内存示意图相应位置。 short *pi,*pj,t; long *pl; double *pd; *pd += (double)*pi; pi = &t; *pi = (short)*pl; pj = pi; *pj /= 3; ++pj; ++*pj;
4. 设有int a, * p = &a ;下列表达式中,不正确表达式是( A &(*p) B &(*a) C *(&p) D *(&a)

5. 已知int a[5][5],int (*pa)[5];正确赋值语句是( A pa = a[1]; B pa = *(a+1); C pa = &(a+1); D pa = a + 1;
13. 已知函数fn原型是:char * fn( char * (*)(char), char *[ ]),且 有char ** v1; char * v2[ ]; char * fp(char); 正确的函数调用语句是( ) A fn(fp(3),v2); B fn(v1,v2); C fn(fp,&v2); D fn(fp,v1);
相关文档
最新文档