- 关于函数调用说法不正确的是( $C099 $)
A.函数可以传值调用,传值调用的时候形参是实参的一份临时拷贝
B.函数可以传址调用,传址调用的时候,可以通过形参操作实参
C.函数可以嵌套定义,但是不能嵌套调用
D.函数可以嵌套调用k但是不能嵌套定义
#include <stdio.h>
void test(int*p1,int *p2)
{
*p1 = 1;
*p2 = 2;
}
int main() {
int a = 0;
int b = 0;
test(&a, &b);
return 0;
}
- 在函数调用时,以下说法正确的是(
B
B
B)
A.函数调用后必须带回返回值
B.实际参数和形式参数可以同名
C.函数间的数据传递不可以使用全局变量
D.主调函数和被调函数总是在同一个文件里 - 关于函数的声明和定义说法正确的是(
B
B
B )
A.函数的定义必须放在函数的使用之前
B.函数必须保证先声明后使用
C.函数定义在使用之后,也可以不明
D.函数的声明就是说明函数是怎么实现的 - 关于实参和形参描述不正确的是(
C
C
C)
A.形参是实参的一份临时拷贝
B.形参是在函数调用的时候才实例化,才开辟内存空间
C.改变形参就是改变实参
D.函数调用如果采用传值调用,改变形参不影响实参 - 可控的乘法口诀表
```c
#include <stdio.h>
int printf_table(int n)
{
int i = 0;
for (i = 1; i <= n; i++)
{
int j = 0;
for (j = 1; j <= i; j++)
{
printf("%d*%d = %d\t ", i, j, i * j);
}
printf("\n");
}
}
int main() {
int n = 0;
scanf_s("%d", &n);
printf_table(n);
return 0;
}
- 关于递归的描述错误的是(
C
C
C)
A.存在限制条件,当满足这个限制条件的时候,递归便不再继续
B.每次递归调用之后越来越接近这个限制条件
C.递归可以无限递归下去
D.递归层次太深,会出现栈益出现象 - 递归习题
这个的返回值是啥?
int Fun(int n)
{
if (n==0)
{
return 2;
}
else
{
return 2 * Fun(n + 1);
}
}
- 字符串逆序(递归实现)题目内容:
编写一个函数reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列,不是逆序打印。要求:不能使用C函数库中的字符串操作函数。
比如:
char arr[] = "abcdef”;
逆序之后数组的内容变成: fedba
#include <stdio.h>5
int my_strlen(char* str)
{
int count = 0;
while(*str!='\0')
{
count++;
str++;
}
return count;
}
void reverse_strint(char* arr)
{
char tmp = *str;
int len = my_strlen(str);
*str = *(str + len - 1);
*(str + len - 1) = '\0';
if (my_strlen(str+1)>=2)
{
reverse_strint(str + 1);
}
}
int main()
{
char arr[] = "sdauuhusai";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}