//《C语言程序设计实验与习题指导》P38 实验六 函数
//6.1. 从键盘输入任意整数,并判断是否为素数(判断素数用函数实现)。掌握函数的定义、调用和参数的传递。
#include
#include
int IsPrime(int n)
{
int i,flag=1;
for(i=2;i<=(int)sqrt(n);i++)
{
if(n%i==0)
{
flag=0;
break;
}
}
return flag;
}
main()
{
int n;
do
{
printf("请从键盘输入任意整数(>=2):\n");
scanf("%d",&n);
}while(n<2);
if(IsPrime(n)==1)
printf("\n\n%d是素数。\n\n",n);
else
printf("\n\n%d不是素数。\n\n",n);
}
//6.2 利用递归函数打印1~5的阶乘。掌握函数的递归调用。
//方法1 递归函数
#include
double fac(int n)
{
double f;
if(n==1)
f=1.0;
else
f=n*fac(n-1);
return f;
}
main()
{
int i;
for(i=1;i<=5;i++)
{
printf("\n\n%d的阶乘%d!=%.0f
\n\n",i,i,fac(i));
}
}
//方法2 静态变量
#include
double fac(int n)
{
static double f=1.0;
f*=n;
return f;
}
main()
{
int i;
for(i=1;i<=5;i++)
{
printf("\n\n%d的阶乘%d!=%.0f
\n\n",i,i,fac(i));
}
}
//6.3
输入5个学生5门课成绩,编写函数计算每门课的最高分和每个学生的平均分。体会全局变量、局部变量的定义及作用域,学会数组作函数参数的方法。
#include
#define SN 5
//#define SN 2
#define CN 5
double SC[SN][CN]={{73.3,76.4,58.9,68.8,56.9},
{86.0,83.0,74.6,54.3,93.8},
{84.6,98.1,78.4,95.6,50.5},{61.1,92.3,82.8,87.2,80.1},{56.8,96.9,80.8,72.4,66.1}};
double MaxC[CN],AvC[SN];
void FunSc(double sc[][CN],int m,int n)// m-学生数,n-课程数
{
int i,j;
double sum[SN];
for(i=0;i
{
sum[i]=0.0;
}
for(j=0;j
{
MaxC[j]=sc[0][j];
}
for(i=0;i
{
for(j=0;j
{
sum[i]+=sc[i][j];
if(MaxC[j]
{
MaxC[j]=sc[i][j];
}
}
AvC[i]=sum[i]/CN;
}
}
main()
{
int i,j;
double sc[SN][CN];
printf("请输入%d个学生%d门课的成绩:\n",SN,CN);
// for(i=0;i
// {
// for(j=0;j
// {
// scanf("%lf",&sc[i][j]);
// }
// }
for(i=0;i
{
for(j=0;j
{
sc[i][j]=SC[i][j];
}
}
FunSc(sc,SN,CN);
for(j=0;j
{
printf("\n\n第%d门课最高分为%.3f
.\n\n",j+1,MaxC[j]);
}
for(i=0;i
{
printf("\n\n第%d位学生%d门课平均成绩为%.3f
.\n\n",i+1,CN,AvC[i]);
}
}
//6.4 求1!+2!+3!+4!+5!,体会动态变量、静态变量的区别。
#include
double fac(int n)
{
int i;
static double f=1.0;
f*=n;
return f; }
main()
{
int i;
double sum=0.0;
printf("\n\n");
for(i=1;i<=5;i++)
{
sum+=fac(i);
printf("%d!+",i);
if(i==5)
printf("\b");//退格,删除最后一个阶乘后的“+”号
}
printf("=%.0f \n\n",sum);
}