实验七 用函数实现模块化程序设计
- 格式:doc
- 大小:24.00 KB
- 文档页数:3
实验七用函数实现模块化程序设计河南工业大学C语言实验报告专业班级:学号:姓名:指导老师:朱红莉评分:实验题目:用函数实现模块化程序设计实验目的:熟练掌握函数的定义、调用、声明实验内容:P218-219 习题1、2、4实验步骤:(具体程序及运行结果)1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。
两个整数由键盘输入。
#includeint main(){int hcf(int,int);int lcd(int,int,int);int u,v,h,l;scanf("%d,%d",&u,&v);h=hcf(u,v);printf("H.C.F=%d\n",h);l=lcd(u,v,h);printf("L.C.D=%d\n",l);return 0;}int hcf(int u,int v){int t,r;if(v>u){t=u,u=v;v=t;}while((r=u%v)!=0){u=v;v=r;}return (v);}int lcd(int u,int v,int h){return (u*v/h);}执行结果:2.求方程ax*x+b*x+c=0的根,用3个函数分别求当:b*b-4*a*c大于0、等于0和小鱼0时的根并输出结果。
从主函数输出a,b,c的值。
#include#includefloat x1,x2,disc,p,q;int main(){void greater_than_zero(float,float);void equal_to_zero(float,float);void smaller_than_zero(float,float);float a,b,c;printf("input a,b,c:");scanf("%f,%f,%f",&a,&b,&c);printf("equation:%5.2f*x*x+%5.2f*x+%5.2f=0\n",a,b,c);disc=b*b-4*a*c;printf("root:\n");if(disc>0){greater_than_zero(a,b);printf("x1=%f\t\tx2=%f\n",x1,x2);}else if(disc==0){equal_to_zero(a,b);printf("x1=%f\t\tx2=%f\n",x1,x2);}else{smaller_than_zero(a,b);printf("x1=%f+%fi\tx2=%f-%fi\n",p,q,p,q);}return 0;}void great_than_zero(float a,float b){x1=(-b+sqrt(disc))/(2*a);x2=((-b)-sqrt(disc))/(2*a);}void equal_to_zero(float a,float b){x1=x2=(-b)/(2*a);}void smaller_than_zero(float a,float b){p=-b/(2*a);q=sqrt(-disc)/(2*a);}执行结果:4.写一个函数,是给定的一个3*3的二维整型数组转置,即行列互换。
第7章用函数实现模块化程序设计为什么要用函数怎样定义函数为什么要定义函数⏹C语言要求,在程序中用到的所有函数,必须“先定义,后使用”⏹指定函数名字、函数返回值类型、函数实现的功能以及参数的个数与类型,将这些信息通知编译系统。
定义函数的方法1.定义无参函数类型名函数名(){函数体}2.定义有参函数定义有参函数的一般形式为:类型名函数名(形式参数表列){函数体}3. 定义空函数定义空函数的一般形式为:类型名函数名(){}调用函数函数调用的形式⏹函数调用的一般形式为:函数名(实参表列)函数调用的形式⏹按函数调用在程序中出现的形式和位置来分,可以有以下3种函数调用方式:1. 函数调用语句⏹把函数调用单独作为一个语句如printf_star();⏹这时不要求函数带回值,只要求函数完成一定的操作2. 函数表达式⏹函数调用出现在另一个表达式中如c=max(a,b);⏹这时要求函数带回一个确定的值以参加表达式的运算3. 函数参数⏹函数调用作为另一函数调用时的实参如m=max(a,max(b,c));⏹其中max(b,c)是一次函数调用,它的值作为max另一次调用的实参函数调用时的数据传递1.形式参数和实际参数❑在调用有参函数时,主调函数和被调用函数之间有数据传递关系❑定义函数时函数名后面的变量名称为“形式参数”(简称“形参”)❑主调函数中调用一个函数时,函数名后面参数称为“实际参数”(简称“实参”)❑实际参数可以是常量、变量或表达式2. 实参和形参间的数据传递❑在调用函数过程中,系统会把实参的值传递给被调用函数的形参❑或者说,形参从实参得到一个值❑该值在函数调用期间有效,可以参加被调函数中的运算对被调用函数的声明和函数原型⏹在一个函数中调用另一个函数需要具备如下条件:(1) 被调用函数必须是已经定义的函数(是库函数或用户自己定义的函数)(2) 如果使用库函数,应该在本文件开头加相应的#include 指令(3) 如果使用自己定义的函数,而该函数的位置在调用它的函数之前,可以不声明函数的嵌套调用函数的递归调用⏹在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。
第7章⽤函数实现模块化程序设计7.1为什么要⽤函数模块化程序设计:实现编写好⼀批常⽤的函数,需要使⽤时可直接调⽤,⽽不必重复在写,减少了程序的冗余,使得程序变得更加精炼,编写⼀次,就可以多次调⽤。
函数声明的作⽤:吧有关函数的信息(函数名、函数类型、函数参数的个数与类型)通知编译系统,以便在编译系统对程序进⾏编译时,在进⾏到Main 函数中调⽤其它函数时,知道它们是定义的函数⽽不是变量或其他对象。
说明:(1) ⼀个C程序由⼀个或多个程序模块组成,每⼀个程序模块作为⼀个源程序⽂件。
对于较⼤的程序,⼀般不希望把所有的内容全放在⼀个⽂件中,⽽是将它们分别编写成若⼲个源⽂件中,由若⼲个源程序⽂件组成⼀个C程序。
(2) ⼀个源程序⽂件由⼀个胡多个函数以及其他有关内容(如指令、数据声明与定义)组成。
⼀个源程序⽂件是⼀个编译单位,在程序编译时是以源程序⽂件为单位进⾏编译的,⽽不是以函数为单位进⾏编译的。
(3) C程序的执⾏是从main函数开始的,如果在main函数中调⽤它其他函数,在调⽤后流程返回到main函数,在main函数找那个结束整个程序的运⾏。
(4) 所有函数都是平⾏的,即在定义函数时是分别进⾏的,是相互独⽴的;⼀个函数并不从属于另⼀个函数,即函数不能嵌套定义。
(5) 从⽤户使⽤的⾓度看,函数有两种形式①库函数②⽤户⾃⼰定义的函数(6) 从函数的⾓度看,函数有两种形式①⽆参函数②有参函数7.2 怎样定义函数7.2.1 为什么要定义函数定义函数包含以下内容:(1)指定函数名字,使后续可按名字调⽤(2)指定函数的类型,即函数返回值的类型(3)指定函数的参数的名字和类型,以便在调⽤函数时向它们传递数据。
⽆参参数该项不需要指定(4)指定函数应当完成什么操作,即函数的功能说明:对于C编译系统提供的库函数,是由编译系统事先定义好的,库⽂件中包括了个函数的定义。
我们不必⾃⼰定义,只须⽤#include指令把有关的头⽂件中包含到本⽂件模块中即可。
实验7 用函数实现模块化程序设计班级电信132 学号201315100209 姓名许春欢一、实验目的①掌握定义函数的方法;②掌握函数实参与形参的对应关系以及“值传递”的方式;③掌握函数的嵌套调用和递归调用的方法;④掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。
⑤学习对多文件程序的编译和运行。
二、实验内容用函数实现以下程序并调试。
1、写一个函数,求10个学生的平均成绩。
#include <stdio.h>#define N 10void main( ){float a(float y[ ],int M);int i;float cj[N],pjcj;printf("输入%d个学生的成绩:\n",N);for(i=0;i<N;i++)scanf("%f",&cj[i]);pjcj=a(cj,N);printf("平均成绩是%5.2f\n",pjcj);}float a(float y[ ],int M){int i;float pj,sum=0;for(i=0;i<10;i++)sum=sum+y[i];pj=sum/M;return(pj);}2、写一个函数,用“起泡法”对输入的10个数字由小到大排序。
#include<stdio.h>#include<string.h>int str[10];int main(){ void sort(int str[]);int i,str[10];printf("input 10 nubers:\n");for(i=0;i<10;i++)scanf("%d",&str[i]);printf("\n");sort(str);printf("string sorted:\n");for(i=0;i<10;i++)printf("%3d",str[i]);printf("\n");return 0;}void sort(int str[]){int i,j,t;for(j=0;j<9;j++)for(i=0;i<9-j;i++)if(str[i]>str[i+1]){t=str[i];str[i]=str[i+1];str[i+1]=t;}}3、求方程ax2+bx+c=0的根,用三个函数分别求当b2-4ac大于0、等于0和小于0时的根,并输出结果。
第7章用函数实现模块化程序设计Convertor7.1什么缘故要用函数7.2如何样定义函数7.3调用函数7.4对被调用函数的声明和函数原型7.5函数的嵌套调用7.6函数的递归调用7.7数组作为函数参数7.8局部变量和全局变量7.9变量的储备方式和生存期7.10 关于变量的声明和定义7.11 内部函数和外部函数7.1什么缘故要用函数问题:假如程序的功能比较多,规模比较大,把所有代码都写在main函数中,就会使主函数变得庞杂、头绪不清,阅读和爱护变得困难有时程序中要多次实现某一功能,就需要多次重复编写实现此功能的程序代码,这使程序冗长,不精炼7.1什么缘故要用函数解决的方法:用模块化程序设计的思路采纳“组装”的方法简化程序设计的过程事先编好一批实现各种不同功能的函数把它们储存在函数库中,需要时直截了当用7.1什么缘故要用函数解决的方法:用模块化程序设计的思路函数确实是功能每一个函数用来实现一个特定的功能函数的名字应反映其代表的功能7.1什么缘故要用函数在设计一个较大的程序时,往往把它分为若干个程序模块,每一个模块包括一个或多个函数,每个函数实现一个特定的功能C程序可由一个主函数和若干个其他函数构成主函数调用其他函数,其他函数也能够互相调用同一个函数能够被一个或多个函数调用任意多次7.1什么缘故要用函数mainabcfghdeie7.1什么缘故要用函数能够使用库函数能够使用自己编写的函数在程序设计中要善于利用函数,能够减少重复编写程序段的工作量,同时能够方便地实现模块化的程序设计7.1什么缘故要用函数例7.1 输出以下的结果,用函数调用实现。
******************How do you do!******************7.1什么缘故要用函数解题思路:在输出的文字上下分别有一行“*”号,明显不必重复写这段代码,用一个函数print_star来实现输出一行“*”号的功能。
再写一个print_message函数来输出中间一行文字信息用主函数分别调用这两个函数#include <stdio.h>int main(){ void print_star();void print_message();print_star(); print_message();print_star();return 0;}void print_star(){ printf(“******************\n”); }void print_message(){ printf(“ How do you do!\n”); }输出16个*输出一行文字#include <stdio.h>int main(){ void print_star();void print_message();print_star(); print_message();print_star();return 0;}void print_star(){ printf(“******************\n”); }void print_message(){ printf(“ How do you do!\n”); }声明函数定义函数#include <stdio.h>int main(){ void print_star();void print_message();print_star(); print_message();print_star();return 0;}void print_star(){ printf(“******************\n”); }void print_message(){ printf(“ How do you do!\n”); }说明:(1) 一个C程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。
实验七模块化程序设计(1)【实验目的】1.掌握C语言中定义函数的方法及其调用方法。
2.掌握函数实参与形参的对应关系以及“值传递”与“地址传递”的方式,熟练掌握模块间数据传递的方式。
3.掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法,深刻体会全局变量和局部变量、动态变量与静态变量的概念和使用方法,【上机实习指导】1.先静态阅读以下程序,然后上机运行程序,查看运行结果是否与你阅读的结果一致?不一致的原因何在?#include“stdio.h”int a=3,b=5,c=2;int f(int a,int b){a++;b--;c=a+b;return(a+b+c);}void main(){int a=4,k;k=f(a+2,b+1);printf(“\n%d,%d,%d,%d”,a,b,c,k);getchar();}2.静态分析以下程序的执行结果,然后上机运行程序,将分析结果与运行结果加以对比,从中领会静态局部变量的含义及用法。
#include“stdio.h”int f(int x){static int f=0,y=0;if(f==0)y+=2*x;else if(f==1)y+=3*x;else y+=4*x;f++;return y;}void main(){printf(“\n%d”,f(2));4printf(“\n%d”,f(2));10printf(“\n%d”,f(2));18getchar();}【自编程序上机】1.求两整数的最公约数和最小公倍数。
用一函数求最大公约数,用另一函数调用此函数求出最大公约数,并用求出的最大公约数求最小公倍数。
具体要求如下:①用全局变量。
将最大公约数与最小公倍数设为全局变量,在主函数中输出它们的值。
②不用全局变量。
最大公约数和最小公倍数由被调模块返回值。
2.计算并输出具体要求如下:①编制一个函数pq(n),返回n!值。
②编制主函数,由键盘输入m与n(m≥n≥O),调用(1)中的函数计算下列算式值。