您的位置:首页 > 编程语言 > C语言/C++

c语言中static的作用以及(递归,八大算法原理)

2016-07-27 23:01 381 查看

static在c中的重要作用

//下面main.a
char a = 'A';

void msg()

{

printf("Hello\n");

}


int main(void)    {

extern char a;

printf("%c",a);

(void)msg();

return 0;

}


隐藏

main.a在a和msg的定义前加上static后,main.c中不能访问到他们了,利用这一特性可以在不同文件中定义同名的函数和变量,对于函数来说只有隐藏的作用,而对于变量还多出两个作用

保持变量内容的持久(全局变量)

存储在静态数据区的变量会在程序开始运行时就完成初始化,且该变量的内存只会分配一次,因此其值在下次调用时仍维持上此的值

static的第三个作用是默认初始化为0

其实全局变量也有这一属性,都是在静态数据区,内存中所有的字节默认值都是0x00。某些时候可以减少程序员的工作量。

递归函数代码

#include <stdio.h> // 告诉编译器printf函数的格式, 声明printf函数

int main(int argc, const char * argv[]) {
/*
有5个人坐在一起,问第5个人多少岁?他说比第4个人大两岁。问 第4个人岁数,他说比第3个人大两岁。问第3个人,又说比第2个 人大两岁。问第2个人,说比第1个人大两岁。最后问第1个人, 他说是10岁。请问第5个人多大?

第一个人得岁数 == 10
第二个人得岁数 == 第一个人 + 2  // 12
第三个人得岁数 == 第二个人 + 2  // 14
第四个人得岁数 == 第三个人 + 2  // 16
第五个人得岁数 == 第四个人 + 2  // 18

age(n) = age(n - 1) + 2;

*/

int result = age(3);
printf("result = %i\n", result);
return 0;
}
/*
递归函数必须满足以下2个特点
1.必须有一个明确的结束标志
2.自己调用自己
*/
int age(int n) // 3  2  1
{
// 定义结束条件
if (n == 1) {
return 10;
}else
{
//      return 14;
//      return 12;

return age(n - 1) + 2;
}
}


冒泡排序代码

int main(int argc, const char * argv[]) {
int number[6] = {21,42,13,56,72,29};
hjh_short(number, 6);
int i;
for (i = 0; i < 6; i ++) {
printf("%d\n",number[i]);
}
printf("\n");

return 0;
}
/*
冒泡就是两两比较取大的在前
*/
void hjh_short(int a[],int n)
{
int i,j,temp;

for (j = 0; j < n - 1; j ++) {
for (i = 0; i < n - 1 - j; i ++) {
if (a[i] > a [i + 1]) {
temp = a[i + 1];
a[i + 1] = a[i];
a[i] = temp;
}
}
}
}


选择排序代码

// 选择排序就是拿定义k=i,拿a[k]与后面的数比较,a[k]较大时,a[k]>a[j],k = j就互换位置,最后看k=i是否成立,不能再交换了,比冒泡效率高一点
void choise(int *a,int n)

{

int i,j,k,temp;

for(i=0;i<n-1;i++) {

k=i; /*给记号赋值*/

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

if(a[k]>a[j]) k=j; /*是k总是指向最小元素*/

if(i!=k) { /*当k!=i是才交换,否则a[i]即为最小*/

temp=a[i];

a[i]=a[k];

a[k]=temp;

}

}
}


快速排序代码

//快速法定义了三个参数,(数组首地址*a,要排序数组起始元素下标i,要排序数组结束元素下标j). 它首先选一个数组元素(一般为a[(i+j)/2],即中间元素)作为参照,把比它小的元素放到它的左边,比它大的放在右边。然后运用递归,在将它左,右两个子数组排序,最后完成整个数组的排序。下面分析其


插入排序代码

//插入法是一种比较直观的排序方法。它首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置。把数组元素插完也就完成了排序。


其他排序算法:http://blog.jobbole.com/11745/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: