(IOS自学)C语言基础学习(一)

来源:互联网 发布:照片比较软件 编辑:程序博客网 时间:2024/05/17 09:11

函数:

.关于自定义函数分配空间问题:在形参定义后,并不会立即分配空间,而是在函数被调用时才会真正的分配内存空间

数组:

1。数组名代表数组的地址。(%p——获取数组的地址) 

2。先定义的数组在内存单元里分配高地址,后定义的分配低地址。

3.存储方式:

     1)计算机会给数组分配一块连续的存储空间

     2)数组名代表数组的首地址,从首地址位置,一次存入数组的第1个,第2个。。。。第n个元素。

     3)每个元素占用相同的字节数(取决于数组类型)。

     4)并且元素之间的地址是连续的。

4。数组名是一个常量,存储的是数组的首地址

5。数组作为函数参数有两种形式:

       1)一种是把数组元素作为实参使用。

        2)一种是把数组名作为函数的形参和实参使用。(比如定义一个函数的形参为数组,那么调用该函数时使用的实参也必须是数组名)

            注意: 1)在实现实参和形参传递时不是“值传递”,而是“地址传递”,实参数组名将该数组的起始地址传递给形参数组,两个数组共享

                            一段内存单元,编译系统不再为形参分配存储单元。

                        2)数组作为函数参数后,数组的长度信息会丢失,变成地址长度。

                        3)C语言中规定,不管什么数据类型的数据,数据的内存地址在内存中都只占8个字节。

几种排序方法

1.冒泡排序:

思想:大数沉淀,小数气泡。

代码实现:

<span style="font-size:14px;">#include <stdio.h>//定义一个冒泡的函数void maoPao(int arr[],int len){    int temp;    for (int i=0; i<len-1; i++) {        for (int j=0; j<len-1-i; j++) {            if(arr[j]>arr[j+1]){                temp = arr[j+1];                arr[j+1] = arr[j];                arr[j] = temp;            }        }    }}int main(int argc, const char * argv[]) {        int a[10] = {11,21,222,1,33,23,111,232,55,43};    maoPao(a, 10);    for (int i=0; i<10; i++) {        printf("%d\t",a[i]);    }    printf("\n");    return 0;}</span>

2.选择排序

思想:

首先在未排列序列中找到最小的元素,放到排序序列的起始位置,然后在再从剩余未排序序列中继续找到最小元素,放到排序序列的尾部。以此类推,直到排序完成!

代码实现:


<span style="font-size:14px;">#include <stdio.h>//实现选择排序函数void xuanZhe(int arr[],int len){    int temp;    for (int i = 0; i<len-1; i++) {        for (int j=i+1; j<len; j++) {            if(arr[i]>arr[j]){                temp = arr[j];                arr[j] = arr[i];                arr[i] = temp;                            }        }    }}int main(int argc, const char * argv[]) {    int a[10] = {22,11,23,2,33,444,555,44,323,14};    xuanZhe(a, 10);    for (int i=0; i<10; i++) {        printf("%d\t",a[i]);    }    printf("\n");    return 0;}</span>


折半查找

思想:

在有序表中去中间元素作为比较对象,若给定值和中间值相等,则查找成功;若给定值小于中间元素,则在中间元素左半区继续折半查找;若大于时,则在中间元素的右半区继续折半查找,直到查找成功。若该区域没有相等的元素,则查找失败!


代码实现:

<span style="font-size:14px;">#include <stdio.h>//折半查找的实现int zheBan(int arr[],int len,int keyValue){        int low = 0,heigh = len-1,mid ;        while(low<=heigh){        mid = (low+heigh)/2;        if (arr[mid]>keyValue) {            heigh = mid - 1;        }else if (arr[mid]<keyValue){            low = mid + 1;        }else if (arr[mid] == keyValue){            // 找到相等的值,返回该值在数组的脚标            return mid;        }    }    //没有找到,返回 -1    return -1;}int main(int argc, const char * argv[]) {    int a[10] = {11,22,33,44,55,66,77,88,99,1010};    int keyvalue = 33;    //数组中与要查找的值的脚标    int loc = zheBan(a, 10, keyvalue);    printf("数据在数组中的位置:%d\n",loc);        return 0;}</span>

折半查找插入一个值

代码实现:

 

<span style="font-size:14px;">#include <stdio.h>//折半查找的实现插入一个值返回插入值的位置int zheBan(int arr[],int len,int keyValue){        int low = 0,heigh = len-1,mid ;        while(low<=heigh){        mid = (low+heigh)/2;        if (arr[mid]>keyValue) {            heigh = mid - 1;        }else if (arr[mid]<keyValue){            low = mid + 1;        }else {            // 找到相等的值,返回该值在数组的脚标            return mid + 1;        }    }    //没有找到,返回 -1    return low;}//将需要插入的值插入到数组中去int insertValue(int arr[],int len,int key,int loc){            for (int i=len; i>=loc; i--) {        arr[i] = arr[i-1];    }    arr[loc] = key;    return 0;}int main(int argc, const char * argv[]) {    //这里定义11个元素,是为了插入一个值    int a[11] = {11,22,33,44,55,66,77,88,99,1010};    int keyvalue = 35;    //要插入值应插入数组中的脚标值    int loc = zheBan(a, 10, keyvalue);    //将keyvalue插入到数组中去    insertValue(a, 11, keyvalue, loc);    for (int i=0; i<=10; i++) {        printf("%d\t",a[i]);    }    printf("\n");    return 0;}</span>


1 0
原创粉丝点击