1. 将字符逆序(abcdef变成fedcba)并且不能使用库函数
提示:strlen是计算字符串长度的库函数(到\0截至)–需要引用头文件#include<string.h>
方法一:计数器法:写一个自己的strlen函数–用到计数器方法
nt my_strlen(char* str)//写一个自己的strlen函数--用到计数器方法 { int count=0; while(*str !='\0') { count++; str++; } return count; } void reverse_string(char arr[])//不需要打印就 void { int left=0; int right=my_strlen(arr)-1;//因为从1开始所以-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",arr) return 0; }
方法二:用递归来写(递归必须有条件限制,并且每递归一次就要逼近条件)
1.a f 交换
2.逆序reverse_string(’‘b c d e’’);
int my_strlen(char* str) { int count=0; while(*str !='\0') { count++; str++; } return count; } reverse_string(char* arr) { char tmp=arr[0];//第一个字符先放到临时变量去 int len=my_strlen(arr); arr[0]=arr[len-1];//把最后一个字符放到第一个的位置 arr[len-1]='\0';//最后一个字符的位置放\0 if(my_strlen(arr+1)>=2) reverse_string(arr+1);//递归 arr[len-1]=tmp; } int main() { char arr[]="abcdef"; reverse_string(arr); printf("%s\n",arr); return 0; }
3. 写一个数(非负)计算其每位数字之和
//输入1729 输出19 //DigitSum(1729) //DigitSum(172)+1729%10 //DigitSum(17)+1729%10+172%10 //DigitSum(1)+1729%10+172%10+17%10 int DigitSum(unsigned int num) { if(num>9) { return DigitSum(num/10)+num%10; } } int main() { unsigned int num=0; scanf_s("%d",&num); int ret=DigitSum(num); printf("ret=%d",ret); return 0; }
4. 递归实现n的K次方
思路:nk = n * n(k-1)
double Pow(int n,int k) { if(k==0) { return 1; } else if(k<0) { return (1.0/(Pow(n,-k))); } else { return n*Pow(n,k-1); } } int main() { int n=0; int k=0; sanf_s("%d%d",&n,&k); double ret=Pow(n,k); printf("ret=%lf",ret); return 0; }