文档库 最新最全的文档下载
当前位置:文档库 › c语言指针编程练习题

c语言指针编程练习题

c语言指针编程练习题
c语言指针编程练习题

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个整数,将它们按由小到大的顺序输出 #include

void swap

{

int temp;

temp = *pa;

*pa = *pb;

*pb = temp;

}

void main

{

int a,b,c,temp;

scanf;

if

swap;

if

swap;

if

swap;

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编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数

#include

void main

{

int a=0,b=0,c=0,d=0,e=0,i=0;

char *p,s[20];

while)!=‘\n’)i++;

p=s;

while

{

if

a++;

else if

b++;

else if

c++;

else if

d++;

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

#include

int main

{

void sort[6]);//一维数组的指针做函数参数

int i;

char str[10][6]; char [6];//定义一维数组的指针做函数参数

printf;

for

scanf;

p=str;//将str一维数组指针,赋值给p;

sort;

printf;

for

printf;

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

#include

int 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个元素;

for

scanf;//scanf输入到&p[i]

sort;

printf;

for

printf;//输出到p[i];

}

void sort

{

char *temp;

int i,j;

for

for

if,*)>0)

{

temp=*;//*指向数组指针,我想应该是字符串的首地址;所以可以直接赋值给temp指针;

*=*;

*=temp;

}

}

9.8指针将n个数按输入时顺序的逆序排列,用函数实现

#include

一、选择题

1. 变量的指针,其含义是指该变量的_________.

a)值 b)地址

c)名 d)一个标志

2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____.a)a,point,*&a

b)&*a,&a,*point

c)*&point,*point,&a d)&a,&*point ,point

3.若有说明;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)26

6.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是

A) *p=&a; scanf;

B) p=malloc; scanf;

C) scanf;

D) scanf;

7.有以下程序

#include

main

{ int m=1,n=2,*p=&m,*q=&n,*r;

r=p;p=q;q=r;

printf;

}

程序运行后的输出结果是

A)1,2,1,2

C)2,1,2,1

8. 有以下程序

main { int a=1, b=3, c=5;int *p1=&a, *p2=&b, *p=&c;*p =*p1*;printf; }

执行后的输出结果是

A)1

9. 有以下程序

main

{int a,k=4,m=4,*p1=&k,*p2=&m;

a=p1==&m;

printf;

}

程序运行后的输出结果是

A)4

10. 在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,2

11.有以下程序段

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

12.若有以下定义,则对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.有以下程序段

#include

int 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,20

B)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,10

17.若有定义: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]+j

20.若有以下定义: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;

for

if==*)

printf);

}

输出结果是

A)gmB)rgC)or D)ga

26.设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

相关文档