南昌大学C++实验5 函数
c语言实验报告 函数

c语言实验报告函数C语言实验报告:函数引言:C语言是一种广泛应用于软件开发领域的高级编程语言,其强大的功能和灵活性使得它成为许多程序员的首选。
在C语言中,函数是一种非常重要的概念和工具,它可以帮助我们更好地组织和管理代码,提高代码的可读性和可维护性。
本实验报告将深入探讨C语言中函数的使用方法和特性。
一、函数的定义和声明函数是C语言中的一个基本概念,它由一组语句组成,用于完成特定的任务。
在使用函数之前,我们需要先进行函数的定义和声明。
函数的定义包括函数的名称、参数列表和函数体,而函数的声明则是告诉编译器函数的名称和参数列表。
函数的定义和声明通常放在程序的开头部分或者头文件中,以便其他部分的代码可以调用这些函数。
二、函数的参数传递在C语言中,函数的参数传递可以通过值传递和引用传递两种方式进行。
值传递是指将实际参数的值复制给形式参数,函数内部对形式参数的修改不会影响到实际参数。
而引用传递则是指将实际参数的地址传递给形式参数,函数内部对形式参数的修改会影响到实际参数。
根据实际需求,我们可以选择不同的参数传递方式。
三、函数的返回值函数的返回值是指函数执行完毕后返回给调用者的值。
在C语言中,函数的返回值可以是任意类型的数据,包括整型、浮点型、字符型等。
通过使用return语句,我们可以将需要返回的值传递给调用者。
在函数的声明和定义中,我们需要指定函数的返回类型,以便编译器正确处理函数的返回值。
四、函数的递归调用递归是指函数调用自身的过程,它在解决某些问题时非常有效。
在C语言中,我们可以使用递归来实现一些复杂的算法和数据结构。
递归函数必须包含一个终止条件,以避免无限递归的情况发生。
在编写递归函数时,我们需要仔细考虑递归的边界条件和递归的终止条件,以确保函数能够正确地执行。
五、函数的库C语言提供了许多常用的函数库,可以帮助我们更方便地进行开发和编程。
这些函数库包括数学函数库、字符串函数库、输入输出函数库等。
通过调用这些函数库中的函数,我们可以实现更复杂的功能和算法。
c语言实验报告 函数

c语言实验报告函数标题:C语言实验报告函数摘要:本实验报告主要介绍了C语言中函数的概念、定义和使用方法。
通过实验展示了如何在C语言中定义函数、调用函数以及函数的参数传递和返回值。
通过本实验的学习,读者将能够掌握C语言中函数的基本用法,为今后的编程实践奠定基础。
关键词:C语言、函数、参数传递、返回值引言:函数是C语言中的重要概念,它可以将一段代码封装成一个独立的模块,方便代码的复用和维护。
本实验将通过具体的示例来介绍C语言中函数的定义和使用方法,帮助读者更好地理解和掌握函数的概念和用法。
一、函数的定义和声明在C语言中,函数的定义包括函数名、参数列表、返回类型和函数体。
函数的声明包括函数名、参数列表和返回类型,用于告诉编译器函数的存在和类型信息。
下面是一个简单的函数定义和声明的示例:```c// 函数声明int max(int a, int b);// 函数定义int max(int a, int b) {return a > b ? a : b;}```二、函数的调用在C语言中,可以通过函数名和参数列表来调用函数。
例如,我们可以通过max函数来比较两个数的大小:```cint a = 10, b = 20;int result = max(a, b);printf("The max number is %d\n", result);```三、参数传递和返回值函数可以通过参数列表接收外部传入的数据,也可以通过return语句返回计算结果。
例如,下面的函数用于计算两个数的和:```cint add(int a, int b) {return a + b;}```四、实验结果通过本次实验,我们成功掌握了C语言中函数的定义、声明、调用、参数传递和返回值的基本用法。
在今后的编程实践中,我们可以更加灵活地使用函数来组织和管理代码,提高代码的复用性和可维护性。
结论通过本次实验,我们对C语言中函数的概念和用法有了更深入的了解。
南昌大学计算机数值分析实验报告

