函数与程序结构实验

合集下载

C语言实验指导3--用函数进行程序设计

C语言实验指导3--用函数进行程序设计

《C语言程序设计》实验指导书软工2010级2班m a oS W U实验环境Windows,Visual C++实验目录实验三用函数进行程序设计实验目的1、掌握C语言函数定义及调用的规则,理解参数传递的过程。

2、掌握函数嵌套调用过程及递归调用过程。

3、理解数组元素作参数和数组名作参数的不同。

4、编程验证全局变量、局部变量,动态变量、静态变量。

实验内容1、编程验证基本的函数定义和调用下面的程序,在主函数main中输入2个整数,并传给函数max。

函数max返回最大值。

#include <stdio.h>int max(int x,int y){ /*本函数返回x和y中的最大值*/int z;if(x>y) z=x;else z=y;return z;}main(){int a,b;printf("请输入a和b,用空格分开:\n");scanf("%d %d",&a,&b);printf("最大值是%d\n",max(a,b));}2、编程验证函数嵌套调用的执行过程执行下面的程序,分析嵌套调用的过程。

再分析一下,如果没有函数声明,编译时有何问题。

#include<stdio.h>void f1(void);/*这3行是函数声明*/void f2(void);void f3(void);void f1(){printf("I am f1\n");f2();}void f2(){f3();printf("I am f2\n");}void f3(){printf("I am f3\n");}main(){f1();f2();}3、编程验证函数的递归调用过程#include <stdio.h>int f(int a[],int n){if(n>=1){printf("要计算f(a,%d),先计算f(a,%d)\n",n,n-1);return f(a,n-1)+a[n-1];}else return 0;}main(){int aa[5]={1,2,3,4,5},sum;sum=f(aa,5);printf("数组aa[5]中5个元素的总和是%d\n",sum);}4、编程验证数组元素及数组名作参数有何不同数组元素作参数以及数组名作参数(1)把数组元素作参数。

C语言程序设计实验函数

C语言程序设计实验函数

实验5:函数
一、实验目的
1.掌握定义函数的方法;
2.掌握函数实参与形参的对应关系,以及“值传递”的方式;
3.掌握函数的嵌套调用和递归调用的方法;
4.掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。

二、实验内容
编写程序,实现如下功能:
1. 编写一个函数void transpose(int a[3][3]),使给定的一个(3×3)二维数组a 转置。

