c语言指针编程练习题

合集下载

C语言指针习题及答案

C语言指针习题及答案

B)ptr2=k
C)ptr1=ptr2
3、若有说明 :int *p,m=5,n; 以下程序段正确的就是
D
D)k=*ptr1*(*ptr2) 。
A)p=&n ; scanf( “%d ”,&p);
C)scanf( “%d”,&n); *p=n ;
4、已有变量定义与函数调用语句
B)p = &n ;
scanf(“%d ”,*p);
均在有效范围内 )
A)&a[0][0]+6*i+j
B)&a[0][0]+4*j+i
C)&a[0][0]+4*i+j
38、下面程序的运行结果就是
B
D)&a[0][0]+6*j+I 。
main ( ) { int x[5]={2,4,6,8,10}, *p, **pp ;
p=x , pp = &p ;
printf( “%d”,*(p++)); printf( “%3d”,**pp); }
A)a+1 表示的就是字符 t 的地址 B)p 指向另外的字符串时 ,字符串的长度不受限制
C 语言指针习题及答案
C)p 变量中存放的地址值可以改变
D)a 中只能存放 10 个字符
19、若已定义 char s[10]; 则在下面表达式中不表示 s[1] 的地址就是
B

A)s+1
B)s++
C)&s[0]+1
7、下面判断正确的就是
C
C)*&p,*p,&a 。
D)&a,&*p,p

指针编程练习题

指针编程练习题

指针编程练习题指针是一种特殊的数据类型,在C语言中有着重要的作用。

通过指针,我们可以直接访问和操作内存中的数据。

为了熟悉和掌握指针的使用,下面将给出一些指针编程练习题供大家参考。

1. 交换两个变量的值请编写一个程序,使用指针来交换两个整数变量的值。

要求在程序中定义两个整数变量a和b,通过指针交换它们的值,并打印交换后的结果。

示例输入:a = 10,b = 20示例输出:交换前:a = 10, b = 20交换后:a = 20, b = 102. 求数组元素的和请编写一个程序,使用指针来计算一个整型数组中所有元素的和。

要求在程序中定义一个整型数组array,并使用指针访问数组中的元素,计算它们的和,并打印结果。

示例输入:array = {1, 2, 3, 4, 5}示例输出:数组元素的和为:153. 查找数组中的最大值和最小值请编写一个程序,使用指针来查找一个整型数组中的最大值和最小值。

要求在程序中定义一个整型数组array,并使用指针访问数组中的元素,找到数组中的最大值和最小值,并打印结果。

示例输入:array = {7, 4, 9, 2, 5}示例输出:最大值为:9最小值为:24. 字符串长度计算请编写一个程序,使用指针来计算一个字符串的长度。

要求在程序中定义一个字符数组string,并使用指针访问字符数组中的元素,计算字符串的长度,并打印结果。

示例输入:string = "Hello, World!"示例输出:字符串长度为:135. 动态内存分配请编写一个程序,使用指针来动态分配内存空间,并进行数据的读写操作。

要求在程序中使用malloc函数动态分配内存空间,读取用户输入的整数值并存储到动态分配的内存中,然后使用指针访问该内存中的数据,并打印结果。

示例输入:请输入一个整数: 10示例输出:读取到的整数为: 10以上是几个指针编程练习题的示例,通过练习这些题目,可以提高对指针的理解和使用技巧。

C语言指针习题及答案

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语言指针题目及答案

c语言指针题目及答案

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分配( )字节的空间。

(完整word版)C语言指针练习+答案+讲解

