IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [转]20160125.CCPP详解体系(0004天)

    yincheng01发表于 2016-02-16 21:43:51
    love 0

    程序片段(01):宽字符.c
    内容概要:宽字符

    #include <stdio.h>
    #include <stdlib.h>
    #include <Windows.h>
    
    //01.宽窄字符的使用特点:
    //  1.宽窄字符变量的使用特点:
    //      (1).只是存储数据的格子大小不一样,窄字符小,宽字符大
    //      (2).如果存储相同的数据,只要不发生数据越界,或者存储的数据即使越界
    //          但是打印的时候成中文字符字符存储单元进行打印,打印效果一致,否则乱码
    //  2.宽窄字符所占用的内存字节数计算方式:
    //      窄字符:
    //          英文字符占用一个字节,中文字符占用两个字节
    //      宽字符:
    //          所有字符(无论是宽字符还是窄字符)统一占用两个字节
    //  3.关于宽窄字符的乱码解决方案:
    //      MessageBox();
    //          (1).跟项目设置有关
    //          (2).字符集设置结果:
    //              默认,使用Unicode字符集,要求中文字符必须使用宽字符
    //              设置,使用多字节字符集,要求中文不必要使用宽字符,窄字符就行了
    //      MessageBox();+TEXT():有参宏
    //          (1).跟项目编译器设置毫无关系
    //          (2).使用中文的时候,需要用有参宏TEXT();进行处理
    //              其实TEXT():有参宏就是在处理宽窄字符问题
    //              中文自适应的进行改变(宽窄字符自动选择)
    //              先判断项目编译器设置,再改变中文的形式特点(宽窄字符)
    //      MessageBoxA();
    //          (1).强制使用多字节字符集
    //          (2).也就是中文必须使用窄字符
    //      MessageBoxW();
    //          (1).强制使用Unicode字符集
    //          (2).也就是中文必须使用宽字符
    
    
    int main01(void)
    {
        char ch = 'A';//表示范围小,节约内存
        wchar_t ch1 = L'0';//宽字符占用两个字节,表示范围大,耗费内存
        printf("%d, %d \n", sizeof(char), sizeof(wchar_t));
        printf("%d, %d \n", sizeof(ch), sizeof(ch1));
        printf("%d \n",sizeof("1我"));//4byte   三个字符
        printf("%d \n",sizeof(L"1我"));//6byte "1"字符,"我"字符,"\0"字符-->3个字符
    
        //MessageBox(0, L"你好天朝!", L"你好世界!", 0);
        //设置Unicode,需要使用宽字符MessageBox(0, L"你好天朝!", L"你好世界!", 0);
        //设置多字节字符,需要使用在字符MessageBox(0, "你好天朝!", "你好世界!", 0);
        //中文字符串具体使用宽字符还是窄字符和项目设置有关:
        //  默认Unicode,需要对中文使用宽字符
        //  设置多字节字符集,不需要使用宽字符
    
        //A代表调用多字节字符集,需要使用窄字符来操作中文
        MessageBoxA(0, "你好天朝!", "你好世界!", 0);
        //W代表调用默认调用Unicode,需要使用宽字符来操作中文
        MessageBoxW(0, L"你好中文!", L"你好世界!", 0);
        //TEXT可以进行兼容自动调整,也就是忽略宽窄字符,自适应显示
        MessageBox(0, TEXT("你好天朝!"), TEXT("你好世界!"), 0);
    
        system("pause");
        return 1;
    }

    程序片段(02):宽字符处理.c
    内容概要:宽字符处理

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>//包含本地化设置函数的头文件
    
    //01.宽窄字符特点:
    //  1.无论是宽字符还是窄字符,赋予同一个数据,那么映射的实体都一样,只是存储盒子不一样
    //  2.既然数据实体一致,那么解析的时候就看解析方式的特点了
    //      %s:表示按照字符串的方式进行解析,知道解析到字符串标识符
    //      %c%c:表示按照两个字节对应于两个字符进行解析,解析结果如同字符串
    int main01(void)
    {
        char str[10] = "我";//无论是宽窄字符所映射的数据实体都一致
        printf("%s \n", str);//按照字符串进行解析
        printf("%c%c \n", str[0], str[1]);//窄字符显示汉字(多个字符组合进行解析)
    
        system("pause");
        return 1;
    }
    
    //02.宽字符的使用特点:
    //  1.需要设置国际化当中的本地化:
    //      引入头文件:#include <locale.h>
    //      设置本地化:setlocale(LC_ALL, "zh-CN");
    //  2.宽字符函数处理宽字符的时候,所以宽字符
    //      都给必须添加L标识
    //  3.宽字符对应的格式控制符:
    //      L"%ls"
    int main02(void)
    {
        setlocale(LC_ALL, "zh-CN");//全局使用中文环境(国际化设置)
        //wchar_t wstr[10] = L"1234";
        wchar_t wstr[10] = L"1234我是色狼!";//宽字符用wprintf,显示英文
        wprintf(L"%ls \n", wstr);//L,l宽字符处理
    
        system("pause");
        return 1;
    }
    
    //03.宽窄字符常量都必须采用单引号('')引上
    int main(void)
    {
        setlocale(LC_ALL, "zh-CN");
        wchar_t ch = L'我';
        putwchar(ch);                                                                             
    
        system("pause");
        return 1;
    }
    
    int main04(void)
    {
        char ch = 'A';
        wchar_t wch = L'A';
    
        printf("%d \n", wch);
    
        system("pause");
        return 1;
    }
    
    int main05(void)
    {
        setlocale(LC_ALL, "zh-CN");
        //printf("%s", L"我打算的");//宽字符不能使用窄字符的打印方式
        wprintf(L"%ls", L"我是");
    
        system("pause");
        return 1;
    }

    程序片段(03):auto.c
    内容概要:auto关键字

    #include <stdio.h>
    
    //01.auto关键字使用特点:
    //  1.标识变量的自动回收释放
    //  2.只要在函数内部的变量:
    //      使用auto关键字修饰变量的声明与没有声明的效果一致
    
    void go(void)
    {
        int num = 10;
        printf("%p \n", &num);
    }
    
    int main01(void)
    {
        auto int num = 10;//自动分配自动释放
    
        go();
    
        printf("AAAAAAAAAAAAAAAA \n");
    
        go();
    
        printf("AAAAAAAAAAAAAAAA \n");
    
    
        system("pause");
        return 1;
    }

    程序片段(04):main.cpp
    内容概要:auto关键字Qt测试

    #include "mainwindow.h"
    #include <QApplication>
    
    void go()
    {
      MainWindow w;//创建
      w.show();
    }
    
    int main(int argc, char *argv[])
    {
       QApplication a(argc, argv);
    
       go();
    
       return a.exec();
    }
    

    程序片段(05):bool.c
    内容概要:C99语法补充_Bool

    #include <stdio.h>
    #include <stdlib.h>
    
    //01.在C99语法当中引入了基于C语言的布尔类型:
    //  1._Bool类型
    //  2.占用单个字节
    //  3.true(非0)|false(0)-->单个字节存储
    int main01(void)
    {
        _Bool bl = 10;//true|false 非0|0
    
        printf("%d \n", bl);
        printf("%d \n", sizeof(bl));//一个字节
        bl ? printf("周瑞富爱凤姐! \n") : printf("周瑞富不爱凤姐! \n");
    
        system("pause");
        return 1;
    }

    程序片段(06):int.c
    内容概要:整数的操作意义

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    //01.循环复杂指令:
    //  for /l %i in (1,1,5) do
    int main01(void)
    {
        char cmd[100];
        int N;
        scanf("%[^\n]", cmd);//处理携带空格的字符串
        scanf("%d", &N);
        char strcmd[200] = { 0 };
        sprintf(strcmd, "for /l %%i in (1,1,%d)  do %s", N, cmd);//映射
        //printf("%s", strcmd);
        system(strcmd);
    
        system("pause");
        return 1;
    }

    程序片段(07):Test.c
    内容概要:啃爹运算法则解析

    #include <stdio.h>
    #include <stdlib.h>
    
    //01.总结:
    //  1.从结果可以退出计算原理,保证交换律依然有效
    //      也就是同时出现++db或者同时出现db++那么
    //      无论如何都得保证其运算结果一致
    //  2.单实体的数据如何确定?
    //      前加就以最有一次加加运算的结果为实体数据
    //      后加就以第一次加加运算的结果为实体数据
    //      所有实体的的数据一致
    int main01(void)
    {
        printf("Hello World!!! \n");
        double db = 1;
        //double y = ++db*++db;//9
        //double y = db++*db++;//1
        double y = db++ + db++ + db++;//3
    
        //printf("%p \n", &db);
        printf("%f \n", y);
    
        system("pause");
        return 1;
    }

    程序片段(08):随机数.c
    内容概要:赌博机实现

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    //01.赌博问题模拟:
    //  1.随机生成0~100之间的数字
    //  2.生成的数字在>=80之间的数字
    //      概率为20%
    //02.随机数生成要素:
    //  1.随机数种子
    //  2.种植数种子
    //  3.随机数函数
    //  4.求余运算符
    int main01(void)
    {
        time_t ts;
        unsigned int num = time(&ts);//根据时间生成随机数种子
        srand(num);
    
        int data = rand() % 100;//随机数的生成依赖于随机数种子
        printf("%d \n", data);
    
        system("pause");
        return 1;
    }
    
    int main02(void)
    {
        time_t ts;
        unsigned int num = (unsigned int)time(&ts);
        srand(num);
    
        int data = rand() % 100;
        printf("%d \n", data);
        data >= 90 ? printf("赢了 \n") : printf("输了 \n");
    
        system("pause");
        return 1;
    }

    程序片段(09):打印可见字符.c
    内容概要:打印可见字符

    #include <stdio.h>
    #include <stdlib.h>
    
    //01.字符的可见性:
    //  1.可见字符:
    //      ASCII码值在32~126之间的字符就是课件字符
    //  2.不可见字符:
    //      ASCII码值在32~126之外的字符就是不可见字符
    int main01(void)
    {
        for (int i = 32; i < 127; i++)
        {
            putchar(i);
        }
    
        system("pause");
        return 1;
    }

    程序片段(10):main.c
    内容概要:简单排序

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
      int a, b, c;
      scanf("%d%d%d", &a, &b, &c);
      //将a,b,c三个变量的数值按照从小打到进行排列
      (a > b) ? (a=a^b,b=a^b,a=a^b) : 0;
      (a > c) ? (a=a^c,c=a^c,a=a^c) : 0;
      (b > c) ? (b=b^c,c=b^c,b=b^c) : 0;
      //a=a^b,b=a^b,a=a^b;可以实现变量存储的数据交换操作
      printf("%d, %d, %d \n", a, b, c);//从小达到
    
      system("pause");
      return 1;
    }
    


沪ICP备19023445号-2号
友情链接