版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第7章 函数(3)第7章 函数7.1 函数概述7.2 函数的定义7.3 函数的参数和函数的返回值7.4 函数的调用7.5 函数的嵌套和递归调用7.6 数组作为函数的参数7.7 局部变量和全局变量7.8 变量的存储类别7.9 内部函数和外部函数7.10 程序设计举例主要内容:7.9 内部函数和外部函数 一个C程序可包含多个函数,这些函数又可分布在多个程序文件中。 函数的定义是独立的,而函数之间存在着调用关系。 函数可被它所在程序中的其他函数所调用,可以指定不能被其它程序文件中的函数调用。 根据函数能否被其他源文件中的函数调用,可将函数分为两类:内部函数和外部函数。7.9.1 内部函数 内部函数是
2、只能被本程序文件中的函数调用的函数,其它程序文件的函数不能调用该函数,内部函数也称为静态函数。内部函数的定义格式如下: static 数据类型函数名(形式参数表列) 说明部分; 语句部分; 7.9.2 外部函数 外部函数是可以被程序中的其他程序文件所调用的函数。定义格式如下: extern 数据类型函数名(形式参数表列) 说明部分; 语句部分; 外部函数是C语言默认的函数类型,若省略extern,系统默认为外部函数,可以被其它程序文件中的函数所调用。 例7.16分析下列程序的运行结果。/*file1.c*/#include #include int main( ) extern char ge
3、t_ch(); /*外部函数声明*/ printf(“%c”,get_ch(); return 0; /*file2.c*/char get_ch() char ch; ch=getchar(); if (a=ch & ch=z) ch=ch-32; return(ch); 该程序由两个程序文件file1.c和file2.c组成,file2.c中定义的函数get_ch是外部函数。file1.c中定义了main函数,并对file2.c中定义的函数进行了声明。 运行该程序: 若输入:a 输出为:A 注意:若要调用其它程序文件中定义的函数,必须先对其进行声明,其声明格式为: extern 外部函数原
4、型; 对于存储类型为static类型的函数,只能被其所在的程序文件中的函数调用,其它程序文件不能使用它。若在其它程序文件中声明或调用已定义为static存储类型的函数就会发生错误。 使用内部函数,可以限定函数的作用域,即使在不同的程序文件中使用同名的内部函数,也不会相互干扰。内部函数的这个特点便于不同的用户分别编写不同的函数,而不用考虑重名问题。如何运行一个多文件的程序用#include命令将各文件包含到文件1中,即在文件1的开头加上: include “file2.c” include “file3.c” 例7.17 编写一个帮助小学生练习两位整数加法或减法的程序。由计算机随机自动出题显示在
5、屏幕上,小学生从键盘输入答案,计算机根据输入的答案显示“回答正确”或“回答错误”。可自由选择练习加法或练习减法或结束练习。练习题的数量不加限制。# include int numb() /*随机产生正整数 函数(两位数)*/ int n; mark1: n=rand(); /*rand()值是0到32767 之间的随机整数*/ if (n=100 | n10) goto mark1; return n; 7.10 程序设计举例void add() /*练习加法函数*/int a,b,c,x=1; while(x=1) a=numb(); b=numb(); printf(%d+%d=,a,b)
6、; scanf(%d,&c); if (a+b=c) printf(回答正确!n); else printf(回答错误!n); printf(“若想停止练习加法请输入0, 否则请输入1。n); scanf(%d,&x); void sub() /*练习减法函数*/int a,b,c,x=1; while(x=1) mark2:a=numb(); b=numb(); if (ab) goto mark2; printf(%d-%d=,a,b); scanf(%d,&c); if (a-b=c) printf(回答正确!n); else printf(回答错误!n); printf(若想停止练习减
7、法请输入0, 否则请输入1。n); scanf(%d,&x); return;main()int d; srand(time(NULL); /*设置随机数种子为当前时间*/ while (1) printf(-小学生两位数加、减法练习软件-n); printf(-1、练习两位数加法-n); printf(-2、练习两位数减法-n); printf(-3、结束练习- -n); printf(-请输入1或2或3-:); scanf(%d,&d); if (d=1) add(); else if (d=2) sub(); else if (d=3) printf(-本次练习结束了,再见!- n);
8、break; else printf(-输入错误!请重新输入!- n); return 0; 例7.18 某个班级有若干名学生,请编写完成下面任务的程序:(1)输入每个学生的姓名、某一门课程的平时成绩、期中成绩和期末成绩。(2)计算并输出总评成绩(总评成绩=平时成绩*0.1+期中成绩*0.3+期末成绩*0.6)。(3)根据总评成绩对学生分类统计,即统计总评成绩90的人数、总评成绩80且90的人数、总评成绩70且80的人数、总评成绩60且70的人数、总评成绩60的人数。(4)根据输入的学生姓名,查找并打印该学生的各项成绩。#include #define SIZE 100 /*不妨设班级学生数少
9、于100*/void inputdata( ); /*函数声明*/void calculdata( ); /*函数声明*/void statisdata( ); /*函数声明*/void querydata ( ); /*函数声明*/float scoreSIZE4; /* score存储每个学生平时、期中、期末和总评成绩*/char nameSIZE15; /* name存储每个学生姓名*/int sum; /* sum存储实际学生人数*/int main() int choo; printf(“请输入实际学生人数:”); scanf(“%d”, &sum); while(1) printf
10、(“请选择下面的某一项任务:”); printf(“n(1)输入每个学生的姓名、平时成绩、期中成绩、期末成绩。”); printf(“n(2)计算并输出每个学生的总评成绩。”); printf(“n(3)根据总评成绩对学生分类统计,输出各分数段的学生数。”); printf(“n(4)根据输入的学生姓名,查找并打印该学生的各项成绩。”); printf(“n(5)结束程序运行。”); printf(“n请输入你的选择(1或2或3或4或5):”); scanf(“%d”, &choo); if (choo=5)break; switch(choo) case 1 : inputdata( );
11、break; /*调用输入学生姓名成绩函数*/ case 2 : calculdata( ); break; /*调用计算总评成绩函数*/ case 3 : statisdata( ); break; /*调用统计各分数段人数函数*/ case 4 : querydata( ); break; /*调用根据姓名查找函数*/ printf(“n程序运行结束,再见。”); return 0; void inputdata( ) /*输入学生姓名成绩函数*/ int i;for(i=0;isum;i+) printf(“n请输入学生的姓名:”); gets(namei); printf(“请顺序输入
12、学生平时、期中、期末成绩 (例如98,85,96):”); scanf(“%f,%f,%f”, &scorei0, &scorei1,&scorei2); return; void calculdata( ) /*计算总评成绩函数*/ int i; for(i=0;isum;i+) scorei3= 0.1*scorei0+ 0.3*scorei1 + 0.6*scorei2; printf(“n每个学生总评成绩如下:n”); for(i=0;isum;i+) printf(“%s:%fn”,namei,scorei3); return; void statisdata( ) /*统计各分数段
13、人数函数*/ int i,d, grade5=0; /* grade存储分类统计结果(各分数段人数)*/ for (i=0;isum;i+) d=(int)(scorei3/10); switch(d) case 10 : case 9 : grade4=grade4+1;break; case 8 : grade3=grade3+1;break; case 7 : grade2=grade2+1;break; case 6 : grade1=grade1+1;break; default : grade0=grade0+1; printf(“n总评成绩90的人数是:%d”, grade4 )
14、; printf(“n总评成绩80且90的人数是:%d”, grade3 ); printf(“n总评成绩70且80的人数是:%d”, grade2 ); printf(“n总评成绩60且70的人数是:%d”, grade1 ); printf(“n总评成绩60的人数是:%d”, grade0 ); return; void querydata( ) /*根据姓名查找函数*/ char lookname20; int i; printf(“n请输入姓名:”); gets(lookname); for(i=0;isum;i+) /*根据输入的姓名,查找并打印该学生各项成绩*/ if (strcmp(namei,lookname)=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度金融机构不良资产置换担保合同3篇
- 2025年度医疗健康大数据分析与应用合同3篇
- 2024版公司为员工提供住房补助协议样本版B版
- 二零二五年环保监测系统采购及数据分析合同3篇
- 2025版养老机构托养入住协议书参考3篇
- 全新2025年度体育场馆绿色能源采购合同:体育场馆与能源供应商之间的合作协议3篇
- 2024网络游戏开发与分成合同
- 现代科技在小学低年级语文教学中的应用
- 教育领域中自评体系的创新应用
- 2025年度生态旅游区建筑工程施工合同4篇
- (一模)临汾市2025年高考考前适应性训练考试(一)语文试卷(含答案)
- 2024-2025学年沪科版数学七年级上册期末综合测试卷(一)(含答案)
- 2023年广东省公务员录用考试《行测》真题及答案解析
- 2024年公证遗产继承分配协议书模板
- 燃气经营安全重大隐患判定标准课件
- 深圳小学英语单词表(中英文)
- 护理质量反馈内容
- 抖音搜索用户分析报告
- 钻孔灌注桩技术规范
- 2023-2024学年北师大版必修二unit 5 humans and nature lesson 3 Race to the pole 教学设计
- 供货进度计划
评论
0/150
提交评论