一、swap函数的代码及运行情况

1.代码

 #include<stdio.h>
int main()
{
void swap(int *m,int *n);
int a,b;
int *p1,*p2;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
swap(p1,p2);
printf("%d,%d\n",*p1,*p2);
return ;
}
void swap(int *m,int *n)
{
int t;
t=*m;
*m=*n;
*n=t;
}
/*
第04行://对函数进行声明
第05行://定义两个整型变量
第06行://定义两个指针变量*p1,*p2 量
第07行://输入两个整形数据a,b第08行://令指针p1指向a
第09行://令指针p2指向b
第10行://执行函数p1,p2
第11行://输出交换后的值
第12行://结束 第16行://定义变量t,作用为交换变量
第17行://将*m赋值给t
第18行://将*n赋值给*m
第19行://将t赋值给*n
*/

swap函数

2.运行结果

(1)键入74,23:

文字

 
,
, --------------------------------
Process exited after 19.35 seconds with return value
请按任意键继续. . .

键入74,23

图片

(2)键入89,42:

文字

 
,
, --------------------------------
Process exited after 17.43 seconds with return value
请按任意键继续. . .

键入89,42

图片

二、comp函数的代码及运行情况

1.代码

 
 #include<stdio.h>
int main()
{
int comp(int *m,int *n);
int a,b;
int *p1,*p2;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
printf("max=%d",comp(p1,p2));
return ;
}
int comp(int *m,int *n)
{
return *m>*n?*m:*n;
}
/*
第04行://对函数进行声明
第05行://定义三个整型变量
第06行://定义两个指针变量*p1,*p2
第07行://输入两个整形数据a,b
第08行://令指针p1指向a
第09行://令指针p2指向b
第10行://执行函数comp,并将返回值赋值给max
第11行://输出最大的值
第12行://结束 第16行://运用了函数return及运算符 ? :
先判断传递过来的值,当满足条件*m>*n时,
执行前一条语句*m并返回*m的值;不满足条
件时,执行后面一条语句*n并返回*n的值
*/

comp

2.运行结果

(1)键入78,15

文字

 
,
max=
--------------------------------
Process exited after 4.703 seconds with return value
请按任意键继续. . .

键入78,15

图片

(2)键入14,58

文字

 
,
max=
--------------------------------
Process exited after 7.876 seconds with return value
请按任意键继续. . .

键入14,58

图片

三、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函数的更多相关文章

  1. 作业二:构建swap函数

    一.swap代码 #include<stdio.h> int main() //主函数部分 { void swap(int *m,int *n); int a,b; int *p1,*p2 ...

  2. day1作业二:多级菜单操作(函数实现)

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 本示例的三级菜单是一个yaml文件格式,格式如下 ...

  3. 自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理

    验证的代码: #include <stdio.h> int main(){ char c = 'z'; ) + (c << ) + () + 'a'; printf(" ...

  4. [Effective C++ --025]考虑写出一个不抛异常的swap函数

    引言 在我的上一篇博客中,讲述了swap函数. 原本swap只是STL的一部分,而后成为异常安全性编程的脊柱,以及用来处理自我赋值可能性. 一.swap函数 标准库的swap函数如下: namespa ...

  5. EC读书笔记系列之13:条款25 考虑写出一个不抛异常的swap函数

    记住: ★当std::swap对你的类型效率不高时,提供一个swap成员函数,并确定其不抛出异常 ★若你提供一个member swap,也该提供一个non-member swap来调用前者.对于cla ...

  6. 《Effective C++》item25:考虑写出一个不抛异常的swap函数

    std::swap()是个很有用的函数,它可以用来交换两个变量的值,包括用户自定义的类型,只要类型支持copying操作,尤其是在STL中使用的很多,例如: int main(int argc, _T ...

  7. day1作业二:多级菜单操作

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 思路: (1)首先定义好三级菜单字典: (2)提 ...

  8. day1作业二:多级菜单

        作业二:多级菜单 1.三级菜单 2.可以次选择进入各子菜单 3.所需新知识点:列表.字典 4.打印b回到上一层 5.打印q退出循环 流程图如下: readme: (1)存储三级菜单的字典;设置 ...

  9. C++中swap函数

    本文是我用到swap函数时,对其产生好奇,所以结合网上有关博文写下的.个人水平有限,若有错误的地方,欢迎留言指出.谢谢! 一.通用的函数交换模板 template<class T> voi ...

随机推荐

  1. Linux中一个文件10行内容,如何输出5-8内容到屏幕

    题目是这样的,Linux中一个文件10行内容,如何输出5-8内容到屏幕首先我们模拟一下这样的环境: [root@localhost question]# pwd /root/question [roo ...

  2. windows环境下python编码问题

    log.info(unicode(str"你好" + "aaa")) 或 Log.info(u"你好111111111111111111111111& ...

  3. ShellExecute, WinExec与CreateProcess

    0x01  ShellExecute ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件.打开一个目录.打印一个文件等等),并对外部程序有一定的控制.  函数原型: Shel ...

  4. C# 索引和长度必须引用该字符串内的位置 LENGTH

    今天遇到了 索引和长度必须引用该字符串内的位置 的问题. 原因是实用 Substring 对字符串进行了前五位的截取,但是忽略了字符串本身不足五位的情况. 如果不足五位,直接将整个字符串赋值过来,添加 ...

  5. C# 事件的使用方法

    事件 事件是C#中另一高级概念,使用方法和委托相关.奥运会参加百米的田径运动员听到枪声,比赛立即进行.其中枪声是事件,而运动员比赛就是这个事件发生后的动作.不参加该项比赛的人对枪声没有反应. 从程序员 ...

  6. P3957 跳房子

    题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线上.每个格子内 ...

  7. API响应

    保证API响应的正确性,就是你需要做的大部分工作.postman的response viewer部分会协助你完成该工作且使其变得简单. 一个API的响应包含body,headers,响应状态码.pos ...

  8. Python02(Linux命令)

    Trainning-day01回顾 1.who :查看登录到系统的用户信息 2.pwd :查看当前所在路径 3.ls :查看当前目录的内容 ls -l ls -a ls -la / ls -l -a ...

  9. VIM学习二: VIM配置代码及效果图

    vim学习及插件 参见:http://www.cnblogs.com/caixu/p/6337926.html .vimrc配置 "***************************** ...

  10. java接口深入

    1.抽象类. java常规类中,有些方法并不是固定的,而是在不同的情况下有不同的实现的,比如一个人,在公司要工作,在学校要学习,在食堂要吃饭,但是这个人还有相同的地方,比如不论在哪里都要呼吸,看,挺, ...