交换函数作业


#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("请输入两个需要交换的数:\n");//打印“请输入两个需要交换的数”字样 scanf("%d,%d",p,q);// 输入两个变量的值 printf("交换后的效果为:\n");// 打印“交换后的效果”字样 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("请输入需要交换的两个数:\n");
scanf("%d,%d",p,q);
printf("交换后的效果为:\n");
swap(p,q);
printf("%d,%d",*p,*q);
return 0; 
 } 
 void swap(int*a,int*b)
 { printf("我要查看1\n"); 
 int *m;
 printf("我要查看2\n");
 *m=*a;
 printf("我要查看3\n");
 *a=*b;
  printf("我要查看4\n");
 *b=*m;
  printf("我要查看5\n");
 }
请输入需要交换的两个数:
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("请输入需要交换的两个数:\n");
scanf("%d,%d",&i,&j);
printf("交换后的效果为:\n");
swap(p,q);
printf("%d,%d\n",*p,*q);
return 0; 
 } 
 void swap(int *a,int *b)
 {
int*m;
 m=a;
 printf("%d\n",*m);
 a=b;
 printf("%d\n",*a); 
 b=m;
 printf("%d\n",*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("请输入需要比较的两个数:\n");
scanf("%d,%d",p,q);
printf("较大的数为:\n");
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将最大值输出
这种小程序显示不出函数指针的优点。不过用这种
程序能很好的锻炼和加深我们对指针的理解,熟练
掌握就是返回值时一定是指针类型,第一次运行时
还是返回了整型。应加深对指针的理解。

 

 

 

 

 

 

 

posted @ 2017-03-21 23:17  /*nobody*/  阅读(934)  评论(1编辑  收藏  举报