第七章 函数与编译预处理(二)

目录

前言

一、数组做函数的参数

2.用起泡法把N个数按升序排序

3.每个学生有3门成绩(整数),计算并输出每个学生的平均成绩。要求3门成绩及平均成绩存放在一个二维数组中。

 二、函数的嵌套调用

1.输入m,n的值,计算组合数的值

三、函数的递归调用 

1.用递归函数计算n的阶乘

 四、局部变量和全局变量

1.有10个成绩,编写一个函数,计算最高分、最低分、平均分

 


前言

所有程序已经进行过调试


一、数组做函数的参数

1.计算数组所有元素之和及最后的3个元素之和

代码如下(示例):

#include<stdio.h>
int main()
{
	int sum(int a[],int n);
	int x[5]={1,2,3,4,5},y1,y2;
	y1=sum(x,5);
	y2=sum(&x[2],3);
	printf("y1=%d y2=%d\n",y1,y2);
	return 0;
}
int sum(int a[],int n)
{
	int i,s=0;
	for(i=0;i<n;i++)
		s=s+a[i];
	return s;
}

2.用起泡法把N个数按升序排序

代码如下:

#include<stdio.h>
#define N 5
void sort(int a[],int n)
{
	int i,j,t;
	for(i=0;i<N-1;i++)
		for(j=0;j<N-1-i;j++)
			if(a[j]>a[j+1])
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;}
}
int main()
{
	int a[N],i;
	for(i=0;i<N;i++)
		scanf("%d",a+i);
	sort(a,N);
	for(i=0;i<N;i++)
		printf("%d ",a[i]);
return 0;}

3.每个学生有3门成绩(整数),计算并输出每个学生的平均成绩。要求3门成绩及平均成绩存放在一个二维数组中。

#include<stdio.h>
#define N 3
void average(int a[][4],int n)
{
	int i,j,sum;
	for(i=0;i<N;i++)
	{	for(sum=0,j=0;j<3;j++)
		sum=sum+a[i][j];
	a[i][3]=(int)(sum/3.0+0.5);
	}
}
int main()
{
	int b[N][4],i,j;
for(i=0;i<N;i++)
for(j=0;j<3;j++)
scanf("%d",&b[i][j]);
average(b,N);
printf("avarage score:\n");
for(i=0;i<N;i++)
printf("%d\n",b[i][3]);
return 0;}

1. 三门成绩求和    for(sum=0,j=0;j<3;j++)
        sum=sum+a[i][j];
    a[i][3]=(int)(sum/3.0+0.5);//注意类型转化,循环每次都是sum=0//

2.for(i=0;i<N;i++)
printf("%d\n",b[i][3]);//注意只输出最后一列,用一次循环结构就可以了//

 二、函数的嵌套调用

1.输入m,n的值,计算组合数的值

#include<stdio.h>
double fact(int x)
{
	int i;
	double t=1;
	for(i=1;i<=x;i++)
	t=t*i;
	return t;}
double com(int n,int m)
{
	return(fact(n)/(fact(m)*fact(n-m)));
}
int main()
{
	int n,m;
	printf("please input n,m(n>=m>=0):\n");
	scanf("%d%d",&n,&m);
	printf("%.0lf\n",com(n,m));
	return 0;
}

主调函数调用函数com,函数com调用函数fact 

三、函数的递归调用 

1.用递归函数计算n的阶乘

#include<stdio.h>
int main()
{
	long fac(int n);
	int n;
	long y;
	scanf("%d",&n);
	y=fac(n);
	printf("%d!=%ld\n",n,y);
	return 0;
}
 
long fac(int n)
{
	long f;
	if(n==0||n==1)
		f=1;
	else
		f=n*fac(n-1);
	return (f);}

long f;
    if(n==0||n==1)
        f=1;
    else
        f=n*fac(n-1);       以(n-1)为参数调用fac函数

 四、局部变量和全局变量

1.有10个成绩,编写一个函数,计算最高分、最低分、平均分

#include<stdio.h>
int max,min;
float ave(int  a[],int n)
{
	int i;
	float sum;
	max=min=a[0];
	sum=0;
	for(i=0;i<n;i++)
	{
		if(a[i]>max)
			max=a[i];
		else if(a[i]<min)
			min=a[i];
		sum=a[i]+sum;
	}
	return sum/n;
}
int main()
{
	int a[10],i;
	float y;
	for(i=0;i<10;i++)
		scanf("%d",&a[i]);
	y=ave(a,10);
	printf("%d,%d,%.1f",max,min,y);
	return 0;}

运用全局变量,返回2个值 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值