首页 > 其他分享 >C语言学习4

C语言学习4

时间:2024-10-21 18:19:13浏览次数:8  
标签:调用 函数 递归 int C语言 学习 fx printf

函数的调用

在C语言中,函数是执行特定任务的代码块,它允许代码重用和模块化。函数调用是程序执行过程

中的一个重要环节,它涉及到将控制权从一个函数转移到另一个函数。

函数的调用时参数的传递方式分为两种

1.传值调用:实参的值会被复制给形参。在函数内部对形参的修改不会影响到实参。

例子

int fx(int a, int b)
{
return a+b;
}
int main()
{
int a=4,b=5;
int c=fx(a,b);
}

2.传址调用:通过传递实参的地址(即指针),函数内部对形参的修改会影响到实参。这种方式通

常用于需要修改传入参数的场景。

例子

void jiaohuan(int *pa, int *pb)
{
int temp = *pa;
*pa = *pb;
*pb = temp;
}
int main()
{
int z=10,x=20;
jiaohuan(&z,&x);
printf("%d,%d",z,x);

}

嵌套调用 

嵌套调用是指在一个函数的执行过程中调用了另一个函数。

嵌套调用常用于将一个复杂的功能拆分成多个独立的子功能,每个子功能由一个函数实现,从而提

高代码的可重用性和模块性。

举个例子

int fx(int a,int b)
{
return a+b;
}
int yx(int a,int b)
{
a=fx(a,b);
return a*b;
}

这里定义了两个函数fx和yx,在yx中又用到了fx这个函数,这就叫嵌套调用。 

注意:函数可以嵌套调用 但是不能嵌套定义 :就是不能在一个函数里面再写一个函数

链式访问

函数的链式访问就是把一个函数的返回值作为另外一个函数的参数。

举个例子

int fx(a,b)
{
return a+b
}
int main()
{
int a=4,b=9;
printf("%d",fx(a,b)); 
}

这里就把fx()的返回值即a与b的和作为参数来让printf打印出来。

再比如

int main()
{
printf("%d",printf("%d",printf("%d",43)));
}

这里就会打印出来4321,这是由于链式访问是将返回值作为参数而printf函数的返回值是打印在屏

幕上的字符的个数。

函数的声明和定义

函数的声明和定义是编程基础中非常重要的概念。函数声明告诉编译器函数的名称、返回类型和参

数,而函数定义则提供了函数的具体实现。

函数的声明

函数声明是对函数的一个预先说明,它告诉编译器函数的存在,使得函数可以在后续代码中被调

用。函数声明包括函数的返回类型、函数名和参数类型。

例如

int fx(int,int);

这就是fx函数的一个声明,这里说明了该函数的返回类型,函数名及参量类型

函数的定义

函数定义是函数的具体实现,它包括函数的返回类型、函数名、参数列表(包括参数的类型和名

称)以及函数体。函数体中包含了实现函数功能的代码。

具体的例子上文中有用到。

如果在函数定义之前函数被调用,那样就要在函数被调用之前先对函数进行声明。

例子

int main()
{
int a=10,b=20;
int fx(int,int);
int c=fx(a,b);
printf("%d",c);
}
int fx(int a,int b)
{
return a+b;
}

这里在调用fx前就对fx进行声明了,这里的声明只是告诉说有这样一个函数具体有没有就得自己定义。

不过如果定义在调用前面就不用声明。

函数声明一般放在头文件中,引用自己的头文件时用" ",

函数的定义一般放在对应的.c源文件文件中。

函数递归

把大事化小

递归函数是一种在其定义中调用自身的函数。它是一种强大的编程技巧,能够将复杂问题分解为更

小、更易于管理的问题。递归函数通常包含两个主要部分:基本情况(递归终止条件)和递归部分

简单来说函数的递归就是函数自己调用自己。

递归函数的特点

1.每次函数调用都有自己的变量实例

2.每次调用都会有一次返回,逐层返回直到最初的调用

3.递归调用前的语句和被调用函数具有相同的执行顺序

4.递归调用后的语句执行顺序与被调用函数的顺序相反(即从最后一次调用函数那开始到第一次调用函数)

5.必须有终止语句,即基本情况,以防止无限递归

递归的两个必要条件

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

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

举个例子,

按顺序打印一个数字的每一位。

#include <stdio.h>
#include <string.h>

