鹏哥C语言40---函数参数与函数调用

#define _CRT_SECURE_NO_WARNINGS

//一个工程中可以有多个 .c,但是只能有一个库函数

//------------------------------------------------------------------------------------------------------------3. 函数的参数

// 实际参数(实参)和 形式参数(形参)

#include <stdio.h>

#include <math.h>

//--------------------------------------------写一个函数可以交换两个整型变量的内容 (错版)

/*

void Swap(int x, int y) //函数定义

{

int z = 0;

z = x;

x = y;

y = z;

}

int main()

{

int a = 0;

int b = 0;

scanf("%d %d", &a, &b);

printf("交换前: a=%d b=%d\n", a, b); //10 20

//调用函数来交换

Swap(a, b); // 只需要交换,不需要返回,所以不用 int

// a 和 b 叫实参,函数里的 x y 叫形参(形式参数)

// 实参ab传给形参xy时,形参只不过是实参的一份临时拷贝,只拷贝过去了数据,但是实参的独立空间还在

// 所以修改形参,不会影响实参

printf("交换后: a=%d b=%d\n", a, b);//10 20 ---------------------------(交换失败)

return 0;

}

*/

//--------------------------------------------写一个函数可以交换两个整型变量的内容 (对版)

//void Swap(int* px, int* py) // 交换数值-----传地址实现

//{

// int z = *px; //z=a

// *px = *py; //a=b

// *py = z; //b=a

//}

//

//int ADD(int x, int y) // 求和函数-----为什么不用传地址?

//{

// int s = 0;

// s = x + y;

// return s;

//}

//

//int main()

//{

// int a = 0;

// int b = 0;

// scanf("%d %d", &a, &b);

// printf("交换前: a=%d b=%d\n", a, b); //10 20

//

//

// Swap(&a, &b); //把地址所指向的内容的值交换

// //&a, &b 是实参

// printf("交换后: a=%d b=%d\n", a, b);// 20 10----------------------交换成功

//

// int add=ADD(a, b); // a 和 b 的值不需要改变时,就必须要取地址

// // a,b是实参

// printf("%d\n", add);

//

// return 0;

//}

//--------------------------------------------------------------------------------------------------3.1 实际参数(实参)

/*

真实传给函数的参数,叫实参

实参可以是:常量,变量,表达式,函数等

无论实参是何种类型的变量,在进行函数调用时,他们必须有确定的值,以便把这些值传送给形参

*/

//--------------------------------------------------------------------------------------------------3.2 形式参数(形参)

/*

形式参数是指函数名后括号中的变量,因为形参只有在函数被调用的过程中才实例化(分配内存单元)

所以叫形参。形式参数当函数调用完之后就彻底销毁了。因为形参只有在函数中才有效。

*/

//形参实例化之后相当于实参的一份临时拷贝,对形参的修改不会影响实参

//-----------------------------------------------------------------------------------------------------------4. 函数的调用

//--------------------------------------------------------------------------------------------------4.1 传值调用

//函数的实参和形参分别占有不同的内存块,对形参的修改不会影响实参

//--------------------------------------------------------------------------------------------------4.2 传址调用

/*

传址调用 是把函数外部创建变量的 地址 传递给函数参数 的一种调用函数的方式

这种传参方式可以让 函数 和 函数外边 的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量

*/

/*

void Swap1(int x, int y)

{

int z = 0;

z = x;

x = y;

y = z;

}

void Swap2(int* px, int* py) //形参的指针变量 px py 存的是实参的地址

{

int z = *px;

*px = *py;

*py = z;

}

int main()

{

int a = 0;

int b = 0;

scanf("%d %d", &a, &b);

printf("交换前: a=%d b=%d\n", a, b);

Swap1(a, b); //传值调用

Swap2(&a, &b); //传址调用

printf("交换后: a=%d b=%d\n", a, b);

return 0;

}

*/

//--------------------------------------------------------------------------------------------------4.3 练习

//--------------------------------0. 打印100-200之间的素数(版本1:没有函数)------------------------------

// 素数是只能被 1和它本身 整除的数

/*

int main()

{

int i = 0;

int count = 0;

// for (i = 100; i <= 200; i++)

//---------可优化--------------------------------------------------

for (i = 101; i <= 200; i+=2) //排除偶数

{

//判断 i 是否是素数

//是素数就打印

//拿 2-----i-1之间的数字,去试除

int flag = 1;// flag是1 表示他是素数

int j = 0;

//for (j = 2; j <= i - 1; j++)

//---------可优化--------------------------------------------------

for (j = 2; j <=sqrt(i); j++) // sqrt()数学库函数,开平方使用,需要引用头文件 <math.h>

{

if (i% j == 0)

{

flag = 0;

//break;

}

}

if (flag == 1)

{

count++;

printf("%d ", i);

}

}

printf("\ncount=%d\n", count);

return 0;

}

*/

//------------------------------------1.写一个函数,判断一个数是不是素数---------------------------------

//是素数,返回1

//不是素数,返回0

int is_prime(int n)

{

int j = 0;

for (j = 2; j <= sqrt(n); j++)

{

if (n % j == 0)

{

return 0;

}

}

return 1;

}

int main()

{

int i = 0;

int count = 0;

for (i = 101; i <= 200; i += 2) //排除偶数

{

if (is_prime(i)) //调用函数 如果 is_prime(i) 为真,打印

{

count++;

printf("%d ", i);

}

}

printf("\ncount=%d\n", count);

return 0;

}

相关推荐
无问8171 小时前
数据结构-排序(冒泡,选择,插入,希尔,快排,归并,堆排)
java·数据结构·排序算法
轩轶子2 小时前
【C-项目】网盘(一期,线程池版)
服务器·c语言
m0_631270402 小时前
高级c语言(五)
c语言·开发语言
Lenyiin2 小时前
《 C++ 修炼全景指南:十 》自平衡的艺术:深入了解 AVL 树的核心原理与实现
数据结构·c++·stl
2401_858286112 小时前
53.【C语言】 字符函数和字符串函数(strcmp函数)
c语言·开发语言
程序猿进阶2 小时前
如何在 Visual Studio Code 中反编译具有正确行号的 Java 类?
java·ide·vscode·算法·面试·职场和发展·架构
Eloudy2 小时前
一个编写最快,运行很慢的 cuda gemm kernel, 占位 kernel
算法
slandarer2 小时前
MATLAB | R2024b更新了哪些好玩的东西?
java·数据结构·matlab
king_machine design2 小时前
matlab中如何进行强制类型转换
数据结构·算法·matlab
西北大程序猿3 小时前
C++ (进阶) ─── 多态
算法