导航

C程序设计作业(二)交换两个整形变量的数值

Posted on 2017-03-21 22:26  于金池  阅读(499)  评论(3编辑  收藏  举报
#include<stdio.h>
int main()
{
void swap(int *a,int *b); //声明swap 函数 
int a,b; //两个整型变量 
int *p1,*p2;
p1=&a;
p2=&b;
printf("please enter a and b:"); //输入提示 
scanf("%d,%d",&a,&b); //输入 
printf("after change:");
swap(p1,p2); //调用swap函数 
}

void swap(int *a,int *b) //定义为指针类型参数的 swap函数 
{
int i;
i=*a;
*a=*b;
*b=i;
printf("%d,%d\n",*a,*b);
}

 

 

 总结:应用带有指针型参数的函数时,应该前后仔细对照,一定要注意*的意义.注意swap函数的应用,调换的时候,

我刚开始调换的是地址,导致编译运行的时候传的是地址,应该是调换变量的数值.指针的应用特别具有灵活性,需要更加灵活的应用.

2.void swap(int *p,int*q){int *m;*m=*p;*p=*q;*q=*m;}为何无法实现交换?

#include<stdio.h>
void swap(int *p,int *q) //定义函数,两个整型变量数值的交换 
{
 int *m;  //错误 
 *m=*p;
 *p=*q;
 *q=*m;
}
int main()
{
 int a,b; //定义变量a,b 
 scanf("%d,%d",&a,&b) ; //输入数,对a和b赋值 
 swap(&a,&b); //用swap交换a和b 
 printf("a=%d b=%d",a,b); //输出交换后数值 
 return 0;
}

答:m没有被初始化,随机取值,会导致swap函数无法进行正常交换.

3.void swap(int *p,int*q){int *m  ;m=p;p=q;q=m;}为何无法实现交换?

#include<stdio.h>

void swap(int *p,int *q)
{
    int *m;
    m=p;
    p=q;
    q=m;
    printf("p=%x q=%x\n",p,q);
 } 
 int main()
 {
     int a,b;
     scanf("%d,%d",&a,&b);
     swap(&a,&b);
     printf("a=%d b=%d\n",a,b);
     return 0;


 总结:运行结果显示地址数值都没有变换,原因是因为是只通过调用函数让p和q指向了a和b,

        却没有进行地址的交换,所以ab的值是不交换的.

4.构建comp函数,实现两个整形比较,比较大的值通过返回值返回给main.要求comp的参数和返回值都是指针类型数据.

 

#include<stdio.h>
int comp(int *p1,int *p2)//定义comp函数
    {
    if(*p1>*p2)  //用if语句比较*p1和*p2
      return *p1;// 如果*p1>*p2,则返回*p1的值
    else
      return *p2;//否则返回*p2的值
    }

main()
{
    
    int a=55;//定义a和b两个变量并且赋初值
    int b=102;
    int max;//定义max函数
    int *p,*q;
    p=&a;q=&b;  
    max=comp(p,q); //输出最大值
    printf("max=%d\n",max); 
    return 0;

总结:先定义comp函数,然后定义两个变量a和b还有max函数,和两个指针*p和*q,令他们分别指向a和b,最后通过max函数比较得出a和b之间的最大值.

指针灵活多用,需要好好学习.