首页 > 其他分享 >C语言笔记--函数

C语言笔记--函数

时间:2024-11-29 18:32:17浏览次数:10  
标签:return 函数 -- 笔记 C语言 int printf main 库函数

C语言中函数的分类

1.库函数

2.自定义函数

库函数

那怎么学习库函数呢?

简单看看:www.cplusplus.com

简单的总结,C语言常用的库函数都有:

IO函数

字符串操作函数

字符操作函数

内存操作函数

时间/日期函数

数学函数

其他库函数

注:

但是库函数必须知道的一个秘密就是:使用库函数,必须包含 #include 对应的头文件。这里对照文档来学习上面几个库函数,目的是掌握库函数的使用方法。

如何学会使用库函数?

需要学会查询工具的使用:

MSDN(Microsoft Developer Network)

www.cplusplus.com

http://en.cppreference.com(英文版)

http://zh.cppreference.com(中文版)

自定义函数

自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。

#include <stdio.h>
//get_max函数的设计
int get_max(int x, int y)
{
return (x>y)?(x):(y);
}
int main()
{
int num1 = 10;
int num2 = 20;
int max = get_max(num1, num2);
printf("max = %d\n", max);
return 0;
}

//形式参数
void Swap(int x,int y)
{
    int z=0;
    z=x;
    x=y;
    y=z;
}
//这个函数并不会改变a,b的值
//当实参传递给形参的时候,形参是实参的一份临时拷贝
//对形参的修改不会影响实参


