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还简单. ...
随机推荐
- UVA 11859 - Division Game
看题传送门 题目大意 有一个n * m的矩阵,每个元素均为2~10000之间的正整数,两个游戏者轮流操作.每次可选一行中的1个或者多个大于1的整数把它们中的每个数都变成它的某个真因子,比如12可以变成 ...
- 11.1 Android显示系统框架_framebuffer原理及改进
1. Android显示系统框架Android Graphic UI with GPU Hardware Accelerationhttps://community.nxp.com/docs/DOC- ...
- ios根据字体大小设置
, , , , , , , , , , , }; //这么多字体,从大到小挨个尝试 ; UIFont *font; ; i < array_length; i++) { font = [font ...
- The behavior of App killed or restored by Android System or by users
What's the behavior of App killed or restored by Android System or by users? First, user kills the a ...
- 【35.29%】【codeforces 557C】Arthur and Table
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【Heritrix基础教程之3】Heritrix的基本架构 分类: H3_NUTCH 2014-06-01 16:56 1267人阅读 评论(0) 收藏
Heritrix可分为四大模块: 1.控制器CrawlController 2.待处理的uri列表 Frontier 3.线程池 ToeThread 4.各个步骤的处理器 (1)Pre-fetch ...
- Tomcat生产中优化JVM的配置实例
root 1208 1 0 11月25 ? 00:15:32 /home/root/jvm/jdk1.7.0_79/bin/java -Djava.util.logging.config.file=/ ...
- QT学习记录之环境搭建
作者:朱金灿 来源:http://blog.csdn.net/clever101 1. 安装qt-win-opensource-4.8.5-vs2008.exe(对应的IDE是VS2008),安装路径 ...
- mui常用功能链接地址
1.下拉刷新mui.pullToRefresh插件http://ask.dcloud.net.cn/article/12152.打包app权限列表http://ask.dcloud.net.cn/ar ...
- DOM中Event 对象如何使用
DOM中Event 对象如何使用 一.总结 一句话总结: 1.将event作为参数传递进来,然后就可以调用event对象的各种属性和方法了. <body onmousedown="wh ...