c语言第七章函数ppt c语言函数视频讲解

c语言 请问这个PPT的意思是不是说这样用函数交换最终数组还是不会变的,为什么不变?

是的。这个PPT就是为了说明用void swap2(int x, int y)交换不了通过形参传入的元素。

创新互联公司-专业网站定制、快速模板网站建设、高性价比垫江网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式垫江网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖垫江地区。费用合理售后完善,十载实体公司更值得信赖。

为什么交换不了?

因为void swap2(int x, int y)的形式参数是传值模式。

C/C++语言规定:以传值模式调用函数,在调用过程中,函数需先将形参做一个拷贝,然后基于新的拷贝进行计算。

如上例,执行调用swap2(a[0],a[1]),swap2会先将a[0]的值拷贝给x,将a[1]的值拷贝给y,然后在函数体内交换x、y的值,这样对a[0]、a[1]毫无影响。

怎样通过函数调用交换a[0]、a[1]的值?

答案是:通过传引用调用,即将函数声明为void swap2(int x, int y)。

C++语言规定:引用可以看作是变量的别名。别名类似于人的小名之类,一个人大名、小名虽不同,但都指的是这个人。

同样如上例,执行调用swap2(a[0],a[1]),swap2将x视作a[0]的别名、将y视作a[1]的别名,这样在函数体内交换x、y的值,实际上交换的是a[0]、a[1]的值。

引用是C++语言引入的特性,C语言中没有引用。若要用C语言实现通过函数交换a[0]、a[1]的值,怎么办?

答案是:模拟传引用调用,即将函数声明为void swap2(int* xp, int* yp)。

模拟传引用调用本质上仍是传值调用,只不过传入函数的是原始参数的地址。

同样如上例,执行调用swap2(a+0,a+1),a+0是a[0]的地址,a+1是a[1]的地址。相应地,swap将a[0]的地址值拷贝一份给xp,将a[1]的地址值拷贝一份给yp。函数体内,swap2通过xp、yp即a[0]、a[1]的地址的新拷贝,操纵a[0]、a[1]的值。

这种方式除了需要改造swap2的声明,还需改造swap2的函数体,即其实现。

c语言如何定义函数

函数是用户与程序的接口,在定义一个函数前,首先要清楚以下三个问题。1) 函数的功能实现及算法选择。算法选择会在后续文章详细讲解,本节重点关注函数的功能实现。一般选取能体现函数功能的函数名,且见名知意,如求和函数的函数名可取为 add,求最大值的函数名可取为 max,排序函数可取名为 sort 等。2) 需要用户传给该函数哪些参数、什么类型,即函数参数。3) 函数执行完后返回给调用者的参数及类型,即函数返回值类型。 函教定义格式 函数定义的一般格式为: 返回类型 函数名 (类型参数1,类型参数2,…) {函数体 }也可以不含参数,不含参数时,参数表中可写关键字 void 或省略,为规范起见,教程中对没有参数的函数,参数表中统一写 void。例如: 类型 函数名 () {函数体 }等价于: 类型 函数名 (void) //建议的书写方式 {函数体 } 如果该函数没有返回类型,则为 void 类型。例如: void add (int x,int y) {printf ("sum=%d\n", x+y); } 除了 void 类型外,在函数体中,均需要显式使用 return 语句返回对应的表达式的值。 函教返回值 函数的值是指调用函数结束时,执行函数体所得并返回给主调函数的值。 关于函数返回值说明如下。1) 带返回值的函数,其值一般使用 return 语句返回给调用者。其格式为: return 表达式;或者 return (表达式);例如: int add (int a, int b) {return (a + b); //return 后为表达式 } 函数可以含一个或多个 return 语句,但每次调用时只能执行其中一个 return 语句。例如,求整数绝对值的函数: int f (int n) //含多个return语句,但每次调用只执行一个 {if (n = 0)return n;elsereturn -n; }

谭浩强版C语言问题(第七章:函数、变量、存储)

.前言:

    写在前面,由于我大一学过java多以对于本书的前几张没有什么记录。那是因为他和java的数据类型、循环结构、 数组、函数 之类的这一些都差不太多。前面稍微重要的就是函数了和java稍有不一致,个人觉得没有必要再写了,所以我从函数开始写起。学习C语言就要学习他的精华。譬如: 指针、自定义数据类型、文件。

汉诺塔问题

2.字符串问题 : C中没有字符串类型,只有字符数组

例如: char  asd[] = {"hellow "} 

使用scanf输入的时候不用取地址赋值,直接使用字符数组名字即可,因为他们在内存中的地址是连续的

字符串的几个函数“#include string.h”.puts    gets、strlen、strcmp、strcat

3.数组在实参和形参中的传递问题

数组元素的传递 a[45]、将数组名放在形参是把该数组的首地址传递,操作形参就是操作实参

4.二维数组中的列必须有大小,相对的二维数组中的一维的大小可以没有,系统会自动分配。(学习完指针后会有更明确的理解)

5.变量问题

P232

6.内部函数和外部函数

C语言编程…用递归函数编写下列程序,按下面PPT的思路来

#include stdio.h

#include math.h

double mysqrt(double a, double x0)

{

if (a0)return -1;

double x1 = 1.0 / 2 * (x0 + a / x0);

if (fabs(x1 - x0)  1e-5)return x1;

return mysqrt(a, x1);

}

int main()

{

double a, x0 = 1.0;

printf("Enter a:");

scanf("%lf", a);

printf("The sqrt of %lf=%lf\n", a, mysqrt(a, x0));

return 0;

}


标题名称:c语言第七章函数ppt c语言函数视频讲解
URL网址:http://scjbc.cn/article/ddieeee.html

其他资讯