1、整数求反
如123456求反之后变654321
思路:定义两个变量,一个变量保存原来的数,另外一个保存取反之后的数。然后利用对10求余的方法将要取反的数的最低位首先取出来,然后利用除法(除以10)将最低位去掉。利用num>0不断的循环一位一位的取出来即可。
关键:***对10求余是取出最低位***
***除以10是去除最低位***
int main(void)
{
int num = 123456;
int r_num = 0;
while(num > 0)
{
r_num = r_num*10 + (num%10);
num = num/10;
}
printf("%d
", r_num);
}
2、字符串求反(逆序)
思路1:先算出字符串的长度,然后记录中间的位置,循环交换第一个字符和最后一个字符
思路2:函数接口设计成要char *ReverseString(char *s, int start, int end)
char *ReverseString(char *s)
{
if(s == NULL)
{
return s;
}
int len = strlen(s);
int i = 0;
char temp;
for(i=0; i
char *ReverString(char *str, int start, int end)
{
if(str == NULL)
{
return str;
}
cahr temp;
while(start < end)
{
temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
start--;
}
return str;
}
3、递归求n的阶乘
思路:注意递归结束的条件即可
int recursion(int n)
{
if(n <= 0)
{
return 0;
}
else if(n == 1)
{
return 1;
}
else
{
n= n*recursion(n-1)
}
return n;
}
4、不用库函数比较两个字符串的大小
int strcmp(const char*src, const char *dst)
{
if(src==NULL || dst==NULL)
{
return -1;
}
while(*src && *dst && *src==*dst)
{
src++;
dst++;
}
return *src-*dst;
}
5、写一个程序读入一个文件判断文件中字母a的个数
#include
#include
int main(void)
{
FILE *fp = NULL;
char ch;
int count = 0;
//打开文件
fp = open("test.txt", "r");
if(fp == NULL)
{
printf("oepn error
");
return -1;
}
//循环读取文件的字符
while((ch = fgetc(fp)) != EOF)
{
if(ch == 'a')
{
count++;
}
}
printf("%d
", count);
//关闭文件
close(fp);
return 0;
}
6、求0--3000中含有9和2的全部数之和
思路:从29循环到3000,然后将每个数转换成字符串,写一个函数检测这个字符串有没有含有‘9’,‘2’的字符,如果含有则返回1
没有则返回0,如果成立则将此数叠加起来。
需要的函数:数字转字符串的函数char * myitoa(char *buf, int num, int radix)
char *myitoa(int num, char *str, int radix)
{
char index[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int temp;
int i = 0, j, k;
if(radix==10 && num<0)
{
temp = -num;
str[i++] = '-';
}
else
{
temp = num;
}
while(temp)
{
str[i++] = index[temp%radix];
temp = temp/radix;
}
str[i] = '