目录
![549d713d23a64f78a7c88f525a182774.jpeg](https://i-blog.csdnimg.cn/blog_migrate/55b61827e37fe8ee7643f46741a734de.jpeg)
模块化程序设计知识框架
正确定义函数
1.模块化程序设计的方法
模块化程序设计的方法是基于一种复杂问题简单化处理的思路;就相当于是将一个复杂的问题分解成多个易于解决的小问题;而对于程序设计而言,则是采用了“自顶而下,逐步细化”的原则;在C语言中实现这样的功能模块被称为函数;C语言中的函数由函数头和函数体构成,函数头声明函数的类型,名称和所需要的参数,函数体则是用{}括起来的实现模块化功能的代码段。
2.C语言函数的分类
(1)C语言的函数
c语言函数分为两大类:库函数和自定义函数(用户自定义函数)
库函数是系统提供的,用户可在程序中直接使用,如printf()和scanf()等函数。
自定义函数又被成为用户自定义函数,它用户是按照实际情况编写的完成相应功能的程序段。
(2)关于数据库
库函数程序代码存储在扩展名为.LIB的库文件中。
库函数的原型说明存储在一个或多个扩展名为h的头文件中。
在程序中使用库函数,必须在源程序开始的地方使用预处理命令,即:#include,包含相应的头文件,格式:#include"头文件名"
(3)几种常用的库函数
1.pow函数
格式:double pow(double base,double exp)
功能:返回以参数base为底的exp次幂。
2.sqrt函数 使用时应添加头文件:#include"math.h"
格式:double sqrt(double num)
功能:返回参数num的平方根
3.rand函数 #include"stdlib.h"
格式:int rand(void)
功能:函数返回一个在0~RAND_MAX(包括RAND_MAX)的伪随机整数
用法:【min,max】 rand()%(max-miin+1)+min
3.函数的定义方法
(1)函数定义的一般格式
类型标志符 函数名(【形参说明列表】)
{
语句;
}
函数的程序代码包含两部分:函数头和函数体。
(2)关于定义函数的说明
1.类型标志符:决定函数返回值的数据类型,也叫做函数的类型
2.函数名:是一个合法的用户标志符,用于在函数中区分不同的函数
3.形式参数:也称形参,即函数后小括号中的变量。用于从函数外部接受数据。
函数也可以没有形式参数。
4.函数体:用花括号括起来的一组语句序列,实现函数的功能。它由声明部分和执行部分组成。
5.空函数:是指定义函数时函数体为空的函数。其用于快速构建程序框架。
4.函数类型,返回值类型与return 语句的关系
(1)return 语句的使用格式
1.return;
2.return 表达式;
3.return(表达式);
(2)return 语句的作用
结束函数的执行,使流程控制返回到调用函数中,并且结束函数调用语句的执行;向调用函数返回“表达式”的只。
(3)定义函数时,函数类型要与函数返回值的类型一致,若不一致,return 语句返回值的类型将自动的转化成函数定义时的类型。
(4)没有return 语句或者有不带表达式的return 语句的函数将向调用函数返回一个不确定的值。
(5)将函数类型定义为void 可以禁止函数返回值。
(6)一个函数中可以有使用多个return 语句,但是一次只能返回一个值。
正确调用函数
1.函数的声明
(1)函数声明的一般格式:
类型标志符 函数名(参数类型1,参数类型2,···);
(2)关于函数声明
1.被调用函数的类型为int 时,可以不用去对被调函数进行声明,而直接调用。
2.当被调函数在主调函数之前时,可以不用对被调用函数进行声明。
3.在源程序开始处集中对所有函数进行了声明,则在被调用函数中不必对被掉函数再做声明。
(3)#include 的作用是对将要使用的库函数进行声明。
2.函数调用的方法
(1)使用另一个函数功能的函数成为主调函数,而提供功能的函数则被叫做被调函数。
(2)函数调用的一般格式
1.无参函数调用的一般格式:函数名()。
2。有参函数调用的一般形式:函数名(参数列表)。
(3)在调用有参函数时,必须要给被调函数提供形式参数所声明的数据,这些数据被称为实际参数,简称实参。实参可以是常量、变量和表达式。
(4)函数调用的两种方式
1.函数语句方式:
将函数调用作为一个独立的语句,这种方式通常用于调用一个没有返回值的函数。用此种方式调用有返回值的函数时,就不能使用函数的返回值。
2.函数表达式方式:
函数的调用出现在一个表达式中,这种方式常用于调用有返回值的函数。函数的返回值可以参加表达式的运算。无返回值的函数不能用此方法调用。
函数传递规则
1.函数的参数传递规则
说明:只要求基本数据类型作为参数。
(1)当函数形参是基本数据类型时,实参向形参的数据传递规则是“单向的值传递”,
即数据只能由实参传给形参。
(2)函数不调用时,形参变量不占用内存单元。只有在发生函数调用时才给形参变量分配内存单元。
(3)被调函数的形参为基本数据类型时,实参和形参在内存中占据不同的存储单元。
(4)函数在调用时实参必须和形参一一对应。
2.简单的主---子程序设计
指一个主调函数,其余皆为被调函数。
函数之间通过调用关系构成一个结构层次清晰且功能完善的程序。
相关程序:
/*
编写程序,输入50个学生的成绩,求最高分、最低分,并按从高到低排序。
要求:在主函数中输入、输出,在jz()函数中求最高分和最低分,在sort()函数中排序。
*/
#include <stdio.h>
#define N 50
int main(int argc, char *argv[])
{
//定义成绩---float---变量
float a[N],max,min;
int i;
float jz(float b[],int,int);
void sort(float b[],int);
for(i=0;i<N;i++)
scanf("%f",&a[i]);
//求最高分、最低分
max=jz(a,N,1);
min=jz(a,N,0);
printf("最高分是%.2f\n",max);
printf("最低分是%.2f\n",min);
//求降序排序
sort(a,N);
for(i=0;i<N;i++)
printf("%.2f ",a[i]);
}
float jz(float b[],int n,int loop)
{
float max,min;
int i;
max=min=b[0];
for(i=0;i<n;i++)
{
if(max<b[i])
max=b[i];
if(min>b[i])
min=b[i];
}
if(loop==1)
return max;
else
return min;
}
void sort(float b[],int n)
{
int i,j;
float t;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
{
if(b[j]<b[j+1])
{
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
}
}
}