《C语言程序设计》实验报告函数

更新时间:2023-04-22 23:51:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《C语言程序设计 》课程实验报告

≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡

实验过程 一、相关知识 1.一个源程序文件由一个或多个函数以及其他有关内容(如指令、数据声明 与定义等)组成。一个源程序文件是一个编译单位,在程序编译时是以源程序 文件为单位进行编译的,而不是以函数为单位进行编译的。 2.库函数,它是由系统提供的,用户不必自己定义,可直接使用它们。应该说 明,不同的 C 语言编译系统提供的库函数的数量和功能会有一些不同,当然许 多基本的函数是共同的。 3.定义函数包括一下几点内容: (1)指定函数的名字,以便以后按名调用。 (2)指定函数的类型,即函数返回值的类型。 (3)指定函数的参数的名字和类型,以便在调用函数时向它们传递数据。 对无参函数不需要这项。 (4)指定函数应当完成什么操作,也就是函数是做什么的,即函数的功能。 这是最重要的,是在函数体中解决的。 3.函数体包括声明部分和语句部分。 4.在定义函数时要用“类型标识符” (即类型名)指定函数值的类型,即指定 函数带回来的值的类型。 5.在调用函数过程中,系统会把实参的值传递给被调用函数的形参。或者说, 形参从实参得到一个值,该过程在函数调用期间有效,可以参加该函数中的运 算。 6.实参可以是常量、变量或表达式,例如:max(3,a+b),但要求它们有确定的 值。在调用时将实参的值赋给形参。 7.实参向形参的数据传递是“值传递” ,单向传递,只能由实参传给形参,而 不是由形参传给实参。实参和形参在内存中占有不同的存储单元,实参无法得 到形参的值。 8.数组元素可以用作函数实参,不能用作形参,因为形参是在函数被

调用时临 时分配存储单元的,不可能为一个数组元素单独分配存储单元(数组是一个集 体,在内存中占连续的一段储存单元) 。在用数组元素作函数实参时,把实参 的值传给形参,是“值传递”方式。数据传递的方向是从实参传到形参,单向 传递。 9.在一个函数内部定义的变量只在本函数范围内有效,也就是说只有在本函数 内才能引用它们,在此函数以外是不能使用这些变量的。在复合语句内定义的 变量只在本复合语句范围内有效,只有在本身复合语句内才能引用它们。在复 合语句以外是不能使用这些变量的,以上这些称为“局部变量” 。 10.函数中的局部变量,如果不专门声明为 static(静态)存储类别,都是动。 态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定 义的局部变量(包括在复合语句中定义的局部变量) ,都属于此类。在调用该 函数时,系统会给这些变量分配存储空间,在函数调用结束时就自动释放这些 存储空间。因此这类局部变量称为自动变量。自动变量用关键字 auto 作存储 类别的声明。

二、实验内容: 1.写一个判断素数的函数, 从主函数输入一个整数, 输出是否是素数的信息; 2.输入 10 个学生 5 门课的成绩,分别用函数实现下列功能: (1)计算每个学生的平均分; (2)计算每门课的平均分; 3.用递归方法求 n 阶勒让德多项式的值,递归公式为: 1 (n=0) Pn(x)= x (n=1) ((2n-1).x-Pn-1(x)(n-1).Pn-2(x))/n (n>=1) 三、实验过程 1. 写一个判断素数的函数,从主函数输入一个整数,输出是否是素数的信息 编写以下程序: #include "stdio.h" #include "math.h" f(int x)/*判断 x 是否素数*/ { int i,sign=0;; for(i=2;i<=(int)sqrt(x);i++) { if(x%i==0) { ++sign; break; } } if(sign!=0) printf("\n 该数不是素数\n"); else printf("\n 该数是素数\n"); } void main() { int a; printf("请输入一个整数:\n"); scanf("%d",&a); f(a); } 运行结果如下

2 输入 10 个学生 5 门课的成绩,分别用函数实现下列功能: (1)计算每个学生的平均分; (2)计算每门课的平均分; 输入一下程序: #include<stdio.h> #define n 10 #define b 5 int score[n][b]; float aver[n],cour[b]; void input() { int i,j; printf("请依次输入每位学生的成绩:\n"); for(i=0;i<n;i++) for(j=0;j<b;j++) scanf("%d",&score[i][j]); } void average(int score[n][b]) { int i,j; for(i=0;i<n;i++) { float s=0.0; for(j=0;j<b;j++) s=s+score[i][j]; aver[i]=s/b; } }void course(int score[n][b]) { int i,j; for(j=0;j<b;j++) {

float s=0.0; for(i=0;i<n;i++) s=s+score[i][j]; cour[j]=s/n; } }void main() { int i,j; input(); printf("学生成绩为:\n"); for(i=0;i<n;i++) { for(j=0;j<b;j++) printf("%d ",score[i][j]); printf("\n"); } printf("每个学生的平均成绩为:\n"); average(score); for(i

=0;i<n;i++) printf("%5.2f ",aver[i]); printf("\n"); printf("每门课的平均分为:\n"); course(score); for(j=0;j<b;j++) printf("%5.2f ",cour[j]); printf("\n"); } 运行结果如下

3. 用递归方法求 n 阶勒让德多项式的值,递归公式为: 1 (n=0) Pn(x)= x (n=1) ((2n-1).x-Pn-1(x)(n-1).Pn-2(x))/n (n>=1) 编写以下程序: #include<stdio.h> #include<math.h> long fact(int n,int x) { long p; if(n==0) p=1; if(n==1) p=x; if(n>1) p=((2*n-1)*x-fact(n-1,x)-(n-1)*fact(n-2,x))/n; return(p); } main() { int x, n; long f; printf("shurushuju n,x:"); scanf("%d,%d",&n,&x); f=fact(n,x);

printf("%ld",f); } 运行结果如下

四、实验结果及分析 实验中遇到的问题主要就是在复杂程序面前,还是显得手足无措,对复杂算法 的构思和编程比较吃力,但归根结底是基础还不够扎实,致使程序中的选择结 构混乱不堪,使计算机难以正确执行既定程序步骤。出现问题的原因一是解决 复杂算法编程的能力有所欠缺,二是基本功还不够扎实。对于程序本身,解决 方法是与人交流、查资料;而对于自身,则主要是再次温故课本,查漏补缺, 温故知新。以及利用这一方法解决问题的结果相当不错,最终在自身积极钻研 下,搞定了源程序

本文来源:https://www.bwwdw.com/article/alvq.html

Top