实验报告实验课程:数值分析学生姓名:郑俊学号:6100410235专业班级:计算机科学与技术103班2012年 06 月 6日目录一、用样条插值法差值的方法生成字体T的轮廓 (3)二、用样条插值法差值的方法生成字体5的轮廓 (10)三、用最小二乘法估计原子弹爆炸的能量 (14)南昌大学实验报告一姓名: 郑俊 学 号: 6100410235 专业班级:计算机科学与技术103班 实验类型:□验证 □ 综合■设计 □创新 实验日期:2012-5 实验成绩:一、 实验目的1:用样条插值的方法生成字体T 的轮廓 2:C 语言用Bezier 曲线生成并编写程序二、 实验基本原理和内容P 0x P 0y P 1x P 1y P 2x P 2y P 3x P 3y 237 620 237 620 237 120 237 120 237 120 237 35 226 24 143 19 143 19 143 19 143 0 143 0 143 0 143 0 435 0 435 0 435 0 435 0 435 19 435 19 435 19 353 23 339 36 339 109 339 109 339 108 339 620 339 620 339 620 507 620 529 602 552 492 552 492 552 492 576 492 576 492 576 492 576 492 570 662 570 662 570 662 570 662 6 662 6 662 6 662 6 662 0 492 0 492 0 492 0 492 24 492 24 492 24 492 48 662 71 620 183 620 183620183620237620237620Bezier 曲线生成:1、确定曲线的阶次; 2 计算Bernstein 基函数的表达式:2、生成字体T 共分成15段,每段用了三次的代数方程,用Bezier 曲线生成:当n=3时303333,3212233,2221133,1330033,0)1()()1(3)1()()1(3)1()()1()1()(t t t C t B t t t t C t B t t t t C t B t t t C t B =-=-=-=-=-=-=-=nk t t t k n k n t t C t B kn k k n kk n n k ,,1,0]1,0[)1()!(!!)1()(, =∈--=-=--其中]1,0[∈t)()()()()(3,333,223,113,00t B P t B P t B P t B P t P +++=3、 把Bezier 曲线中的Pk 写成分量坐标的形式4 、确定一合适的步长;控制t 从0到1变化,求出一系列(x,y)坐标点;将其用小线段顺序连接起来。
南昌大学(-C )实验题目及要求

实验报告实验课程:C++ 面向对象程序设计学生姓名:***学号:**********专业班级:计算机软件0812010年11月 11日南昌大学实验报告学生姓名:慎镛日学号:8000608039 专业班级:计算机软件081实验类型:■验证□综合□设计□创新实验日期:2010.11.12 实验成绩:一、实验项目名称:小型公司人员管理二、实验目的:1、理解继承在面向对象程序设计中的重要作用;2、理解继承和派生的概念;3、掌握通过继承派生出一个新类的方法;4、进一步学习简单面向对象程序的编写;5、理解多态的概念;6、理解虚函数的作用;7、掌握虚函数的定义和使用方法;8、学习实现多态;9、了解纯虚函数和抽象类的概念和使用方法;三、实验内容1、题目内容描述2、输入和输出信息描述及数据类型确定;(1)、输入数据序号输入数据描述数据类型12………… ……(2)、输出数据序号输出数据描述数据类型12………… ……(3)、自定义数据类型如果程序中有自定义数据类型,如枚举、结构体、联合体等,请代码方式列出并概要解释其作用。
3、类的解释(1)、类的定义例如:类 Point 成员数据定义成员数据作用描述int m_X 2维坐标点的 X坐标…………成员函数定义成员函数功能描述void SetX(int x); 设置 2 维坐标点 X坐标…………(2)、类之间的关系4、程序调试错误错误信息是否解决方法序号列出你认为最重要的10 个错误信息解决(简要描述)1 ……2 ……3 …………5、测试与结果分析(1)、测试数据与结果(至少两组)源文件名可执行文件名测试序号测试输入数据测试输出结果是否正确结果分析三、实验总结1、问题总结1)结合本次实验目的,熟悉或掌握了那些内容。
程序是否实现并测试通过2)代码是否独立完成3)那些方面的知识理解或掌握的不到位;程序存在什么问题4)对于程序存在的问题如何去改进,写出其方法2、经验总结1)简述你在本题目积累了在开发工具使用、编成程序、调试程序、测试程序方面的实践经验四、列出源代码源文件:employee.cpp#include"employee.h"#include<iostream>using namespace std;employee::employee(char*n,int nu,char *s,int p,int sa,int y,int m,int d){strcpy(name,n);num=nu;strcpy(sex,s);position=p;salary=sa;bdate.setyear(y);bdate.setmonth(m);bdate.setday(d);}int employee::getyear(){return bdate.gety();}int employee::getmonth(){return bdate.getm();}int employee::getday(){return bdate.getd();}char* employee::getname(){return name;}int employee::getnum(){return num;}char* employee::getsex(){return sex;}int employee::getposition(){return position;}int employee::getsalary(){return salary;}inoutdata.cpp:#include"main.h"void inoutdata(int n){ofstream outdata("data.txt",ios::app);char name[20],sex[4];int num,salary,year,month,day,area;cout<<"请输入姓名:";cin>>name;outdata<<"姓名:"<<name<<"\t";cout<<"请输入编号:";cin>>num;outdata<<"编号:"<<num<<"\t";cout<<"请输入性别:";cin>>sex;outdata<<"性别:"<<sex<<"\t";outdata<<"职位:"<<p[n-1]<<"\t";cout<<"请输入工资或销售量:";cin>>salary;cout<<"请输入哪一年出生:";cin>>year;cout<<"请输入出生月份:";cin>>month;cout<<"请输入出生在哪天:";cin>>day;outdata<<"生日:"<<year<<"-"<<month<<"-"<<day<<"\t";if(n==1){manager m(name,num,sex,n-1,salary,year,month,day);outdata<<"薪水:"<<m.getpay()<<"\t";m.display();}if(n==2){cout<<"请选择部门(1、华北,2、华东):"<<endl;cin>>area;salesmanager sm(name,num,sex,n-1,salary,year,month,day,area-1);outdata<<"部门:"<<ar[area-1]<<"\t";outdata<<"薪水:"<<sm.getsmpay()<<"\t";sm.display();}if(n==3){cout<<"请选择部门(1、华北,2、华东):"<<endl;cin>>area;salesman s(name,num,sex,n-1,salary,year,month,day,area-1);outdata<<"部门:"<<ar[area-1]<<"\t";outdata<<"薪水:"<<s.getpay()<<"\t";s.display();}if(n==4){technician t(name,num,sex,n-1,salary,year,month,day);outdata<<"薪水:"<<t.getpay()<<"\t";t.display();}outdata<<"\n";outdata.close();}main.cpp:#include"main.h"void inout(){int i;while(1){cin>>i;if(i!=1&&i!=2&&i!=3&&i!=4)return;inoutdata(i);};}void outf(){char a;cout<<"是否要输出所有数据(y/n)?"<<endl;cin>>a;if(a!='y'&&a!='Y')return;ifstream indata;indata.open("data.txt");while(indata.get(a)){cout<<a;}indata.close();}void main(){cout<<"请选择要输入的数据:\n1、总经理\n2、销售经理\n3、销售员\n4、技术员\n"<<endl;inout();outf();}manager.cpp:#include"manager.h"#include<iostream.h>manager::manager(char*n,int nu,char *s,int p,int sa,int y,int m,int d):employee(n,nu,s,p,sa,y,m,d) {mpay=sa;}manager::getpay(){return mpay;}void manager::pay(){mpay=mpay;}void manager::display(){cout <<"名字:"<<getname()<<endl;cout <<"编号:"<<getnum()<<endl;cout <<"性别:"<<getsex()<<endl;cout <<"职位:"<<p[getposition()]<<endl;cout <<"出生日期:"<<getyear()<<"年"<<getmonth()<<"月"<<getday()<<"日"<<endl;cout <<"工资:"<<getpay()<<endl;cout<<endl;}salesman.cpp:#include"salesman.h"#include<iostream.h>salesman::getsale(){return sale;}salesman::getpay(){pay();return spay;}salesman::salesman(char*n,int nu,char* s,int p,int sa,int y,int m,int d,int a):employee(n,nu,s,p,sa,y,m,d){sale=sa;area=a;}void salesman::setsale(int p){sale=p;}void salesman::pay(){spay=getsale()*4/100;}char *salesman::getarea(){return ar[area];}void salesman::display(){cout <<"名字:"<<getname()<<endl;cout <<"编号:"<<getnum()<<endl;cout <<"性别:"<<getsex()<<endl;cout <<"职位:"<<p[getposition()]<<endl;cout <<"出生日期:"<<getyear()<<"年"<<getmonth()<<"月"<<getday()<<"日"<<endl;cout <<"工资:"<<getpay()<<endl;cout<<"所属部门:"<<getarea()<<endl;cout<<endl;}salesmanager.cpp:#include"salesmanager.h"#include<iostream.h>salesmanager::salesmanager(char*n,int nu,char* s,int p,int sa,int y,int m,int d,int a):salesman(n,nu,s,p,sa,y,m,d,a),manager(n,nu,s,p,sa,y,m,d){sale=sa;}salesmanager::getsmpay(){pay();return smpay;}salesmanager::getmpay(){return manager::getpay();}void salesmanager::setsale(int s){sale=s;}void salesmanager::setpay(int g){gpay=g;}void salesmanager::pay(){smpay=5000+sale*5/1000;}char *salesmanager::getare(){return getarea();}void salesmanager::display(){cout <<"名字:"<<salesman::getname()<<endl;cout <<"编号:"<<salesman::getnum()<<endl;cout <<"性别:"<<salesman::getsex()<<endl;cout <<"职位:"<<p[salesman::getposition()]<<endl;cout <<"出生日期:"<<salesman::getyear()<<"年"<<salesman::getmonth()<<"月"<<salesman::getday()<<"日"<<endl;cout <<"工资:"<<getsmpay()<<endl;cout<<"所属部门:"<<getare()<<endl;cout<<endl;}technician.cpp:#include"technician.h"#include<iostream.h>technician::technician(char*n,int nu,char* s,int p,int sa,int y,int m,int d):employee(n,nu,s,p,sa,y,m,d){time=sa;}technician::gettime(){return time;}technician::getpay(){pay();return tpay;}void technician::pay(){tpay=time*25;}void technician::display(){cout <<"名字:"<<getname()<<endl;cout <<"编号:"<<getnum()<<endl;cout <<"性别:"<<getsex()<<endl;cout <<"职位:"<<p[getposition()]<<endl;cout <<"出生日期:"<<getyear()<<"年"<<getmonth()<<"月"<<getday()<<"日"<<endl;cout <<"工资:"<<getpay()<<endl;cout<<endl;}头文件:empolyee.h:#ifndef empolyee_h#define empolyee_hstatic char p[4][20]={{"总经理"},{"销售经理"},{"销售员"},{"技术人员"}};class date //定义时间类{private:int year,month,day; //定义时间类的年月日public:date(){} //时间类的构造函数void setyear(int y=1988){year=y;}void setmonth(int m=5){month=m;}void setday(int d=16){day=d;}int gety(){return year;}int getm(){return month;}int getd(){return day;}};class employee //基类,被雇佣者{private:char name[20]; //名字int num; //编号char sex[4]; //性别date bdate; //出生时间int position; //职位int salary; //薪水public:employee(){} //基类构造函数employee(char*n,int nu,char* s,int p,int sa,int y,int m,int d);//基类构造函数的重载int getyear();int getmonth();int getday();char* getname();int getnum();char* getsex();int getposition();int getsalary();virtual void promote(){} //虚升职函数virtual void pay()=0; //纯虚的计算工资函数virtual void display()=0; //纯虚的显示函数};#endifmain.h:#include<iostream>#include<fstream>using namespace std;#include"employee.h"#include"salesman.h"#include"manager.h"#include"salesmanager.h"#include"technician.h"void inoutdata(int);manager.h:#include"employee.h"#ifndef manager_h#define manager_hclass manager:public employee //定义经理类,继承employee类{private:int mpay; //定义经理类的工资public:manager(char*n,int nu,char *s,int p,int sa,int y,int m,int d);virtual void promote(){}int getpay();virtual void pay();virtual void display();};#endifsalesman.h#include"employee.h"#ifndef salesman_h#define salesman_hstatic char ar[4][20]={ //定义储存部门的数组,以便后面你用整数来表示部门{"华北地区"},{"华东"}};class salesman:public employee //定义销售员的类,继承employee类{private:int sale,spay; //定义销售量,和销售员的工资变量int area; //定义销售员的部门public:salesman(char*n,int nu,char* s,int p,int sa,int y,int m,int d,int a);int getsale();int getpay();char* getarea();void setsale(int);virtual void promote(){} //虚升职函数virtual void pay(); //虚计算工资的函数virtual void display(); //虚显示函数};#endifsalesmanager.h:#include"salesman.h"#include"manager.h"#ifndef salesmanager_h#define salesmanager_hclass salesmanager:public salesman,public manager //定义销售经理的类,继承销售员类和经理类{private:int smpay,sale,gpay;public:salesmanager(char*n,int nu,char *s,int p,int sa,int y,int m,int d,int a);int getsmpay(); //获得销售经理的工资int getmpay(); //获得销售经理的固定工资void setsale(int); //设置销售经理的总销售量void setpay(int); //设置销售经理的固定工资char* getare(); //获得销售经理的部门virtual void promote(){} //虚升职函数void pay(); //销售经理的计算工资的函数void display(); //销售经理的显示函数};#endiftechnician.h:#include"employee.h"#ifndef technician_h#define technician_hclass technician:public employee //定义技术员的类,继承employee类{private:int time,tpay; //定义技术员的工作时间和工资public:technician(char*n,int nu,char* s,int p,int sa,int y,int m,int d);int gettime(); //获得技术员的工作时间int getpay(); //获得技术员的工资virtual void promote(){} //虚升职函数virtual void pay(); //销售经理的计算工资的函数virtual void display(); //销售经理的显示函数};#endif五、参考文献。
C语言实验报告函数

