练习
1.将参数字符串中的字符反向排列,不是逆序打印
循环的方式
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = "abc";
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
//int right = sz - 2;
int right = strlen(arr)-1;
while (left<right)
{
char temp = arr[left];
arr[left]= arr[right];
arr[right] = temp;
left++;
right--;
}
printf("%s\n",arr);
return 0;
}
函数的方式
void reverse(char arr[])
{
int left = 0;
int right = strlen(arr)-1;
while (left<right)
{
char temp = arr[left];
arr[left]= arr[right];
arr[right] = temp;
left++;
right--;
}
}
int main()
{
char arr[] = "abc";
reverse(arr);
printf("%s\n", arr);
return 0;
}
递归的方法
void reverse(char* string)
{
char temp = *string;
int len = strlen(string);
*string = *(string + len - 1);
*(string + len - 1)='\0';
if(strlen(string+1)>=2)
reverse(string + 1);
*(string + len - 1) = temp;
}
int main()
{
char arr[] = "abc";
reverse(arr);
printf("%s\n", arr);
return 0;
}
不适用库函数strlen ,自己写一个my_strlen
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse(char* string)
{
char temp = *string;
int len = my_strlen(string);
*string = *(string + len - 1);
*(string + len - 1)='\0';
if(strlen(string+1)>=2)
reverse(string + 1);
*(string + len - 1) = temp;
}
int main()
{
char arr[] = "abc";
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)
{
if(left<right)
{
char temp = arr[left];
arr[left]= arr[right];
arr[right] = temp;
reverse(arr, left + 1, right - 1);
}
}
int main()
{
char arr[] = "abc";
int left = 0;
int right = my_strlen(arr) - 1;
reverse(arr,left,right);
printf("%s\n", arr);
return 0;
}
2.写一个递归函数DigiSum(n),输入一个非负数,返回组成他的数字之和 输入:1729 输出:19
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", sum);
}
3.递归实现n的k次方
double pow(int n,int k)
{
if (k > 0)
return n * pow(n,k - 1);
if (k == 0)
return 1;
if (k < 0)
return 1.0 / pow(n,-k);
}
int main()
{
int n = 0;
int k = 0;
scanf("%d", &n);
scanf("%d", &k);
double ret=pow(n, k);
printf("%lf", ret);
}
注意
4.将数组A中的内容与数组B中的内容进行交换(数组一样大)
int main()
{
int arr1[] = { 0,1,2,3,4,5 };
int arr2[] = { 6,7,8,9,10,0 };
int i = 0;
int sz = sizeof(arr1) / sizeof(arr1[0]);
for (i = 0; i < sz; i++ )
{
int temp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = temp;
}
for (i = 0; i < sz; i++)
{
printf("%d", arr1[i]);
}
printf("\n");
for (i = 0; i < sz; i++)
{
printf("%d", arr2[i]);
}
return 0;
}
5.创建一个整形数组,完成对数组的操作
1.实现函数init() 初始化数组全为0
2.实现printf() 打印数组的每个元素
3.实现reverse() 函数完成数组元素的逆置
void init(int arr[],int sz)
{
int i;
for (i=0; i < sz; i++)
{
arr[i] = 0;
}
}void print(int arr[],int sz)
{
int i;
for (i=0; i < sz; i++)
{
printf("%d", arr[i]);
}
printf("\n");
}
void reverse(int arr[],int sz)
{
int right = sz-1;
int left = 0;
while (left < right)
{
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}