鹏哥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;

}

相关推荐
luckys.one4 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
~|Bernard|5 小时前
在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
算法·conda
战术摸鱼大师5 小时前
电机控制(四)-级联PID控制器与参数整定(MATLAB&Simulink)
算法·matlab·运动控制·电机控制
Christo35 小时前
TFS-2018《On the convergence of the sparse possibilistic c-means algorithm》
人工智能·算法·机器学习·数据挖掘
鹿鹿学长6 小时前
2025年全国大学生数学建模竞赛(C题) 建模解析|婴儿染色体数学建模|小鹿学长带队指引全代码文章与思路
c语言·开发语言·数学建模
好家伙VCC6 小时前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
伴杯猫6 小时前
【ESP32-IDF】基础外设开发2:系统中断矩阵
c语言·单片机·嵌入式硬件·mcu·物联网·github
liulilittle8 小时前
IP校验和算法:从网络协议到SIMD深度优化
网络·c++·网络协议·tcp/ip·算法·ip·通信
Want5959 小时前
C/C++圣诞树①
c语言·开发语言·c++
bkspiderx9 小时前
C++经典的数据结构与算法之经典算法思想:贪心算法(Greedy)
数据结构·c++·算法·贪心算法