(完整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语言指针编程题

第三题: 第三题: 自己实现一个比较字符串大小的函数,也即实Fra bibliotekstrcmp函数。
第四题: 第四题: 对奇阶魔方阵,可用Dole Rob算法生成,其过程为: 从1开始,以此插入各自然数,直到N2为止。 选择插入位置原则为: a. 第一个位置在第一行的正中; b. 向已填充的前一个数字位置(p,q)的左上角(p-1, q-1)填入下一个数字,如 果出现以下情况,则修改填充位置: 1)若填充位置超出上边界,则修改为下边界的相应位置,即把p-1修改为 n-1; 2)若填充位置超出左边界,则修改为最右边的相应位置,即把q-1改为n-1; 3)若填充位置已有数字,则改为该数字(当前数字)的下一行同一位置。 1 1 1 3 2 6 1 5 2 3 4 6 7 2 1 5 3 4 2 6 7 2 1 5 8 3 4 2 6 7 2 1 5 9 1 3 4 8 3 4 2 1 5 3 4
第二题: 第二题: 编写函数void fun (int x, int * pp, int *n),它的功能是:求出x的偶数 因子,并按从小到大的顺序放在pp所指的数组中,这些因子的个数通过形 参n返回(假设pp指向足够大的空间)。如,若x中的值为24,则有6个数 符合要求,它们是2,4,6,8,12,24。
c语言指针练习题c语言指针面试题c语言编程题c语言编程实例100题c语言编程题库c语言编程练习题c语言基础编程题c语言函数编程题c语言指针c语言函数指针
C语言指针编程题
第一题: 第一题: 有一个数组int A[nSize],要求写一个函数: int * myfunc (int *p, int nSize); 将A中的0都移至数组末尾,将非0的移至开始(保持原来的顺序不变)。 例如: A原来是:1, 0, 3, 4, 0, -3, 5 经过myfunc处理后为:1, 3, 4, -3, 5, 0, 0

C语言指针练习题

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

一、选择题1. 变量的指针,其含义是指该变量的.a)值 b)地址c)名 d)一个标志2.若有语句 *4;和;下面均代表地址的一组选项是.a),* b)&*,*c)*,* d)*3.若有说明 *5;以下正确的程序段的是.a); b);(""); ("",*p);c)(""); d);4. 以下程序中调用函数给变量a输入数值的方法是错误的,其错误原因是.*p,*;(“ a:”);(“”,*p);a)*p表示的是指针变量p的地址b)*p表示的是变量a的值,而不是变量a的地址c)*p表示的是指针变量p的值d)*p只能用来说明p是一个指针变量5. 已有变量定义和函数调用语句: 25; (); 下面函数的正确输出结果是. ( *x){ (“\n”*x);}a)23 b)24 c)25 d)266.若有说明: *;则不能通过语句正确给输入项读入数据的程序段是A) *; ("",p);B) ( *)(8); ("",p);C) ("",);D) ("",);7.有以下程序{ 12,*,*,*r;("\n",*p,*q);程序运行后的输出结果是A)1,2,1,2 B)1,2,2,1C)2,1,2,1 D)2,1,1,28. 有以下程序{ 1, 3, 5;*p1, *p2, *;*p =*p1*(*p2);("\n");执行后的输出结果是A)1 B)2 C)3 D)49. 有以下程序{ 44,*p1,*p2;1;("\n");程序运行后的输出结果是()A)4 B)1 C)0 D)运行时出错,无定值10. 在16位编译系统上,若有定义 a[]={10,20,30}, *;,当执行;后,下列说法错误的是()A)p向高地址移了一个字节B)p向高地址移了一个存储单元C)p向高地址移了两个字节D)p与1等价11.有以下程序段a[10]={1,2,3,4,5,6,7,8,9,10},*[3];[5];b中的值是()A)5 B)6 C)8 D)912.若有以下定义,则对a数组元素的正确引用是.a[5],*;a)*[5] b)2 c)*(5) d)*(2)13.若有以下定义,则5表示.a[10],*;a)元素a[5]的地址 b)元素a[5]的值c)元素a[6]的地址 d)元素a[6]的值14.设已有定义: a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是()A) (<(10));B) (<(10));C) (10<);D) (<10; );15.有以下程序段<>{ x[] = {10, 20, 30};* = x;= x;= x;= x;(",", *); ("\n", *);0;程序运行后的输出结果是( )A)11,11,11,12,12,20,20,20 B)20,10,11,10,11,10,11,10C)11,11,11,12,12,13,20,20 D)20,10,11,20,11,12,20,20 16.设有如下定义:[]={6,7,8,9,10};*(2)2;("\n",*,*(2));则程序段的输出结果为A)8,10 B)6,8 C)7,9 D)6,1017.若有定义 a[]={2,4,6,8,10,12},*;则*(1)的值是. *(5)的值是.18.若有以下说明和语句,c[4][5],(*p)[5];能正确引用c数组元素的是.A) 1 B) *(3) C) *(1)+3 D) *(p[0]+2) )19.若有定义: a[2][3],则对a数组的第i行j列元素地址的正确引用为.a)*(a[i]) b)() c)*() d)a[i]20.若有以下定义a[2][3]={2,4,6,8,10,12};则a[1][0]的值是. *(*(1)+0)的值是.21.有以下定义a[10],*;不能给数组a输入字符串的语句是()A)(a) B)(a[0]) C)([0]); D)(b);22.下面程序段的运行结果是.2("");a) b)字符'c' c)字符'c'的地址 d)无确定的输出结果23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()A) s[10]=""; B) t[]="",*;C) s[10]""; D) s[10](s,"");24.设已有定义: *" "; 下列程序段中正确的是()A) a[11], *p; (1[4]);B) a[11]; (, );C) a[11]; (a, );D) a[], *p; ([1]2);25.有以下程序a[]=""[]="";*p1,*p2;i;p12;(0<7)(*(p1)*(p2))("",*(p1));输出结果是()A) B) C) D)26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是.a)*p1+*p2; b)p2 c)p12 d)*p1*(*p2);27.以下正确的程序段是.a) [20]; b) *p;c) [20]; d) [20],*;(""[2]); (""[2]);28.若有说明语句a[]=" ";则以下不正确的叙述是.a)1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符29.下面程序的运行结果是.{ *s1="";*s2="";s1222;("\n"(s12));a)正数 b)负数 c)零 d)不确定的值30.有以下程序f( * *y)t;*x;**y;*;a[8]={1,2,3,4,5,6,7,8},*p,*q;[7];(**q){f();}(0<8) (","[i]);程序运行后的输出结果是。

