c语言学习笔记(8)——函数
学完c语言的函数可以理解面向过程的语言
函数是c语言的重点
一、为什么需要函数?
1.避免了重复性操作
2.有利于程序的模块化(每一个功能可以用不同函数去实现)
二、什么叫做函数?
逻辑上:能够完成特点功能的独立的代码单元
物理上:能够接收数据
能够对接收的数据进行处理
能够将处理的结果返回
总结: 函数是个工具,他是为了解决大量类似问题而设计的
函数可以当做一个黑匣子(不需要知道内部具体实现)
三、如何定义函数?
函数返回值 函数名(函数的形参列表){
函数的执行体
}
1.函数定义的本质是详细描述函数之所以能够实现某个特定功能
的具体实现方法
2.return 表达式; 的含义
终止被调函数,向主调函数返回表达式值
如果表达式为空,则只终止函数,不向主调函数返回任何值
------------------------------------------------------------------------------
# include <stdio.h>
void f(void){
int i;
for(i=0; i<5; i++){
printf("大家辛苦了!\n");
return; //return 是终止函数的,break是终止循环的
}
printf("同志们好!\n");
}
int main(void){
f();
}
------------------------------------------------------------------------------
3.函数返回值的类型也称为函数的类型,因为如果函数名前的返回值
类型和函数执行体中的return 表达式,中表达式的类型不同的话,则
最终函数返回值的类型以函数名前的返回值类型为准
-------------------------------------------------------------------------------
int f(){
return 10.5;
}
int main(){
float f;
f = f();
printf("f = %d", f)
return 0;
}
最终结果: f = 10.000000
-------------------------------------------------------------------------------
四、函数的分类
有参函数 和 无参函数
有返回值 和 无返回值
库函数 和 用户自定义函数
值传递 和 地址传递函数
普通函数 和 主函数
一个程序必须有且只能有一个主函数,
主函数可以调用普通函数,普通函数不能调用主函数
主函数是程序的入口,也是程序的出口
--------------------------------------------------------------------------------
/*
判断一个数是否为素数
*/
# include <stdio.h>
bool isPrime(int val);
int main(){
int val;
printf("请输入一个数判断是否为素数:");
scanf("%d", &val);
bool flag = isPrime(val);
if(flag)
printf("是素数\n");
else
printf("不是素数\n");
return 0;
}
bool isPrime(int val){
int i;
for( i=2; i<val; ++i){
if(val%i == 0) break;
}
if(val == i)
return true;
else
return false;
}
--------------------------------------------------------------------------------
五、注意的问题
函数调用和函数定义的顺序
函数前置声明;
1.告诉编译器即将可能出现的若干个字母代表的是一个函数
2.告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值的具体情况
3.函数的声明是一个语句,末尾加分号。
4.对库函数的是声明是通过 # include <库函数所在的文件的名字.h> 来实现的
<stdio.h> std表示标准的 io表示输入输出流 .h 表示头文件
形参和实参之间的关系
1.个数必须相同,位置必须一一对应,数据类型必须相互兼容。
如何在软件开发中合理的设计函数来解决实际问题
1.功能尽量独立单一,可以使代码重用率提高。
函数是c语言的基本单位,类是java,c#,c++的基本单位
六、常用的系统函数
# include <math.h>
double sqrt(double x);
求x的平方根
int abs(int x);
求x的绝对值
double fabs(double x)
求x的绝对值
推荐一本书:
《turboc2.0实用大全》机械工业
七、递归
栈:所有先进后出的存储结构
A---------->B
A---------->A
变量的作用域和存储方式
按作用域分
全局变量
在所有的函数外边定义的变量
局部变量
在一个函数内部定义的变量或者函数的形参都统称为局部变量。
---------------------------------------------------------------------------------------
void g(){
printf("k = %d\n", k);
}
int k = 100;
会出现错误,k的使用范围是从定义位置开始到整个程序结束
void g(int i){
int i; //不能重复定义变量
}
# include <stdio.h>
int i = 100;
void g(int i){
printf("i = %d", i);
}
int main(){
g(8);
return 0;
}
在一个函数中如果全局变量和局部变量名相同
局部变量会屏蔽掉全局变量
---------------------------------------------------------------------------------------
按变量的存储方式
静态变量
自动变量
寄存器变量
c语言学习笔记(8)——函数的更多相关文章
- Go语言学习笔记(7)——函数和方法
Go语言中同时有函数和方法! 函数: go程序必须要包含一个main函数.main函数不能有任何参数和返回值! 1. 定义方法示例: func max(num1, num2 int) int { // ...
- 【Go语言学习笔记】函数做参数和闭包
函数做参数 在Go语言中,函数也是一种数据类型,我们可以通过type来定义它,它的类型就是所有拥有相同的参数,相同的返回值的一种类型.类似于重写(同名覆盖). 回调函数:函数有一个参数是函数类型,这个 ...
- Go语言学习笔记(五) [函数]
日期:2014年7月29日 1.函数定义:func (p type) funcname(q int) (r,s int) {return 0,0 } func: 保留字,用于定义一个函数 ...
- C语言学习笔记--字符串函数
字符串函数 需要包含头文件#include<stdio.h> strlen strcmp strcpy strchr strstr strcasestr
- C语言学习笔记之函数指针与函数指针数组
指针函数:本质是一个函数: 是一个返回指针类型的函数int * sum(){ } 函数指针:本质是一个指针: 是一个指向函数的指针 int (*p)(int,int) = sum; p(5,6); i ...
- Go语言学习笔记七: 函数
Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...
- 大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项
博主学习C语言是通过B站上的<郝斌C语言自学教程>,对于C语言初学者来说,我认为郝斌真的是在全网C语言学习课程中讲的最全面,到位的一个,这个不是真不是博主我吹他哈,大家可以去B站去看看,C ...
- 2017-04-21周C语言学习笔记
C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...
- GO语言学习笔记(一)
GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...
- Go语言学习笔记十三: Map集合
Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...
随机推荐
- 【BZOJ 2754】[SCOI2012]喵星球上的点名
[链接]h在这里写链接 [题意] n个人; 由姓和名组成.s1[i]和s2[i]; 有m个询问串. 问你第j个询问串,是否为某个人的姓或者名的子串. 如果是的话 ...
- swift开发网络篇—利用NSURLSession 发送GET和POST请求
说明:本文示例代码发送的请求均为http请求,需要对info.plist文件进行配置.如何配置,请参考https://github.com/HanGangAndHanMeimei/iOS9Adapta ...
- 算法 Tricks(四)—— 判断序列中的字符/数值是否交替出现
比如:353, 54545,数字都是交替出现的: bool alternate = true; for (int i = 0; i < M.size(); ++i){ if (M[i] != M ...
- gdbserver远程调试嵌入式linux应用程序方法
此处所讲的是基于gdb和gdbsever的远程调试方法.环境为:PC机:win7.虚拟机:10.04.下位机:飞嵌TE2440开发板. 嵌入式linux应用程序的开发一般都是在linux里面编写好代码 ...
- 28、应用调试之strace命令来跟踪系统调用
strace是个工具,在使用时需要先按照,见韦东山书籍: 1.tar xjf starce-4.5.15.tar.bz2 2.cd strace-4.5.15/ 3.patch -p1 < .. ...
- 【26.83%】【Codeforces Round #380C】Road to Cinema
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- js循环一维数组按指定长度截取为二维数组
//随便创建一个数组 let data = "abcdefghijklmnopkrstuvw12322999".split(""); //总数组 let pro ...
- 【t053】整数去位
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 键盘输入一个高精度的正整数N,去掉其中任意M个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对 ...
- ORACLE会话数、连接数配置
ORACLE会话数.连接数配置 ORACLE会话数.连接数配置 ORACLE的会话数和连接数参数配置 以sysdba身份登录 sqlplus sys/xxxx as sysdba; 查看最大连接数: ...
- Android的事件分发
1. Touch事件和绘制事件的异同之处 Touch事件和绘制事件非常相似,都是由ViewRoot派发下来的,可是不同之处在绘制事件是由应用中的某个View发起请求,一层一层上传到ViewRoot.再 ...