美文网首页十天学会C语言
第07天C语言(00):笔记总结

第07天C语言(00):笔记总结

作者: liyuhong | 来源:发表于2017-07-16 07:59 被阅读34次
    01-数组-内存存储细节
     变量
    
         变量在内存中的存储
    
         由于变量的内存寻址是从大到小,所以存储数据时 会从高字节开始存储
    
      
    
      数组
    
       注意 : 数组的存储 和 变量有点不一样, 数组存储元素, 是从所占用的低字节开始
    
       其实 数组名 就是 数组的地址
    
    02-数组-注意点
     注意点 : 在使用数组的时候, 一定不要访问 不属于自己的存储空间,这样会导致数据混乱
    
      有时候如果访问了 不属于自己的存储空间, 程序会报错
    
    03-数组-练习1
     1.从键盘 录入当天出售BTB的价格 并 计算出售 BTB的总价 和 平均价(比如说一天 出售了3个比特币)
    
    04-函数和数组1
     变量
    
         基本数据类型作为 函数的参数 是 值传递
    
         如果形参是基本数据类型, 在函数中 修改形参的值 不会影响到外面的值
    
      
    
      数组
    
         注意 : 数组名作为函数的参数传递, 传递的数组的地址
    
         因为数组名 就是 数组的地址 &number = &number[0] == number
    
         注意 : 如果数组作为函数的形参, 元素的个数可以省略
    
         如果形参是数组, 那么在函数中修改形参的值, 会影响到实参的值
    
    05-数组和函数2
     如果传递的数组名称, 其实传递的是地址
    
      如果传递的地址, 其实传递的是指针
    
      指针在64 编译环境 占8个字节
    
      
    
      注意 : 如果数组作为形参,那么在函数中就不能通过数组的名称 计算出数组元素的个数
    
      因为系统会自动将 数组形参转换为指针, 指针占用8个字节
    
    06-数组-练习2
     设计一个函数 int arrayMax(int a[], int count) 找出数组元素的最大值
    
    07-数组-练习3
     1.从键盘输入3个0~9的数字,然后输出0~9中 哪些数字没有出现过
    
    08-数组-练习4
     1.要求 从键盘输出 6个0~9的数字,排序后输出
    
    09-选择排序
     已知一个无序的数组,里面有5个元素,要求对数组进行排序
    
          选择排序: 从小到大
    
          特点 :
    
          拿到其中一个元素的值 和 其他元素进行比较, 完全比较完一次之后,最值出现在第0位
    
          
    
          倒三角形式
    
          比如有4个数
    
          1 比 2\3\4
    
          2 比 3\4
    
          3 比 4
    
          比较次数就是一个倒三角的比较
    
          ***
    
          **
    
         *
    
    10-选择排序舞蹈
     http://www.56.com/u86/v_ODU0ODM5Nzk.html
    
    11-冒泡排序
    冒泡排序
    
      特点
    
      使用相邻的两个元素进行比较,每完全比较完一次,最值出现在末尾
    
      规律:倒三角
    
      ****
    
      ***
    
      **
    
      *
    
    12-排序优化
     #pragma 1. 选择排序
    
     void selectSort(int nums[],int length)
    
     {
    
         for (int i = 0; i <  length -1 ; i++) {
    
             for (int j = i + 1; j < length; j++) {
    
                 if (nums[i] > nums[j]) {
    
                     swap(nums, i, j);
    
                 }
    
             }
    
             printf("\n");
    
         }
    
     }
    
     #pragma 2.冒泡排序
    
      
    
     void bubbleSort(int nums[],int length)
    
     {
    
         for (int i = 0; i < 4; i++) {
    
             for (int j = 0; j < length -1 -i; j++) {
    
                 if (nums[j] > nums[j+1]) {
    
                     swap(nums, j, j+1);
    
                 }
    
                 
    
             }
    
         }
    
     }
    
     void swap(int nums[], int i,int j)
    
     {
    
         int temp = nums[i];
    
         nums[i] = nums[j];
    
         nums[j] = temp;
    
    }
    
    13-折半查找
      折半查找的原理
    
      1.数组必须是有序的
    
      2.必须已知min和max(知道范围)
    
      3.动态计算mid的值,取出mid对应的值 进行比较
    
      4.如果mid对应的值 大于了 需要查找的值, 那么max要变小 为 mid - 1
    
      5.如果mid对应的值 小于了 需要查找的值, 那么mix要变大 为 mid + 1
    
    14-折半查找-练习
     现在有一个有序的数组, 要求给定一个数,将该数字插入到数组中,还要保证数组是有序的
    
     其实就是找到插入需要插入的数字的位置
    
     其实这个位置就是min的位置
    
    15-进制查表法
     void printfOct2(int value)
    
     {
    
         // 1.定义一个数组,用于保存八进制中所有的取值
    
         char charValue[11] = {'0','1','2','3','4','5','6','7'};
    
         // 2.定义一个数组,用与保持查询后的结果
    
         char result[11] = {'0'};
    
         // 3.定义一个变量,用于记录当前需要存储到查询结果数组的索引
    
         int pos = 11;
    
         
    
         while (value != 0) {
    
             int res = value & 7;
    
             // 2.利用取出来的值 到表中查询对应的结果
    
             char c = charValue[res];
    
             // 3.存储查询的结果 (从最后一位开始存储)
    
             result[--pos] = c;
    
             // 4.移除二进制被取出的三位
    
             value = value >> 3;
    
     //        printf("pos = %i\n",pos);
    
      
    
         }
    
         // 4.打印结果
    
         for (int i = pos; i < 11; i++) {
    
             printf("%c",result[i]);
    
         }
    
         printf("\n");
    
     }
    
    
    16-进制查表法-优化
     // 转换所有的进行
    
     // value就是需要转换的数值
    
     // base就是需要&上的数
    
     // offset 就是需要 右移的位数
    
     void total(int value,int base,int offset)
    
     {
    
         // 1.定义一个数组,用于保存十六进制中所有的取值
    
         char charValue[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
    
         // 2.定义一个数组,用与保持查询后的结果
    
         char result[32] = {'0'};
    
         // 3.定义一个变量,用于记录当前需要存储到查询结果数组的索引
    
         int pos = sizeof(result)/sizeof(result[0]);
    
      
    
         
    
         while (value !=0) {
    
             // 取出4位的值
    
             int res = value & base; // 1 7 15
    
             // 利用这个值 作为索引去数组中 查询对应的十六进制的值
    
             char c = charValue[res];
    
             //        printf("%c",c);
    
             // 将取出来的值 放到用于存储结果的数组中
    
             result[--pos] = c;
    
             
    
             // 每取完一次 就干掉他最低的4位
    
             value = value >> offset;  // 1 3 4
    
     //        printf("pos = %i\n",pos);
    
         }
    
         
    
         for (int i = pos; i < 32; i++) {
    
             printf("%c",result[i]);
    
         }
    
         printf("\n");
    
     }
    

    相关文章

      网友评论

        本文标题:第07天C语言(00):笔记总结

        本文链接:https://www.haomeiwen.com/subject/wgtphxtx.html