目录
1.字符串逆序(递归实现)
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
//非函数
//字符串逆序(递归实现)
int main()
{
char arr[] = "abcdef";//[a b c d e f \0]
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 2;
while (left<right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
printf("%s\n", arr);
return 0;
}
int main()
{
char arr[] = "abcdef";//[a b c d e f \0]
//int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
//int right = sz - 2;
int right = strlen(arr) - 1;
while (left<right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
printf("%s\n", arr);
return 0;
}
void reverse(char arr[])
{
int left = 0;
int right = strlen(arr) - 1;
while (left<right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";//[a b c d e f \0]
reverse(arr);
printf("%s\n", arr);
return 0;
}
void reverse(char* str)
{
char tmp = *str;//1
int len = strlen(str);
*str = *(str + len - 1);//2
*(str + len - 1)='\0';//3
if (strlen(str+1)>=2)
{
reverse(str + 1);//4
}
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdef";//[a b c d e f \0]
//int sz = sizeof(arr) / sizeof(arr[0]);
reverse(arr);
printf("%s\n", arr);
return 0;
}
int my_strlen(char* str)
{
int count = 0;
while (*str!='\0')
{
count++;
str++;
}
return count;
}
void reverse(char* str)
{
char tmp = *str;//1
int len = my_strlen(str);
*str = *(str + len - 1);//2
*(str + len - 1)='\0';//3
if (my_strlen(str+1)>=2)
{
reverse(str + 1);//4
}
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdef";//[a b c d e f \0]
//int sz = sizeof(arr) / sizeof(arr[0]);
reverse(arr);
printf("%s\n", arr);
return 0;
}
int my_strlen(char* str)
{
int count = 0;
while (*str!='\0')
{
count++;
str++;
}
return count;
}
void reverse(char arr[],int left,int right)
{
char tmp = arr[left];
arr [left] = arr[right];
arr [right] = tmp;
if (left<right)
{
reverse(arr, left + 1, right - 1);
}
}
int main()
{
char arr[] = "abcdef";//[a b c d e f \0]
int left = 0;
int right = my_strlen(arr)-1;
reverse(arr,left,right);
printf("%s\n", arr);
return 0;
}
2.计算一个数的每位之和(递归实现)
【题目内容】
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
unsigned 无符号类型,即非负数。
int DigitSum(unsigned int n)//1234
{
if (n>9)
{
return DigitSum(n / 10) + n % 10;
}
else
{
return n;
}
}
int main()
{
unsigned int n = 0;
scanf("%u", &n);
int sum=DigitSum(n);
printf("%d\n", sum);
return 0;
}
3.递归实现n的k次方
【题目内容】
编写一个函数实现n的k次方,使用递归实现。
double Pow(int n, int k)
{
if (k > 0)
return n * Pow(n, k - 1);
else if (k == 0)
return 1;
else
return 1.0/Pow(n, -k );
}
int main()
{
int n = 0;
int k = 0;
scanf("%d %d", &n, &k);
double ret = Pow(n,k);
printf("%lf\n", ret);
return 0;
}
4.交换数组
【题目内容】
将数组A中的内容和数组B中的内容进行交换。(数组一样大)
//交换数组
//
//【题目内容】
//
//将数组A中的内容和数组B中的内容进行交换。(数组一样大)
int main()
{
int arr1[] = { 1,3,5,7,9 };
int arr2[] = { 2,4,6,8,0 };
int i = 0;
int sz = sizeof(arr1) / sizeof(arr1[0]);
for ( i = 0; i < sz; i++)
{
int tmp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = tmp;
}
for ( i = 0; i < sz; i++)
{
printf("%d ", arr1[i]);
}
printf("\n");
for (i = 0; i < sz; i++)
{
printf("%d ", arr2[i]);
}
printf("\n");
//数组名是地址
//错误示范
//int tmp[]={0};
//tmp=arr1;
//arr1=arr2;
//arr2=tmp;
return 0;
}
5.数组操作
创建一个整形数组,完成对数组的操作
- 实现函数init() 初始化数组为全0
- 实现print() 打印数组的每个元素
- 实现reverse() 函数完成数组元素的逆置。
要求:自己设计以上函数的参数,返回值。
//【题目内容】
//
//创建一个整形数组,完成对数组的操作
//
//实现函数init() 初始化数组为全0
//实现print() 打印数组的每个元素
//实现reverse() 函数完成数组元素的逆置。
//要求:自己设计以上函数的参数,返回值。
void init(int arr[], int sz)
{
int i = 0;
for ( i = 0; i < sz; i++)
{
arr[i] = 0;
}
}
void print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void reverse(int arr[], int sz)
{
int left = 0;
int right = sz - 1;
while (left<right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
print(arr, sz);
reverse(arr, sz);
print(arr, sz);
init(arr, sz);
print(arr, sz);
return 0;
}