(注意:transpose
函数中不可使用printf 语句打印数组; 打印操作全部在main 函数中进行,打印输出转置前后的数组a 进行比较。


2. 用递归方法求n!,递归公式为: 1
)1(1,01{!>-==n n n n n ! 要求用函数fac 来描述该递归过程,在主函数main 中调用fac 函数求n!。

n 值由用户从键盘输入。

三、实验结果记录 第1题上机调试后的最终代码及上机调试结果(截图):
代码:
运行结果:
第2题上机调试后的最终代码及上机调试结果(截图):代码:
运行结果:
四、实验小结:
经过此次实验,我掌握了定义函数的方法、理解了函数调用时实参与形参的关系、学会了递归调用的方法。

同时,我也理解和掌握了全局变量、局部变量的概念与使用,使我收获颇多。

递归的优点:简洁、递归的实现明显要比循环简单得多。

递归的缺点:递归由于是函数调用自身,而函数调用是有时间和空间的消耗的;递归中很多计算都是重复的;调用栈可能会溢出。

C语言实验报告之利用函数进行程序设计

C语言实验报告之利用函数进行程序设计

一、实验的目的1、掌握定义函数的方法。

2、掌握函数的实参与形参的对应关系以及“值传递”的方式。

3、掌握函数的嵌套调用及其递过调用的方法。

4、掌握全局变量与局部变量的使用。

二、要求及内容本实验主要完成函数的的应用训练,总共要求完成四个问题的源代码的编辑、编译、连接与运行,最终产生相关的运行结果,按规定要求提交相应的实验报告。

具体要求完成的问题如下:1、编程求100—200之间的素数,该区间的数据从主函数中传出,由一个判别素数的函数进行判别后返回主函数输出。

2、编写一个程序,由主函数传来一个字符串,在函数中分别统计出字母、数字、空格和其它字符的个数,在主函数中打印输出。

3、用递归算法将一个整数n转换成相应的字符串。

4、输入10个学生5门课的成绩,分别用函数实现下列各项功能:(1)计算出每个学生的平均分;(2)计算出每门课程的平均分;(3)找出所有50个分数中最高分数所对应的学生和课程。

三、算法设计思想或程序流程图1、根据素数是不能被2到本身的开平方之间的任何一个整数整除的整数,设计一个判别一个整数是不是素数的函数,即为“sushu”,然后在主函数中调用并求出100—200中的所有素数。

2、编写一个判断字母、数字、空格以及其他字符的函数,即“jisuan”,从主函数中输入一个字符串,调用函数对其计算相关字符的个数。

3、从主函数中输入一个n。

设计函数“zfc”,如果n整除10为0,则输出其对应的ASCLL码,如果不为0,则继续返回函数“zfc”,即递归调用,直到为0为止。

主函数中,判断n是否大于0,若不大于0,则输出时求出n的相反数并在其之前加一个“-”号。

4、设计一个“score”函数,结合for循环语句和数组计算每个学生和每门课程的平均分并且找出所有50个分数中最高分数所对应的学生和课程,然后再main函数中调用。

四、所使用的软硬件平台软件平台:Microsoft Windows XP专业版SP3,Microsoft Visual C++ 6.0。

函数程序设计实验报告

函数程序设计实验报告

函数程序设计实验报告本次实验的目的是通过学习函数的基本概念和使用方法,掌握函数的定义、调用和应用,以及函数的参数传递和返回值的使用。

在实验中,我们将通过编写程序来加深对函数的理解,并通过实际操作来掌握函数的使用技巧。

在程序设计中,函数是一种非常重要的模块化设计方法。

通过将程序中的功能模块化为函数,不仅可以提高代码的复用性和可维护性,还可以使程序的结构更加清晰,易于理解和调试。

因此,掌握函数的使用对于提高程序设计的效率和质量具有重要意义。

在本次实验中,我们首先学习了函数的定义和调用方法。

函数的定义包括函数名、参数列表和返回值类型,通过定义函数可以将一系列操作封装为一个整体,方便在程序中进行调用。

在调用函数时,我们需要使用函数名和实际参数来传递数据,并可以通过返回值来获取函数的执行结果。

通过实际编写程序来定义和调用函数,我们加深了对函数的理解,并掌握了函数的基本使用方法。

除了函数的基本概念和使用方法外,我们还学习了函数的参数传递和返回值的使用。

函数的参数可以分为形式参数和实际参数,形式参数用来接收调用函数时传递的数据,而实际参数则是调用函数时传递的具体数值。

通过实际编写程序来传递参数并使用返回值,我们掌握了函数参数传递和返回值的使用技巧,进一步提高了对函数的理解和应用能力。

在实验中,我们还通过编写一些实际的程序来应用所学的函数知识。

例如,我们编写了求解最大公约数和最小公倍数的函数,通过调用这些函数来实现对两个数的求解。

此外,我们还编写了一些涉及函数的程序,如计算阶乘、斐波那契数列等。

通过编写这些程序,我们不仅加深了对函数的理解,还提高了程序设计和编写代码的能力。

总的来说,通过本次实验,我们深入学习了函数的基本概念和使用方法,掌握了函数的定义、调用和应用,以及函数的参数传递和返回值的使用。

通过实际编写程序来应用所学的函数知识,我们提高了程序设计和编写代码的能力,为以后的学习和工作打下了良好的基础。

函数程序设计实验报告至此结束。

c语言函数实验报告

c语言函数实验报告

c语言函数实验报告C 语言函数实验报告一、实验目的1、深入理解 C 语言中函数的概念、定义和使用方法。

2、掌握函数的参数传递机制,包括值传递和地址传递。

3、学会使用函数来实现程序的模块化设计,提高代码的可读性、可维护性和可重用性。

4、通过实验,熟练掌握函数的调用、返回值的处理以及函数之间的相互协作。

二、实验环境1、操作系统:Windows 102、编译环境:Visual Studio 2019三、实验内容(一)函数的定义与声明1、定义一个名为`add` 的函数,用于计算两个整数的和,并返回结果。

```cint add(int a, int b) {return a + b;}```2、在主函数之前对`add` 函数进行声明。

```cint add(int, int);```(二)函数的调用1、在主函数中调用`add` 函数,计算 5 和 10 的和,并输出结果。

```cint main(){int result = add(5, 10);printf("5 + 10 =%d\n", result);return 0;}```(三)值传递与地址传递1、定义一个函数`swap`,通过值传递方式交换两个整数的值。

```cvoid swapValue(int a, int b) {int temp = a;a = b;b = temp;}```2、定义一个函数`swapPointer`,通过地址传递方式交换两个整数的值。

```cvoid swapPointer(int a, int b) {int temp = a;a = b;b = temp;}```3、在主函数中分别调用这两个函数,观察交换结果。

(四)函数的递归调用1、定义一个递归函数`factorial`,计算一个整数的阶乘。

```cint factorial(int n) {if (n == 0 || n == 1) {return 1;} else {return n factorial(n 1);}}```2、在主函数中调用`factorial` 函数,计算 5 的阶乘,并输出结果。

c程序结构与函数_实验报告

c程序结构与函数_实验报告

《程序设计基础》实验报告单4一、实验目的掌握函数的定义和调用方法;掌握函数的嵌套调用二、实验要求掌握局部变量,全局变量的使用三、实验内容及主要步骤①熟悉局部变量与全局变量的区别开启TC编写程序,运行程序,整理结果②熟悉函数的定义与申明四、实验程序清单①#include<stdio.h>int a=4;int fun(int x) {static int b=5;int y=1;y=y+a;a=b+4;b=x+y;return(a+b+y);}void main() {int m=5,i;for(i=1;i<=3;i++)printf("i=%d,%d\n",i,fun(m));//printf(“a=%d,b=%d,y=%d,m=%d”,a,b,y,m);}②#include<stdio.h>int fun2(float x){int t;if(x>=0&&x<=100) t=1;else t=0;return t;}void main() {float a,s=0;int i,m;for(i=1;i<=20;i++) {scanf("%f,",&a);m=fun2(a);if(m==1) s=s+a;else i--;}printf("the average is:%f",s/20);}五、实践经验及问题分析①实验结果为:i=1,24i=2,39i=3,54b为静态局部变量,在程序运行时已赋值为5,以后每次函数调用时不再赋初值,而是保留上次函数被调用时结束的值。

而对于y而言为局部动态变量,执行多少次,则被重新赋初值多少次。

②对于函数的定义和申明,如果函数的定义出现在主调函数之前,可以不必进行申明;如果函数的定义出现在主调函数之后,则必须进行申明,申明方法与定义时函数后头相似,但不需要形参变量名,如上:int fun2(float x)定义了一个名为fun2,形参为实型,返回值为整型的函数,而主函数中m=fun2(a)则是对函数的调用。

实验2 函数与程序结构

实验2 函数与程序结构

实验2 函数与程序结构一、实验目的通过基本c++程序设计,了解c++语言部分对c语言做了什么扩充。

二、实验主要内容1、定义一个函数,比较三个数a,b,c大小,通过交换使之有序,形参分别使用指针和引用;2、求不同类型的三个数的最大值,要求:(1)使用重载函数和函数模版两种方法;(2)使用带缺省参数的函数;三、实验程序1实验1程序代码(1).用指针形式比较#include<iostream>using namespace std;void fun(int *a,int *b,int *c);void swap(int *a,int*b);void main(){int a,b,c;cout<<"请输入a,b,c三个变量的值。

"<<endl;cin>>a>>b>>c;int *x=&a,*y=&b,*z=&c;cout<<"交换a,b,c的位置,使a,b,c从小到大排列。

"<<endl;fun(x,y,z);cout<<"a:"<<a<<"\t"<<"b:"<<b<<"\t"<<"c:"<<c<<endl;}void fun(int *a,int *b,int *c){if(*a>*b) swap(a,b);if(*a>*c) swap(a,c);if(*b>*c) swap(b,c);}void swap(int *a,int*b){int t;t=*a; *a=*b;*b=t;}(2)用引用形式比较#include<iostream>using namespace std;void fun(int &a,int &b,int &c);void main(){int a,b,c;cout<<"请输入a,b,c三个变量的值。

C语言程序设计实验五:函数(5篇范例)

C语言程序设计实验五:函数(5篇范例)

C语言程序设计实验五:函数(5篇范例)第一篇:C语言程序设计实验五:函数C语言程序设计实验五:函数1、定义函数返回两个数中较大的数,在主函数中通过调用该函数求三个数中较大的数并输出,编写主函数调用该函数。

说明:(1)请大家按学号来坐,便于考勤和管理。

(2)请珍惜宝贵的实验时间!不要做与实验无关的事情,比如聊QQ、上网或打游戏。

(3)直接把C语言代码粘贴到相应的实验题目下方,上交实验报告时只交word文档。

(4)文档名称:班级+学号后2位+姓名+实验编号,例如12通1班12张山实验五.doc。

第二篇:C语言程序设计实验七:函数、数组、指针C语言程序设计实验七:函数、数组、指针1、程序运行后,用户任意输入一个字符串,求出字符串长度,然后输出字符串内容及个数。

不能使用strlen函数。

求字符串长度函数的函数原型必须如下:int MyStrLenPt(char *str)若输入:nihao123!则输出:nihao123!:9 chars2、编写一个对一维数组进行排序的程序。

要求:写两个函数,一个主函数,一个sort函数。

在主函数中完成数组的输入和输出,通过调用sort函数对数组进行排序。

sort函数的原型为:voidsort(int*p, intn);说明:(1)请大家按学号来坐,便于考勤和管理。

(2)请珍惜宝贵的实验时间!不要做与实验无关的事情,比如聊QQ、上网或打游戏。

(3)直接把C语言代码粘贴到相应的实验题目下方,上交实验报告时只交word文档。

(4)文档名称:班级+学号后2位+姓名+实验编号,例如11电1班12张山实验七.doc。

第三篇:C语言程序设计—函数—实验报告实验报告专业软件工程班级X班学号_ XXXXXXXXXXX_姓名实验日期:201X年X月X日报告退发(订正、重做)课程C程序设计实验实验名称函数一、实验目的① 熟练掌握C程序中函数的定义;② 掌握函数的调用,函数参数的传递;③ 熟练掌握函数的嵌套调用和递归调用;二、实验环境(描述实验的软件、硬件环境)① 软件环境:windows xp/win7等操作系统,Microsoft Visual C++ 6.0编译器;② 硬件环境:PC机一台三、实验内容、步骤和结果分析题目一:编写一个用来判断质数(素数)的函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C 语言程序设计实验报告实验名称 函数与程序结构实验一、实验目的1.熟悉和掌握函数的定义、声明;函数调用与参数传递方法;以及函数返回值类型的定义和返回值使用。

2.熟悉和掌握不同存储类型变量的使用。

3.熟悉多文件编译技术。

二、实验任务1.源程序改错题下面是计算s=1!+2!+3!+…+n!的源程序,在这个源程序中存在若干语法和逻辑错误。

要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。

#include "stdio.h"void main(void){int k;for(k=1;k<6;k++)printf("k=%d\tthe sum is %ld\n",k,sum_fac(k));}long sum_fac(int n){long s=0;int i;long fac;for(i=1;i<=n;i++)fac*=i;s+=fac;return s;}2.源程序修改替换题(1)修改第1题中sum_fac 函数,使其计算量最小。

(2)修改第1题中sum_fac 函数,计算!1!31!211n s ++++= 。

3.跟踪调试题计算fabonacci 数列前n 项和的程序如下:其中,long sum=0,*p=&sum;声明p 为长整型指针并用&sum 取出sum 的地址对p 初始化。

*p 表示引用p 所指的变量(*p 即sum )。

void main(void){int i,k;long sum=0,*p=&sum;scanf("%d",&k);for(i=1;i<=k;i++){sum+=fabonacci(i);printf("i=%d\tthe sum is %ld\n",i,*p);}}long fabonacci(int n){if(n==1 || n==2)return 1;elsereturn fabonacci(n-1)+fabonacci(n-2);}单步执行程序,观察p,i,sum,n值。

(1)刚执行完scanf("%d",&k);语句,p,i值是多少?(2)从fabonacci函数返回后光条停留在哪个语句上?(3)进入fabonacci函数,watch窗口显示的是什么?(4)当i=3,从调用fabonacci函数到返回,n值如何变化?4.编程设计题(1)编程让用户输入两个整数,计算两个数的最大公约数并且输出之(要求用递归函数实现求最大公约数)。

同时以单步方式执行该程序,观察递归过程。

(2)编程验证歌德巴赫猜想:一个大于等于4的偶数都是两个素数之和。

编写一个程序证明对于在符号常量BEGIN和END之间的偶数这一猜测成立。

例如,如果BEGIN为10,END为20,程序的输出应为:GOLDBACH'S CONJECTURE:Every even number n>=4 is the sum of two primes.10=3+712=5+7……20=3+175.选做题1、设file1.c如下:#include <stdio.h>int x,y; /* 外部变量的定义性说明 */char ch; /* 外部变量的定义性说明 */void main(void){x=10;y=20;ch=getchar();printf("in file1 x=%d,y=%d,ch is %c\n",x,y,ch);func1();}file2.c如下:extern int x,y; /* 外部变量的引用性说明 */extern char ch; /* 外部变量的引用性说明 */void func1(void){x++;y++;ch++;printf("in file2 x=%d,y=%d,ch is %c\n",x,y,ch); }三、实验步骤及结果1.源程序改错题程序缺少调用函数的声明;变量的初始化;等。

修改后的正确程序为:#include <stdio.h>long sum_fac(int n);int main(){int k;printf("please input k: ");scanf("%d",&k);printf("k=%d\tthe sum is %ld\n",k,sum_fac(k));return 0;}long sum_fac(int n){long s=0;int i;static long fac=1;for(i=1;i<=n;i++){fac=fac*i;s=s+fac;}return s;}运行结果:2.源程序修改替换题○1减小运算量. #include <stdio.h>long sum_fac(int n,int t);int main(){int k=0,i;long m;do{printf("please input k: ");scanf("%d",&k);}while(k<0);for(i=1;i<=k;i++)m=sum_fac(k,i);printf("k=%d\tthe sum is %ld\n",k,m);return 0;}long sum_fac(int n,int t){static long fac=1,s=0;if(t<=n){fac=fac*t;s=s+fac;}return s;}运行结果如图:○2计算!1!31!211S n ++++= 的程序如下: #include <stdio.h>double sum_fac(int n);int main(){int k;printf("please input k: ");scanf("%d",&k);printf("k=%d\tthe sum is %lf\n",k,sum_fac(k));return 0;}double sum_fac(int n){double s=0.0;int i=1;long fac=1;do{fac=fac*i;s=s+1.0/fac;i++;}while(i<=n);return s;}运行结果:3.跟踪调试题(1)刚执行完scanf("%d",&k);语句,p,i值是多少?输入k=6;p和i的值如右图:(2)从fabonacci函数返回后光条停留在哪个语句上?答:从fabonacci函数返回后光条停留在“printf("i=%d\tthe sum is %ld\n",i,*p);”语句上(3)进入fabonacci函数,watch窗口显示的是什么?在k=3输入时:最后一个截图为程序结束时的各变量数值。

(4)当i=3,从调用fabonacci函数到返回,n值如何变化?4.编程设计题○1计算最大公约数的程序:int gcd(int u,int v){int temp;while (v!=0){temp = u%v;u=v;v=temp;}return u;}int main(){int m,n;printf("Please input two numbers:");scanf("%d%d",&m,&n);printf("gcd=%d",gcd(m,n));运行结果:○2验证哥德巴赫猜想程序:#include<stdio.h>#include<math.h>#define N 40int gedebahe(int);int main(){int i=6,n;printf(" 4 = 2 + 2\n");for(;i<=N;i+=2){for(n=3;n <= i/2;n+=2)if(gedebahe(n))if(gedebahe(i-n)){printf("%4d = %2d + %2d\n",i,n,i-n); break;}if(n > i/2) printf("error %d\n",i);}return 0;}int gedebahe(int i){int j;if(i <= 1) return 0;if(i == 2) return 1;if(!(i % 2)) return 0;for(j = 3;j <= sqrt(i);j += 2)if(!(i % j)) return 0;return 1;运行结果:○3编写程序如下:#include<stdio.h>#include<math.h>#define M 10#define N 20int gedebahe(int);int main(){int i,n;printf("GOLDBACH'S CONJECTURE:\n");printf("Every even number n>=4 is the sum of two primes.\n"); for(i=M;i<=N;i+=2){for(n=3;n <= i/2;n+=2)if(gedebahe(n))if(gedebahe(i-n)){printf("%d = %d + %d\n",i,n,i-n);break;}if(n > i/2) printf("error %d\n",i);}return 0;}int gedebahe(int i){int j;if(i <= 1) return 0;if(i == 2) return 1;if(!(i % 2)) return 0;for(j = 3;j <= sqrt(i);j += 2) if(!(i % j)) return 0;return 1;}运行结果如图:四、实验体会感觉好难呀!有待提高呀!。

相关文档
最新文档