实验七 函数及程序结构(二)一、实验目的
1.掌握函数的嵌套调用和递归调用
2.掌握数组做函数参数的用法
3.掌握全局变量和局部变量的用法。?
4.掌握变量的存储类别。?
二、实验内容
1.[目的]掌握函数的嵌套调用方法。
[题目内容] 编写程序计算c
b a 。要求设计主函数main()读取a 、b 、
c 的值,并调用ratio 函数计算a/(b-c)的值。如果(b-c)=0那么ratio 就不能计算,因此,ratio 函数调用另一个函数dif ,以测试(b-c)的差是否为零,如果b 不等于c ,dif 返回1,否则返回0。
[输入] a 、b 、c 的值
[输出] 计算结果
[提示] main 函数调用ratio 函数,ratio 函数调用dif 函数。三个函数平行定义,嵌套调用。
#include <stdio.h>
void main()
{
float ratio(int x,int y ,int z);
int dif(int x,int y);
int a,b,c;
float d;
printf("请输入a,b,c:");
scanf("%d%d%d",&a,&b,&c);
d=ratio(a,b,c);
if(d==0.0) printf("b-c 为零。");
else printf("%d/(%d-%d)=%f\n",a,b,c,d);
}
float ratio(int x,int y ,int z)
{
if(dif(y ,z)==1) return (float)x/(float)(y-z);
else return 0.0;
}
int dif(int x,int y)
{
if(x==y) return 0;
else return 1;
}
2.[目的]利用标准库提供的随机数功能。
[题目内容]编写程序,帮助小学生练习乘法计算。用随机数函数生成2个一位的随机数,提示“6乘以7等于?”,要求从键盘输入答案,如果答案正确,输出
“很好!”,否则输出“不对!重做。”直到做对为止。
[输入]无
[输出]提示信息
[提示]包含系统文件stdlib.h,描述的随机数函数int rand(void)、void srand(unsigned seed)。
#include <stdio.h>
#include <stdlib.h>
void main()
{
int shu(void);
int a,b,c,i,flag;
for(i=1;i<=10;i++)
{
flag=1;
srand(11+i*2); /*不同的初始种子数,产生不同的随机数序列*/
a=shu();
srand(12+i*3); /*不同的初始种子数,产生不同的随机数序列*/
b=shu();
while(flag==1)
{
printf("%d乘以%d等于?",a,b);
scanf("%d",&c);
if(a*b==c)
{
printf("很好!");
flag=0;
}
else
printf("不对!重做。");
}
}
}
int shu(void)
{
return rand()%10;
}
3.[目的]掌握函数的递归调用。
[题目内容]编写一个程序,其功能为:用递归函数产生fibnocci数列的前20项并输出。fibnocci数列可用递归形式定义为:
fib[0]=0
fib[1]=1
fib[n]= fib[n-1]+fib[n-2] n>=2
[输入] 无
[输出] fibnocci 数列的前20项
[提示]使用for 循环语句以及递推算法,fibnocci 数列的前两项均为1,以后各项等于其前两项之和。
#include <stdio.h>
void main()
{
int fibonacci(int n);
int i;
for(i=0;i<20;i++)
printf("%6d\n",fibonacci(i));
}
int fibonacci(int n)
{
if(n==0||n==1)
return n;
else
return fibonacci(n-1)+fibonacci(n-2);
}
4.[目的]掌握函数的递归调用。
[题目内容] 用递归算法求n!.
[输入]整数n
[输出] n!
[提示] 计算n!的递归公式:
⎩⎨⎧>-==)
0()!1()0(1!n n n n n #include <stdio.h>
void main()
{
int fun(int x);
int n;
printf("请输入n:");
scanf("%d",&n);
if(n<0) printf("n 为负数。");
else printf("%d\n",fun(n));
}
int fun(int x)
{
if(x==0) return 1;
else return x*fun(x-1);
}
5.[目的]掌握函数的递归调用。
[题目内容] 求解两个整数的最大公约数的递归形式的定义:
gcd(m,n)= n m能整除以n
gcd(n,m%n) m能整除以n
[输入] m、n
[输出]最大公约数
[提示]
#include <stdio.h>
void main()
{
int gcd(int x,int y);
int m,n;
printf("请输入m,n:");
scanf("%d%d",&m,&n);
if(n==0) printf("n为零。");
else printf("%d\n",gcd(m,n));
}
int gcd(int x,int y)
{
if(x%y==0) return y;
else return gcd(y,x%y);
}
6.[目的]掌握数组作为函数参数的程序设计方法。
[题目内容]编写一个程序,输入一个包含10个整数的数列存储在一个数组中,调用求和函数求出10个整数的和值,调用求平均值函数求出10个整数的平均值,输出计算结果。
[输入]任意10个整数
[输出] 10个整数的和、平均值
[提示]
#include <stdio.h>
void main()
{
float average(int x[],int n);
int add(int x[],int n);
int i,a[10];
printf("请输入10个整数:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("和值=%d\n",add(a,10));
printf("平均值=%f\n",average(a,10));
}
int add(int x[],int n)
{
int i,sum=0;
for(i=0;i<n;i++)
sum=sum+x[i];
return sum;
}
float average(int x[],int n)
{c语言数组最大值最小值
float ave;
int i,sum=0;
for(i=0;i<n;i++)
sum=sum+x[i];
ave=(float)sum/n;
return ave;
}
7.[目的]掌握数组作为函数参数的程序设计方法。
[题目内容]编写一个程序,输入一个包含10个整数的数列存储在一个数组中,调用求最大值函数求出10个整数的最大值,调用求最小值函数求出10个整数的最小值,输出计算结果。
[输入]任意10个整数
[输出] 10个整数的最大值、最小值
[提示]
#include <stdio.h>
void main()
{
int fmax(int x[],int n);
int fmin(int x[],int n);
int i,a[10];
printf("请输入10个整数:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("最大值=%d\n",fmax(a,10));
printf("最小值=%d\n",fmin(a,10));
}
int fmax(int x[],int n)
{
int i,max=x[0];
for(i=1;i<n;i++)
if(x[i]>max ) max=x[i];
return max;
}
int fmin(int x[],int n)
{
int i,min=x[0];
for(i=1;i<n;i++)
if(x[i]<min) min=x[i];
return min;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论