写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
#include
int DigitSum(int n)
{
if (n>9)
{
return DigitSum(n / 10) + n % 10;
}
else
{
return n;
}
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret=DigitSum(n);
printf("%d", ret);
return 0;
}
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
**要求:**不能使用C函数库中的字符串操作函数。
比如:
char arr[] = “abcdef”;
逆序之后数组的内容变成:fedcba
在使用库函数的情况下
用左边的地址中的内容和最右边的地址中的内容交换
使用库函数strlen计算字符的长度
使用递归的方式实现
使用库函数,并且不是递归方式的实现
#include
#include
void reverse_string(char *p)
{
char* l = p;
char *r = p+strlen(p) - 1;
while (l<r)
{
char temp = *l;
*l = *r;
*r = temp;
r--;
l++;
}
}
int main()
{
char arr[] = "abcedfg";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
不使用库函数,用递归方法实现
#include
//计算字符串的长度
int My_strlen(char* p)
{
int count = 0;
while (*p)
{
count++;
p++;
}
return count;
}
//字符串逆序
void reverse_string(char* p)
{
int len = My_strlen(p);
char temp = p[0];
p[0] = p[len - 1];
p[len - 1] = '\0';
if (My_strlen(p+1)>=2)
{
reverse_string(p + 1);
}
p[len - 1] = temp;
}
int main()
{
char arr[] = "abcedfg";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
将数组A中的内容和数组B中的内容进行交换。(数组一样大)
创立两个数组
创建一个临时变量用来交换数组中的元素
#include
int main()
{
int a[5] = { 1,2,3,4,5 };
int b[5] = { 6,7,8,9,10 };
puts("交换前");
printf("数组a:");
for (int i = 0; i < 5; i++)
{
printf("%d ", a[i]);
}
printf("\n");
printf("数组b:");
for (int k = 0; k < 5; k++)
{
printf("%d ", b[k]);
}
printf("\n");
for (int i = 0; i < 5; i++)
{
int temp = b[i];
b[i] = a[i];
a[i] = temp;
}
puts("交换后");
printf("数组a:");
for (int i = 0; i < 5; i++)
{
printf("%d ", a[i]);
}
printf("\n");
printf("数组b:");
for (int k = 0; k < 5; k++)
{
printf("%d ", b[k]);
}
printf("\n");
return 0;
}
实现整型数组的冒泡排序
使用两个循环
外层循环控制冒泡排序的顺序
里层循环交换内容
#include
void BubbleSort(int* p, int sz)
{
for (int i = 0; i < sz-1; i++)
{
for (int j = 0; j < sz-i; j++)
{
if (p[j - 1] > p[j])
{
int temp = p[j - 1];
p[j - 1] = p[j];
p[j] = temp;
}
}
}
}
int main()
{
int arr[10] = { 12,45,3,61,13,56,96,46,123,456 };
int sz = sizeof(arr) / sizeof(arr[0]);
BubbleSort(arr, sz);
for (int i = 0; i < sz-1; i++)
{
printf("%d", arr[i]);
}
return 0;
}
不允许创建临时变量,交换两个整数的内容
可以通过^的方式来交换两个变量
#include
int main()
{
int a = 10;
int b = 20;
printf("交换前:\na=%d,b=%d", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("\n交换后:\na=%d,b=%d", a, b);
return 0;
}
写一个函数返回参数二进制中 1 的个数。
比如: 15 0000 1111 4 个 1
通过%2==1来确定二进制中是否是1
然后再/2才符合二进制的规则
#include
int count_one_bit(int n)
{
int count = 0;
while (n)
{
if (n%2!=0)
{
count++;
}
n = n / 2;
}
return count;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret=count_one_bit(n);
printf("%d", ret);
return 0;
}
获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列。
#include
void Printbit(int n)
{
int i = 0;
//打印偶数位
for ( i = 31; i >= 1; i-=2)
{
printf("%d ", (n >> i) & 1);
}
printf("\n");
//打印奇数位
for (i = 30; i >= 0; i -= 2)
{
printf("%d ", (n >> i) & 1);
}
printf("\n");
}
int main()
{
int n = 0;
scanf("%d", &n);
Printbit(n);
return 0;
}