• 交换函数作业



    #include<stdio.h>//定义头文件 int main()// 定义主函数 {int i,j;// 定义变量i,j int*p,*q; // 定义指针变量p,q void swap(int*a,int*b);// 声明交换函数 p=&i;// 将指针指向变量i q=&j;// 将指针指向变量j printf("请输入两个需要交换的数: ");//打印“请输入两个需要交换的数”字样 scanf("%d,%d",p,q);// 输入两个变量的值 printf("交换后的效果为: ");// 打印“交换后的效果”字样 swap(p,q);// 调用交换函数 printf("%d,%d",*p,*q);// 将交换后的效果打印出来 return 0; // 返回整型数值 } void swap(int*a,int *b)// 交换函数的定义 {int m;// 定义局部变量m m=*a;//将指针指向的变量传给m *a=*b;// 将指针 b指向的变量传给指针a所指向的变量 *b=m;// 将m传给指针b所指的变量 }
    请输入两个需要交换的数:
    45,78
    交换后的效果为:
    78,45
    --------------------------------
    Process exited after 9.302 seconds with return value 0
    请按任意键继续. . .

    总结:

          这个程序通过将变量的地址传给交换函数的形参,通过地址交换输入的变量,

          形参和实参的指向是同样的地址,达到交换的目的,运行时的错误就是入输入

          交换变量时中间的逗号格式必须是英文格式,不然将出现错误。

    课堂问题一:

    #include<stdio.h>
    int main()
    {int i,j;
    int*p,*q;
    p=&i;
    q=&j;
    void swap(int*a,int*b);
    printf("请输入需要交换的两个数:
    ");
    scanf("%d,%d",p,q);
    printf("交换后的效果为:
    ");
    swap(p,q);
    printf("%d,%d",*p,*q);
    return 0; 
     } 
     void swap(int*a,int*b)
     { printf("我要查看1
    "); 
     int *m;
     printf("我要查看2
    ");
     *m=*a;
     printf("我要查看3
    ");
     *a=*b;
      printf("我要查看4
    ");
     *b=*m;
      printf("我要查看5
    ");
     }
    请输入需要交换的两个数:
    45,78
    交换后的效果为:
    我要查看1
    我要查看2
    
    --------------------------------
    Process exited after 13.63 seconds with return value 3221225477
    请按任意键继续. . .

    解释:

    程序运行到定义完局部指针变量后,程序被系统阻止而代码编译
    时没有问题,定义指针后,如果不对其进行初始化,指针的指向
    是任意的,它可能指向系统中某个重要数据,对该指针直接赋值,
    会改变系统中其他未知数据,影响其他程序的运行,出于安全考
    虑,系统会阻止我们这样做 ,因此这样的程序无法运行。若是系
    统不阻止,我猜程序能运行。

    课堂问题二:

    #include<stdio.h>
    int main()
    {int i,j;
    int*p,*q;
    p=&i;
    q=&j;
    void swap(int *a,int *b);
    printf("请输入需要交换的两个数:
    ");
    scanf("%d,%d",&i,&j);
    printf("交换后的效果为:
    ");
    swap(p,q);
    printf("%d,%d
    ",*p,*q);
    return 0; 
     } 
     void swap(int *a,int *b)
     {
    int*m;
     m=a;
     printf("%d
    ",*m);
     a=b;
     printf("%d
    ",*a); 
     b=m;
     printf("%d
    ",*b);
     }
     
    请输入需要交换的两个数:
    45,78
    交换后的效果为:
    45
    78
    45
    45,78
    
    --------------------------------
    Process exited after 7.94 seconds with return value 0
    请按任意键继续. . .

    解释:

    这个调用函数原本想用交换地址的方式,达到交换变量的目的,
    通过打印出的调用函数中各指针的指向可以看出各指针的指向,
    但这程序实参向形参实际上就是个值传递 ,形参只是个实参的
    拷贝,交换的只是拷贝过去的数,与原来的实参无关。所以调用
    函数后任然是原来的顺序。

    通过指针输出最大值:

    #include<stdio.h>
    int main()
    {int i,j;
    int*p,*q,*c;
    p=&i;
    q=&j;
    int*swap(int*a,int*b);//定义函数指针 ,让函数返回指针类型数据 
    printf("请输入需要比较的两个数:
    ");
    scanf("%d,%d",p,q);
    printf("较大的数为:
    ");
    c=swap(p,q);//将函数的返回值赋值给指针变量c 
    printf("%d",*c);
    return 0; 
     } 
     int*swap(int*a,int*b)
     {if(*a<*b)
     return b;//返回指针变量 
     else
     return a;
     }
    请输入需要比较的两个数:
    45,78
    较大的数为:
    78
    --------------------------------
    Process exited after 5.187 seconds with return value 0
    请按任意键继续. . .

    总结:

    本程序利用函数指针将返回值类型定义为指针类型,
    并将返回值赋值给指针变量c,通过c将最大值输出
    这种小程序显示不出函数指针的优点。不过用这种
    程序能很好的锻炼和加深我们对指针的理解,熟练
    掌握就是返回值时一定是指针类型,第一次运行时
    还是返回了整型。应加深对指针的理解。

     

  • 相关阅读:
    java中用spring实现数组类型输出
    #科委外文文献发现系统——导出word模板1.0
    #科委外文文献发现系统——项目管理
    终审项目展示
    M2事后会议报告
    【Beta版本发布】爬虫队长装备全面更新!
    Beta版本测试报告
    Beta阶段爬取数目预估
    团队作业Week14——源代码管理
    Daily Scrum NO.10
  • 原文地址:https://www.cnblogs.com/abtious/p/6597503.html
Copyright © 2020-2023  润新知