第七章 成绩分析系统-函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
项目七 成绩分析系统-函数
C语言程序设计
问题情境及实现
printf("\t\t2.查询平均分\n"); printf("\t\t3.查询不及格率\n"); printf("\t\t4.查询最高分\n"); printf("\t\t5.按成绩降序排列\n"); printf("\t\t0.退出\n"); printf("\n\t\t*****************************\n"); printf("\t\t 请选择1-5\n"); scanf("%d",&i); switch(i) { case 1:printf("输出全部成绩");break; case 2:printf("查询平均分");break; case 3:printf("查询不及格率");break; case 4:printf("查询最高分");break; case 5:printf("按成绩降序排列");break; case 0:exit(0); } } }
10
项目七 成绩分析系统-函数
float area(float l1,float ,l2,float l3 ) 1 函数的定义与调用(6) { float s,temparea; 1.1 函数的定义—练习
return temparea;
C语言程序设计
s=(l1+l2+l3)/2; temparea=sqrt(s*(s-a)*(s-b)*(s-c)); 课堂练习:将下面的程序段,用函数形式定义
25
调用f2函数
调用f1函数
间接调用本身
项目七 成绩分析系统-函数
C语言程序设计
#include <stdio.h> 4 函数的嵌套调用和递归调用(3) long fun5(int n){ long s; 4.2 函数的递归调用—课堂练习 if((n==1)||(n==2)) 分析程序的 s=2; else 运行结果 s=n+fun5(n-1); return (s); } 运行结果: void main(){ long x; 9 x=fun5(4); printf("%ld\n",x); }
课堂练习:存 这个函数 return temparea;
C语言程序设计
}
l1=(a+b+c)/2; 方法2: 方法1: s1=(float)sqrt(l1*(l1-a)*(l1-b)*(l1-c)); printf("area=%f\n",area(a,b,c)+area(c,d,e)+area(e,f,g)); s1=area(a,b,c); l2=(c+d+e)/2; s2=area(c,d,e); 总结:s2=(float)sqrt(l2*(l2-c)*(l2-d)*(l2-e)); s3=area(e,f,g); l3=(e+f+g)/2; 函数调用可以作为一个独立的语句,也可作为 printf("area=%f\n",s1+s2+s3); s3=(float)sqrt(l3*(l3-e)*(l3-f)*(l3-g)); 一个运算量。 printf("area=%f\n",s1+s2+s3);
l1=(a+b+c)/2; 1.1 函数的定义—函数首部
s1=(float)sqrt(l1*(l1-a)*(l1-b)*(l1-c)); 类型符 函数名([形式参数说明]) l2=(c+d+e)/2; s2=(float)sqrt(l2*(l2-c)*(l2-d)*(l2-e)); 类型符 形参名1,类型符 形参名2,…,类 l3=(e+f+g)/2; 型符 形参名n s3=(float)sqrt(l3*(l3-e)*(l3-f)*(l3-g)); 课堂练习:根据上
面边的程序给出函 数定义的首部
8
返回值的类型
函数名
float
area
三条边长
函数形式参数
项目七 成绩分析系统-函数
C语言程序设计
1 函数的定义与调用(4) 1.1 函数的定义—函数体
类型符 函数名([形式参数说明]) {
变量定义
声明与定义部分
语句部分
函数体 描述函数功能 的语句
}
9
项目七 成绩分析系统-函数
main函数
a函数
b函数
调用a函数
调用b函数 b函数返回
程序结束
24
a函数返回
项目七 成绩分析系统-函数
C语言程序设计
4 函数的嵌套调用和递归调用(2) 4.2 函数的递归调用 函数的递归调用是指在调用一个函数的过程 中又出现直接或间接地调用该函数本身。
f函数 f1函数 f2函数
调用f函数 直接调用本身
C语言程序设计
输出结果:Max(23.000000,56.000000)=56.000000 3 函数的参数传递(5) #include <stdio.h> 3.2 函数参数的传递方式—课堂练习 y) double max(double x,double { 课堂练习 x=x>y?x:y; return x; 分析程序在输入 } 23 56 void main() 后的输出结果 { double a,b,c; scanf("%lf%lf",&a,&b); c=max(a,b); printf("Max(%lf,%lf)=%lf\n",a,b,c); }
} l1=(a+b+c)/2;
s1=(float)sqrt(l1*(l1-a)*(l1-b)*(l1-c)); l2=(c+d+e)/2; s2=(float)sqrt(l2*(l2-c)*(l2-d)*(l2-e)); l3=(e+f+g)/2; s3=(float)sqrt(l3*(l3-e)*(l3-f)*(l3-g));
4
项目七 成绩分析系统-函数
C语言程序设计
相关知识
1. 函数的定义与调用 2. C程序的模块结构 3. 函数的参数传递
4. 函数的嵌套Байду номын сангаас用和递归调用
本讲小结
5
项目七 成绩分析系统-函数
C语言程序设计
1 函数的定义与调用(1)
1.1 引言 以模块化设计为中心,将待开发的软件系统划分 为若干个相互独立的模块,这样使完成每一个模 块的工作变得单纯而明确;
22
项目七 成绩分析系统-函数
C语言程序设计
本讲小结
重点学习了的函数的定义、调用、声明的语句格 式及使用 重点学习了函数参数值传递方式 了解函数的嵌套调用与递归调用
23
项目七 成绩分析系统-函数
C语言程序设计
4 函数的嵌套调用和递归调用(1) 4.1 函数的嵌套调用 函数的嵌套调用是指函数里有调用函数
19
项目七 成绩分析系统-函数
C语言程序设计
3 函数的参数传递(3) 3.2 函数参数的传递方式—值传递 值传递
函数调用时, 要为形参开 内存 内存 辟新的存储 地址 内容 地址 内容 单元 … …
… … 0100 … 5 … 1000 …
实参a
5 …
形参x
x与a再无联系
系统将实参a的值复 制了一份给形参x
【项目分析】
该项目包含的内容比较多,程序功能较复杂,但若将该问题按功能分解 成5个小模块就很容易实现。 首先实现菜单的显示,这借助于前面的循环、分支程序设计即可实现。 然后分别按功能实现每一个小模块。 2
项目七 成绩分析系统-函数
C语言程序设计
问题情境及实现
先通过前面学习的多分支程序设计实现菜单的显示,每个支路给出对应的提示信息即可。 #include <stdio.h> #include <stdlib.h> #define M 100 main() { int s[M],i,m; printf("请输入学生人数"); scanf("%d",&m); printf("请录入成绩\n"); for(i=1;i<=m;i++) { printf("请输入第%d个学生的成绩:\n",i); scanf("%d",&s[i]); } printf("成绩录入结束\n"); getch(); while(1) { system("CLS"); printf("\n\n\n\n\n\t\t 学生成绩分析系统"); printf("\n\n\t\t*****************************\n"); printf("\n\t\t1.查询全部成绩\n");
20
项目七 成绩分析系统-函数
C语言程序设计
3 函数的参数传递(4) 3.2 函数参数的传递方式—地址传递
地址传递
系统将实参a的地址传给 了形参x,并未给x开辟 新的存储单元 形参x 相当于一个存储单元有 两个名字,因此,对x的 改变就是对a的改变
21
地址 内容
… …
实参a
0100
…
5
…
项目七 成绩分析系统-函数
C语言程序设计
项目七 成绩分析系统-函数
7.1 学生成绩分析系统主菜单的 实现
1
项目七 考试成绩分析系统-函数
C语言程序设计
【项目要求】
编写一菜单式的学生成绩分析系统,对某班一门课的成绩进行分析,要 求有如下功能: 1.查询全部成绩; 2.查询平均分; 3.查询不及格率; 4.查询最高分; 5.按成绩降序排列; 0.退出。
6
项目七 成绩分析系统-函数
C语言程序设计
1 函数的定义与调用(2) 1.1 函数的定义
函数返回 值的类型 除main外的合法 标识符
类型符 函数名([形式参数说明])
函数首部
{
声明与定义部分
函数体
语句部分
}
7
项目七 成绩分析系统-函数
C语言程序设计
float area(float l1,float ,l2,float l3 ) 1 函数的定义与调用(3)
项目七 成绩分析系统-函数
函数形式参数
17
C语言程序设计
3 函数的参数传递(1) 3.1 函数参数的传递过程
void main(){ 找到了函数定义,调用 … S1 =area(a, b, c)
float area(float l1,float l2,float,l3) 变量s的值作为 { float s; 返回值给主程序 … ;s=表达式; return s; S2 =area(c, d, e)}
C语言程序设计
1 函数的定义与调用(5) 1.1 函数的定义—返回值 语句格式 return 表达式;
return语句使用说明:
•一个函数中有多个return时如何执行?
•若不需要带回函数值,将函数定义为void型,否
则需要有返回语句。
•return语句中表达式类型与函数返回值类型不一 致时,如何处理?
2
100
50
10
无 按公式求和 输入计算结果
项目七 成绩分析系统-函数
C语言程序设计
2 C程序的模块结构(4) 2.2 函数声明—举例
例1:求s的值
1 s k k k 1 k 1 k 1 k
2
100
50
10
用函数完成,分析函数定义的首部 返回值的类型 int
函数名
sum k, n
C语言程序设计
2 C程序的模块结构(2)
2.2 函数声明 函数必须先声明后使用
函数声明的一般形式:
类型符 函数名([形式参数说明]);
15
项目七 成绩分析系统-函数
C语言程序设计
2 C程序的模块结构(3)
2.2 函数声明—举例
例1:求s的值
分析程序:
输入 处理 输出
16
1 s k k k 1 k 1 k 1 k
同时实参传递给形参
… }
18
a=6 b=7 c=9
l1=6 l2=7 l3=9
s=20.98
S1=20.98
项目七 成绩分析系统-函数
C语言程序设计
3 函数的参数传递(2) 3.2 函数参数的传递方式
参数传递 方式
值传递(传值) 实参值不随形 参的变化而改 变。
地址传递(传址) 实参的值随形 参的值一起改 变。
13
项目七 成绩分析系统-函数
C语言程序设计
2 C程序的模块结构(1) 2.1 C程序的模块结构
a •C程序由多个函数组成 •有且仅有一个主函数
main
b
c
•其他函数间可互相调用
•同一个函数可以被一个 或多个函数调用一次或 多次 e d e f g h
h
i
g
C语言程序的模块结构
14
项目七 成绩分析系统-函数
11
项目七 成绩分析系统-函数
C语言程序设计
1 函数的定义与调用(6) 1.2 函数的调用 函数调用的形式 函数名(实际参数表) 注意: 函数调用时提供的实际参数(简称实参)应与
被调用函数的形式参数按顺序一一对应,而
且参数类型也要一致。
12
项目七 成绩分析系统-函数
float area(float l1,float ,l2,float l3) 1 函数的定义与调用(7) 在右面的函数 { float 1.2 函数的调用 s,temparea; 定义后,如何 s=(l1+l2+l3)/2; 函数调用的形式—练习 修改程序调用 temparea=sqrt(s*(s-a)*(s-b)*(s-c));