c语言 函数调用作业 递归

题目名称】

能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是:(a )

【题目内容】

A. return 这二个数 只能返回一个数字

B. 形参用数组穿数组过去 数组可以把数据带回来

C. 形参用二个指针

D. 用二个全局变量
A代码举例如下在这里插入图片描述
B代码举例 所以b对了
在这里插入图片描述
c代码举例如下
在这里插入图片描述

d代码举例如下
在这里插入图片描述
全局变量怎么声明 比如其他地方已经 int a=0这样定义了 其他地方想用 直接int a;就行


【题目名称】

关于函数调用说法不正确的是:( c )

【题目内容】

A. 函数可以传值调用,传值调用的时候形参是实参的一份临时拷贝

B. 函数可以传址调用,传址调用的时候,可以通过形参操作实参

C. 函数可以嵌套定义,但是不能嵌套调用反了

D. 函数可以嵌套调用,但是不能嵌套定义


【题目名称】

在函数调用时,以下说法正确的是:(b )

【题目内容】

A. 函数调用后必须带回返回值

B. 实际参数和形式参数可以同名

C. 函数间的数据传递不可以使用全局变量

D. 主调函数和被调函数总是在同一个文件里 其他文件也可以用 只要声明一下就行


【题目名称】

关于函数的声明和定义说法正确的是:( b)

【题目内容】

A. 函数的定义必须放在函数的使用之前

B. 函数必须保证先声明后使用

C. 函数定义在使用之后,也可以不声明

D. 函数的声明就是说明函数是怎么实现的


题目名称】

关于实参和形参描述错误的是:(c )

【题目内容】

A. 形参是实参的一份临时拷贝

B. 形参是在函数调用的时候才实例化,才开辟内存空间

C. 改变形参就是改变实参

D. 函数调用如果采用传值调用,改变形参不影响实参


【题目名称】
** //这是逗号表达式 (v1,v2)相当于v2只用看第二个** 逗号表达式的结果就是最后一个的结果
函数调用exec((vl,v2),(v3,v4),v5,v6);中,实参的个数是:( b)

【题目内容】

A. 3

B. 4

C. 5

D. 6


【题目名称】

乘法口诀表

【题目内容】

实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定

如:输入9,输出99口诀表,输出12,输出1212的乘法口诀表。

void print_table(int n) //n传过来需要一个变量接收就用n
{
	int i = 0;//行数
	for (i = 1; i <= n; i++)
	{
		int j = 0;//列数
		for (j = 1; j <= i; j++)
		{
			printf("% d * %d = %2d ", i, j, i * j);
		}
		printf("\n");
	}


}
int main()
{
	int n = 0;
	scanf("%d", &n);//几行几列  行代码
	//输出函数
	print_table(n);//传入n这里能表示几行几列
	//函数七起名很关键  最好能体现函数的功能


	return 0;
}

递归作业

【题目名称】

关于递归的描述错误的是:( c )

【题目内容】

A. 存在限制条件,当满足这个限制条件的时候,递归便不再继续

B. 每次递归调用之后越来越接近这个限制条件

C. 递归可以无限递归下去

D. 递归层次太深,会出现栈溢出现象


【题目名称】

根据下面递归函数:调用函数Fun(2),返回值是多少( d )

int Fun(int n)
{
if(n==5)
return 2;
else
return 2*Fun(n+1); 2代入到这里 发现2 没得×。 调用这个从刚开始的int Fun(int n)开始算 , n是2 (n+1)是3
}
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【题目内容】

A. 2

B. 4

C. 8

D. 16

int Fun(int n)
{
    if (n == 5)
        return 2;
    else
        return 2 * Fun(n + 1);
}
int main()
{
    printf("%d ", Fun(2));

    return 0;
}

代码结果如上


题目名称】

字符串逆序(递归实现)

【题目内容】

编写一个函数 reverse_string(char * string)(递归实现)

实现:将参数字符串中的字符反向排列,不是逆序打印。

要求:不能使用C函数库中的字符串操作函数。

比如:

char arr[] = “abcdef”;

逆序之后数组的内容变成:fedcba

解析

在这里插入图片描述
在这里插入图片描述
题目要求不能使用库函数 所以strlen不成立
那应该怎么办 自己定义一个函数库
my_strlen

int my_strlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
			str++;
	}
	return count;

}
void reverse_string(char* str)
{
	int left = 0;
	int right = my_strlen(str) - 1;
	while (left<right)
	{
	
		char tmp = str[left];
		str[left] = str[right];
		str[right] = tmp;
		left++;
		right--;
	}

}

int main()
{
	char arr[] ="abcdef";
	reverse_string(arr);
	printf("%s", arr);

	return 0;
}

下面相当于一样的 跟下面递归里的相似
在这里插入图片描述

上面是普遍方法 接下来是递归实现

在这里插入图片描述

int my_strlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
			str++;
	}
	return count;

}
void reverse_string(char* str)
{
	char tmp = *str;  //就是找到第一个
	int len = my_strlen(str); //求出长度
	*str=*(str + len - 1);//len 是长度减去1找出下表,求出了最后一个。最后前面加上*str 因为要放到最前面
	*(str + len - 1) = '\0';  //bcde向后看时  他们是个字符串
	if (my_strlen(str + 1)>= 2)
	{
		reverse_string(str + 1);//调用reverse_string来逆序中间的长度
	}
	*(str + len - 1) = tmp;//把这个值放到最后
}

int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s", arr);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值