在调用函数的时候,真实传递给函数的是实参,函数定义部分函数名后的参数是形参。
形参和实参的名字是可以相同的,在函数调用的时候,形参是实参的一份临时拷贝,分别占用不同的内存空间,所以A正确,B错误,即使形参和实参的名字相同,也是占用不同的内存空间,所以B错误;
函数如果不被调用时,函数的形参是形式上存在的,但是函数在被调用的时候,形参是要分配内存空间的,所以D错误。
void print(char* s)
{
if(*s)
{
print(++s);//这里是递归
printf("%c", *s);
}
}
int main()
{
char str[] = "Geneius";
print(str);//suiene
return 0;
}
代码实现了递归倒序打印字符串的功能,但是++s使得s的值发生了变化,回不到’G’的位置上,故而没有打印’G
int fun(int x)
{
return (x==1) ? 1 : (x + fun(x-1));
}
求f(10) = 55
代码是一个递归函数,计算x+(x-1)+(x-2)+…+2+1即等差数列的和
图片整理
题目来源
#include <stdio.h>
int main() {
char a[1111] = {0};
scanf("%s",a);
int ax[1111] = {0};
int i = 0;
int j = 0;
int key = strlen(a);
for(i=0;a[i]!='\0';i++){
ax[i] = (int)a[i];
}
for(i=0;i<key-1;i++){
for(j=0;j<key-i-1;j++){
if(ax[j]>ax[j+1]){
int temp = ax[j];
ax[j] = ax[j+1];
ax[j+1] = temp;
}
}
}
for(i=0;i<key;i++){
printf("%c",ax[i]);
}
return 0;
}
#include <stdio.h>
int main() {
char str[1024] = {0};
while (gets(str)) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (str[j] > str[j + 1]) {
char ch = str[j + 1];
str[j + 1] = str[j];
str[j] = ch;
}
}
}
printf("%s\n", str);
}
return 0;
}
寻找数组的中心下标
题目来源
给你一个整数数组 nums ,请计算数组的 中心下标 。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。
如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。
从数组的0下标处开始向后逐下标统计,计算当前下标左边之和,和右边之和,进行判断,相等则为中心下标,如果数组循环结束都没有找到中心下标,则返回-1,表示没有中心下标。
int pivotIndex(int* nums, int numsSize) {
int i, j;
for (i = 0; i < numsSize; i++) {
//从假设中心点为0开始进行统计判断
int l_sum = 0, r_sum = 0;
//初始化左边之和和右边之和为0
for (j = 0; j < numsSize; j++) {
if (j < i) l_sum += nums[j];
//小于i坐标的都是左边的数字
else if (j > i) r_sum += nums[j];
//大于i坐标的都是右边的数字
}
if(l_sum == r_sum) {//如果两遍相等则i就是中心坐标
return i;
}
}
return - 1;
}