C++第17周项目1——体会函数参数传递

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565

【项目1-体会函数参数传递】
1、下面三段程序都试图通过定义函数,实现实际参数在必要时的交换,哪些能够实现,哪些不能实现?通过运行程序和单步执行,让自己对这一过程更加清楚,然后请在博文中给出明确的回答,并用你自己的话展开描述(自己的话,但要用术语,用术语讲技术的事,是必须经历的一个过程。)

2、设计一个程序,输入3个整数,将其按从大到小的顺序输出,要求
(1)排序功能通过函数实现
(2)写出两个版本的函数实现,一个采用传地址值的方法,另一个采用引用类型作参数
  注意:不要一看排序就冒泡法、选择法,那是给大规模数据的排序而定的,此处不定义数组,只简单实现即可;不要只盯着完成任务,而更应该知道其中的机理,当编程(本项目第2个要求)难以完成时,通过读程序(本项目第1个要求)并领悟找到启发。

参考解答:

  在函数调用时,实参的值要传递给形参。当形参是指针时,实参也是指针。形参与实参占用不同的内存空间,但通过传值(传地址值),指向的是同一内存单元。当形参指向的单元的值发生变化,也就是实参指向的空间的变化。
  利用指针变量作形参,实现了用调用函数的方法,改变实参的值的目的。

#include <iostream>
using namespace std;
int main( )
{
	void sort(int *,int *,int *);
	int a=2,b=4,c=3;
	sort(&a,&b,&c);
	cout<<"sorted order is "<<a<<" "<<b<<" "<<c<<endl;
	return 0;
}

void sort(int *i,int *j,int *k)
{
	int t;
	if (*i>*j) {t=*i;*i=*j;*j=t;}
	if (*i>*k) {t=*i;*i=*k;*k=t;}
	if (*j>*k) {t=*j;*j=*k;*k=t;}
}

  用引用类型作为形参,由于形参与实参实质上就是同一个变量,占用的是同一段内存空间,对形参的改变,实质就是对实参的改变。因此,排序函数中完成的形参的变化,使得在函数调用完后,实参也发生了变化。
  用引用类型作为形参,效果上可以达到传地址值相同的效果,但程序的可读性更好了,更易于理解了。

#include <iostream>
using namespace std;
int main( )
{
	void sort(int &,int &,int &);
	int a=2,b=4,c=3;
	sort(a,b,c);
	cout<<"sorted order is "<<a<<" "<<b<<" "<<c<<endl;
	return 0;
}

void sort(int &i,int &j,int &k)
{
	int t;
	if (i>j) {t=i;i=j;j=t;}
	if (i>k) {t=i;i=k;k=t;}
	if (j>k) {t=j;j=k;k=t;}
}
时间: 2024-10-12 08:20:32

C++第17周项目1——体会函数参数传递的相关文章

2013-C++第17周项目参考解答链接集

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1-体会函数参数传递] 设计一个程序,输入3个整数,将其按从大到小的顺序输出,要求 (1)排序功能通过函数实现 (2)写出两个版本的函数,一个采用传地址值的方法,另一个采用引用类型作参数 参考解答在:http://blog.csdn.net/sxhelijian/article/details/8362289(2012级第17周项目1) [项目2-用指针玩字符串]指

2013级C++第17周项目——字符串、指针应用

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1-体会函数参数传递] 1.下面三段程序都试图通过定义函数,实现实际参数在必要时的交换,哪些能够实现,哪些不能实现?通过运行程序和单步执行,让自己对这一过程更加清楚,然后请在博文中给出明确的回答,并用你自己的话展开描述.) (1) #include <iostream> using namespace std; void jiaohuan(int x, int y

2014秋C++第17周 项目 结构体登场

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目1-体会函数参数传递]阅读下面的程序,写出期望中的运行结果.上机运行对照,并用单步执行的方法再次体会,完全掌握用指针和引用作为形式参数的用法. #include <iostream> using namespace std; void fun1(int &x,int

C++第9周项目1分段函数求值

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1分段函数求值]从键盘输入x的值(整型),根据公式1计算并输出x和y的值.  要求用switch语句构造多分支结构完成求解,利用BB平台上"第9周练习源代码及博文模板.txt"中给出了博文模板发布报告. 解法1:类似例3.9的思路,各分段的标准都为2的倍数,所以,构造表达式 t= x/2,根据t的取值决定switch分支: #include<iost

C++第17周项目6——指针版多科成绩计算

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目6(选做)- 指针版多科成绩计算](接15周项目4)用二维数组score[][4]保存同学们的高数.英语.C++成绩及总成绩.在此基础上,尽量用指针法访问数组,完成下面的操作:(1)设计输入成绩的函数,输入3科成绩后可以自动求出总分,并将数据全保存到数组中:(2)输出各门课及总分的最高成绩.最低成绩.平均成绩和成绩的标准偏差:(3)作为拓展,自行建立一个文本文件存储

C++第7周项目2 - 成员函数、友元函数和一般函数之区别

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8775137 [项目2-成员函数.友元函数和一般函数之区别]阅读程序,仔细阅读注释.然后模仿完成求点类中距离的任务.  你需要完成的任务是,利用成员函数.友元函数和一般函数,实现三个版本的求两点间距离的函数,并设计main()函数完成测试.此项目和例子的区别在于

C++第17周项目5——数组排序指针版

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目5-数组的排序]按给定部分程序的要求,用指向数组的指针变量作为形式参数编写函数,完成排序.重点体会:(1)排序算法,可以是冒泡,也可以是选择:(2)用指向数组的指针变量作为形式参数,用数组名(即数组的地址)作为实际参数,函数中对于形参的改变实质上也就是对实参对应内存单元的改变:(3)形式参数中不指定数组大小,实际数组的大小也一并作为参数传递. 参考解答 #inclu

C++第17周项目2——用指针玩字符串(1)连接

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目2-用指针玩字符串]神奇的指针哟,指向整型的指针int *p1,可以操作整型数组int a[]:指向字符型的指针char *p2,可以操作字符数组(字符串)char str[]:指向指针的指针可以操作二维数组.更灵活的是,在函数的传递中,指针.数组名在一定程度上可以互换. 本项目试图通过编制操作字符串的函数,实现字符串的操作. 请编制函数,其功能是对字符串的进行操作

2014秋C++第11周项目1参考-函数版星号图

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.   [项目1-函数版星号图]这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能.(1)补充完下面的程序,使程序输出星号图: #include <iostream> using namespace std; void printsta