大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
是的。这个PPT就是为了说明用void swap2(int x, int y)交换不了通过形参传入的元素。
创新互联服务项目包括庆安网站建设、庆安网站制作、庆安网页制作以及庆安网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,庆安网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到庆安省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
为什么交换不了?
因为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的函数体,即其实现。
#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语言库函数,常用库函数有:
1、scanf格式输入函数
2、printf格式输出函数
3、systemdos命令函数
4、sort排序
5、main主函数
6、fgets文件读取字符串函数
7、fputs文件写入字符串函数
8、fscanf文件格式读取函数
9、fprintf文件格式写入函数
10、fopen打开文件函数
11、getchar输入字符函数
12、putchar输出字符函数
13、malloc动态申请内存函数
14、free释放内存函数
15、abs求绝对值数学函数
16、sqrt求平方根数学函数
扩展资料
语言组成:
1、数据类型
C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。
2、常量与变量
常量其值不可改变,符号常量名通常用大写。
变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。
3、数组
如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。字符串也是一种数组。它们以ASCII的NULL作为数组的结束。要特别注意的是,方括内的索引值是从0算起的。
4、指针
如果一个变量声明时在前面使用 * 号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同。C语言中另有 双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容。指针是 C 语言区别于其他同时代高级语言的主要特征之一。
参考资料来源:百度百科-函数