20160125.CCPP詳解體系(0004天)

尹成發表於2016-02-16

程式片段(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;
}

相關文章