您的位置:首页 > 其它

递归实现10进制转8进制,字符串数字互转,判断数组正逆向

2014-07-28 00:24 399 查看


1.通过递归的方式打印八进制,使用递归的方式一般会有if,else。



2.将数字转字符串,字符串转数字

//#define
_CRT_SECURE_NO_WARNINGS   
//取消安全性检查,如果不加这一句的时候scanf将报错。

#include
<stdio.h>

#include
<stdlib.h>

 

/************************************************************************/

/*
获得数字的长度                                                      */

/************************************************************************/

int
getNumLength(int
num)

{

   
int
numLength = 0,
inum;

   
for (inum
= num;
inum;
inum /= 10)

   
{

       
numLength++;

   
}

   
return
numLength;

}

 

/************************************************************************/

/*
获得10位的值                                                        */

/************************************************************************/

int
get10(int
n)

{

   
int
res = 1;

   
for (int
i = 0;
i <
n;
i++)

   
{

       
res *= 10; 
//不断相乘

   
}

   
return
res;

}

 

/************************************************************************/

/*
将一个字符串变成数字                                                                    */

/************************************************************************/

int
character2Integer(char
*str)//-1代表失败

{

   
char *istr
= str;//保留副本

   
int
num = 0;

   
while (*str
!= '\0')

   
{

 

       
if ((*str)<'0'
|| (*str)>'9')

       
{

           
return 
-1;

       
}

       
//printf("%c\n",*str);//取出每一个字符

       
*str++;

       
num++;//计数,判断有多少位

   
}

   
printf("%d",
num);

   
int
lastres = 0;  
//12345 
1 12  123 1234 12345

   
for (int
i = 0;
i <
num;
i++)

   
{

       
lastres *= 10;  
//结果乘以10

       
int
wei =
istr[i]
- 48;//取出字符

       
lastres +=
wei;//累加

       
printf("\nwei=%d",
wei);//打印字符转换为整数的位

   
}

   
return 
lastres;

 

}

 

/************************************************************************/

/*
将数字转换成为字符串                                                */

/************************************************************************/

void
interger2character(int
num,char
*str)

{

   
int
i;

   
int
size =
getNumLength(num);

   
//printf("%d",size);

   
if (num
< 0)

   
{

       
str[0] =
'-';

       
num *= -1;

       
for (i
= size;
num;
num /= 10,
i--)

       
{

           
str[i]
= num % 10 + 48;

       
}

   
}

   
else {

       
for (i
= size - 1;
num;
num /= 10,
i--)

       
{

           
str[i]
= num % 10 + 48;

       
}

   
}

}

 

int
main(int
argc,
char *argv[])

{

   
char *str
= "1234567890";//编号为0的字符

   
char
str2[20] = {0};

   
//1、整形转字符串

   
int
num = -123456,i;

   
interger2character(num,str2);

   
//2、打印字符串

   
for (i
= 0; i < 20;i++)

   
{

       
putchar(str2[i]);

   
}

   
putchar(10);

   

   
printf("-------------------------------------\n");

   
num =
character2Integer(str);

   
printf("\n得到的数字是:%d\n",
num);

 

   
system("pause");

   
return 0;

}

3、判断数组正逆序,文件案例结构如下:



judgeArrayIfDecreaseByRecursion.h

#ifndef
_JUDGEARRAY_

#define
_JUDGEARRAY_

 

/************************************************************************/

/*
随机生成数组                                                        */

/************************************************************************/

extern
void
initArray(int
*arr,int
n);

 

/************************************************************************/

/*
打印数组内容                                                        */

/************************************************************************/

extern
void
printArray(int
*arr,int
n);

 

/************************************************************************/

/*
选择排序,升序                                                      */

/************************************************************************/

extern
void
sortArrayASC(int
*arr,
int
n);

 

/************************************************************************/

/*
选择排序,降序                                                      */

/************************************************************************/

extern
void
sortArrayDESC(int
*arr,int
n);

 

/************************************************************************/

/*
通过递归的方式查找数组是否是递减0表示非递减,1表示递减              
*/

/************************************************************************/

extern
int
judgeArrayIfDesc(int
*arr,
int
n,
int
i);

 

#endif

 

judgeArray.c

#include
<stdio.h>

#include
<stdlib.h>

#include
<time.h>

#include
"judgeArrayIfDecreaseByRecursion.h"

 

/************************************************************************/

/*
生成范围在n之内的数组                                                                    */

/************************************************************************/

void
initArray(int
*arr,
int
n)

{

   
//初始化随机种子

   
srand((int)time(NULL));

   
for (int
i = 0;
i <
n;
i++)

   
{

       
arr[i]
= rand()%n;

   
}

}

 

/************************************************************************/

/*
打印数组内容                                                        */

/************************************************************************/

void
printArray(int
*arr,
int
n)

{

   
int
i = 0;

   
for (i;
i <
n;
i++)

   
{

       
printf("%d
",arr[i]);

   
}

   
putchar(10);

}

 

/************************************************************************/

/*
选择排序,升序                                                      */

/************************************************************************/

void
sortArrayASC(int
*arr,
int
n)

{

   
int
i,
min,
j,
tmp;

   
for (i
= 0; i <
n;i++)

   
{

       
min =
i;  
//a[i]

       
for (j
= i + 1;
j <
n;j++)

       
{

           
if (arr[min]
> arr[j])

           
{

               
min =
j;

           
}

       
}

       
tmp =
arr[i];

       
arr[i]
= arr[min];

       
arr[min]
= tmp;

   
}

}

 

/************************************************************************/

/*
选择排序,降序                                                                    */

/************************************************************************/

void
sortArrayDESC(int
*arr,
int
n)

{

   
int
i,
max,
j,
tmp;

   
for (i
= 0; i <
n;i++)

   
{

       
max =
i;

       
for (j
= i + 1;
j <
n;j++)

       
{

           
if (arr[max]
< arr[j])

           
{

               
max =
j;

           
}

       
}

       
tmp =
arr[i];

       
arr[i]
= arr[max];

       
arr[max]
= tmp;

   
}

}

 

/************************************************************************/

/*
通过递归的方式查找数组是否是递减0表示非递减,1表示递减              
*/

/************************************************************************/

int
judgeArrayIfDesc(int
*arr,
int
n,int
i)

{

   
//int i = 0,j;

   
/*for (i = 0; i < n;i++)

   
{

   
for (j = i + 1; j < n;j++)

   
{

   
if (arr[i] < arr[j])

   
{

   
return 0;

   
}

   
}

   
}*/

 

 

   
if (i
+ 1 < n )

   
{

       
return (arr[i]
< arr[i
+ 1]) ? 0 : judgeArrayIfDesc(arr,
n,
i + 1);

   
}

   
return 1;

}

judgeArrayIfDecreaseByRecursion.c

#include
<stdio.h>

#include
<stdlib.h>

#include
"judgeArrayIfDecreaseByRecursion.h"

#define
N 20

 

int
main(int
argc,
char *argv[])

{

   
int
arr[N];

   
int
res;

   
initArray(arr,N);

   
printArray(arr,
N);

   
sortArrayDESC(arr,N);

   
//sortArrayASC(arr, N);

   
printArray(arr,
N);

 

   
res =
judgeArrayIfDesc(arr,
N,0);

   
switch (res)

   
{

   
case 0:printf("非递减\n");
break;

   
case 1:printf("递减\n");break;

   
}

   

   
system("pause");

   
return 0;

}

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