//正确版本
void Swap2(int *px, int *py)
{
int z = 0;
 z= *px;//z=a
*px = *py;//a=b
*py = tmp;//b=z

    
int main()
{
    int a=0;
    int b=0;
    scanf("%d%d,&a,&b);
    printf("交换前:a=%d b=%d\n",a,b);
    printf("交换后:a=%d b=%d\n",a,b);
    Swap(a,b);
    printf("交换后:a=%d b=%d\n",a,b);
    return 0;
}

函数是什么?

一、函数定义的基本格式:

返回值类型 函数名(形参变量)

{

函数体:

}

1.返回值类型:常用基本数据类型,函数执行完之后,函数会得到一个什么类型的值。

如果需要返回一个值出去,那么返回值类型这里,通过return把值返回出去

如果不需要返回一个值出去,那么就在返回值类型这里就用void

eg.

int main() 主函数main函数,程序的入口

{

return 0; 话说完了,函数运行程序结束了

}

2.函数名:就是一个标识符,符合规则和规范

3.程序的运行流程:从上往下运行,程序的入口在main函数

函数的参数

实际参数

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

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

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

形式参数

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

存单

元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。

函数的调用

传值调用

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

调用函数的时候会把实参传给形参,对应位置进行传参(值传递)

传址调用

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

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

变量

7.1局部变量:作用域在一定的区域内才能被使用的变量,出了自己的作用域就会被释放

7.2全局变量:从定义开始往下,所有的地方都可以使用,在程序结束时被释放

注:全局变量和局部变量允许同名,使用这个同名变量时,使用的是最近的一个,即就近原则,同时,如果没有给全局变量赋值,那么系统自动默认为0

7.3静态变量:在程序执行后定义,生命周期是程序结束后才死亡,只会被定义一次,不会被重复定义

8.代码区:存放程序的代码,即CPU执行的机器指令,并且是只读的。常量区:存放常量(程序在运行的期间不能够被改变的量,例如: 10,字符串常量”abcde”, 数组的名字等)静态区(全局区):静态变量和全局变量的存储区域是一起的,一旦静态区的内存被分配, 静态区的内存直到程序全部结束之后才会被释放(静态:static)堆区:由程序员调用malloc()函数来主动申请的,需使用free()函数来释放内存,若申请了堆区内存,之后忘记释放内存,很容易造成内存泄漏栈区:存放函数内的局部变量,形参和函数返回值。栈区之中的数据的作用范围过了之后,系统就会回收自动管理栈区的内存(分配内存 , 回收内存),不需要开发人员来手动管理。栈区就像是一家客栈,里面有很多房间,客人来了之后自动分配房间,房间里的客人可以变动,是一种动态的数据变动。

eg.

int main()

for(int i=0;i<10:i++)

{

static int a=10;                         
//静态变量和全局变量存在静态全局区

a++;

printf("d\n",a);

}

//此时输出a的值为11,12,13……20



int main()

for(int i=0;i<10:i++)

{

int a=10;                                    //局部变量存在栈区

a++;

printf("d\n",a);

}

//此时输出a的值11,11,11……11

函数的声明与定义

函数声明

1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数

声明决定不了。

2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。

3. 函数的声明一般要放在头文件中的。

函数定义

函数的定义是指函数的具体实现,交待函数的功能实现

10.地址:在定义变量,数组,函数等等,系统会给它们内存区域(地址),把这个数据放到这个地址上面

&:&a 获取a的地址编号

*:定义指针变量的标志

指针变量:存储地址的变量

整型变量:存储整数的变量

*:解引用,取内容

址传递能通过形参改变实参的值

eg.

void fun1(int*p1)

{

printf("%d\n",*p1);

*p1=1000;

}

int main()

{

int x=100;

fun1(&x);

printf("%d",x);

return 0;

}

此时输出*p1为100,x为1000

函数的递归

什么是递归?

程序调用自身的编程技巧称为递归( recursion)。

递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接

调用自身的

一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,

递归策略

只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于:把大事化小

递归的两个必要条件

存在限制条件,当满足这个限制条件的时候,递归便不再继续。

每次递归调用之后越来越接近这个限制条件。

eg.

递归逆向输出一个数

void fun3(int n)

{

   if(n!=0)

   {

      printf("%d",n%10);

      fun3(n/=10);

   }

}

int main()

{

fun3(1234);

}

c此时输出为4321
//斐波那契数列 1 1 2 3  5 8 13……  第n个元素的值=第n-1个元素的值+第n-2个元素
#include <stdio.h>
int fun4(int n)

{

if(n==1||n==2)
 {

return 1;
 }

else
  {
return fun(n-1)+fun(n-2);
  }

}

int main()
{
int n;
printf("请输入要求的斐波那契数列项数:");
scanf("%d", &n);
printf("第%d项斐波那契数列的值为:%d\n", n, fun(n));
}

接受一个整型值(无符号),按照顺序打印它的每一位。

例如:

输入:1234,输出 1 2 3 4

#include <stdio.h>
void print(int n)
{
if(n>9)
 {
print(n/10);
 }
printf("%d ", n%10);
}
int main()
  {
int num = 1234;
print(num);
return 0;
  }
#include <stdio.h>

// 递归函数,用于计算阶乘
int factorial(int n) 
{
    if (n == 0)
    {
        return 1;
    }
    return n * factorial(n - 1);
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);
    // 调用factorial函数计算阶乘并输出结果
    printf("%d的阶乘是: %d\n", num, factorial(num));
    return 0;
}

递归与迭代

int Fib(int b)
{
    int a=1;
    int b=1;
    int c=0;
    while(n>=3)
    {
        c=a+b;
        a=b;
        b=c;
        n--;
    }
}
int main()
{
    int n=0;
    scanf("%d",&n);
    int ret=Fib(n);
    printf("%d\n",ret);
    return 0;
}

标签:return,函数,--,笔记,C语言,int,printf,main,库函数
From: https://blog.csdn.net/kangll_/article/details/144143452

相关文章

  • 家用电脑秒变服务器,我家电脑我做主!!!
    一、首先准备:   1、电脑一台,随便一个pc就行,配置根据自己需要多大内存,多大硬盘...   2、联通或者电信宽带,其他宽带也行,但是每个地方情况不一样,问下运行商是否有动态公网IP.   3、有DMZ解析或者端口解析的路由器,基本都有,即使几十元的路由器也有。   ......
  • 无尽冬日辅助脚本2.0.x
    #无尽冬日脚本####介绍电脑版脚本,已实现13个功能的复选和单选执行,不定时新增####安装教程1. 下载已打包的脚本压缩包并解压(免费获取地址在下方)2. 电脑下载安装雷电模拟器(目前只支持雷电)3. 模拟器内安装登录游戏(首次需要)4. 运行jiaoben-x-x-x.exe,设置模拟器安......
  • 芝麻清理 拯救C盘空间 告别电脑卡顿 一键解决C盘空间不足 最靠谱的C盘清理软件
    在快节奏的数字化时代,电脑作为我们生活和工作的核心工具,承载着大量的数据和任务。然而,随着使用时间的增长,许多用户都会遇到一个棘手的问题——C盘空间不足。这个看似不起眼的问题,实则隐藏着巨大的危害,它不仅会导致电脑运行缓慢、卡顿频发,甚至可能引发软件运行失败、系统崩溃等......
  • springboot毕设 题库管理信息系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和教育改革的不断深化,题库管理在教育领域扮演着越来越重要的角色。传统的纸质题库管理方式不仅效率低下,而且难以适应大规模、......
  • springboot毕设 甜品蛋糕销售网站 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网的飞速发展,电子商务已成为现代商业的重要组成部分,深刻改变了人们的消费习惯。在快节奏的生活中,甜品蛋糕作为一种广受欢迎的美食,不仅满足了......
  • 单点登录深入详解之技术方案总结
    技术方案之CAS认证概述CAS是耶鲁大学的开源项目,宗旨是为web应用系统提供一种可靠的单点登录解决方案。CAS从安全性角度来考虑设计,用户在CAS输入用户名和密码之后通过ticket进行认证,能够有效防止密码泄露。CAS广泛使用于传统应用场景中,比如企业内部的OA,ERP等应......
  • 【Python入门】绘制你的桌面应用:用Python WxPython库打造用户界面
    ......
  • 【微信小程序】常见问题-尺寸单位转换
    在微信小程序开发中,尺寸单位的正确使用和转换是非常重要的,因为这直接影响到页面布局的美观性和用户体验。微信小程序推荐使用rpx作为尺寸单位,这是一种响应式的单位,可以根据屏幕宽度进行自适应。然而,在某些情况下,开发者可能需要在rpx、px、rem、vw等单位之间进行转换。以......
  • C# OxyPlot在WinForms中的面积图应用指南:数据可视化的艺术
    在C#的WinForms应用中,数据可视化是一个重要的领域,而OxyPlot作为一个强大的跨平台绘图库,提供了丰富的图表类型和高度的可定制性。本文将带你深入了解如何在WinForms中使用OxyPlot来创建和操作面积图,让你的数据展示更加直观和专业。OxyPlot简介OxyPlot是一个开源的.NET绘图......
  • 241128伞阀-流体压力载荷 Fluid Penetration Pressure
    1.橡胶块材料(1)Mooney-Rivlin2参数(来源:忘了):【材料常数C10:1.1e+6Pa 【材料常数C01:1.1e+5Pa 【不可压缩性参数D1:1e-5Pa^-1】(2)(来源:X343-流体渗透压力分析-百度文库)(3)APDLShowcase中采用的橡胶参数【一阶Ogden超弹性模型】摩擦参数为0.1,塑料封盖杨氏模量为171.47MP......