函数应用题

一.函数的嵌套调用

1.定义一个函数(非主函数),返回三个整数的最大值,并在主函数中输出。(函数的参数个数,根据自己的需要设定)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int max(int x, int y);
int main() {
	int num1=0, num2=0, num3=0;
	scanf("%d %d %d", &num1, &num2, &num3);
	printf("%d", max(max(num1, num2), num3));//因为巧妙利用函数的嵌套调用,所以只要传递两个参数。

}

int max(int x, int y) {
	if(x>=y)
	{
		return x;
	}
	else {
		return y;
	}

}

2.利用递归方法求5!阶乘。函数体中有直接或者间接调用自身函数的情况。

int fun(int n) {
	if (n == 1||n==0) {//记得考虑全面,0和1的阶乘是1
		return 1;
	}
	else {
		int m = n * fun(n - 1);//利用函数的嵌套
		return m;
	}
}
int main() {
	int num = 5;
	int y=fun(num);
	printf("%d", y);

	
}

二. 函数的传参

1.如有以下程序:

#include<stdio.h>

void fun(int x, int y)

{

      x++;

      y++;

}

void main()

{

      int x = 1, y = 2;

      fun(x, y);

      printf("x=%d,y=%d\n", x, y);

}

程序运行后的输出结果为(       )    。

  •  A. x=1,y=2 【正确答案】

       B. 1,2

       C. x=2,y=3

       D. 2,3

答案解析:

本题考察的是函数调用的执行流程,以及函数参数的传递。

注意:(1)函数名表示函数的首地址。

(2)实参值传递给形参,是把实参值拷贝一份给形参。

(3)主函数体范围内定义的变量x、y只能在主函数体范围内使用,出了作用范围就失效。所以fun函数中的变量x、y与主函数的x、y是不同的变量。相当各自家的孩子名字一样,但不是同一个孩子。

计算机执行流程:

(1)计算机从主函数开始执行,在主函数中定义 x 、 y 两个整型变量,分别得到初值1、2。接着往下执行代码,调用fun函数。

(2)fun函数对应有两个实参 x 、y,函数调用过程把实参的值传给形参。fun函数的形参x,y接收了主函数中局部变量的值,x++、y++是fun函数的变量变化,与主函数的x、y无关。fun函数中的代码执行完毕,函数调用结束。

(3)fun函数调用结束,回到主函数执行完调用fun函数之后,输出主函数中x、y的值:x=1,y=2。

所以答案选择A选项。

2.以下程序的运行结果是 。

void sub(int x, int y);

int x1 = 30, x2 = 40;

int main()

{

      int x3 = 10, x4 = 20;

      sub(x3, x4);

      sub(x2, x1);

      printf("%d,%d,%d,%d\n", x3, x4, x1, x2);

      return 0;

}

void sub(int x, int y)

{

      x1 = x;

      x = y;

      y = x1;

}

答案解析:

本题考察全局变量与局部变量。

注意:

(1)局部变量:在函数内定义的变量,包括形参。作用范围:所在的作用域内(通常是所在的花括号内)。

(2)全局变量:在函数外定义的变量。作用范围:所在文件中定义全局变量开始往下的范围。

代码执行流程:

(1)在程序被执行时,全局变量获得内存。

(2)计算机执行程序从主函数开始执行,接着定义局部变量x3、x4;

(3)第一次调用sub函数,把实型x3和x4的值拷贝给sub函数的x、y形参,执行sub函数中的代码块。把x的值赋值给x1,该x1是全局变量,所以x1的值被改变(x1=10);把y的值赋值给x(x=20);把x1的值赋值给y(y=10)。调用完sub函数,sub函数的形参x和y也跟着被释放。

(4)接着,第二次调用sub函数。把实型x2和x1的值拷贝给sub函数的x、y形参,执行sub函数中的代码块。把x的值赋值给x1,该x1是全局变量,所以x1的值被改变(x1=40);把y的值赋值给x(x=30);把x1的值赋值给y(y=40)。调用完sub函数,sub函数的形参x和y也跟着被释放。

(5)输出x3、x4、x1、x2的值。分别是10  20  40  40

三.字符串拷贝函数

下面程序段的运行结果是(     )    。

     char s[80],sp[ ] = "HELLO!";

     strcpy(&s[1], sp);

     s[0] = 'h';

     puts(s);

 A. HELLO!

 B. hHELLO! 【正确答案】

 C. HELLOc!

 D. hELLO!

答案解析:

考察的点是:字符串拷贝函数。

(1)"HELLO!"保存到以&s[1]为首地址处,其中s[0]元素是没有得到值。

(2)把字符 'h' 赋值给s[0]元素。

(3)输出s中保存的字符串: "hHELLO!"

答案选择B选项。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿井侯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值