练习题1:利用指针,输出两个书中较大的值
#include<stdio.h>
int main(){
int a,b;
int *p1,*p2,*p;
printf("请输入两个数:");
scanf("%d %d",&a,&b);
p1=&a;
p2=&b;
if(a<b){
p=p1;
p1=p2;
p2=p;
}
printf("%d %d\n",a,b);
printf("max=%d,min=%d",*p1,*p2);
}
练习题2:利用方法改进题(1)
#include<stdio.h>
void swap(int *p1,int *p2);
int main(){
int a,b,*pointer_01,*pointer_02;
printf("请输入两个数:");
scanf("%d %d",&a,&b);
pointer_01=&a;
pointer_02=&b;
if(a<b){
swap(pointer_01,pointer_02);
}
printf("\n%d>%d\n",a,b);
}
void swap(int *p1,int *p2){
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
练习题3:利用指针给三个数排序
#include<stdio.h>
int main(){
void exchange(int *q1,int *q2,int *q3);
int a,b,c,*p1,*p2,*p3;
printf("请输入三个数:");
scanf("%d %d %d",&a,&b,&c);
p1=&a;
p2=&b;
p3=&c;
exchange(p1,p2,p3);
printf("%d %d %d\n",a,b,c);
}
void exchange(int *q1,int *q2,int *q3){
void swap(int *pt1,int *pt2);
if(*q1<*q2){
swap(q1,q2);
}
if(*q1<*q3){
swap(q1,q3);
}
if(*q2<*q3){
swap(q2,q3);
}
}
void swap(int *pt1,int *pt2){
int temp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
}
练习题4:利用指针将数组元素遍历输出
#include<stdio.h>
int main(){
int a[10]={9,8,7,6,4,5,2,3,1};
int *p,i;
p=&a[0];
for(i=0;i<10;i++){
printf("%d",*(p+i));
}
}
练习题5:将一个数组倒序输出
方法一:
#include<stdio.h>
int main(){
//将一个数组倒叙输出
void reverse(int x[],int n);
int i,a[10]={3,7,9,11,8,6,7,5,4,2};
printf("The original array:\n");
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
printf("\n");
reverse(a,10);
printf("The array has been inverted:\n");
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
printf("\n");
}
void reverse(int x[],int n){
int temp,i,j,m;
m=(n-1)/2;
for(i=0;i<=m;i++){
j=n-i-1;
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
方法二:
#include<stdio.h>
int main(){
void reverse(int *x,int n);
int i,a[10]={3,7,9,11,8,6,7,5,4,2};
printf("The original array:\n");
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
printf("\n");
reverse(a,10);
printf("The array has been inverted:\n");
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
printf("\n");
}
void reverse(int *x,int n){
int *p,temp,*i,*j,m;
m=(n-1)/2;
i=x; //指向元素的第一个索引
j=x+n-1; //指向的是数组的最后一个元素
p=x+m; //指向中间,配对……
for(;i<=p;i++,j--){
temp=*i;
*i=*j;
*j=temp;
}
}
练习题6:利用指针找出数组中的最大值和最小值
方法一:
#include<stdio.h>
int max,min;
int main(){
void max_min_value(int *array,int n);
int number[10],i;
printf("请输入10个数:");
for(i=0;i<10;i++){
scanf("%d",&number[i]);
}
max_min_value(number,10);
printf("\nmax=%d,min=%d\n",max,min);
}
void max_min_value(int *array,int n){
int *p,*array_end;
array_end=array+n;
max=min=*array;
for(p=array+1;p<array_end;p++){
if(*p>max){
max=*p;
}
else if(*p<min){
min=*p;
}
}
}
方法二:
#include<stdio.h>
int max,min;
int main(){
void max_min_value(int array[],int n);
int number[10],i;
printf("请输入10个数:");
for(i=0;i<10;i++){
scanf("%d",&number[i]);
}
max_min_value(number,10);
printf("\nmax=%d,min=%d\n",max,min);
}
void max_min_value(int array[],int n){
int *p,*array_end;
array_end=array+n;
max=min=*array;
for(p=array+1;p<array_end;p++){
if(*p>max){
max=*p;
}
else if(*p<min){
min=*p;
}
}
}