作业二、comp和swap函数
一、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函数的更多相关文章
- 作业二:构建swap函数
一.swap代码 #include<stdio.h> int main() //主函数部分 { void swap(int *m,int *n); int a,b; int *p1,*p2 ...
- day1作业二:多级菜单操作(函数实现)
作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 本示例的三级菜单是一个yaml文件格式,格式如下 ...
- 自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理
验证的代码: #include <stdio.h> int main(){ char c = 'z'; ) + (c << ) + () + 'a'; printf(" ...
- [Effective C++ --025]考虑写出一个不抛异常的swap函数
引言 在我的上一篇博客中,讲述了swap函数. 原本swap只是STL的一部分,而后成为异常安全性编程的脊柱,以及用来处理自我赋值可能性. 一.swap函数 标准库的swap函数如下: namespa ...
- EC读书笔记系列之13:条款25 考虑写出一个不抛异常的swap函数
记住: ★当std::swap对你的类型效率不高时,提供一个swap成员函数,并确定其不抛出异常 ★若你提供一个member swap,也该提供一个non-member swap来调用前者.对于cla ...
- 《Effective C++》item25:考虑写出一个不抛异常的swap函数
std::swap()是个很有用的函数,它可以用来交换两个变量的值,包括用户自定义的类型,只要类型支持copying操作,尤其是在STL中使用的很多,例如: int main(int argc, _T ...
- day1作业二:多级菜单操作
作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 思路: (1)首先定义好三级菜单字典: (2)提 ...
- day1作业二:多级菜单
作业二:多级菜单 1.三级菜单 2.可以次选择进入各子菜单 3.所需新知识点:列表.字典 4.打印b回到上一层 5.打印q退出循环 流程图如下: readme: (1)存储三级菜单的字典;设置 ...
- C++中swap函数
本文是我用到swap函数时,对其产生好奇,所以结合网上有关博文写下的.个人水平有限,若有错误的地方,欢迎留言指出.谢谢! 一.通用的函数交换模板 template<class T> voi ...
随机推荐
- K2百家讲坛 | 越秀地产:K2为房企数字化转型带来更多可能
随着数字化经济时代的到来,房地产行业逐渐形成了新的竞争和市场格局,房企要在此背景下实现稳步发展,需要由原本的粗放式管理逐渐向集团性管理.精细化管控转变,这对房企的经营发展战略和业务管理方式都提出了不小 ...
- Oracle 11g 单实例到单实例OGG同步实施文档-OGG initial load
Oracle 11g 单实例到单实例OGG同步实施文档-OGG initial load 2018-06-07 00:514730原创GoldenGate 作者: leo 本文链接:https://w ...
- java编写ID3决策树
说明:每个样本都会装入Data样本对象,决策树生成算法接收的是一个Array<Data>样本列表,所以构建测试数据时也要符合格式,最后生成的决策树是树的根节点,通过里面提供的showTre ...
- C++对象模型复习
本文写于2017-02-24,从老账号迁移到本账号,原文地址:https://i.cnblogs.com/EditPosts.aspx?postid=6440685 一:对象模型 C++面向对象的实现 ...
- asp.net webAPI POST方法的CORS跨域问题
端口不同会判断为不同域 Method Not Allowed . web.config中设定·customHeaders 错误变化为 原因‘ post方法使用前会有一次OPTION方法的请求’ 解决: ...
- Bouml快速使用指南
一.Bouml简介 Android 系统中有大量Java.C++代码,继承以及依赖关系非常复杂,Bouml可以用c++.Java.Idl.Php和Python建模及生成代码,反之也可通过uml工具更好 ...
- Linux 下编程
关于Linux 下的C语言编译命令和编程要点! https://www.cnblogs.com/wfwenchao/p/3985153.html?utm_source=tuicool&utm_ ...
- Java虚拟机学习-对象的创建
虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载.解析和初始化过.如果没有,必须先执行相应类的加载过程. 类加载 ...
- python的迭代器
迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的ge ...
- js递归算法1+ 2+3.....100的和
function num(n){ if(n==1) return 1; return num(n-1)+n;}num(100);