题目名称】
能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是:(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;
}