C语言程序设计指针作业

C语言程序设计指针作业

C语言程序设计指针作业一、选择题【习题1】变量的指针,其含义是指该变量的________A)值B)地址C)名D)一个标志【习题2】若有语句int *point,a; 则point=&a;中运算符&的含义是_____A)位与运算B)逻辑与运算C)取指针内容D)取地址【习题3】若x是整型变量,pb是整型的指针变量,则正确的赋值表达式是A) pb=&x B) pb=x; C) *pb=&x; D) *pb=*x【习题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】若有定义语句char a[]="It is mine";char *p="It is mine";则以下不正确的叙述是________.A)a+1表示的是字符t的地址B)p指向另外的字符串时,字符串的长度不受限制C)p变量中存放的地址值可以改变D)a中只能存放10个字符【习题7】若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为___A)*(a[i]+j) B)(a+i) C)*(a+j) D)a[i]+j【习题8】设有如下定义:int (*ptr)( );则以下叙述中正确的是:A)ptr是指向一维组数的指针变量B)ptr是指向int型数据的指针变量C)ptr是指向函数的指针,该函数返回一个int型数据D)ptr是一个函数名,该函数的返回值是指向int型数据的指针【习题9】设有定义int (*ptr)[m];其中的标识符ptr是A)m个指向整型变量的指针B)指向m个整型变量的函数指针C)一个指向具有m个整型元素的一维数组的指针D)具有m个指针元素的一维指针数组,每个元素都只能指向整型量【习题10】若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元:int *p;p=__________ malloc( sizeof(int));则应填入A) int B) int * C) (*int) D) (int *)二、阅读下列程序,填空或给出程序运行结果。

指针练习题及答案

指针练习题及答案

指针练习题及答案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语言指针习题及答案资料讲解
13.以下与库函数strcpy(char *p1,char *p2)功能不相等的程序段是D。
A)strcpy1(char *p1,char *p2)
{ while ((*p1++=*p2++)!=’\0’) ; }
B)strcpy2(char *p1,char *p2)
{ while ((*p1=*p2)!=’\0’) { p1++; p2++ } }
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”;
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,p
7.下面判断正确的是C。
A)char *a=”china”;等价于char *a; *a=”china”;
C)strcpy3(char *p1,char *p2)
{ while (*p1++=*p2++) ; }
D)strcpy4(char *p1,char *p2)
{ while (*p2) *p1++=*p2++ ; }
14.下面程序段的运行结果是C。

