作业comp和swap函数
Posted awdx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作业comp和swap函数相关的知识,希望对你有一定的参考价值。
一、swap函数的代码及运行情况
1.代码
1 #include<stdio.h> 2 int main() 3 { 4 void swap(int *m,int *n); 5 int a,b; 6 int *p1,*p2; 7 scanf("%d,%d",&a,&b); 8 p1=&a; 9 p2=&b; 10 swap(p1,p2); 11 printf("%d,%d\\n",*p1,*p2); 12 return 0; 13 } 14 void swap(int *m,int *n) 15 { 16 int t; 17 t=*m; 18 *m=*n; 19 *n=t; 20 } 21 /* 22 第04行://对函数进行声明 23 第05行://定义两个整型变量 24 第06行://定义两个指针变量*p1,*p2 量 25 第07行://输入两个整形数据a,b第08行://令指针p1指向a 26 第09行://令指针p2指向b 27 第10行://执行函数p1,p2 28 第11行://输出交换后的值 29 第12行://结束 30 31 第16行://定义变量t,作用为交换变量 32 第17行://将*m赋值给t 33 第18行://将*n赋值给*m 34 第19行://将t赋值给*n 35 */
2.运行结果
(1)键入74,23:
文字
74,23 23,74 -------------------------------- Process exited after 19.35 seconds with return value 0 请按任意键继续. . .
图片
(2)键入89,42:
文字
89,42 42,89 -------------------------------- Process exited after 17.43 seconds with return value 0 请按任意键继续. . .
图片
二、comp函数的代码及运行情况
1.代码
1 #include<stdio.h> 2 int main() 3 { 4 int comp(int *m,int *n); 5 int a,b; 6 int *p1,*p2; 7 scanf("%d,%d",&a,&b); 8 p1=&a; 9 p2=&b; 10 printf("max=%d",comp(p1,p2)); 11 return 0; 12 } 13 int comp(int *m,int *n) 14 { 15 return *m>*n?*m:*n; 16 } 17 /* 18 第04行://对函数进行声明 19 第05行://定义三个整型变量 20 第06行://定义两个指针变量*p1,*p2 21 第07行://输入两个整形数据a,b 22 第08行://令指针p1指向a 23 第09行://令指针p2指向b 24 第10行://执行函数comp,并将返回值赋值给max 25 第11行://输出最大的值 26 第12行://结束 27 28 第16行://运用了函数return及运算符 ? : 29 先判断传递过来的值,当满足条件*m>*n时, 30 执行前一条语句*m并返回*m的值;不满足条 31 件时,执行后面一条语句*n并返回*n的值 32 */
2.运行结果
(1)键入78,15
文字
78,15 max=78 -------------------------------- Process exited after 4.703 seconds with return value 0 请按任意键继续. . .
图片
(2)键入14,58
文字
14,58 max=58 -------------------------------- Process exited after 7.876 seconds with return value 0 请按任意键继续. . .
图片
三、swap函数两种无法达到交换效果的分析
1.void swap(int *m,int *n){int *t;*t=*m;*m=*n;*n=*t;}无法实现交换的原因:
*t是指针变量t所指向的变量,但未给t进行赋值,t无确定的值,所以t指向了不可预见的地址。因此,不能将变量或整型地址的值直接赋给未经初始化指针。编译会完成,但无法运行。
2.void swap(int *m,int *n){int *t; t=m; m=n; n=t;}无法实现交换的原因:
仅仅将形式参数地址进行了交换,键入22,33,swap函数只是将两个实际数的地址不断的变换,并没有将两个实际参数中的值进行交换;即此种情况为:形参变化,实参未动,没有实际果。像旅馆住的人,只将房门号调换,人并没有进行调换。
四、总结(也包括代码的注释)
1.swap函数
主函数:声明函数---->定义变量---->输入数值---->取其地址---->执行函数---->显示数据---->结束语句
swap函数:定义交换变量---->将前一个形参指针赋给交整型换变量---->将后一个形参指针赋给前一个形参指针---->将整型交换变量赋给后一个形参指针需注意上文提到的两种无法达到交换效果的分析。
2.comp函数
语句中max=comp(p1,p2);printf("max=%d",max);可变为printf("max=%d",comp(p1,p2));所以主函数思路也为:
主函数:声明函数---->定义变量---->输入数值---->取其地址---->执行函数---->显示数据---->结束语句
comp函数:直接使return函数中嵌套运算符 (判断条件)?(成立时的执行):(不成立时的执行) 不仅可以起到判断的作用,而且直接将判断后得出的值返回给主函数,简洁明了,省去了大量操作中的纷繁复杂的步骤。
以上是关于作业comp和swap函数的主要内容,如果未能解决你的问题,请参考以下文章