实验名:函数的定义及调用一、实验目的1、掌握C语言函数定义及调用的规则。
2、理解参数传递的过程。
二、实验内容(一))题目11、题目内容描述1、上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。
main(){int,y;printf(“%d\n”,sum(x+y));int sum(a,b){int a,b;return(a+b);}}2、编写并调试一个求n!(n为整数)的递归函数,希望能在程序运行过程中动态地显示递归函数被调用的轨迹。
三、分析讨论1、针对以上实验内容写出相应的参数传递过程并分析结果。
2、讨论参数的传递的几种形式。
2、输入和输出信息描述及数据类型确定;、输入数据(1)序号输入数据描述数据类型1 x,y int2 a,b int(2)输出数据序号输出数据描述数据类型1 x+y int3、程序源代码(填写程序调试正确后的代码)#include <stdio.h>int main(){int sum(int a,int b); //对被调用函数sum 的声明int x,y,z;scanf("%d,%d",&x,&y);z=sum(x,y); //调用sum 函数,将其值赋给zprintf("%d\n",z); //输出函数结果zreturn 0;//返回值为0}int sum(int a,int b) //定义sum函数{return(a+b); //将a+b的值作为返回值返回到调用sum的位置}4、程序调试错误序号错误信息(列出出错语句以及出错提示)是否解决解决方法1 In function 'main':|int,y;是改为int x,y;2 error: stray '\241' in program|error: expected expressionbefore '%' token|error: stray '\' in program|printf(“%d\n”,sum(x+y));是将整段改为int sum(int a , int b);int x,y,z;z=sum(x,y);printf("%d\n",z);3 error: 'a' redeclared asdifferent kind of symbol|error: 'b' redeclared asdifferent kind of symbol|int a,b;是去掉整句话4 warning: 'x' is useduninitialized in this function[-Wuninitialized]|是加上scanf("%d,%d",&x,&y);5 error: static declaration of'sum' follows non-staticdeclaration|是将int及后面的语句块都移到main外面5、测试与结果分析(1)、测试数据与结果测试序号测试用例选取原因测试输入数据测试输出结果是否正确结果分析1 测试用例4,5 9 是可运算范围内2 测试用例55555,7933 63488 是可运算范围内3 测试用例-89,-79 -168 是可运算范围内(2)、相关问题回答2、编写并调试一个求n!(n为整数)的递归函数,希望能在程序运行过程中动态地显示递归函数被调用的轨迹。
C_lab5-2_函数(下)

