利用函数写出乘法表
此题要求输入一个数,就写出相对的乘法表,如需要写出99乘法表,只需要用到两个循环即可,如果要对齐等号,应当在输出的时候%d变为%2d输出如下所示
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void multi_printf(int x)
{
int i;
int j;
for (i = 1; i < x + 1; i++)
{
for (j = 1; j < i+1; j++)
{
printf("%d x %d =%2d ", i, j, i * j);
}
printf("\n");
}
}
int main(){
int a = 0;
scanf("%d", &a);
multi_printf(a);
return 0;
}
结果如下
函数递归字符串逆次序赋值
对于一个字符串,如果需要输入的为"abcdef"输出为"fedcba"的话,让第一位和最后一位交换,第二位和倒数第二位交换即可,但是如果要利用到函数的递归的话,需要在每次嵌套前,再在字符串没有交换的位置加上一个\0的结束语句,如下所示
#include <stdio.h>
#include <string.h>
//交换字符串次序
reverse_str(char* str)
{
int n = strlen(str);
char temp = str[0];
str[0] = str[n - 1];
str[n - 1] = '\0';
if (n > 2)
{
reverse_str(str + 1);
}
str[n - 1] = temp;
}
int main()
{
char a[] = { "abcdefg" };
reverse_str(a);
printf("%s",a);
return 0;
}
保证输入进去后strlen函数可以检测到\0的结束语句,输出结果如下
当然,本人在这里还有一种不同的思路,就是利用多一个数组,对其元素和嵌套后的字符对齐再赋值输出也可以做到,如输入“abcdef"如果取一个空数组让其的第一位为f第二位为e以此类推也可以做到,难点在于嵌套循环最里层的那个嵌套为f最先开始的是字符a,如下所示
#include <stdio.h>
#include <string.h>
char reverse_str(char* x ,char * z,int y)
{
if (y - 1 >= 0)
{
*(z+y-1) = reverse_str((x + 1), z,y-1);
}
return *(x-1);
}
int main()
{
char a[] = "abcdefdfd";
char b[10] = "0";
int n = strlen(a);
reverse_str(a ,b,n);
int i;
for (i = 0; i <= strlen(b); i++)
a[i] = b[i];
printf("%s", a);
return 0;
}
两串代码均可以完成逆次序的赋值
计算整数每个数之和
如输入一个1728需要的到1+7+2+8的大小,我们可以用每次除10的模得到最后一位数的思想来完成这个递归的操作,如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int digitsum(int x)
{
if (x >= 1)
{
return(x % 10 + digitsum(x / 10));
}
else
return 0;
}
int main()
{
int a;
scanf("%d", &a);
int sum=digitsum(a);
printf("%d", sum);
}
当然,重新嵌套进入函数后不要忘了嵌套进去的数要除10,输出结果如下