5 函数和模块化程序设计
- 格式:doc
- 大小:467.00 KB
- 文档页数:17
c语言《程序设计基础》课后习题参考答案与解析《程序设计基础》习题参考答案与部分解析第1章 C 语言概述一、填空a) C源程序的基本单位是函数。
b) 一个C程序中至少应包括一个 main函数。
c) 在C语言中,输出操作是有库函数 printf( )函数完成。
二、单选题1、A2、C3、B解析:第1题答案:A 。
因为一个C程序总是从main函数开始执行的,而不论main函数在程序中的位置。
且到main函数结束。
第2题答案:C 。
因为 main函数没有限制必须位于程序的最前面。
C程序书写自由,一行内可写几个语句。
在对一个C 程序进行编译的过程中,无法检查注释当中的拼写错误。
不过C语言本身并没有输入输出语句,输入输出是由函数完成的。
第3题答案:B。
因为一个C语言程序是由若干个函数组成的。
但至少包含一个main 函数,且main函数的位置不限。
三、编程题1、编写一个输出“Welcome to C!”信息的小程序。
解:程序如下#include “stdio.h”main( ){1printf(“Welcome to C!”) ;}2、已知三角形的三边长分别为3,4,5,试用海轮公式编程求其面积。
海伦公式为:S?= ,其中s= (a+b+s)/2 ;解:程序如下#include “math.h”#include “stdio.h”main( ){int a , b , c ; /* a ,b,c 3个整型变量表示三角形的3条边。
*/float s ,s1 ; /* s1作为面积变量,s 作为中间变量是都应该是实形*/a=3 ; b= 4; c=5 ;s= (a+b+c)/2.0 ;s1= sqrt(s*(s-a)*(s-b)*(s-c)); /* sqrt函数完成开平方根功能。
*/printf(“area=%f\n”,s1);}2第2章程序设计基础知识一、单选题1、C2、A3、C4、A5、C6、C7、D8、C9、D 10、A 11、D 12、A 13、C 14、C 15、B A 16、B 17 D解析:1. 答案:C。
模块化程序设计模块化程序设计什么是模块化程序设计在软件开发中,模块化程序设计是一种将软件系统划分为独立的模块或组件的方法。
每个模块都有自己的功能和责任,可以通过定义模块之间的接口来实现模块之间的通信和协作。
通过模块化程序设计,我们可以更加灵活地开发、测试和维护软件系统。
为什么需要模块化程序设计1. 提高代码的复用性模块化程序设计可以将功能相似的代码封装在独立的模块中,这样可以使得这部分代码可以被多个程序共享和复用。
通过复用模块,可以减少代码的重复编写,提高开发效率。
2. 提高代码的可维护性当一个软件系统被划分为多个模块时,每个模块的功能和责任都较为清晰明确。
这样,当需要修改系统的某个功能时,只需要关注与该功能相关的模块,而不需要修改整个系统的代码。
这样可以提高代码的可维护性,降低修改代码时的风险和工作量。
3. 提高开发效率将一个复杂的软件系统划分为多个模块后,每个模块可以由不同的开发人员独立开发。
这样可以并行开发不同模块,提高开发效率。
同时,不同模块之间的接口定义也可以促进开发人员之间的协作和沟通,减少开发冲突。
4. 降低系统的耦合度模块化程序设计可以将系统中的各个模块解耦。
模块之间通过明确定义的接口进行通信,模块之间的依赖关系减少。
这样,当需要修改系统的某个模块时,对其他模块的影响较小,可以降低系统的耦合度,增强系统的灵活性。
实现模块化程序设计的方法1. 使用函数模块化在很多编程语言中,函数是实现模块化程序设计的基本单位。
我们可以将相关功能的代码封装在一个函数中,并通过函数的参数和返回值来实现多个函数之间的通信和协作。
例如,在Python中,我们可以定义一个计算圆面积的函数:pythondef calculate_area(radius):return 3.14 radius 22. 使用类模块化除了函数,类也是一种常用的模块化设计方法。
通过将相关的属性和方法封装在类中,可以更好地组织和管理代码。
模块化程序设计
1-引言
介绍模块化程序设计的概念和背景,以及该文档的目的和范围。
2-术语和缩写
解释本文档中使用的术语和缩写,确保读者理解并正确使用。
3-模块化程序设计概述
说明模块化程序设计的原则和好处,以及为什么应该采用这种
方法来开发软件。
4-模块化程序设计流程
详细描述模块化程序设计的流程,包括以下步骤:
a-项目需求分析
b-模块设计规范的制定
c-模块划分和结构设计
d-模块之间的接口定义
e-模块的实现和测试
f-模块集成和系统测试
g-最终部署和维护
5-模块设计规范
阐明制定模块设计规范的重要性,并提供一个示例规范,包括
标识命名规则、模块函数结构、输入输出约定等。
6-模块划分和结构设计
描述如何进行模块划分和结构设计,包括依赖关系分析、模块
职责的划分、模块之间的协作等。
7-模块接口定义
详细描述如何定义模块之间的接口,包括函数签名、参数传递
方式、数据结构的定义等。
8-模块实现和测试
解释模块的实现过程,包括编码规范、单元测试、集成测试等。
9-模块集成和系统测试
描述如何将各个模块整合成系统,并进行系统级别的测试,确
保各个模块协同工作。
10-最终部署和维护
说明如何将程序部署到目标环境,并提供维护和升级的指导。
附件:
列出本文档涉及的附件,如示例代码、配置文件、演示视频等。
法律名词及注释:
提供本文档所涉及的法律名词的解释和注释,确保读者理解并遵守相关法律。
函数与模块化设计在计算机编程中,函数和模块化设计是两个非常重要的概念。
函数是用来封装一段代码,可以被反复调用执行,提高代码的可复用性和可维护性。
而模块化设计则是将程序分解为多个独立的模块,每个模块负责完成特定的功能,降低了代码的耦合性,使得程序更易于维护和扩展。
一、函数的定义和使用函数是一段可以被重复调用的代码块,通过给函数起一个名字,我们可以在程序中的任意位置使用该函数。
函数可以接收输入参数,并返回输出结果。
函数的定义通常包括函数名、参数列表、函数体和返回值。
参数列表是指函数接收的输入参数,函数体是实现具体功能的代码块,返回值是函数执行后返回的结果。
函数的使用通常包括函数的调用和处理函数的返回值。
通过函数的调用,我们可以执行函数体中的代码,并将参数传递给函数。
函数执行完毕后,可以通过函数的返回值获取函数的执行结果。
二、函数的优势和用途函数的使用具有以下优势:1. 代码重用:可以将一段代码封装成函数,在程序中多次调用,提高代码的重用性,避免重复编写相同的代码。
2. 代码模块化:将复杂的程序分解为多个独立的函数,每个函数负责完成特定的功能,使得代码逻辑清晰、易于理解和维护。
3. 降低代码的耦合性:不同函数之间通过参数和返回值进行数据传递,减少模块之间的依赖性,使得代码更易于扩展和修改。
函数在实际编程中有广泛的应用,例如:1. 通过函数封装常用操作,提高代码的复用性和可读性。
2. 利用函数实现算法和数学公式,降低程序的复杂度和难度。
3. 构建用户界面,通过处理用户的输入,调用相应的函数完成业务逻辑。
4. 函数作为组件的一部分,用于实现软件系统的各个模块。
三、模块化设计的概念和原则模块化设计是将程序分解为多个模块,每个模块负责完成特定的功能,并通过模块之间的接口进行交互。
模块化设计的主要原则包括:1. 单一责任原则:每个模块应该有清晰的功能定位,只负责完成独立的、单一的功能。
2. 接口规范:模块之间通过接口进行交互,接口应该定义清楚、简洁明了,遵循统一的规范。
了解编程中的五个模块化设计方法模块化是一种将复杂系统划分成独立的、可组合的部分的设计方法。
在编程中,模块化设计方法是将程序划分成多个独立的模块,每个模块实现一个特定的功能或目标,从而达到提高代码的可维护性、复用性和可测试性的目的。
下面介绍五个常用的模块化设计方法。
第一个模块化设计方法是面向对象编程(Object-Oriented Programming, OOP)。
面向对象编程中,将程序设计成由对象组成的集合,每个对象都有自己的属性和方法。
通过将相似功能的代码封装到对象中,可以更好地组织和管理代码。
面向对象编程可以将系统的复杂性分解为多个小的、可重用的对象,从而提高代码的可维护性和复用性。
第二个模块化设计方法是函数式编程(Functional Programming)。
函数式编程中,将程序设计成由一系列的函数组成,每个函数接受输入参数并产生一个输出结果。
函数式编程强调函数的纯粹性和不变性,通过将代码分解为小的、独立的函数,可以实现代码的可复用性和可测试性。
第三个模块化设计方法是模块化编程。
模块化编程将程序设计成由多个模块组成的集合,每个模块实现一个特定的功能。
模块化编程中,模块之间通过接口进行通信,对外提供封装好的接口,可以隐藏内部实现细节,提高代码的可维护性和复用性。
第四个模块化设计方法是插件化设计。
插件化设计将程序设计成由核心功能和可插拔的插件组成。
核心功能是基本的、不变的功能,插件是可扩展的、可替换的功能,通过插件可以扩展和定制核心功能。
插件化设计可以使系统更具灵活性和可扩展性,可以根据需求灵活地添加或替换功能。
第五个模块化设计方法是依赖注入(Dependency Injection)。
依赖注入是一种将依赖关系从程序中解耦的方法,通过将依赖对象注入到程序中,可以使程序更加灵活和可测试。
依赖注入可以减少模块之间的紧耦合,提高代码的可维护性和可测试性。
综上所述,以上是编程中常用的五个模块化设计方法。
第四章模块化程序设计1. 教学内容:§4.1 函数4.1.1 C程序结构4.1.2 函数定义与函数声明4.1.3 函数的传值调用4.1.4 函数的嵌套调用4.1.5 函数的递归调用§4.2 变量的存储属性4.2.1 动态变量4.2.2 静态变量4.2.3 外部变量§4.3 编译预处理4.3.1 宏替换4.3.2 文件包含2. 教学目的及要求:1) 熟练掌握函数定义与函数声明2)熟练掌握函数传值、嵌套、递归调用3)理解变量的存储属性3. 学重点:1) 函数定义与函数声明2) 函数的传值、嵌套、递归调用第四章模块化程序设计模块化程序设计是进行大程序设计的一种有效措施,其基本思想是将一个程序按功能进行分割成一些模块,使用权每一个模块都成为功能单一、结构清晰、接口简单、容易理解的小程序。
C语言提供了一些支持模块化软件开发的功能:⑴函数式的程序结构。
⑵允许通过使用不同存储类别的变量,控制模块内部及外部的信息交换。
⑶具有编译预处理功能,为程序的高度、移植提供了方便,支持模块化程序。
§4.1 函数函数是具有独立功能的程序段。
4.1.1 C程序结构C程序结构实际上是由函数组成的结构。
所有其它函数均由主函数main()调用。
如下图所示:C程序结构设计在逻辑上遵循自顶向下、逐步细化的层次结构。
【例】:“高等院校事务管理系统”菜单设计。
P1024.1.2 函数定义与函数声明定义函数就是在程序中设定一个函数模块。
一个函数由变量声明与可执行语句组成的独立实体,用以完成一指定功能。
函数定义形式如前所述:【例】:求三个数的平均值按自顶向下的方法可写出计算平均值的主函数和自定义函数,如下:int average(x,y,z) /*声明自定义函数*/ int x,y,z; /*声明形式参数x,y,z为整型数*/ {int aver; /*声明变量aver为整型数*/ver=(x+y+z)/3; /*求x,y,z的平均值,并赋给aver变量*/ return (aver); /*将aver的值作为函数的返回值*/ }㈠函数定义函数定义的内容及形式:函数类型标识符函数名([类型标识符形式参数1],… …){函数体;}⒈函数名函数名是函数的名字。
4.1程序设计语言的基础知识教学设计程序设计语言的基础知识教学设计教学目标:1. 理解程序设计语言的基本概念和原理。
2. 掌握常见的程序设计语言的语法和控制结构。
3. 能够独立设计和实现简单的程序。
教学内容:第一章:引言1.1 程序设计语言的定义和分类1.2 程序设计语言的发展历程第二章:编程环境和工具2.1 编程环境的概念和结构2.2 常见的程序设计工具和集成开发环境第三章:程序的基本构成3.1 程序的基本概念和结构3.2 变量和数据类型3.3 运算符和表达式第四章:控制结构4.1 顺序结构4.2 分支结构4.3 循环结构第五章:函数和模块化程序设计5.1 函数的定义和调用5.2 函数的参数和返回值5.3 模块化程序设计的概念和原理教学方法:1. 授课结合实践:理论知识和实际编程相结合,通过实例演示和实践操作,加深学生对程序设计语言的理解和应用能力。
2. 案例分析:通过分析实际问题和案例,引导学生运用程序设计语言解决实际问题的能力。
3. 小组讨论:设置小组讨论环节,让学生在小组中相互交流和讨论,促进他们的合作能力和思维能力的发展。
4. 课堂练习和作业:布置适量的课堂练习和作业,加强学生对所学内容的巩固和应用。
教学过程:第一章:引言1.1 程序设计语言的定义和分类- 通过举例解释什么是程序设计语言,并介绍常见的程序设计语言的分类。
1.2 程序设计语言的发展历程- 简要介绍程序设计语言的发展历程,让学生对其发展脉络有个整体认识。
第二章:编程环境和工具2.1 编程环境的概念和结构- 解释编程环境的概念和组成部分,让学生了解编程环境对程序设计的重要性。
2.2 常见的程序设计工具和集成开发环境- 介绍常见的程序设计工具和集成开发环境,让学生能够选择合适的工具和环境进行编程实践。
第三章:程序的基本构成3.1 程序的基本概念和结构- 介绍程序的基本概念和结构,包括程序的输入、处理和输出。
3.2 变量和数据类型- 解释变量的概念和作用,讲解常见的数据类型和变量的定义和使用。
《程序设计》课程标准1. 介绍《程序设计》是一门旨在培养学生计算机编程思维和解决问题能力的课程。
通过该课程的学习,学生将能够掌握计算机程序的开发和调试技巧,培养良好的编程习惯和逻辑思维能力。
2. 课程目标《程序设计》课程的目标是使学生能够:- 理解和掌握计算机程序设计的基本理论和方法;- 熟悉常用的编程语言和开发工具;- 掌握常用数据结构和算法的基本概念和应用;- 具备解决实际问题并实现程序设计的能力;- 培养团队协作和沟通能力。
3. 课程内容《程序设计》课程的内容包括以下方面:3.1 基本编程概念- 程序设计的基本概念和定义;- 编程语言的选择和使用;- 程序开发环境的配置和使用。
3.2 数据类型和变量- 常用数据类型的定义和使用;- 变量的声明和赋值;- 数据类型转换和运算符的使用。
3.3 控制结构- 顺序结构、选择结构和循环结构的概念和应用;- 条件语句和循环语句的编写;- 调试和错误处理。
3.4 函数和模块化编程- 函数的定义和调用;- 函数参数和返回值;- 模块化编程的概念和实践。
3.5 数据结构和算法- 常用数据结构(如数组、链表、栈、队列等)的应用;- 常用算法(如排序、查找、递归等)的实现;- 数据结构和算法的性能评估和优化。
3.6 文件操作和错误处理- 文本文件和二进制文件的读写;- 异常处理和错误处理机制。
4. 教学方法为了达到以上的课程目标,教师可以采用以下教学方法:4.1 授课和演示教师通过讲解理论知识和演示实例程序,向学生传授编程的基本概念和技巧,引导学生掌握关键知识点。
4.2 实践操作学生通过课堂练习和实验课程,完成编程任务,提高实际应用能力和调试技巧。
4.3 项目实战通过开展项目实战,学生能够综合运用所学知识,解决实际问题,并锻炼团队协作和沟通能力。
5. 评估方式为了评估学生对《程序设计》课程的掌握情况,可以采用以下评估方式:5.1 课堂表现和作业评估学生在课堂上的参与程度、回答问题的能力以及作业完成情况。
常见的程序设计方法常见的程序设计方法1. 顺序程序设计顺序程序设计是一种最基础的程序设计方法,它是按照程序中各个语句的先后顺序执行,没有分支和循环的控制结构。
程序从开始执行,按照语句的顺序逐一执行,直到结束。
2. 分支程序设计分支程序设计是在程序执行过程中根据条件的不同选择执行不同的语句或语句块。
常见的分支程序设计包括if语句和switch语句。
if语句根据条件的真假执行不同的代码块,而switch语句根据不同的取值执行相应的代码块。
3. 循环程序设计循环程序设计是在程序执行过程中根据条件的不同重复执行某段代码块。
常见的循环程序设计包括while循环、do-while循环和for循环。
while循环在执行前先判断条件,如果条件为真则执行循环体,执行完循环体后判断条件,直到条件为假才结束循环。
do-while循环先执行一次循环体,然后再判断条件,如果条件为真则继续执行循环体,直到条件为假才结束循环。
for循环是一种常用的循环结构,它在执行前初始化一个计数器,然后在每次循环迭代时执行循环体,并更新计数器,直到满足循环结束的条件。
4. 递归程序设计递归程序设计是指一个函数在函数体内调用自身的过程。
递归函数通常包含一个或多个终止条件,当满足终止条件时,递归停止并返回结果,否则继续调用自身进行下一步计算。
5. 模块化程序设计模块化程序设计是将整个程序划分为多个模块或函数的过程。
每个模块或函数负责完成特定的任务,通过调用其他模块或函数实现功能的组合。
模块化程序设计使得程序结构清晰,易于维护和调试,并且可以提高代码的重用性。
6. 面向对象程序设计面向对象程序设计是一种基于对象的程序设计方法。
面向对象程序设计的核心概念是类和对象,通过定义类来描述对象的属性和行为,并通过创建对象来实现功能。
面向对象程序设计具有封装性、继承性和多态性等特点,使得程序的设计和开发更加灵活和可扩展。
,常见的程序设计方法包括顺序程序设计、分支程序设计、循环程序设计、递归程序设计、模块化程序设计和面向对象程序设计。
第5章函数和模块化程序设计5.1 模块化程序设计方法小程序的关注点:表达式、语句。
大程序的关注点:程序模块(函数、类、组件)。
“好的”模块:可以重复使用,提高编程的效率。
图5-1 某程序的函数调用关系程序员的工作:设计、编写自定义函数,并调用它们。
本章重点:函数语法;重写经典例题;体会模块化程序设计方法。
①问题分解:自顶向下。
②函数功能:尽可能独立完成一个目标。
③函数优化:不断改进,便于重复使用。
5.2 函数的定义与声明5.2.1 函数的主要语法成份语法成分:函数的定义、函数的声明、函数的调用。
1. 函数的定义返回值类型函数名(形式参数表){函数体2. 函数的声明返回值类型函数名(形式参数表) ;int min(int x,int y);void show();函数声明的意义:将函数名、参数个数、类型通知编译系统,以便编译系统能判断函数调用的合法性、翻译代码。
不需要函数声明的情形:被调函数的定义体在主调函数之前。
良好的编程风格:(自顶向下对问题分解)①将所有函数定义体写在main函数之后;②将所有函数声明语句写在main函数之前。
3. 函数的调用函数名(实际参数表)int main(){int x,y;show(); // 把函数调用作为一个语句x=min(12,56); // 函数表达式y=min(36,min(12,56)); // 作为其他函数的实参printf("%d,%d\n",x,y);}【例5.1】简单的无参函数getpi,返回π值。
#include<stdio.h>double getpi();int main(){double pi=getpi();printf("pi=%f\n",pi);return 0;}double getpi(){double pi=3.1415926;return pi;}图5-2 例5.1的执行流程【例5.2】简单的有参函数print,函数有一个整型参数n,功能是在一行中打印n个“*”号。
int main(){print(3); return 0; }void print(int n) {int i;for(i=0; i<n; i++) printf("*"); printf("\n"); }形参表:说明形参的个数、类型。
实参表:将具体数值带入函数执行流程中。
5.2.2 函数编程示例【例5.3】 设计函数,计算1+2+……+n 的值,并输出之。
【例5.4】 设计函数,计算a x =。
已知计算a x =的迭代公式是⎪⎪⎭⎫⎝⎛+=+n n n x a x x 211,要求计算精度为10-6。
5.3 参数传递与返回值类型5.3.1参数的传递规则形参的核心:参数的数据类型。
实参的核心:数据值。
实参向形参传递数据:“单向值传递”。
实参是“原件”,形参是“复印件”。
形参的任何变化都不会造成实参的变化。
【例5.5】 验证函数调用时的“单向值传递”的规则。
int main() {int a=3, b=5;printf("a=%d,b=%d\n",a,b); swap(a,b);printf("a=%d,b=%d\n",a,b); return 0; }void swap(int x,int y) {int tmp;tmp=x; x=y; y=tmp; }5.3.2 函数返回值类型【例5.6】 return中的值类型自动转换为函数类型。
int main(){int pi= getpi();printf("pi=%d\n",pi);return 0;}int getpi(){double pi=3.14;return pi;}5.4 局部变量与全局变量5.4.1 局部变量局部变量:在函数内部定义的变量,包括形参。
作用域是所属函数。
不同函数之间的局部变量,即使重名,也互不影响。
int main(){ int m,n; // m,n是main函数中的局部变量……}int f1(int a){ int b,c; // a,b,c,m是f1函数中的局部变量int m;……}int f2(double x,double y){ double z,w;int n; // x,y,z,w,n是f2函数中的局部变量……}更“局部”的局部变量:定义在复合语句之中的变量。
作用域:从定义之处到复合语句结束的范围。
意义:结构化程序中的变量组织也结构化。
【例5.7】更“局部”的局部变量。
int main(){int i,s=0; // 局部变量for(i=1; i<=10; i++){int j=2*i; // 更局部的局部变量s=s+j;}printf("s=%d\n",s);printf("i=%d\n",i);printf("j=%d\n",j); // j未定义return 0;}5.4.2 全局变量全局变量:定义在函数外部的变量。
作用域:从定义之处至文件末尾。
int p=1,q=2;{ ……}char c1,c2;int f1(int a){ ……}{ ……}5.4.3 重名问题“redefinition”错误:①全局变量重名;②同一个函数中的局部变量重名。
良好的编程风格:尽可能地少用全局变量!“强龙压不住地头蛇”:若某局部变量与全局变量同名,那么局部变量在其作用域中屏蔽同名的全局变量。
【例5.8】验证局部变量与全局变量同名时的规则。
void f1();void f2();int n=1; // 全局变量nint main(){f1();f2();printf("main(): n=%d\n",n);return 0;}void f1(){int n=100; // 局部变量nn=n+10; // 此处n是局部变量printf("f1(): n=%d\n",n);}void f2(){n=n+20; // 此处n是全局变量printf("f2(): n=%d\n",n);}5.5 变量的存储属性变量的存储属性:存储位臵、存在时间(生存期)。
变量分为两大类:①动态变量:存储于栈区的变量。
生存期:在某个函数开始执行时,被系统分配空间;在该函数执行完毕之时,系统自动回收空间。
②静态变量:存储于静态数据区的变量。
(含全局变量)生存期:在程序开始执行时,被系统分配空间,在程序执行完毕之时,系统自动回收空间。
5.5.1 动态变量与静态变量生存期决定了初始值:动态变量auto:随机值静态变量static:0值。
【例5.9】验证动态变量与静态变量的存储机制。
void f();int main(){f(); f(); f();return 0;}void f(){auto int a=1; // 动态变量static int b=1; // 静态变量a++; b++;printf("a=%d,b=%d\n",a,b);}5.5.2 寄存器变量寄存器变量:存放在寄存器中的局部变量。
register int i;意义:提高执行效率。
几乎没有实际意义。
5.6示例、练习单个变量(含数组元素)作为调用函数时的实参。
改写全部程序:3.5 程序设计举例3.6 嵌套循环的程序举例5.7 数组名作为函数参数数组名作为函数的实际参数,则形式参数应当用数组名或指针变量。
5.7.1一维数值数组名作为函数参数数组名:数组的首元素的地址(简称首地址)。
数组名的单向值传递:复制的不是数组元素,是数组的首地址。
单向值传递的效果:形参借助数组首地址,实现对数组元素的读写。
比喻:主调函数中的数组:一个包含若干单元的套房;主调函数中数组名实参:单元房的“钥匙”;被调函数中形参数组名:“复制的钥匙”。
【例5.10】对一维数组中的数据求和。
int sum(int x[],int n);int main(){int a[8]={1,3,5,7,9,11,13,15};int s= sum(a,8);printf("s=%d\n",s);return 0;}int sum(int x[], int n){int s=0; int i;for(i=0; i<8; i++)s=s+x[i];return s;}严重关注:①形参中数组名的定义:int x[]main()中数组的定义:int a[8];实参中数组名的格式:sum(a,8);②sum()函数中“x[i]”与main()中“a[i]”是同一个内存单元。
③形参数组名与实参数组名的类型必须完全一致。
否则,后果很严重。
④数组越界错误,C语言的编译器从不提醒。
⑤传递数组长度的套路:(int x[], int n)改写全部程序:4.1.3一维数组应用举例4.6 排序程序(数值排序)5.7.2一维字符数组名作为函数参数特点:由于字符串结束标记的存在,所以数组长度可以不用传递。
改写全部程序:4.3.3 字符串处理函数4.3.5 字符数组应用举例4.5 类型转换程序5.7.3 二维数值数组名作为函数参数【例5.17】设计函数,将二维实数数组作为参数,返回其中的最大值。
double getmax(double a[][4],int m);int main(){double a[3][4]={{0,1,2,3},{8,9,10,11},{4,5,6,7}};printf("max=%f\n", getmax(a, 3));return 0;}double getmax(double x[][4],int n){double max=x[0][0];int i,j;for(i=0; i<n; i++)for(j=0; j<4; j++)if(x[i][j]>max)max=x[i][j];return max;}严重关注:形参中数组名的定义:double x[][4]main()中数组的定义:double a[3][4];实参中数组名的格式:getmax(a, 3);改写全部程序:4.2.3二维数组应用举例5.7.4 二维字符数组名作为函数参数二维字符数组:存储了多个字符串。
改写全部程序:4.4 二维字符数组程序举例 4.6 排序程序(字符串排序)5.8 函数的嵌套调用函数的嵌套调用:自顶向下的模块化程序设计方法。
【例5.20】 用弦截法求方程f (x )=x 3-5x 2+16x -80=0的近似解。