广州软件学院c语言—实验11 函数(2)

实验11 函数(2)

一、实验目的

1、掌握函数的嵌套调用、递归调用的方法;

2、理解数组名作函数参数时,实参向形参传递的是数组首地址,可以利用此特性在函数中修改数组元素的值,从而达到改变实参数组的目的,并掌握选择排序等算法;

3、能正确区分局部变量和全局变量的定义、作用域的不同,并能正确使用这两类不同变量;

4、VC++调试入门。

二、实验内容

1(基础题)编程实现:定义一个求n的阶乘的函数long fac(int n),在主函数输入一个正整数,然后调用fac函数输出这个数的阶乘值。主函数在前,fac函数在后面定义.提示:用递归方法求n!,n!可用递归关系来表示:

程序代码:

#include<stdio.h>
int main()
{
	long long Fac(int n);
	int n;
	printf("请输入一个数字:");
	scanf("%d", &n);
	printf("%d !=%lld\n", n, Fac(n));
	return 0;
}
long long Fac(int n)
{
	if (n == 1)
		return 1;
	else
		return n * Fac(n-1);
}

2(基础题)编程实现计算10个数的最大值,要求如下:

  1. void array_input(int array[], int n)的功能是:输入整型数组array的各元素值,参数n是数组元素的个数;
  2. int max(int array[], int n)的功能是:对整型数组array的各元素求最大值并返回该最大值,参数n是数组元素的个数;

(3)主函数的功能:定义一个是长度为10的整型数组,通过调用array_input()输入各元素的值,再调用max()得到所有元素最大值,最后输出该最大值;

(4)主函数在前,上述两个函数在后面定义。程序运行如下图所示:

程序代码:

#include<stdio.h>
int main ()
{
	int max(int x,int y);
	int a[10],m,i;
	printf("请输入数据:");
	for(i=i;i<=10;i++)
	scanf("%d",&a[i]);
	printf("\n");
	for(i=2,m=a[1];i<=10;i++)
	if(max(m,a[i])>m)m=a[i];
	printf("数组十个元素的最大值是:%d",m);
	return 0;
}
int max(int x,int y)
{
	return(x>y?x:y);
}

3、(基础题)编程计算数组各元素的平方和,要求如下:

(1)void array_input(int array[], int n)的功能是:输入整型数组array的各元素值,参数n是数组元素的个数;

(2) int square_sum(int array[], int n)的功能是:对整型数组array的各元素的平方求和,参数n是数组元素的个数;

(3)主函数的功能:定义一个是长度为6的整型数组,通过调用array_input()输入各元素的值,再调用square_sum()得到各元素平方和,最后输出结果;

(4)主函数在前,上述两个函数在后面定义。程序运行如下图所示:

程序代码:

#include<stdio.h>
int main ()
{
	void array_input(int array[],int n);
	int square_sum(int array[],int n);
	int n,i,a[6],sum;
	printf("请输入整型数组的6个元素:\n");
	array_input(a,6);
	sum=square_sum(a,6);
	printf("数组a的各元素平方和:%d",sum);
	return 0;
	
 } 
 void array_input(int array[],int n)
 {
 	int i;
 	for(i=0;i<=n-1;i++)
 	scanf("%d",&array[i]);
	 
 }
 int square_sum(int array[],int n)
 {
 	int i,sum;
 	for(i=0,sum=0;i<=n-1;i++)
 	{
 		sum=sum+array[i]*array[i];
	 }
	 return sum;
 }

4、(基础题)比较全局变量与局部变量:

分析下列程序,写出执行结果,然后上机调试验证(参考VC++调试入门.doc,先按要求设置断点,再按F11逐语句 或 按F10 逐过程调试),比较结果是否正确,并回答相关问题:

#include <stdio.h>

int c, a=4 ;

int func1(int a , int b);

int main()

{ //断点① 观察变量a,c的值

int b=2, p=0;

c=1;

p=func1(b, a); //断点②  观察变量a,b,c的值

printf("a=%d, b=%d, c=%d, p=%d\n",a,b,c,p); //断点⑤ 观察变量p的值

return 0;

}

int func1(int a , int b)

{  

c=a*b; //断点③ 观察变量a,b,c的值

a=b-1;

b++;

return (a+b+1); //断点④ 观察变量a,b,c的值

}

问题:

  1. 哪些是局部变量? 哪些是全局变量?
  2. 体会这些变量的作用域及变化的情况。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值