假期C语言学习笔记4
函数
- 经过三个星期的慕课的学习大致上学会了C的一些基本知识,在经过三个星期的C语言课本实践将书上的例题,课后练习实践挨个做了一遍,终于到了函数这一章。时间过的好快呀。
- 函数分为库函数和自定义函数;有返回值(
- 和没有返回值
- 变量有实参(全局变量)形参(局部变量)
函数设计
- 一般某种功能使用超过三次以上,考虑将其写成函数
- 函数的设计要遵循“信息隐藏”的指导思想即把函数有关的代码和数据对程序的其他部分隐藏起来。
基本原则
- 函数规模要小,尽量控制在50行代码以内,这样的函数比代码更长的函数更容易维护,出错几率更小。
- 函数功能要单一,不要设计有多种用途的函数
- 每个函数只有一个入口和一个出口,尽量不要使用全局变量向函数传递参数。
- 函数接口中要清楚的定义函数的行为,包括入口参数,出口参数,返回状态,异常处理等;让调用者清楚函数所能进行的操作及操作是否操作成功,应尽可能的多考虑一些可能出错的情况,定义好接口后不要轻易改动。
- 在函数入口处对参数的有效性进行检查。
- 在执行某些敏感性操作时(如除法,开方,取对数,赋值,函数参数传递等)尽可能多考虑一些出错情况,定义好函数接口后轻易不要改动。
- 不能认为调用一个函数总会成功,要考虑到一个函数调用失败后该如何处理。
- 对于与屏幕显示无关的函数,通常需要通过返回值来报告错误,因此调用函数时要检验函数的返回值,以判断函数是否调用成功;对于与屏幕显示有关的函数,函数要负责相应的错误处理。错误代码一般放在函数末尾,对于某些错误还要设计专门的错误处理函数。
- 由于并非所有的编译器都能捕获实参与形参不匹配的错误,所以程序设计人员在函数调用时应确保实参类型与形参类型相匹配,在程序开头进行函数原型声明,并将函数参数的类型书写完整(没有参数时用void声明)有助于编译器进行匹配检查
- 当函数需要返回值时,应确保函数所有分支都有返回值,函数没有返回值时用void声明
为了更深刻理解函数的返回值问题,今天写练习的时候,特意写了下面这个代码
#include <stdio.h>
#include <stdlib.h>
int pd_Ss(int n)
{
int i;
for(i=1;i<n;i++)
{
if(n%i==0)
{
return i;
}
}
}
int main()
{
int m,result;
scanf("%d",&m);
result=pd_Ss(m);
printf("因子有%d",result);
}
- 事实证明函数的返回值只能有一个!
三目运算符
- 在做数组这一章练习这一章练习题目的时候,我使用的是
int Average(int score[],int n)
{
int i;
int sum=0;
for(i=0;i<n;i++)
{
sum+=score[i];
}
if(n>0) return sum/n;
else return -1;
}
- 书上参考代码
int Average(int score[],int n)
{
int i;
int sum=0;
for(i=0;i<n;i++)
{
sum+=score[i];
}
return n>0?sum/n:-1;
}
-发现了三目运算符这个好东西,在网上寻找答案。找到一个比较好理解的解释:"(a<b)?a:b"是一个"条件表达式",它是这样执行的:如果a<b为真,则表达式取a值,否则取b值.
这相当于一个判断语句。
感想
- 在这段时间的踏踏实实敲代码中,明确感受到了自己的不足和自己的进步,我并不喜欢抄书上的内容,但是这一部分有几点都是我容易错误的,感觉是一个非常重要的部分需要记录下来,在电脑上再敲一遍有助于理解和记忆,所以我将《C语言程序设计》(第三版)中的这一部分抄写下来。
假期C语言学习笔记4的更多相关文章
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- 2017-04-21周C语言学习笔记
C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...
- 2017-05-4-C语言学习笔记
C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...
- GO语言学习笔记(一)
GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- Go语言学习笔记十三: Map集合
Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- Go语言学习笔记十一: 切片(slice)
Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...
- Go语言学习笔记十: 结构体
Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...
随机推荐
- 我的第一个 Servlet
简单记录一下我从头写一个 Servlet 的过程. 我安装的是 Tomcat 7 版本,在 Ubuntu 18.04 上运行,IDE 为 Intellij IDEA. 首先创建一个 Java Web ...
- BZOJ 1295 最长距离 BFS+枚举
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1295 题目大意: windy有一块矩形土地,被分为 N*M 块 1*1 的小格子. 有 ...
- PostgreSQL 常用的命令
连接数据库: psql -h ip -U usrname查看所有库: \l查看所有表: \dt查看某个表的结构: \d 表名查看数据库中所有的表: select * from pg_tables;查看 ...
- 【luogu P1879 [USACO06NOV]玉米田Corn Fields】 题解
题目链接:https://www.luogu.org/problemnew/show/P1879 状压DP. 设dp[i][j]表示第i行,状态为j的方案数 初始dp[0][0] = 1 这样一共12 ...
- Android App的签名打包(晋级篇)
http://blog.csdn.net/linghu_java/article/details/6701666 Andriod应用程序如果要在手机或模拟器上安装,必须要有签名! 1.签名的意义 为了 ...
- CentOS7开发环境搭建
BIOS开启VT支持 查询笔记本进入BIOS的按键,启动BIOS的虚拟化设置 假设安装360卫士,那么请永久关闭Intel-VT核晶防护引擎 CentOS DNS配置 Linux 下设置DNS位置有3 ...
- NIO高并发基础
NIO高并发 是jdk1.4出现的新的流. NIO - New IO - 同步式非阻塞式IO BIO - Blocking IO - 同步式阻塞式IO ---UDP/TCP ==AIO - Async ...
- 你真的了解Scrum吗?
敏捷开发是以用户的需求为核心,采用迭代.循序渐进的方法进行软件开发.而Scrum是实现敏捷开发的具体方式之一.然而你对Scrum又了解多少呢? 什么是Scrum Scrum是橄榄球运动的一个专业术语, ...
- iOS下ajax回调函数里不能播放audio
iOS下audio必须监测到事件才可播放, ajax回调函数里不能播放 解决办法 在点击方法里先播放然后立即暂停,在回调函数里重新播放 onclick(function(){ $("#_wx ...
- jQuery $ 的作用
$符号总体来说有两个作用: 1.作为一般函数调用:$(param) (1).参数为函数:当DOM加载完成后,执行此回调函数 $(function(){//dom加载完成后执行 //代码 }) (2). ...