实验5-2函数(下)【实验目的】1.正确认识变量的作用域和生存期。
2.掌握变量的动态存储和静态存储3.掌握局部变量和全局变量的作用范围【实验内容】Part1:基础练习(课堂练习)1.以下说法不正确的是 D 。
A.在不同函数中可以使用相同名字的变量B.形式参数是局部变量C.在函数内声明的变量只在本函数范围内有效D.在函数内某语句块中声明的变量在本函数范围内均有效2.关于局部变量,下列说法正确的是C。
A.同一程序中的函数都可以访问B.函数中变量声明处以下的任何语句都可以访问C.复合语句(语句块)中变量声明处以下的任何块内语句都可以访问D.局部变量可用于函数之间传递数据3.关于全局变量,下列说法正确的是D。
A.任何全局变量都可以被任何程序文件中的任何函数访问。
B.任何全局变量都只能被声明它的程序文件中的函数访问。
C.任何全局变量都只能被声明它的函数中的语句访问。
D.全局变量可用于函数之间传递数据。
4.不进行初始化即可自动获得初值0的变量包括D。
A.任何用static修饰的变量。
B.任何在函数外定义的变量。
C.局部变量和用static修饰的全局变量。
D.全局变量和用static修饰的局部变量。
5.关于全局变量,下列说法正确的是D。
A.全局变量必须在文件的首部声明,位于任何函数之前。
B.全局变量可以在函数中声明。
C.全局变量可以在任意位置声明。
D.全局变量的作用范围从声明处开始,到文件尾结束6.如果在一个函数的复合语句中声明了一个变量,则以下关于该变量说法正确的是:A 。
A.只在该复合语句中有效B.在该函数中有效C.在本程序范围内均有效D.为非法变量7.函数中声明有局部变量,若声明中带有static,则该局部变量采用静态存储方式,在静态存储区分配空间,若函数中未显式设定初始值,则系统将其自动初始化,函数被调用结束时,该空间是/否释放;8.若声明时不带有static,则该局部变量采用动态存储方式,在动态存储区(系统堆栈区)分配空间,程序中必须显式设定初始值,当该函数被调用结束时,该变量所占用空间是/否?释放。
C语言实验5-8答案(函数与数组)

