题目:乘法口诀表,实现一个函数,打印乘法口诀表,但行数和列数是自己定的,例如输入9就打印9*9的惩罚口诀表,输入12就打印12*12的乘法口诀表。

#include <stdio.h>
void print_table(int n)
{
int i = 0;
for(i = 1; i <= n; i++) // 控制行数
{
int j = 0;
for(j = 1; j <= i; j++)
{
printf("%d*%d=%-5d ", i, j, i * j);
}
printf("\n");
}
}
int main()
{
int n = 0;
scanf("%d",&n);
print_table(n);
return 0;
}


题目:字符串逆序(递归实现),编写一个函数,reverse_string(char* string)(递归实现),实现将字符串中的字符反向排列,不能使用c库函数中的字符串操作函数。


用循环的方法实现(非递归)

#include <stdio.h>
int my_strlen(char* str)
{
int count = 0;
while(*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char arr[])
{
int left = 0;
int right = my_strlen(arr) - 1;
while(left < right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}


采用递归的方法:

#include <stdio.h>
int my_strlen(char* str)
{
int count = 0;
while(*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char* arr)
{
char tmp = arr[0];
int len = my_strlen(arr);
arr[0] = arr[len - 1];
arr[len - 1] = '\0';
if(my_strlen(arr + 1) >= 2)
{
reverse_string(arr + 1);
}
arr[len - 1] = tmp;
}
int main()
{
char arr[] = "abcdefg";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}


题目:计算一个数的每位之和(递归实现),写一个递归函数DigitSum(n),输入一个非负整数,返回组成他的数字之和,例如,调用DigitSum(1729),这应该返回1+7+2+9,它的和是19,输入1729,输出19

#include <stdio.h>
int DigitSum(unsigned int num)
{
if(num > 9)
{
return DigitSum(num / 10) + num % 10;
}
else
{
return num;
}
}
int main()
{
unsigned int num = 0;
scanf("%d", &num);
int ret = DigitSum(num);
printf("ret = %d\n", ret);
return 0;
}


题目:实现n的k次方,编写一个函数实现n的k次方,使用递归实现

#include <stdio.h>
double Pow(int n, int k)
{
// n^k = n * n^(k-1)
if(k < 0)
{
return (1.0 / (Pow(n, -k)));
}
else if(k == 0)
{
return 1;
}
else
{
return n * Pow(n, k - 1);
}
}
int main()
{
int n = 0;
int k = 0;
scanf("%d%d", &n, &k);
double ret = Pow(n, k);
printf("ret = %lf\n", ret);
return 0;
}