文档库 最新最全的文档下载
当前位置:文档库 › 指针特别经典几个例题(必做)

指针特别经典几个例题(必做)

题目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); //递归调用
}

相关文档
相关文档 最新文档