假期C语言学习笔记4

函数

  • 经过三个星期的慕课的学习大致上学会了C的一些基本知识,在经过三个星期的C语言课本实践将书上的例题,课后练习实践挨个做了一遍,终于到了函数这一章。时间过的好快呀。
  • 函数分为库函数和自定义函数;有返回值(
  • 和没有返回值
  • 变量有实参(全局变量)形参(局部变量)

函数设计

  • 一般某种功能使用超过三次以上,考虑将其写成函数
  • 函数的设计要遵循“信息隐藏”的指导思想即把函数有关的代码和数据对程序的其他部分隐藏起来。

基本原则

  1. 函数规模要小,尽量控制在50行代码以内,这样的函数比代码更长的函数更容易维护,出错几率更小。
  2. 函数功能要单一,不要设计有多种用途的函数
  3. 每个函数只有一个入口和一个出口,尽量不要使用全局变量向函数传递参数。
  4. 函数接口中要清楚的定义函数的行为,包括入口参数,出口参数,返回状态,异常处理等;让调用者清楚函数所能进行的操作及操作是否操作成功,应尽可能的多考虑一些可能出错的情况,定义好接口后不要轻易改动。
  5. 在函数入口处对参数的有效性进行检查。
  6. 在执行某些敏感性操作时(如除法,开方,取对数,赋值,函数参数传递等)尽可能多考虑一些出错情况,定义好函数接口后轻易不要改动。
  7. 不能认为调用一个函数总会成功,要考虑到一个函数调用失败后该如何处理。
  8. 对于与屏幕显示无关的函数,通常需要通过返回值来报告错误,因此调用函数时要检验函数的返回值,以判断函数是否调用成功;对于与屏幕显示有关的函数,函数要负责相应的错误处理。错误代码一般放在函数末尾,对于某些错误还要设计专门的错误处理函数。
  9. 由于并非所有的编译器都能捕获实参与形参不匹配的错误,所以程序设计人员在函数调用时应确保实参类型与形参类型相匹配,在程序开头进行函数原型声明,并将函数参数的类型书写完整(没有参数时用void声明)有助于编译器进行匹配检查
  10. 当函数需要返回值时,应确保函数所有分支都有返回值,函数没有返回值时用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语言程序设计》(第三版)中的这一部分抄写下来。
原文地址:https://www.cnblogs.com/hpl20155329/p/7194101.html