C语言复习

    科技2022-08-20  116

    学习内容:

    4、函数


    学习时间:

    2020年10月5日18:30-19:30

    学习产出:

    /* 函数 初始函数 函数的概念 最简单的程序模块就是函数 函数的定义 语法格式: 返回值类型 函数名(参数类型 参数名1,参数类型 参数名2...) { 执行语句 ... return 返回值; } 函数种类 无参函数 有参函数 函数的返回值 语法格式: return 表达式; printf()函数和scanf()函数 printf()函数 printf()函数输出数据 常用printf()格式字符 %s 输出一个字符串 %c 输出一个字符 %d 以十进制输出一个有符号整型 %u 以十进制输出一个无符号整型 %f 以十进制输出一个浮点数 ... scanf()函数 scanf()函数负责从标准输入设备(一般指键盘)上接受用户的输入 内存四区 栈区 栈区时一块连续的内存区域,该区域由编译器自动分配和释放,一般用来存放函数的参数、全局变量等 堆区 堆空间一般由程序员分配或释放,若程序员不释放,程序结束时将被系统强制回收 数据区 根据功能又可以分为静态全局区和常量区两个域 代码区 用于存放函数体的二进制代码 函数调用 函数的调用方式 语法格式: 函数名(实参列表1,实参列表2...) 调用方式 将函数作为表达式带哦用 将函数作为语句调用 将函数作为实参调用 函数调用时的数据传递 形式参数 在定义函数时函数后面括号中的变量名称称为“形式参数”(简称“形参”)或“虚拟参数” 实际参数 在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”(简称“实参”),实参可以时常量、变量或表达式 嵌套调用 在调用函数时,可以在一个函数中调用另一个函数,这就是函数的嵌套调用 递归调用 所谓的递归就是函数内部调用自身的过程,需要注意的是,递归必须要求有结束条件,不然就会陷入无限递归的状态,永远无法结束调用 案例-斐波那契数列 外部函数与内部函数 外部函数 在C语言中,可以被其他源文件调用的函数称为外部函数,在调用外部函数之前需要在当前源文件中定义外部函数 定义外部函数的方式是在函数的返回值类型前面添加extern关键字 eg:extern int add(int x,int y) 为简化编程,C语言中允许在定义外部函数时省略关键字extern 扩展内容: 函数的“定义”和“声明”并不是一个意思。“定义”时指对函数功能的确立,函数定义时一个完整的、独立的函数单位。 而函数的声明则时把函数名、参数列表、返回值类型通知编译系统,以便在调用时系统按照此声明进行对照检查 内部函数 只在它的定义文件中有效,该类函数称为内部函数 语法格式: 需要在函数的返回值类型前面添加static关键字(又称为静态函数) static 返回值 函数名() { 代码块 } 局部变量与全局变量 局部变量 局部变量就是在函数内部声明的变量,它只在本函数内有效,也就是说,只能在本函数内使用它 全局变量 在所有函数外部定义的变量称为全局变量(包括main()函数)它不属于哪一个函数, 二十属于源程序。因此全局变量可以为程序中的所有函数所共用 变量的作用域 变量需要在它的作用范围内才可以被使用,这个作用范围称为变量的作用域 进阶案例-汉诺塔 */ //相关练习 /* 1、编写函数 int mymod ( int a, int b),实现的功能是:用以求a被b除之后的余数。 编写主函数,从键盘上输入两个整数,调用上面定义的函数,求得两个数相除之后的余数,并输出。 */ #include<stdio.h> int mymod(int a,int b) { int c=a%b; return c; } int main() { int x,y,z; printf("请输入两个整数:"); scanf("%d%d",&x,&y); z=mymod(x,y); printf("两数相除后的余数是:%d\n",z); return 0; } /* 2、写一个函数void shuchu(int n),接受一个整数参数n,输出n 个HelloWorld 编写主函数中,从键盘上输入一个整数,调用这个函数输出相应的HelloWorld。 */ #include<stdio.h> void shuchu(int n) { int i; for(i=1;i<=n;i++) printf("HelloWorld\n"); } int main() { printf("请输入一个整数:"); int a; scanf("%d",&a); shuchu(a); return 0; } /* 3、输入三角形的三边a, b, c,调用方法判断能否构成三角形. 若能,计算周长。若不能,显示提示信息。 请独立编写一个方法,方法的功能是:接收三个整形参数,判断能否构成三角形,并返回1或0。 */ #include<stdio.h> int san(int a,int b,int c) { if(a+b>c&&c>a&&c>b) return 1; else return 0; } int main() { printf("请输入三个整数:"); int x,y,z; scanf("%d%d%d",&x,&y,&z); san(x,y,z); if(san(x,y,z)) printf("%d,%d,%d能构成三角形,它的周长是%d\n",x,y,z,x+y+z); else printf("%d,%d,%d不能构成三角形\n",x,y,z); return 0; } /* 进阶案例-汉诺塔 */ #include<stdio.h> int getNum(int n) { if(n==1) { return 1; } else { return 2*getNum(n-1)+1; } } int main() { int n=10; int num=getNum(n); printf("汉诺塔中%d片圆盘共需移动%d次\n",n,num); }
    Processed: 0.008, SQL: 9