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 4310】跳蚤
[链接]h在这里写链接 [题意] 给你一个字符串; 让你把它分割成最多k个部分. 然后求出每个部分的字符串里面子串的字典序最大的那一个子串. 然后在这k ...
- [Angular2 Router] Auxiliary Routes bit by bit
Article Github Auxiliary Routes is is little bit hard to understand. Here is demo, link You can see ...
- Android之怎样用代码使编辑框等组件显示为圆角
圆角button实现 圆角button大家很常见.有时候你可能会使用ps来加工圆角图片来实现想要的效果, 今天通过简短的代码来达到这样的效果.(由于这个跟project无关.仅仅是一种效果,所以我就单 ...
- 34、JZ2440上WIFI网卡使用
:http://wireless.kernel.org在这个网站上的document中有下面说有内容的介绍 1. 准备工作(虚拟机,开发板)及配置内核选择WIFI驱动1.1 选型:确定网卡的VID,P ...
- Java文档上传问题设计
近期公司让做一个文档上传的功能,功能描写叙述大概是这样子滴 书籍名称.书籍定价.书籍封面图片(须要上传).文档内容 (须要上传) .还有其它相关的描写叙述信息. 我的设计 表 A 包括以上字段 , ...
- 一起学libcef--给你的浏览器删除cookie
long long ago, 我们讨论了如给你cef设置cookie. 如今来补充一点,假设给你的浏览器删除某一cookie. review一下设置cookie: std::wstring usern ...
- C#的Timer(很多相关文章)
再C#里现在有3个Timer类: System.Windows.Forms.Timer System.Threading.Timer System.Timers.Timer 这三个Timer我想大家对 ...
- 《SPA设计与架构》之客户端路由
原文 简书原文:https://www.jianshu.com/p/4d83475f71da 大纲 1.传统路由 2.SPA导航 3.客户端路由器的工作机制 1.传统路由 在传统Web应用程序中,导航 ...
- android.app.Dialog(23)里window的那些事(坑)
不要使用theme去配置Dialog的gravity 因为如今手机的尺寸比較大(相对于智能机開始的3.5in.4.0in),而Dialog默认都是显示在屏幕中心的位置,用户触摸起来多不便. 所以大多数 ...
- Home界面的启动
继上篇文章Launcher进程的启动,我们继续分析Home界面的启动. public final class ActivityThread { ...... public static final v ...