c语言指针程序分析,关于C语言指针的几个经典例题及其解析

阅读后,大家不妨做以下几件事情:

1.对程序进行正确注释

2.画出程序流程图

3.写出程序运行的结果(模拟程序的要求)

题目1:用指针方法处理,输入3个整数,按由小到大的顺序输出

#include  //库函数说明

void main()//main函数定义

{

void swap(int * pt1 , int * pt2);//自定义函数swap说明

int n1, n2, n3;/*定义3整型变量*/

int *p1, *p2, *p3;/*定义3整型指针变量*/

printf("Please input three integers n1, n2, n3: \n");

scanf("%d, %d, %d", &n1, &n2, &n3);//从键盘输入3个整数给3个整型变量

p1 = &n1;//p1指向n1

p2 = &n2;//p2指向n2

p3 = &n3;//p3指向n3

if(n1 > n2) swap(p1, p2);//如果n1> n2,则调用swap函数进行交换

if(n1 > n3) swap(p1, p3);

if(n2 > n3) swap(p2, p3);

printf("Now, the order is %d, %d, %d\n", n1, n2, n3); //输出交换后的3个新整数

}

void swap(int * pt1, int * pt2)//swap函数定义,形式参数为两个整型指针变量

{

int temp;

temp = *pt1;//交换所指对象

*pt1 = *pt2;

*pt2 = temp;

}

题目2:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。编写3个函数:(1)输入10个数(2)进行处理(3)输出10个数

#include

void main()

{

void input(int *number) ;

void max_min_value(int *number);

void output(int *number);

int number[10];

input(number);// call the input function

max_min_value(number);// call the exchange function

output(number);// call the output function

}

// input function

void input(int *number)

{

int i;

printf("please input 10 nubers:\n");

for(i = 0; i < 10; i++)

scanf("%d", number+i);

}

// exchange function

void max_min_value(int *number)

{

int * max, * min, *p, temp;

max = min = number;

for(p = number+1; p < number+10; p++)

{

if(*p > *max)

max = p;

else if(*p < *min)

min = p;

}

// exchange the smallest one with the first element

{

temp = *number;

*number = *min;

*min = temp;

}

// exchange the bigest one with the last element

{

temp = *(number+9);

*(number+9) = *max;

*max = temp;

}

}

// output function

void output(int * number)

{

int * p;

printf("Now ,they are: ");

for(p = number; p < number+10; p++)

printf("%3d", *p);

printf("\n");

}

题目3:4有n个数,使其前面个数顺序向后移m个位置,最后m个数变成前面m个数。

#include

void main()

{

void move(int *, int, int);

int number[20], n, m, i;

printf("how many numbers?\n");

scanf("%d", &n);

printf("input %d numbers:\n", n);

for(i = 0; i < n; i++)

scanf("%d", number+i);//数组名的又一种应用

printf("how many place you want move?\n");

scanf("%d", &m);

move(number, n, m);//调用自定义函数

printf("Now, they are: \n");

for(i = 0; i < n; i++)

printf("%3d", *(number+i));//指针法输出数组的新内容

printf("\n");

}

void move(int * array, int n, int m)

{

int *p, array_end;

array_end = *(array+n-1);

for(p = array+n-1; p > array; p--)

*p = *(p-1);

*array = array_end;

m--;

// recursive call the move function until m reduce to 0

if(m>0)

move(array, n, m);//递归调用

}

http://zlgc.usx.edu.cn/kc/dgdz/news_more.asp?id=1473

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值