scanf格式控制错误,你这么写的话输入要变成下面这样,也就是scanf的“非输入控制符”都要原样输入。这里的非控制符就是指%d %f这种格式控制符外,其他字母其他符号等都是非控制输入符
r=1.5,h=3
而如果你只想输入数字,并不想输入r=xxx这种格式,你应该直接用
scanf("%f",&r);
而如果你想按照你说的话,就得将print和scanf拆开,一个一个输入,至于printf加不加换行符看你心情了。
printf("请输入半径:");
scanf("%f",&r);
printf("请输入高:");
scanf("%f",&h);
控制台不能输入 1,5,3 而应输入r=1,h=5
内容实现:
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:
char arr[] = "abcdef";
逆序之后数组的内容变成:fedcba
这个题目的要求是将字符串反向打印,而不是逆序,而且不能使用c函数中的字符串操作函数
既然要反向,那么需要交换两个字符的位置,然后打印即可,递归实现:求一个字符串“abcdef”,在字符串里的是abcdef\0,大事化小,先把a放到临时变量里,然后把f放到a里,然后把\0放入f中,让bcde\0变成新的字符串,而调用自己的时候需要设定条件,如果中间剩下一个的时候就不需要交换了,所以大于等于2的时候调用
int my_strlen(char* string)
{
int ret = 0;
while (*string != '\0')
{
ret++;
string++;
}
return ret;
}
void reverse(char* string)
{
int len = my_strlen(string);
char tmp = *string;
*string = *(string+len-1);
*(string + len - 1) = '\0';
if (my_strlen(string + 1) >= 2)
reverse(string + 1);
*(string + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdef";
reverse(arr);
printf("%s", arr);
return 0;
}
内容实现
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
求一个非负整数每个位数之和,如1729可以分成 172 + 9, 17 + 2 + 9 , 1 +7+2+9,递归实现,如果是一位数的时候,返回这个数,如果大于一位数,返回 除以10加上摸10的值,1729/10 172 递归递下去,归回来的每位数加上取余的数
int fac(unsigned int n)
{
if (n > 9)
{
return fac(n / 10) + n % 10;
}
return n;
}
int main()
{
unsigned int n = 0;
scanf("%d", &n);
int sum = fac(n);
printf("%d", sum);
return 0;
}
内容实现
编写一个函数实现n的k次方,使用递归实现。