void zgh (int a)
{

    if(a>9)
    {
        zgh(a/10);

    }
    printf("%d\n",a%10);
}
int main()
{
    printf("请输入一个数字");
    int a=0;


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

    return 0;

}

上述代码就利用了递归函数完成了题目要求。

再比如利用递归求阶乘

#include <stdio.h>
#include <stdlib.h>

int dg(n)
{
	if (n > 0)
	{
		return n * dg(n - 1);
	}
	else
	{
		return 1;
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	
	printf("%d", dg(n));
}

 

函数的递归在调用时需要空间,而它得跳出递归后才从后到前依次进行,所以如果调用次数太多的话就会造成栈溢出。

 

 

 

标签:调用,函数,递归,int,C语言,学习,fx,printf
From: https://blog.csdn.net/2402_87772772/article/details/143089483

相关文章

  • C++研发笔记4——C语言程序设计初阶学习笔记2
            从今天开始我们开始第二模块初识C语言的学习,在本模块中我们将会涉及到一下14个内容:什么是C语言、第一个C语言程序、数据类型、变量、常量、字符串+转义字符+注释、选择语句、循环语句、函数、数组、操作符、常见关键字、define定义常量和宏、指针......
  • springboot+vue保密知识学习APP 后8【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着信息化时代的到来,保密工作面临着前所未有的挑战。信息的快速传播和技术的不断发展,使得保密知识的普及和更新变得尤为重要。然而,传统的保密知识学习方式存在诸多局限性,如资源有限、形式单一、更新不及时等问题,难以满足广大用户对保......
  • TS学习笔记(三)
    TS语言继承了JS的类型设计,js将值分为8中类型:boolean、string、number、undefined、null、symbol、bigint、object。注意,上面所有类型的名称都是小写字母,首字母大写的Number、String、Boolean等在js语言都是内置对象,而不是类型名称。 bigint与number类型并不兼容constx:bigi......
  • 花8000元去培训机构学习网络安全值得吗,学成后就业前景如何?
       我就是从培训机构学的网络安全,线下五六个月,当时学费不到一万,目前已成功入行。所以,只要你下决心要入这一行,过程中能好好学,那这8000就花得值~因为只要学得好,工作两个多月就能赚回学费,而且大部分培训班也会有就业支持,比如老师给推荐或者定期的招聘会…先说一下我自己,很喜......
  • 函数的力量:掌握C语言的基石
    目录前言标准库:C语言的百宝箱头文件:库函数的藏宝图实例分析:计算平方根的sqrt函数功能描述头文件包含的重要性库函数文档的一般格式自定义函数:释放你的编程创造力函数的语法形式 函数的比喻函数的举例 简化函数定义形参和实参形参实参实参和形参的关系retur......
  • 入门网络安全工程师要学习哪些内容
        大家都知道网络安全行业很火,这个行业因为国家政策趋势正在大力发展,大有可为!但很多人对网络安全工程师还是不了解,不知道网络安全工程师需要学什么?知了堂小编总结出以下要点。网络安全工程师是一个概称,学习的东西很多,具体学什么看自己以后的职业定位。如果你以后想成......
  • 网络安全学习路线图(2024版详解)
       近期,大家在网上对于网络安全讨论比较多,想要学习的人也不少,但是需要学习哪些内容,按照什么顺序去学习呢?其实我们已经出国多版本的网络安全学习路线图,一直以来效果也比较不错,本次我们针对市场需求,整理了一套系统的网络安全学习路线图,供大家学习参考。希望大家按照路线图进......
  • 用友NC系统word.docx信息泄露漏洞复现学习
    用友NC系统word.docx存在信息泄露漏洞用友NC系统word.docx存在信息泄露漏洞,disp=/WEB-INF/web.xml。其他的自己设置fofaapp="用友-UFIDA-NC"pocGET/portal/docctr/open/word.docx?disp=/WEB-INF/web.xmlHTTP/1.1Accept:text/html,application/xhtml+xml,application/xml......
  • Vue学习之路10----生命周期
    (以下图片来自官网)<template><div>{{num}}</div><button@click="num++">add</button></template><scriptsetupname="App">import{ref,onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBefore......
  • c语言 选票系统 函数封装
    #include<stdio.h>#include<string.h>intfeipiao=0;structxm{ charname[32]; inttickets;};//选民人员输入voidxuanmin(intlen,structxmarr[]){ inti; for(i=0;i<len;i++) { printf("请输入选民的名字:\n"); scanf("%s",arr......