第一阶段 C语言基础与入门6

嵌套循环:

计算1!+2!+3!+······+n!的值,我们一般自定义一个新函数进行计算,如下图:

   除此之外,其实还有一种方式能解决这个问题,那就是嵌套循环。

   其思路为:sum=sum+第i项

  累加求和的程序段为:

        sum=0;

        for(i=1;i<=n;i++){

                  sum=sum+i!

}

又可以写成:

    sum=0;

    for(i=1;i<=n;i++){

             item=i!;

             sum=sum+item;

}

所以完整的程序为:

 

 函数的定义:

  函数是一个完成特定工作的独立程序模块,包括库函数和自定义函数两种。例如,scanf()、printf()等为库函数,由C语言系统提供定义,编程时只要直接调用就行;但是有些函数,需要用户自己定义,属于自定义函数。

  从函数实现计算功能角度来看,C语言中称其为函数参数。f(r,h)计算后有结果值,在C程序中必然为某一种数据类型,称其为函数类型。

  函数定义的一般形式为:

       函数类型  函数名(形式参数表)

        {

              函数实现过程

         }

1.函数首部:

  函数首部由函数类型、函数名和形式参数表组成,位于函数定义的第一行。函数首部中,函数名是函数整体的称谓,需用一个合法的标识符表示。函数类型指函数结果返回的类型,一般与return语句中表达式的类型一致。形参表中给出函数计算所要用到的相关已知条件,以类似变量定义的形式给出,其格式为:

  类型1 形参1,类型2 形参2,···类型n,形参n

  形参表中各个形参之间用逗号分隔,每个形参前面的类型必须分别写明。函数的形参数量可以是一个,也可以是多个,或者没有形参。

  注:

函数首部后面不能加分号它和函数体一起构成完整的函数定义。且正确表示为                       double cylinder(double r,double h)而非double r,h。

2.函数体:

  函数体体现函数的实现过程,由一堆大括号内的若干条语句组成,用以计算,或完成特定的工作,并用return语句返回运算的结果。

函数的调用:

1.函数调用过程:

任何C程序执行,首先从主函数main()开始,如果遇到某个函数调用,主函数被暂停执行,转而执行相应的函数,该函数执行完后将返回主函数,然后再从原先暂停的位置继续执行。

2.函数调用的形式:

函数调用的一般形式为:

  函数名(实际参数表)

实际参数(简称实参)可以是常量、变量和表达式。

3.参数传递:

  函数定义时,位于其首部的参数被称为形参,如r和h。主调函数的函数被称为实参。形参除了能接受实参的值外,使用方法与普通变量类似。形参和实参必须一一对应,两者数量相同,类型尽量一致。程序运行遇到函数调用时,实参的值依次传给形参,这就是参数传递。

4.函数结果返回:

  函数结果返回的形式如下:

  return 表达式;

先求解表达式的值,再返回其值。一般情况下表达式的类型与函数类型应一致,如果两者不一致,以函数类型为准。return语句的作用有两个:一是结束函数的运行;二是带着运算结果(表达式的值)返回主调函数。

5.函数原型声明:

  C语言要求函数先定义后调用,就像变量先定义后使用一样。如果自定义函数被放在主调函数的后面,就需要在函数调用前,加上函数原型声明(或称为函数声明)。

   函数声明的目的主要是说明函数的类型和参数的情况,以保证程序编译时能判断对该函数的调用是否正确。函数声明的一般格式为:

   函数类型    函数名(参数表);

即与函数定义中的第一行(函数首部)相同,并以分号结束。

自定义函数并调用计算五边形面积:

因此,可以总结出使用自定义函数的程序有以下几个优点:

(1)程序结构清晰,逻辑关系明确,程序可读性强;

(2)解决相同或相似问题时不用重复编写代码,可通过 调用函数来解决,减少代码量;

(3)利用函数实现模块化编程,各模块功能相对独立,利用“各个击破”降低调试难度。

判断一个数是否为完全平方数:

不返回结果的函数:

  之前的函数都是起计算(或判断)作用,最终有一个函数结果返回。在很多程序设计中,调用函数不是为了得到某个运算结果,而是要让它产生某些作用。如下图的输出数字金字塔,就是如此。

不返回结果的函数定义:

    void 函数名(形参表)

        {

           函数实现过程

       }

  函数类型为void,表示不返回结果,函数体中可以使用没有表达式的return语句,也可以省略return。void类型的函数虽然不直接返回一个值,但它的作用通常以屏幕输出等方式体现。(void不能省略,否则,函数类型被默认定义为int。)

结构化程序设计思想:

1.自顶向下分析问题的方法:

  这个方法,就是把大的复杂的问题分解成小问题后再解决。面对一个复杂的问题,首先进行上层(整体)分析,并分解为子问题,若子问题还复杂,继续分解直到处理对象相对简单、容易解决为止。如课本P110页的“学生成绩统计程序的层次结构图”便是如此。

2.模块化设计:

  经过问题分析,设计好层次结构图后,就进入这个阶段。在这个阶段,需要做到:

  1. 一个模块只完成一个指定的功能
  2. 模块之间只通过参数进行调用
  3. 一个模块中只有一个入口和出口
  4. 模块中慎用全局变量

3.结构化编码主要原则:

1.模块化设计后,每一个模块都可以独立编码。
2.对变量、函数、常量等命名时,要见名知义,有助于对变量含义或者函数功能的理解。
3.在程序中添加必要的注释,增加程序的可读性。
4.要有良好的程序层次分明、结构清楚、错落有致和更加清晰。
5.程序要清晰易懂,语句结构要简单直接。在不影响功能和性能时,做到结构清晰第一,效率第二。
6.程序要有良好的交互性,输入有提示,输出有说明,并且尽量采用统一整齐的输出。

局部变量:

  C语言中把定义在函数内部的变量称为局部变量,局部变量的有效作用范围局限于所在的函数内部。形参是局部变量。

  使用局部变量可以避免各个函数之间的变量相互干扰。如下图的函数complex_prod()和complex_add()使用了同名的形参,且与值函数实参变量变量也同名,但由于分属不同函数,它们有各自不同的变量实体和使用范围,不会互相干扰。这一特征使得C语言在结构化程序设计中非常有用。

  除了作用于函数的局部变量外,C语言还允许定义作用于复合语句中的局部变量,其有效使用范围被局限于复合语句内,一般用作小范围内的临时变量。

 局部变量一般定义在函数或复合函数语句的开始处,标准C规定其不能定义在中间位置。

全局变量:

  局部变量虽保证了函数的独立性,但程序设计有时还要考虑不同函数之间的数据交流,及各函数的某些同意设置。当一些变量需要被多个函数共同使用时,参数传递虽然是一个办法,但必须通过函数调用才能实现并且函数只能返回一个结果,这会使程序设计受到很大的限制。为了解决多个函数间的变量共用,C语言允许定义全局变量。

  定义在函数外而不属于任何函数的变量称为全局变量。全局变量的作用范围是从定义开始到程序所在文件的结束,它对作用范围内所有的函数都起作用。其他见书p113.

本周有意思的题目(这是我打过最长的代码):

2021.11.20

今天,回看了这篇文章,感觉自己上一题的做法很幼稚,所以做了改进。

 这便引进了一种排大小的方法:

 

 本周学习内容到此为止,

其他漏下的习题我会另发文章补上。

如有错误,欢迎指出,谢谢。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值