课程名称:结构化程序设计与C语言 开课实验室:年 月 日
一、实验目的
用C语言编写和调试函数的程序。从而对函数的定义、调用、全局变量的灵活运用有比较深入的了解。
二、内容及结果
1、程序一 素数函数
1)程序要求:写一个判断是否是素数的函数,在主函数输入一个整数,调用它后输出结果。
2)代码:
#include<stdio.h>
#include<math.h>
int prime(int n)
{ int i,k;
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0) break;
if(i<=k)
return 0;
else
return 1;
}
int main()
{ int prime(int n);
int n;
printf("Please enter n:");
scanf("%d\n",&n);
if(prime(n)==1)
printf("%d is a prime number",int(n));
else
printf("%d is not a prime number",int(n));
}
3)运行截图:
2、程序二 用递归方法求n阶勒让德多项式的值
1)程序要求:
递归公式为:
当n=0,1
当n=1, x;
当n>=1, ((2n-1)x-Pn-1(x)-(n-1)Pn-2)x))/n
2)代码:
#include<stdio.h>
#include<math.h>
int p(int n,int x);
void main()
{
int n,x;
scanf("%d",&x);
for(n=0;n<=10;n++)
printf("p(%d,%d)=%d\n",n,x,p(n,x));
}
int p(int n,int x)
{
if(n==0)
return 1;
else
if(n==1)
return x;
else
return((2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x))/n;
}
3)运行截图:
3、程序三 成绩统计程序
1)程序要求:输入10个学生5门课的成绩,分别用函数实现以下功能:
计算每个学生的平均分;计算每门课的平均分;找出所有50个分数中最高的分数所对应的学生和课程;计算平均方差。
2)代码:
#include<stdio.h>
float x1[10],x2[5];
float pp(float f[10][5]);
float cc(float y[10][5]);
void find(float z[10][5],float s[5],int t[5]);
float xx(float q);
int main()
{
char name[5][20],class1[5][20];
float score[10][5],o,k=0,max[5];
int a[2],i,j;
printf("请你输入名字:\n");
for(i=0;i<10;i++)
gets(name[i]);
printf("请你输入班级:\n");
for(j=0;j<5;j++)
gets(class1[j]);
printf("请你输入十个学生五门课的成绩:\n");
for(i=0;i<10;i++)
for(j=0;j<5;j++)
scanf("%f",&score[i][j]);
x1[i]=pp(score);
x2[j]=cc(score);
find(score,max,a);
o=xx(k);
for(i=0;i<10;i++)
{
puts(name[i]);
printf("%.3f\n",x1[i]);
}
for(j=0;j<5;j++)
{
puts(class1[j]);
printf("%.3f\n",x2[j]);
}
for(j=0;j<5;j++)
{
printf("%.3f \n",max[j]);
puts(name[a[j]]);
puts(class1[j]);
}
printf("o=%.3f\n",o);
return 0;
}
float pp(float f[10][5])
{
float sum;
int i,j;
for(i=0,sum=0;i<10;i++)
{
for(j=0;j<5;j++)
sum=sum+f[i][j];
x1[i]=sum/2;
sum=0;
}
return 0;
}
float cc(float y[10][5])
{
float sum;
int i,j;
for(j=0,sum=0;j<5;j++)
{
for(i=0;i<10;i++)
sum=sum+y[i][j];
x2[j]=sum/2;
sum=0;
}
return 0;
}
void find(float z[10][5],float s[5],int t[5])
{
int i,j;
for(j=0,s[j]=z[0][j];j<5;j++)
for(i=0;i<10;i++)
if(s[j]<z[i][j])
{
s[j]=z[i][j];
t[j]=i;
}
}
float xx(float q)
{
float f=0,e=0;
int i;
for(i=0;i<10;i++)
{
e=x1[i]*x1[i]+e;
f=f+x1[i];
}
q=e/10-(f/10)*(f/10);
return(q);
}
3)运行截图:
4、程序四 大奖赛评分系统。
1)程序要求:
已知某大奖赛有10个选手参赛,5个评委为参赛选手评分(最高10分,最低0分),统分规则为:在每个选手的5个得分中,去掉一个最高分和最低分后,取平均分作为该选手的最后得分。要求编程实现:
根据选手的最后得分,从高到低输出选手的得分名次表,以确定获奖名单;
根据各选手的最后得分与各评委给该选手所评分数的差距,对每个评委评分的准确性和评分水准给出一个定量的评价,从高到低输出各评委得分的名次表。
2)代码:
#include<stdio.h>
#define N 10
float max=0,min=0;
int j,k;
float find(float b[N]);
void mingci(float aver[5]);
void pwei(float a[5]);
int main()
{
float a[N],aver[5];
int i;
for(j=1;j<=N;j++)
{
printf("请各位评委亮分:\n");
for(i=0;i<5;i++)
scanf("%f",&a[i]);
aver[j]=find(a);
printf("第%d号选手的最后得分为%.2f分\n",j,aver[j ]);
}
mingci(aver);
for(j=1;j<=N;j++)
pwei(a);
return 0;
}
float find(float b[N])
{
int i;
float sum=0,aver[5];
min=max=b[0];
for(i=0;i<5;i++)
{ if(b[i]>max)
max=b[i];
else if(b[i]<min)
min=b[i];
}
printf("第%d号选手去掉一个最高分%.2f和去掉一个最低分%.2f最后得分:\n",j,max,min);
for(i=0;i<3;i++)
{ max=0;
min=0;
sum=sum+b[i];
aver[j]=sum/3;
}
return (aver[j]);
}
void mingci(float aver[5])
{
float t;
for(j=1;j<=10;j++)
for(k=1;k<=5-j;k++)
if(aver[k]<aver[k+1])
{
t=aver[k];
aver[k]=aver[k+1];
aver[k+1]=t;
}
printf("\n");
for(k=1;k<=10;k++)
printf("第%d名的分为%.2f\n",k,aver[k]);
printf("\n");
}
void pwei(float a[5])
{
int i;
for(i=0;i<5;i++)
{
if(a[i]>=8&&a[i]<=10)
printf("该评委评分优秀\n");
else if(a[i]>=5&&a[i]<8)
printf("该评委评分委良\n");
else if(a[i]>=0&&a[i]<5)
printf("该评委评分中\n");
}
}
3)运行截图:
三、实验结果、分析和结论:
此次试验主要就是函数的运用,以及再次复习了循环语句、条件语句。在函数运用中,最重要的就是函数的调用.函数调用分为函数调用语句、函数调用表达式、函数调用参数三种方式,在主调函数和被调用函数之间又有数据的传递,即实参和形参间的数据传递。同时也知道了,在调用函数时还需具备一些条件:(1)被调用的函数必须是已经定义的函数;(2)如果使用库函数,应该在本文件开头用#include指令将调用有关库函数时所需用到的信息“包含”到文件中来;(3)如果使用用户自己定义的函数,而该函数的位置在调用它的函数的后面,应该在主调函数中对调用函数作声明。函数的调用也是编程中一个重要的类容,我们也应该熟练的掌握,以此才能更好的运用于学习实践中。
第二篇:C语言实验报告7《函数》
嘉应学院 计算机学院
实验报告