zoukankan      html  css  js  c++  java
  • 01_c语言再学习_基础部分(1)

    目录:

    1.编译基础

    2.c语言关键字

    3.c语言数据类型

    4.二进制/8进制/16进制

    5.计算机内存数值存储方式:sizeof/原码/反码/补码

    6.c语言中的字符和字符串

    7.c语言中的数组和字符串(字符数组和字符串)

      7.1 数组的逆置,冒泡排序(含优化)

    编译基础:

    C代码编译成可执行程序经过4步:

    1)预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法

    2)编译:检查语法,将预处理后文件编译生成汇编文件

    3)汇编:将汇编文件生成目标文件(二进制文件)

    4)链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去

     

     

     

     

     进制打印:

    #include <stdio.h>
    
    int main() {
    
      //十进制数
      int a = 10;
      printf("%d
    ", a);//十进制输出
    
      //八进制数
      int b = 017;
      printf("%d
    ", b);//十进制输出
      printf("%o
    ", b);//八进制输出
      printf("%x
    ", b);//十六进制输出
    
      //十六进制数
      int c = 0xA;
      printf("%d
    ", c);//十进制输出
      printf("%o
    ", c);//八进制输出
      printf("%x
    ", c);//十六进制输出
      
      return 0;
    }

    计算机内存数值存储方式

    当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。

    整数的原码、反码、补码相同。

    #include <stdio.h>
    
    int main() {
    
      /*
      %d   有符号10进制整数(%ld 长整型,%hd短整型 )
      %hu   无符号短整形(%u无符号整形,%lu无符号长整形)
      %i    有符号10进制整数 (%i 和%d 没有区别,%i 是老式写法,都是整型格式)
    
      %o   无符号8进制整数
      %u   无符号10进制整数
      %x   无符号的16进制数字,并以小写abcdef表示
      %X   无符号的16进制数字,并以大写ABCDEF表示
    
      %f   输入输出为浮点型 (%lf双精度浮点型)
      %E/e 用科学表示格式的浮点数
    
      %c 输入输出为单个字符
      %s 输入输出为字符串
       * */
      printf("%lu
    ", sizeof(int));//output: 4 字节Byte 在内存中占的字节数
      printf("%lu
    ", sizeof(float));//output: 4
      printf("%lu
    ", sizeof(double));//output: 8
      printf("%lu
    ", sizeof(long));//output: 8
      printf("%lu
    ", sizeof(char));//output: 1
    
      return 0;
    }

    计算机中不能用原码来存储,比如10的原码是0000 1010, 而-10的原码是1000 1010,相加不等于0。

    #include <stdio.h>
    
    int main()
    {
        int  a = -15;
    
        printf("%x
    ", a);
        //结果为 fffffff1
        //fffffff1对应的二进制:1111 1111 1111 1111 1111 1111 1111 0001
        //符号位不变,其它取反:1000 0000 0000 0000 0000 0000 0000 1110
        //上面加1:1000 0000 0000 0000 0000 0000 0000 1111  最高位1代表负数,就是-15
    
        return 0;
    }

     

     

     

    字符的输入和输出:

      //输出字符:
      //1. printf
      //2. putchar
      char a = 'A';
      printf("%c
    ", a);
      printf("%c
    ", 65);
      putchar(a);
      putchar('
    ');
    
      //输入字符:
      //1.scanf
      //2.getchar
      char b;
      printf("请输入一个字符
    ");
      scanf("%c", &b);
      printf("输入的字符为: %c
    ", b);
      char c;
      c = getchar();
      putchar(c);
      putchar('
    ');

    数组基础,数组所占内存,数组个数

     //一维数组
      int a[5] = {1, 2, 3, 4, 5};
    
      printf("%p
    ", a);
      printf("%p
    ", &a[0]);
      printf("size of a: %d
    ", sizeof(a));//数组占用的内存大小,5*4=20
      printf("size of a[0]: %d
    ", sizeof(a[0]));//数组首元素占用的内存大小,1*4=4
      printf("number of array: %d
    ", sizeof(a) / sizeof(a[0]));//数组中有多少元素

    一维数组逆置,冒泡排序

     //reverse array
      int a[54] = {1, 2, 3, 4, 5};
    
      int left = 0;
      int right = sizeof(a) / sizeof(a[0]) - 1;
    
      while (right > left) {
        int temp;
        temp = a[left];
        a[left] = a[right];
        a[right] = temp;
        left++;
        right--;
      }
    
      for (int i = 0; i < sizeof(a) / sizeof(a[0]); ++i) {
        printf("%d
    ", a[i]);
      }

    冒泡排序

    //bubble sort
      int a[7] = {13, 4, 1, 6, 2, 3, 5};
      int length = sizeof(a) / sizeof(a[0]);
      int temp = 0;
    
      for (int i = 0; i < length - 1; ++i) {
        for (int j = 0; j < length - i - 1; ++j) {
          if (a[j] > a[j + 1]) {
            //swap element
            temp = a[j + 1];
            a[j + 1] = a[j];
            a[j] = temp;
          }
        }
      }
    
      for (int i = 0; i < length; ++i) {
        printf("%d	", a[i]);
      }
      printf("
    ");

    冒泡排序优化

    123

    测试popen子进程挂掉的代码:

    #include <stdio.h>
    #include <assert.h>
    #include <unistd.h>
    
    int cmd_to_vector(const char *cmd)
    {
      //vc.clear();
      FILE *pp = NULL;
      pp = popen(cmd, "r");//TODO
      char buffer[400] = {0};
    
      assert(pp != NULL);
    
      fread(buffer, 1, sizeof(buffer), pp);
      printf("buffer: %s
    ", buffer);
    
      pclose(pp);
    
      printf("close pp
    ");
    
      return 0;
    }
    
    int main(){
    
    //  char* command1 = "ps -aux | grep media-agent | grep -v grep | awk '{print $3, $4}'";
    //  char* command2 = "ps -aux | grep web-service | grep -v grep | awk '{print $3, $4}'";
    //  char* command3 = "ps -aux | grep video-face-system | grep -v grep | awk '{print $3, $4}'";
    //  char* command4 = "ps -aux | grep media-record | grep -v grep | awk '{print $3, $4}'";
    //  char* command5 = "ps -aux | grep peripheral-manager | grep -v grep | awk '{print $3, $4}'";
    //
    //  while (1) {
    //    cmd_to_vector(command1);
    //    cmd_to_vector(command2);
    //    cmd_to_vector(command3);
    //    cmd_to_vector(command4);
    //    cmd_to_vector(command5);
    //    sleep(1);
    //  }
    
      pid_t pid = fork();
    
      if (pid == 0) {
        printf("child, pid=%d, ppid=%d
    ", getpid(), getppid());
        sleep(2);
        printf("child, i will die, pid=%d, ppid=%d
    ", getpid(), getppid());
        int a = 1;
        int b = 0;
        assert(a / b);
    
      } else if (pid > 0) {
    
        printf("parent, child_pid=%d, self_pid=%d, father_pid=%d
    ", pid, getpid(), getppid());
        sleep(1);
        while (1) {
          printf("parent, child_pid=%d, self_pid=%d, father_pid=%d
    ", pid, getpid(), getppid());
          sleep(1);
        }
      }
    }
  • 相关阅读:
    Sublime Text安装Package Control
    HTTP,FTP,TCP,UDP及SOCKET
    Oracle数据库的导入导出
    C#.NET中数组、ArrayList和List三者的区别
    一道有趣的逻辑面试题(数独)
    C#常用命名空间
    C# Dictionary已知value获取对应的key
    C#记录程序耗时的方法
    有return语句情况下,try-catch-finally的执行顺序
    C# 拷贝数组的几种方法
  • 原文地址:https://www.cnblogs.com/kongweisi/p/14857995.html
Copyright © 2011-2022 走看看