任务
1.fact(j-1)*j
2.gcd(n,m%n)
m<n
3.//for(j=0;j<=n-i;j++)
//printf("");//删除这两行,因为顶格输出,不要空行了。
y==1||y==x
z=c(x-1,y-1)+c(x-1,y)
4.程序代码如下:
#include<stdio.h>
fib(int n)
#include <stdio.h>
main( )
{double fun(int m);//先调用再定义,且不是能缺省的int型,请加上函数说明。
int m;
printf("\n input m:");
scanf("%d",&m);
printf("\n t= %12.10lf \n",fun(m));
j=2
j—
i+j==2
输出为:a=13,b=14
4.i=1
x[i-1]
5.m<1000
m/10%10或m/10-x*10
a[i]=m
m<i
输出结果为:153 370 371 407
6.a
a
sum/n
x[i]<ave
任务
1.‘\0’
str1[i]-str2[i]
2.c[k]=a[i++];
c[k]=b[j++];
return yes;
}
main( )
{
int n;
scanf("%d",&n);
C语言在线实验第5次(第七章函数)-题目与答案

第五次实验题目-第七章函数教学目标31.一元二次方程的系数:a、b、c由主函数输入,编写函数求方程的根。
#include <stdio.h>#include <math.h>void root(double a, double b, double c){ double delta,x1,x2,m,n;if (fabs(a) <= 1e-6){if (fabs(b) <= 1e-6)puts("Not an equation");elseprintf("x=%.2lf",-c/b);return;}else{delta=b*b - 4*a*c;m = -b / (2*a);n = sqrt(fabs(delta)) / (2*a);x1 = m + n;x2 = m - n;if (fabs(delta) <= 1e-6)printf("x1=%.2lf, x2=%.2lf", x1, x1);else if (delta < 0)printf("x1=%.2lf+%.2lfi, x2=%.2lf-%.2lfi",m,n,m,n);elseprintf("x1=%.2lf, x2=%.2lf", x1, x2);}}int main( ){ double a,b,c;scanf("%lf%lf%lf",&a,&b,&c);root(a,b,c);return 0;}教学目标32.输入一串字符,统计其中英文字母的个数,编写统计英文字母个数的函数。
#include<stdio.h>int numberOfLetter(char str[]) {int i=0;int num = 0;//统计字母个数while (str[i]!=’\0’) {if ((str[i]>='A'&& str[i]<='Z')||( str[i]>='a'&& str[i]<='z')) num++;i++;}return num;}int main( ) {char str[100];int letterNum;printf("Enter a string: ");gets(str);letterNum = numberOfLetter(str);printf("Number of letters is %d.\n", letterNum);return 0;}教学目标33. 求100以内所有素数的和。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合□√设计□创新实验日期:实验成绩:一、实验名称实验5 函数二、实验目的1.掌握函数的定义方法、函数的调用方法、参数说明以及返回值。
掌握实参与形参的对应关系以及参数之间的“值传递”的方式;掌握函数的嵌套调用及递归调用的设计方法;2.掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法;3.在编程过程中加深理解函数调用的程序设计思想。
二.实验内容1.多模块的程序设计与调试的方法;2.函数的定义和调用的方法;3.用递归方法进行程序设计。
三.实验环境PC微机DOS操作系统或Windows 操作系统Turbo C 程序集成环境四.实验内容1.编写一个函数primeNum(int num),它的功能是判别一个数是否为素数。
如果num 是素数,返回该数;否则返回0值。
要求:(1)在主函数输入一个整数num,调用该函数后,输出num是否是素数的信息。
输出格式为:num is prime或num is not prime。
(2)分别输入以下数据:0,1,2,5,9,13,59,121,运行程序并检查结果是否正确。
2.编写一个计算组合数的函数combinNum(int m,int n)。
计算结果由函数返回。
计算组合数的公式是:c(m,n)=m!/(n!*(m-n)!)要求:(1)从主函数输入m 和n 的值。
对m>n 、m<n 和m=n 的情况作分别处理后调用函数combinNum(m,n),在主函数内输出结果值。
(2)对m>n 、m<n 和m=n 的情况各取一组数据进行测试,检查程序的正确性。
(3)修改程序,把两个函数分别放在两个程序文件中,作为两个文件进行编译、链接和运行。
3.已知xsh x sh shx sh y 32)1(++=,其中,sh 为双曲正弦函数,即2)(tt e e t sh --=,编写一个程序,输入x 的值,求y 的值。
4.整数a,b 的最大公约数是指既能被a 整除又能被b 整除的最大整数。
整数a,b 的最小公倍数是指既是a 的倍数又是b 的倍数的最小整数。
编写两个函数,一个函数gcd()的功能是求两个整数的最大公约数,另一个函数mul()的功能是求两个整数的最小公倍数。
要求:(1)两个整数在主函数中输入,并在主函数中输出求得的最大公约数和最小公倍数。
(2)首先将两个整数a 和b 作为实参传递给函数gcd (),求出的最大公约数后,由函数gcd ()带值返回主函数,然后将最大公约数与两个整数a 、b 一起作为实参传递给函数mul (),以此求出最小公倍数,再由函数mul ()带值返回主函数。
(3)提示:求最大公约数一般采用辗转相除法(Euclid 算法),方法如下:分别让变量m 和n 存储两个数的值(这里是a 和b)。
如果n 为0,那么停止操作,m 中的值就是最大公约数(GCD ),否则计算m 除以n 的余数,把n 保存到m 中,并把余数保存到n 中。
然后重复上述过程,每次都先判断n 是否为0.五、实验数据及处理结果[习题1] 编写一个函数primeNum(int num),它的功能是判别一个数是否为素数。
如果num是素数,返回该数;否则返回0值。
[问题分析或算法设计][数据需求][程序实现]#include <iostream>using namespace std;int primeNum(int num){for(int i=2;i*i<=num;i++)//i 不需要遍历到num{if(!(num%i))//如果能整除则不为素数return 0;}return num;}void main(){int i;cout<<"请输入一个整数:";cin>>i;int a = primeNum(i);if(a)cout<<i<<"是素数"<<endl;elsecout<<i<<"不是素数"<<endl;}[程序测试][习题2] 编写一个计算组合数的函数combinNum(int m,int n)。
计算结果由函数返回。
[问题分析或算法设计][数据需求][程序实现]#include <iostream>using namespace std;int combinNum(int m,int n){int ans=1;for(int i=m;i>=m-n+1;i--)//从m一直乘到m-n+1ans*=i;for(int i=n;i>1;i--)//除以n的阶乘ans/=i;return ans;}void main(){int m,n;cout<<"请输入两个整数m,n:";cin>>m>>n;if(m<n)cout<<"m应该大于n!"<<endl;else if(m>n)cout<<combinNum(m,n)<<endl;elsecout<<1<<endl;}[程序测试][习题3] 已知xsh x sh shx sh y 32)1(++=,其中,sh 为双曲正弦函数,即2)(tt e e t sh --=,编写一个程序,输入x 的值,求y 的值。
[问题分析或算法设计][数据需求][程序实现]#include <iostream>#include <cmath>using namespace std;double fun(int x){return sinh(1+sinh(x))/(sinh(2*x)+sinh(3*x));}//sinh 为库函数中的双曲正弦void main(){int a;cout<<"请输入一个数:";cin>>a;cout<<fun(a)<<endl;}[程序测试][习题4] 整数a,b 的最大公约数是指既能被a 整除又能被b 整除的最大整数。
整数a,b 的最小公倍数是指既是a 的倍数又是b 的倍数的最小整数。
编写两个函数,一个函数gcd()的功能是求两个整数的最大公约数,另一个函数mul()的功能是求两个整数的最小公倍数。
[问题分析或算法设计][数据需求][程序实现]#include <iostream>using namespace std;int gcd(int a,int b){int t;while(b){t=a;a=b;b=t%b;}return a;}int mul(int a,int b,int c){return a*b/c;}void main(){int a,b,c,d;cout<<"请输入两个数:";cin>>a>>b;c=gcd(a,b);d=mul(a,b,c);cout<<"最大公约数为"<<c<<" 最小公倍数为"<<d<<endl;} [程序测试]六.简答题1.小结函数的定义及调用方法;定义一个函数要有返回值和参数。
同时返回值和参数都可以是空void类型。
在返回值不为void的时候,一定要在函数内部出现return语句。
调用的时候,直接写出函数名及其参数就可以。
2.小结函数中形参和实参的结合规则;只需要变量的类型相同,对应的顺序相同。
变量名无需相同。
3.编写和调试包含多模块的程序时,容易出现什么样的错误?根据自己的实践总结一下。
容易出现的错误的,变量或函数命名重复。
还有就是找不到标识符。
七、选做题1.根据实验内容第4题,修改函数gcd(),函数gcd()采用递归调用的编写方法,两个整数a和b的最大公约数的递归公式是:如果b=0,那么gcd(a,b)=x,否则gcd(a,b)= gcd(b,a%b)。
然后将最大公约数与两个整数a、b一起传递给函数mul(),求出最小公倍数,再由函数mul()将最小公倍数返回主函数。
#include <iostream>using namespace std;int gcd(int a,int b){return b?gcd(b,a%b):a;}int mul(int a,int b,int c){return a*b/c;}void main(){int a,b,c,d;cout<<"请输入两个数:";cin>>a>>b;c=gcd(a,b);d=mul(a,b,c);cout<<"最大公约数为"<<c<<" 最小公倍数为"<<d<<endl;}2 .根据实验内容第4题,修改程序,采用全局变量的处理方法,将最大公约数和最小公倍数都设为全局变量,分别用函数gcd()和函数mul()求最大公约数和最小公倍数,但其值不是由函数返回,而是通过全局变量在函数之间传递的特性将结果反映在主函数中。
#include <iostream>using namespace std;int c,d;void gcd(int a,int b){if(b)gcd(b,a%b);elsec=a;}void mul(int a,int b){d = a*b/c;}void main(){int a,b;cout<<"请输入两个数:";cin>>a>>b;gcd(a,b);mul(a,b);cout<<"最大公约数为"<<c<<" 最小公倍数为"<<d<<endl;}七、实验总结通过这个实验,加深了对递归算法、函数返回值以及全局变量的理解。