C语言课堂教程.ppt
《C语言课堂教程.ppt》由会员分享,可在线阅读,更多相关《C语言课堂教程.ppt(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、项目五项目五 根据条件进行学生成绩汇总根据条件进行学生成绩汇总项目要求项目要求一个班有一个班有40位学生(分成五个组,但每个组的人数不一样)参加了期终考试位学生(分成五个组,但每个组的人数不一样)参加了期终考试(考了三门课,分别是数学、语文、英语),老师想统计以下信息:(考了三门课,分别是数学、语文、英语),老师想统计以下信息:1、统计、统计小组一门课程的总分及平均分;小组一门课程的总分及平均分;2、统计小组若干门课程的总分及平均分;、统计小组若干门课程的总分及平均分;3、输出排序后小组三门课成绩单。输出排序后小组三门课成绩单。程序运行结果程序运行结果项目分析项目分析本项目要完成的功能相对比较
2、多,为了使程序的结构清晰,我们可以将此项目进行分解:A:统计小组一门课程的总分及平均分;B:统计小组若干门课程的总分及平均分;C:输出小组排序后三门课程的成绩单;M总负责,即制作菜单并根据需要调用相应的函数。而C这个任务又比较多,所以将它分解为:d:输入记录;e:计算每个同学的总分及平均分,f:是排序;g:输出排序后的记录。这样的编程方式结构清晰,特别是对功能复杂的程序。我们将A,B,C,D、e、f、g称为函数,M称为主函数。一个完整的C语言程序是由一个main()函数及若干个其他函数组成。在前面各项目中介绍的程序都只有一个主函数main(),但实用程序往往由多个函数组成。首先,要了解函数的定
3、义;第二,要懂得函数的调用;第三,函数的其他知识。任务任务1 统计小组一门课程的总分及平均分统计小组一门课程的总分及平均分一、问题情景一、问题情景一个班有40位学生(分成五个组,但每个组的人数不一样)参加了期终考试(考了三门课,分别是数学、语文、英语),请你用菜单的方式:求小组一门课程的总分及平均分。即完成本项目中的第一个要求。分析:主函数的功能是设计一个菜单,由所选择的菜单调用相应的函数,但为了界面清晰,所以程序的执行过程中多次用一条线划界。所以问题就归结为制作一条线的函数及求一门课程的总分及平均分。#include stdio.hvoid ppp()printf(-n);float avg
4、1(int n)int x,i;float s=0;ppp();printf(请输入本小组的考试成请输入本小组的考试成绩绩n);for(i=1;i=n;i+)scanf(%d,&x);s+=x;return s;main()int k,n,km;float sum,average;char ch;ppp();printf(t班级成绩统计n);ppp();printf(1、统计小组一门课程的总分及平均分n,n);printf(2、统计小组若干门课程的总分及平均分n);printf(3、输出小组排序后三门课程的成绩单n);printf(请输入13之间的一个数:);scanf(%d,&k);ppp(
5、);if(k=1)printf(请输入统计的小组的人数n=);scanf(%d,&n);ppp();sum=avg1(n);average=sum/n;printf(本小组的总分=%.0ft平均分=%.1fn,sum,average);ppp();无参函数有参函数有参函数三、相关知识三、相关知识(一一)无参函数无参函数1、无参函数的一般形式类型说明符 函数名()声明部分 语句无参函数的调用函数说明语句函数名();函数类型 函数名()函数体;main()语句;函数名();函数名();语句;函数类型 函数名();main()语句;函数名()函数名();语句;函数类型 函数名()函数体;函数说明语句
6、【例例5-1】输出十行十列的星号(要求用函数调用方式解决)输出十行十列的星号(要求用函数调用方式解决)方法一方法一(主函数在前主函数在前)#include stdio.hvoid pp();main()int i;for(i=1;i=10;i+)pp();void pp()printf(*n);方法二(主函数在后)方法二(主函数在后)#include stdio.hvoid pp()printf(*n);main()int i;for(i=1;i=10;i+)pp();void 表示这个函数无返回值;表示这个函数无返回值;pp是函数名是函数名【例例5-2】用菜单的形式分别选择百钱买百鸡,九九表
7、,水仙用菜单的形式分别选择百钱买百鸡,九九表,水仙花数花数 分析:百钱买百鸡,九九表,水仙花数分别在项目三的例3-12、例3-11、例3-18中介绍过。本题就是将例3-12、例3-11、例3-18改为函数,然后在主函数中调用即可。所以本程序中有三个无参函数,即sxhs()、jjb()、bqmbj()分别是求水仙花数、求九九表、求百钱买百鸡。#include stdio.hvoid sxhs();void jjb();void bqmbj();main()int i;printf(1.水仙花数n);printf(2.乘法九九表n);printf(3.百钱买百鸡n);printf(请选择13的菜单
8、:);scanf(%d,&i);if(i=1)sxhs();/当x=1,调用求水仙花数的函数if(i=2)jjb();if(i=3)bqmbj();/*水仙花数*/void sxhs()int i,a,b,c;printf(n下列数字为水仙花数:n);for(i=100;i=999;i+)a=i/100;b=(i-a*100)/10;c=i-a*100-b*10;if(i=a*a*a+b*b*b+c*c*c)printf(%d n,i);/*乘法九九表*/void jjb()int i,j;printf(n乘法九九表n);for(i=1;i=9;i+)for(j=1;j=i;j+)printf
9、(%-5d,i*j);printf(n);/*百钱买百鸡*/void bqmbj()int x,y,z;printf(公鸡数 母鸡数 小鸡数n);for(x=1;x=50;x+)for(y=1;y=33;y+)z=100-x-y;if(2*x+3*y+0.5*z=100)printf(%4d%4d%4dn,x,y,z);(二二)空函数空函数类型说明符 函数名()“小括弧”中是空的,“花括弧”中也是空的。此函数的没有任何功能,只是占一个位置而已。这样做的好处是将来扩充新的功能方便。(三)有参函数(三)有参函数1、有参函数的一般形式类型说明符 函数名(形参类型 形参名,形参类型 形参名,形参类型
10、形参名)声明部分 语句return 语句“小括弧”中的形参,可以有一个,也可以有多个。函数体中的最后一个语句,通常是return语句,其作用是带回一个返回值。若没有返回值,则可以省略return语句。2、有参函数的调用与无参函数类似,只不过需要有形参。即:函数名(实参列表);具体有以下二种:函数类型 函数名(形参列表)函数体;main()语句;函数名(实参列表);函数名(实参列表);语句;函数类型 函数名(形参列表);main()语句;函数名(实参列表);函数名(实参列表);语句;函数类型 函数名(形参列表)函数体;【例例5-3】求求Cmn=m!/(n!(m-n)!)分析:如果有一个函数jc(
11、k),其功能是求k!,即jc(5)就是5!,jc(8)就是8!,jc(10)就是10!,显然对m!/(n!(m-n)!)来说,就是jc(m)/(jc(n)*jc(m-n)即可。#include stdio.hint jc(int k);/*函数说明语句*/main()int m,n,c;printf(请输入m,n的值:);scanf(%d%d,&m,&n);c=jc(m)/(jc(n)*jc(m-n);printf(Cmn的值为%dn,c);/*阶乘的函数*/int jc(int k)int i;int t=1;for(i=1;i=k;i+)t=t*i;return t;#include st
12、dio.h/*阶乘的函数*/int jc(int k)int i;int t=1;for(i=1;i=k;i+)t=t*i;return t;/*主函数*/main()int m,n,c;printf(请输入m,n的值:);scanf(%d%d,&m,&n);c=jc(m)/(jc(n)*jc(m-n);printf(Cmn的值为%dn,c);C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递。【例例5-4】调用函数时的数据传递。输入二个数调用函数时的数据传递。输入二个数x,y,求二个,求二个数中的大数。数中的大数。#include stdio.hint max(int x,in
13、t y)int t,max;if(xy)t=x;x=y;y=t;max=x;printf(在函数中的在函数中的x,y的值为的值为x=%d,y=%dn,x,y);return max;main()int x,y,mm;printf(请输入请输入x,y的值的值:);scanf(%d,%d,&x,&y);printf(调用函数前调用函数前x,y的值为的值为x=%d,y=%dn,x,y);mm=max(x,y);printf(mm的值为的值为%dn,mm);printf(调用函数后调用函数后x,y的值为的值为x=%d,y=%dn,x,y);尽管在主函数和max()函数中都定义了名为x,y的变量,但它们
14、是属于不同的实体,它们仅仅是名称相同而已,就好比有二个人都叫“李小芳”,但一个是计算机班的“李小芳”,但另一个是国贸班的“李小芳”。任务任务2 统计小组若干门课程的总分及平均分统计小组若干门课程的总分及平均分一、问题情景一、问题情景一个班有40位学生(分成五个组,但每个组的人数不一样)参加了期终考试(考了三门课,分别是数学、语文、英语),请你用菜单的方式:求小组若干门课程的总分及平均分。即完成本项目中的第二个要求。分析:由图可分析出主函数的功能是设计一个菜单,由所选择的菜单调用相应的函数,但为了界面清晰,所以在程序的执行过程中出现:求小组的若干门成绩的平均分及总分的函数又调用了一条线的函数pp
15、p()。二、具体实现二、具体实现#include stdio.h/*输出线条函数*/ppp()printf(-n);/*某个小组若干门课程的平均分与总分函数*/void avgevery(int n,int km)int x,i,j;float s,avg;for(j=1;j=km;j+)s=0;printf(请输入本小组第%d门考试成绩n,j);ppp();for(i=1;i=n;i+)scanf(%d,&x);s+=x;avg=s/n;printf(第%d课程的总分=%.0ft平均分=%.1fn,j,s,avg);ppp();/*主函数*/main()int k,n,km;float su
16、m,average;char ch;ppp();printf(t班级成绩统计n);ppp();printf(1、统计小组一门课程的总分及平均分n,n);printf(2、统计小组若干门课程的总分及平均分n);printf(3、输出小组排序后三门课程的成绩单n);printf(请输入13之间的一个数:);scanf(%d,&k);ppp();if(k=2)printf(请输入统计的小组的人数n=);scanf(%d,&n);ppp();printf(请输入要统计的课程门数km=);scanf(%d,&km);ppp();avgevery(n,km);三、相关知识三、相关知识 嵌套调用的定义:即在
17、调用一个函数的过程中,可以再调用一个函数。main()函数调用a1函数a1函数调用a2函数a2函数结束执行main函数中调用a1函数时,即转去执行a1函数;在a1函数中调用a2函数时,又去执行a2函数;a2函数执行完毕返回a1函数断点继续执行;a1函数执行完毕返回main函数的断点继续执行,直至程序执行结束。例题例题【例5-5】函数的嵌套调用。求Cmn=m!/(n!(m-n)!)。要求用函数的嵌套方式完成。分析:假设有3人参加,C负责计算jc(k),B向C要jc(k),然后计算Cmn;A负责输入m,n二个数,然后直接问B要Cmn的结果。#include stdio.h/*c的程序为*/int
18、jc(int k)int i;int t=1;for(i=1;i=k;i+)t=t*i;return t;/*而B的程序为:*/int cmn(int m,int n)int z;z=jc(m)/(jc(n)*jc(m-n);return z;/*A的程序为:*/main()int m,n,c;printf(请输入m,n的值:);scanf(%d%d,&m,&n);c=cmn(m,n);printf(Cmn的值为%dn,c);这个程序就是A要调用B,而B要调用C,所以就称为函数的嵌套。main()int k,n,km;float sum,average;char ch;ppp();printf
19、(t班级成绩统计n);ppp();printf(1、统计小组一门课程的总分及平均分n,n);printf(2、统计小组若干门课程的总分及平均分n);printf(3、输出小组排序后三门课程的成绩单n);printf(请输入13之间的一个数:);scanf(%d,&k);ppp();if(k=2)printf(请输入统计的小组的人数n=);scanf(%d,&n);ppp();printf(请输入要统计的课程门数km=);scanf(%d,&km);ppp();avgevery(n,km);现在回头分析本任务中的具体实现:主函数调用avgevery()函数,而avgevery()函数又调用ppp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课堂 教程
限制150内