第7章 函数.docx
《第7章 函数.docx》由会员分享,可在线阅读,更多相关《第7章 函数.docx(16页珍藏版)》请在冰豆网上搜索。
第7章函数
实验六函数
班级:
学号:
姓名:
成绩:
一.实验目的
1.掌握函数的定义、调用、声明以及参数传递方式。
2.掌握数组作函数参数的使用。
3.掌握递归函数的编写。
二.使用的设备和仪器
计算机+WindowsXP+VisualC++6.0
三.实验内容及要求
1、定义一个函数,用于判断三角形的三条边能否构成三角形,如果能,则判断是普通三角形,等腰三角形,还是等边三角形。
2、定义一个函数,用于验证哥德巴赫猜想。
任何一个充分大的偶数(大于等于6)总可以表示成两个素数之和。
3、定义函数,求两个数的最大公约数和最小公倍数。
4、定义一个函数,用于将一个字符串反序存放。
例如,原串为ABCDEF,则处理后的
字符串为:
FEDCBA。
5、定义以下几个函数,用于处理N个学生的某门课程成绩。
a)输入N个学生的成绩。
b)输出N个学生的成绩。
c)对N个学生的成绩进行排序。
d)查找是否有成绩x,如果没有,函数返回-1;如果有,返回该成绩的下标。
在主函数中输入x的值,并输出查找后的结果。
6、写一个函数,使给定的4*4的二维数组转置,即行列互换。
7、输入10个学生5门课的成绩,分别用函数实现以下功能。
a)输入学生的成绩
b)计算每个学生的平均成绩。
c)计算每门课程的平均成绩。
d)找出所有成绩中的最高分及所对应的学生和课程。
8、定义函数,对给出年、月、日计算该天是该年的第几天。
(可利用数组来实现)
9、利用递归函数,对一个给定的整数,输出其二进制形式。
四.实验步骤
1、程序代码:
#include
intJudgeTrangle(inta,intb,intc);
voidmain()
{
inta,b,c,t;
printf("输入三角形三边长:
");
scanf("%d%d%d",&a,&b,&c);
t=JudgeTrangle(a,b,c);
switch(t)
{
case0:
printf("普通三角形!
\n");break;
case1:
printf("等腰三角形!
\n");break;
case2:
printf("等边三角形!
\n");break;
default:
printf("不构成三角形!
\n");break;
}
}
intJudgeTrangle(inta,intb,intc)
{
if(a+b>c&&a+c>b&&b+c>a)
{
if(a==b||b==c||a==c)
{
if(a==b&&b==c&&a==c)
return2;
else
return1;
}
else
return0;
}
else
return-1;
}
运行结果:
2、程序代码:
#include
intisPrime(intn);
voidgdbh(intn);
voidmain()
{
intn;
printf("Enteraoddinteger:
");
scanf("%d",&n);
if(n<6||n%2==1)
printf("该数不合法!
\n");
gdbh(n);
}
intisPrime(intn)
{
inti;
for(i=2;i{
if(n%i==0)
return0;
}
return1;
}
voidgdbh(intn)
{
inti;
for(i=2;i<=n/2;i++)
{
if(isPrime(i)&&isPrime(n-i))
{
printf("%d=%d+%d",n,i,n-i);
}
}
printf("\n");
}
运行结果:
3、程序代码:
#include
intgct(inta,intb);
intlcm(inta,intb);
voidmain()
{
intnum1,num2;
printf("pleaseinputtwonumbers:
\n");
scanf("%d%d",&num1,&num2);
printf("%d,%d的最大公约数是:
%d\n",num1,num2,gct(num1,num2));
printf("%d,%d的最小公倍数是:
%d\n",num1,num2,lcm(num1,num2));
}
intgct(inta,intb)
{
inttemp;
while(b!
=0)/*利用辗除法,直到b为0为止*/
{
temp=a%b;
a=b;
b=temp;
}
returna;
}
intlcm(inta,intb)
{
returna*b/gct(a,b);
}
运行结果
4、程序代码:
#include
#include
voidreverse(charstr[]);
voidmain()
{
charstr[50];
puts("请输入一行字符串:
");
gets(str);
puts("转换后的字符串为:
");
reverse(str);
puts(str);
}
voidreverse(charstr[])
{
inti,len;
charch;
len=strlen(str);
for(i=0;i{
ch=str[i];
str[i]=str[len-1-i];
str[len-1-i]=ch;
}
}
或者逆置字符串的函数也可写为:
voidreverse(charstr[])
{
inti,j,len;
charch;
len=0;
while(str[len]!
='\0')//计算字符串长度
{
len++;
}
for(i=0,j=len-1;i{
ch=str[i];
str[i]=str[j];
str[j]=ch;
}
}
运行结果
5、程序代码:
#include
#include
#defineN10
voidinputData(inta[],intn);//数组数据赋值
voidoutputData(inta[],intn);//输出数据
voidselectedSort(inta[],intn);//选择排序
voidbubbleSort(inta[],intn);//冒泡排序
intfindData(inta[],intn,intx);//查找数据
voidmain()
{
inta[N],x,t;
inputData(a,N);
outputData(a,N);
selectedSort(a,N);
bubbleSort(a,N);
outputData(a,N);
printf("请输入要查找的成绩:
");
scanf("%d",&x);
t=findData(a,N,x);
if(t==-1)
printf("该成绩不存在!
\n");
else
printf("该成绩的序号是%d。
\n",t+1);
}
voidinputData(inta[],intn)
{
inti;
printf("请输入%d个整数:
\n",n);
for(i=0;iscanf("%d",&a[i]);
}
voidoutputData(inta[],intn)
{
inti;
printf("数组为:
\n");
for(i=0;i{
printf("%d",a[i]);
}
printf("\n");
}
voidselectedSort(inta[],intn)//选择排序
{
inti,j,t;
for(i=0;i{
for(j=i+1;j{
if(a[j]>a[i])
{
t=a[j];a[j]=a[i];a[i]=t;
}
}
}
}
voidbubbleSort(inta[],intn)//冒泡排序
{
inti,j,t;
for(i=0;i{
for(j=0;j{
if(a[j]>a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
}
}
intfindData(inta[],intn,intx)
{
inti;
for(i=0;i{
if(a[i]==x)returni;
}
return-1;
}
运行结果
6、程序代码:
#include
#defineN4
voidInput(inta[N][N]);
voidOutput(inta[N][N]);
voidReverse(inta[N][N]);
voidmain()
{
inta[N][N];
Input(a);
Reverse(a);
printf("转置后");
Output(a);
}
voidInput(inta[N][N])
{
printf("请输入%d*%d个数:
\n",N,N);
for(inti=0;ifor(intj=0;jscanf("%d",&a[i][j]);
}
voidOutput(inta[N][N])
{
printf("数组为:
\n");
for(inti=0;i{
for(intj=0;jprintf("%d",a[i][j]);
printf("\n");
}
}
voidReverse(inta[N][N])
{
for(intt,i=0;i{
for(intj=0;j
{
t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;
}
}
}
运行结果
7、程序代码:
#include
#defineM3
#defineN5
voidInput(inta[M][N]);
voidOutput(inta[M][N]);
voidAvg_stu(inta[M][N]);
voidAvg_cor(inta[M][N]);
voidMax_score(inta[M][N]);
voidmain()
{
inta[M][N];
Input(a);
Output(a);
Avg_stu(a);
Avg_cor(a);
Max_score(a);
}
voidInput(inta[M][N])
{
printf("请输入%d个学生%d门课程的成绩:
\n",M,N);
for(inti=0;ifor(intj=0;jscanf("%d",&a[i][j]);
}
voidOutput(inta[M][N])
{
printf("数组为:
\n");
for(inti=0;i{
for(intj=0;jprintf("%d",a[i][j]);
printf("\n");
}
}
voidAvg_stu(inta[M][N])
{
inti,j;
doubles;
printf("每个学生的平均成绩为:
\n");
for(i=0;i{
s=0;
for(j=0;j{
s=s+a[i][j];
}
printf("%.2lf",s/N);
}
printf("\n");
}
voidAvg_cor(inta[M][N])
{
inti,j;
doubles;
printf("每门课程的平均成绩为:
\n");
for(j=0;j{
s=0;
for(i=0;i{
s=s+a[i][j];
}
printf("%.2lf",s/M);
}
printf("\n");
}
voidMax_score(inta[M][N])
{
inti,j,max=a[0][0],maxi=0,maxj=0;
for(i=0;i{
for(j=0;j{
if(a[i][j]>max)
{
max=a[i][j];maxi=i;maxj=j;
}
}
}
printf("最高成绩为:
%d学生序号为:
%d课程序号为:
%d\n",max,maxi+1,maxj+1);
}
运行结果
8、程序代码
#include
intdays(intyear,intmonth,intday);
voidmain()
{
intyear,month,day,d;
printf("请输入年、月、日:
\n");
scanf("%d%d%d",&year,&month,&day);
d=days(year,month,day);
printf("这天是%d年的第%d天\n",year,d);
}
intdays(intyear,intmonth,intday)
{
intmonthDays[12]={31,28,31,30,31,30,31,31,30,31,30,31};
intd,i;
d=day;
if(month>2&&(year%4==0&&year%100!
=0||year%400==0))
{
monthDays[1]+=1;
}
for(i=0;i{
d+=monthDays[i];
}
returnd;
}
运行结果
9、程序代码:
#include
voidNto2(intn)
{
if(n/2==0)printf("%d",n);
else
{
Nto2(n/2);
printf("%d",n%2);
}
}
voidmain()
{
intn;
printf("请输入一个整数:
\n");
scanf("%d",&n);
printf("该整数的二进制为:
\n");
Nto2(n);
}
运行结果
五.实验总结