C语言程序设计(指针)习题与答案

C语言程序设计(指针)习题与答案
putchar(*ptr);
return 0;
}
正确答案:Porm
9、如有定义char y[4]="321",*py=&y[0],则表达式*(py+2)的值是____。
正确答案:1
10、如有定义char z[2][4]={"MAT", "LAB"},*pz=&z[1][0];则表达式*pz+1的值是_____。
strcat(s,t);
D.char s[20]=" ", *t="12345";
strcat(s, t);
正确答案:D
8、下面程序段的运行结果是()。
#include <stdio.h>
int main()
{
char s[]="example!", *t;
t=s;
while( *t!='p')
{
printf("%c", *t-32);
6、指向函数的指针变量的值是一个函数的入口地址。(√)
7、作为函数形式参数时,int x[ ][5]与int (*x)[5]两种写法等价。(√)
8、二维M*N数组的名字是一个指向N元数组的指针常量。(√)
9、如果一个变量的值是一级指针变量的地址,则称这个变量为二级指针变量。(√)
10、可以利用指针实现函数返回多个值。(√)
gets(s1);
p1=s1;
p2=s2;
while(*p2++=*p1++);
printf("s2=%s",________);
return 0;

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

C语言—指针习题

C语言—指针习题

第8章指针二、习题(一)、是非题1.运算符“*”有时是单目运算符,有时又可能是双目运算符。

A.对B.错2. 取地址运算符“&”与指针运算符“*”的优先级相同,结合方向为自右向左。

A.对B.错3. 指针变量的类型不是该变量本身的类型,而是它所指向的变量的类型。

A.对B.错4. 指针变量不可以作为函数的参数。

A.对B.错5. &b指的是变量b的地址所存放的值。

A.对B.错6. 语句int *p;定义了一个指针变量p,其值是整型的。

A.对B.错7. 语句“int *p ;”中*p的含义为取值。

//定义指针变量A.对B.错8. 一个变量的地址就称为该变量的“指针”。

A.对B.错9. 语句int i,*p=&i;是正确的C定义。

A.对B.错10. 变量的指针,其含义是指该变量的一个标志。

A.对B.错11. void 类型的指针不指向某种类型的数据,所以没有意义。

A.对B.错12. 表达式*p++的运算顺序为先自增后取值。

A.对B.错13. C语言中,执行表达式(*p)++后p的指向改变了。

A.对B.错14. 两个指针相加没有意义。

A.对B.错15. 若有定义:int *p1,*p2,m=3,n;,则p1=&m;p2=p1;是正确的赋值语句。

A.对B.错16.已知int a[4],*p;,则语句p=&a;是正确的。

// p=a;A.对B.错17. char *name[5]定义了一个一维指针数组,它有5个元素,每个元素都是指向字符数据的指针型数据。

A.对B.错18. *(&a[i]+j)与a[i][j]的含义相同。

A.对B.错19.若有定义:int (*p)[4];,则标示符p是一个指针,它指向一个含有四个整型元素的一维数组。

A.对B.错20.设有以下定义:char *c[2]={"12","34"};,表示c数组的两个元素中分别存放了字符串"12"和"34"的首地址。

C指针练习题带答案

C指针练习题带答案

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、789includemain(){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=&nscanf("%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=&ap2=&bswap(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的值是()。

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

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编一程序,用指针数组在主函数中输入十个等长的字符串。

用另一函数对它们排序,然后在主函数中输出10个已排好序的字符串//用指针数组处理#include#includeint main{void sort;int i;char str[10][6], *p[10];printf;for//首先将10个str的首地址赋值给10个p[i]; p[i]=str[i];//将第i个字符串的首地址赋予指针数组p的第i个元素;forscanf;//scanf输入到&p[i]sort;printf;forprintf;//输出到p[i];}void sort{char *temp;int i,j;forforif,*)>0){temp=*;//*指向数组指针,我想应该是字符串的首地址;所以可以直接赋值给temp指针;*=*;*=temp;}}9.8指针将n个数按输入时顺序的逆序排列,用函数实现#include一、选择题1. 变量的指针,其含义是指该变量的_________.a)值 b)地址c)名 d)一个标志2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____.a)a,point,*&ab)&*a,&a,*pointc)*&point,*point,&a d)&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;scanf;……}a)*p表示的是指针变量p的地址b)*p表示的是变量a的值,而不是变量a的地址c)*p表示的是指针变量p的值d)*p只能用来说明p是一个指针变量5. 已有变量定义和函数调用语句:int a=25; print_value; 下面函数的正确输出结果是________.void print_value{printf;}a)23b)c)d)266.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是A) *p=&a; scanf;B) p=malloc; scanf;C) scanf;D) scanf;7.有以下程序#includemain{ int m=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 { int a=1, b=3, c=5;int *p1=&a, *p2=&b, *p=&c;*p =*p1*;printf; }执行后的输出结果是A)19. 有以下程序main{int a,k=4,m=4,*p1=&k,*p2=&m;a=p1==&m;printf;}程序运行后的输出结果是A)410. 在16位编译系统上,若有定义int a[]={10,20,30}, *p=&a;,当执行p++;后,下列说法错误的是A)p向高地址移了一个字节C)p向高地址移了两个字节B)p向高地址移了一个存储单元 D)p与a+1等价 B)1C)0 D)运行时出错,无定值 B)2C)3D)B)1,2,2,1 D)2,1,1,211.有以下程序段int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是A)5B) C) D)912.若有以下定义,则对a数组元素的正确引用是_________.int a[5],*p=a;a)*&a[5]b)a+ c)* d)*13.若有以下定义,则p+5表示_______.int a[10],*p=a;a)元素a[5]的地址 b)元素a[5]的值c)元素a[6]的地址 d)元素a[6]的值14.设已有定义: int a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是A) for;a++);B) for;p++);C) for;D) for;15.有以下程序段#includeint main{int x[] = {10,0,0};int *px = x;printf; printf;px = x;printf++); printf;px = x;printf; printf;px = x;printf; printf;return 0;}程序运行后的输出结果是A)11,11,11,12,12,20,20,20B)20,10,11,10,11,10,11,10 C)11,11,11,12,12,13,20,20 D)20,10,11,20,11,12,20,20 16.设有如下定义:int arr[]={6,7,8,9,10};int *ptr;ptr=arr;*+=2;printf );则程序段的输出结果为A)8,10 B)6,8C)7,D)6,1017.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*的值是______. *的值是_________.18.若有以下说明和语句,int c[4][5],[5];p=c;能正确引用c数组元素的是______.A) p+1B) *C) *+3D) *)19.若有定义:int a[2][3],则对a数组的第i行j 列元素地址的正确引用为______.a)*b)c)* d)a[i]+j20.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____. *+0)的值是________.21.有以下定义char a[10],*b=a;不能给数组a输入字符串的语句是A)getsB)gets C)gets; D)gets;22.下面程序段的运行结果是_________.char *s=“abcde”;s+=2;printf;a)cde b)字符’c’ c)字符’c’的地址 d)无确定的输出结果23.以下程序段中,不能正确赋字符串的是A) char s[10]=“abcdefg”; B) char t[]=“abcdefg”,*s=t;C) char s[10];s=“abcdefg”; D) char s[10];strcpy;24.设已有定义: char *st=“how are you”; 下列程序段中正确的是A) char a[11], *p; strcpy;B) char a[11];strcpy;C) char a[11];strcpy;D) char a[], *p; strcpy;25.有以下程序main{char a[]=“programming”,b[]=“language”;char *p1,*p2;int i;p1=a;p2=b;forif==*)printf);}输出结果是A)gmB)rgC)or D)ga26.设p1和p2是指向同一个字符串的指针变量,c 为字符变量,则以下不能正确执行的赋值语句是________.a)c=*p1+*p2; b)p2=c c)p1=p2d)c=*p1*;27.以下正确的程序段是_________.a)char str[20]; b)char *p;scanf; scanf;c)char str[20]; d)char str[20],*p=str;scanf; scanf;28.若有说明语句char a[]=“It is mine”;char *p=“It is mine”;则以下不正确的叙述是________.a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符29.下面程序的运行结果是_______.#include #include。

相关文档
最新文档