20160126.CCPP體系詳解(0005天)
程式片段(01):eatmem.c
內容概要:語句和邏輯結構
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
//01.雜亂知識點:
// 1.記憶體分配函式malloc();
// (1).分配單位:位元組
// (2).分配方式:
// 鯨吞+慢嚥
// 2.記憶體分配注意事項:
// 32位的單個程式一口氣對多開闢2G的記憶體
// 3.程式當中預設操作的資料最小單位
// 都是位元組
// 4.軟體儲存單位訪問特點:
// 硬訪問:最小單位位元組(byte)
// 訪問硬體
// 軟訪問:最小單位二進位制位(bit)
// 二進位制位運算
// 5.常說的順序分支迴圈結構
// 都是處於單執行緒的情況下
// 6.單執行緒與多執行緒的執行特點:
// 單執行緒,順序執行
// 多執行緒,亂序執行
int main01(void)
{
//malloc(1024 * 1024 * 2000);
int num = 1 + 2 + 4 * 4;
num += 4;
while (1)
{
malloc(1024*1024*50);//吃記憶體多少
Sleep(2000);//執行緒休眠時間長短
}
system("pause");
}
//02.空語句與程式碼塊兒的含義:
// 空語句-->";"
// 程式碼塊兒-->"{}"
int main02(void)
{
;//空語句
;
{//程式碼塊兒
}
system("pause");
}
//03.錯誤說法:
// 在同一個函式當中不允許出現名稱相同的變數
// 應該是在同一個程式碼塊兒當中不允許出現名稱相同的變數
// 同一個程式碼塊兒-->意味著所處程式碼塊兒層級一致-->平行特點
int main03(void)
{
int a;//重定義,同一個語句
{
int a;
{
int a;
}
}
system("pause");
}
程式片段(02):指令.c+QQ.c
內容概要:結構化程式設計
///指令.c
#include <stdio.h>
#include <stdlib.h>
void tasklist()
{
system("tasklist");//顯示程式列表
}
void tasklistwritetofile()
{
system("tasklist >> D:\\1.txt");//將程式列表資料追加到D:\\1.txt檔案當中
}
//01.程式列表查詢原理:
// 1.執行原理:exe <C:\\1.txt scanf("%s", str); if(strstr())
// 2.步驟分析:
// (1).執行程式列表查詢命令,將查詢結果匯入到硬碟上的檔案中
// (2).讀取硬碟上的檔案資料進記憶體
// (3).遍歷檔案在記憶體中的二進位制資料,進行字串匹配
//02.程式資料與檔案操作:
// 重寫資料(">")
// 追加資料(">>")
// 讀取資料("<")
int main01(void)
{
//記錄所有程式,寫到檔案write >> i.txt;-->以便於後期對資料進行操作
//記錄所有程式,顯示出來-->無法對程式列表顯示出來的資料進行操作
//判斷QQ存在與否,存在則關閉該程式,不存在則開啟該程式
//日誌:隱含著對系統的任何操作,可以進行日誌篩選和刪除
system("tasklist >> D:\\1.txt");
system("ipconfig > D:\\1.txt");//>重寫,>>追加
system("pause");
}
///QQ.c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//01.scanf();函式資料掃描特點:
// 1.使用輸入字串格式控制符的時候需要注意:
// %XXXs控制符中間的XXX代表使用掃描多少個字元
// 2.先將硬碟上的檔案資料匯入到記憶體中,並且使用字串
// 儲存該二進位制資料,然後再對記憶體中的字元資料進行
// 匹配檢索,檢索之後,判斷該字串是否存在於檔案當中
int main01(void)
{
char str[4096];
//獲取檔案大小
scanf("%4096s", str);
char *p = strstr(str, "QQ.exe");//判斷QQ.exe是否存在
//strstr返回指向字串開始字元的地址,NULL
if (p != NULL)
{
printf("存在! \n");
}
else
{
printf("不存在! \n");
}
system("pause");
}
程式片段(03):最小數.c
內容概要:輸出最小的數
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//原理:兩兩進行比較,完全比較
int main01(void)
{
int x, y, z;
scanf("%d%d%d", &x, &y, &z);
if (x > y)
{
//x一定不是最小的
if (y > z)
{
printf("最小數是z = %d \n", z);
}
else
{
printf("最小數是y = %d \n", y);
}
}
else
{
//y一定不是最小的
if (x > z)
{
printf("最小數是z = %d \n", z);
}
else
{
printf("最小數是x = %d \n", x);
}
}
system("pause");
}
int main02(void)
{
int x, y, z;
scanf("%d%d%d", &x, &y, &z);
(x > y) ? ( (y > z) ? printf("最小數是z = %d \n", z) : printf("最小數是y = %d \n", y)):((x > z) ? printf("最小數是z = %d \n", z) : printf("最小數是x = %d \n", x)) ;
system("pause");
}
程式片段(04):go.c
內容概要:順序結構
#include <stdio.h>
#include <stdlib.h>
int main01(void)
{
printf("%d \n", 1);//順序結構,從上往下執行,從main函式開始
printf("%d \n", 11);
printf("%d \n", 111);
printf("%d \n", 1111);
system("pause");
}
void p1()
{
printf("%d \n", 1);
}
void p2()
{
printf("%d \n", 11);
}
void p3()
{
printf("%d \n", 111);
}
//01.所有函式的呼叫特點:
// 所有函式預設情況之下都是單執行緒呼叫的,
// 也就是說父函式的繼續執行,必須等待子函式的執行完畢才行
// 一層巢狀一層的特點
int main02()
{
p1();//函式呼叫,必須等待這個函式執行完畢之後,才會執行下一步
p2();
p3();
system("pause");
}
//02.異或的使用特點:
// 1.一個資料異或同一個數量兩次,得到的資料是原始資料
// 2.原始資料和0進行異或,將會保持資料不變
int main03(void)
{
int num = 10;
num += 10;
num -= 2;
num ^= 1;
num ^= 1;
num ^= 0;
printf("%d \n", num);
system("pause");
}
程式片段(05):run.c
內容概要:if單分支
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main01(void)
{
if (-2 + 2)//只分辨0與非0的情況
{
system("msconfig");
}
}
int main02(void)
{
if (0)
system("msconfig");
//if不加括號的情況下,預設的控制範圍為,其後的一條語句
//一條語句:一個分號或者一個程式碼塊兒
system("notepad");
system("pause");
}
int main03(void)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (a < b)//如果a<b,則互換資料實體,保證a是a和b中的資料實體較大變數
{
//int temp = a;
//a = b;
//b = temp;
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
if (a < c)
{
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
/*if (b < c)
{
b = b ^ c;
c = b ^ c;
b = b ^ c;
}*/
//簡寫形式:
if (b < c) b = b ^c, c = b ^ c, b = b ^c;
//限定順序:a>b>c
printf("a = %d, b = %d, c = %d \n", a, b, c);
system("pause");
}
程式碼片段(06):雙分支.c
內容概要:if雙分支
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main01(void)
{
if (-1)//這裡只需要判定最終結果是0或者非0就行了
{
system("calc");
}
else
{
system("notepad");
}
system("pause");
}
int main02(void)
{
//單條語句,{}塊兒語句識別符號可以省略
//最近的分號";"作為語句的結束
if (1 - 1)
system("calc");
else
system("notepad");
system("pause");
return 1;
}
int main03(void)
{
int a, b;
int abs, bbs;
scanf("%d,%d", &a, &b);
if (a > 0)
{
abs = a;
}
else
{
//abs = -a;
abs = a * (-1);
}
/*if (b > 0)
{
bbs = b;
}
else
{
bbs = b * (-1);
}*/
bbs = ((b > 0) ? b : (b * (-1)));
printf("%d \n", abs > bbs ? abs : bbs);
system("pause");
return 1;
}
#define 程式設計能力 80
#define 周瑞富的程式設計能力 81
int main04(void)
{
if (周瑞富的程式設計能力 > 程式設計能力)
{
printf("歡迎加入流氓集團! \n");
}
else
{
printf("回家等電話! \n");
}
system("pause");
return 1;
}
程式片段(07):多分支.c
內容概要:if多分支
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main01(void)
{
int num;
scanf("%d", &num);
if (0 == num)
{
MessageBoxA(0, "", "", 0);
system("shutdown -r -t 5");//重啟命令
}
else if (1 == num)
{
MessageBoxA(0, "", "", 0);
while (1)
{
system("你不愛上劉振全世界就會毀滅 >> C:\\1.exe");//匯出並追加的命令
}
}
else
{
MessageBoxA(0, "", "", 0);
while (1)
{
malloc(10 * 1024 * 1024);//記憶體分配函式
}
}
system("pause");
}
#define 企業要求程式設計能力 80
#define 劉振全的程式設計能力 39
//01.if多分支語句的特點:
// 詳情請看後解
int main02(void)
{
if (劉振全的程式設計能力 > 80)
{
printf("高薪! \n");
}
else if (劉振全的程式設計能力 < 80 && 劉振全的程式設計能力 > 60)
{
printf("低薪! \n");
}
else
{
printf("回家等電話! \n");
}
system("pause");
}
//02.如何判斷同時判斷:
// 數字,小寫字母,大寫字母
int main03(void)
{
while (1)
{
char ch = getchar();
getchar();//吸收回車符
if (ch >= '0' && ch <= '9')
{
printf("數字! \n");
}
else if (ch >= 'a' && ch <= 'z')
{
printf("小寫字母1 \n");
}
else if (ch >= 'A' && ch <= 'Z')
{
printf("大寫字母! \n");
}
else
{
printf("其它字元! \n");
}
}
system("pause");
}
程式片段(08):一元二次方程.c
內容概要:分支巢狀
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//01.一元二次方程案例:
// 方程:a*x*x + b*x + c = 0;
// 解析:
// a = 0;
// bx + c = 0;
// b = 0;
// c = 0
// x-->任意值
// c != 0
// x-->無解
// b != 0;
// x-->-c/b;
// a != 0;
// b*b - 4*a*c = 0;
// b*b - 4*a*c > 0;
// b*b - 4*a*c < 0;
//02.對於實數型別的資料錄入:
// 必需採用%lf這種輸入格式控制符
// 不能使用%f這種輸入格式控制符
int main01(void)
{
double a, b, c;
scanf("%lf%lf%lf", &a, &b, &c);
if (a == 0)
{
printf("一元一次方程! \n");
if (b == 0)
{
if (c == 0)
{
printf("x可以為任意值! \n");
}
else
{
printf("x無解! \n");
}
}
else
{
printf("x = %lf \n", (-1)*(c / b));
}
}
else
{
printf("一元二次方程! \n");
double db = b*b - 4 * a*c;
if (db == 0)
{
printf("x1 = x2 = %lf \n", (-1) *(b / (2 * a)));
}
else if (db > 0)
{
//不能實根
printf("x1 = %lf, x2 = %lf \n", (-b - sqrt(db)) / (2 * a), (-b + sqrt(db) / (2 * a)));
}
else
{
//虛根
double p = (-b) / (2 * a);
double q = sqrt(-db) / (2 * a);
printf("x1 = %lf - %lf i, x2 = %lf + %lf i \n", p, q, p, q);
}
}
system("pause");
return 1;
}
程式片段(09):enum.c
內容概要:列舉型別
#include <stdio.h>
#include <stdlib.h>
//01.C語言當中的列舉型別使用特點解析:
// 1.列舉型別的預置成員只能被賦予整數(char->int->long)
// 絕對不可以被賦予其它值
// 2.列舉型別的預置成員預設從0開始進行標號
// 3.列舉成員當中的任意一個預置成員被賦予了自定義的整數值
// 那麼其後的預置成員整型數值依次遞增1(從預置整數值開始)
// 4.列舉型別的變數用於有效的限定賦予有意義的值
// 能夠限定賦值的範圍,只能使用預置成員名稱進行賦值
int main01(void)
{
//0, 1, 2, 3, 4, 5, 6
enum week { 星期1, 星期2, 星期3, 星期4, 星期5, 星期6, 星期7 };//從左往右逐漸遞增1,預設從零開始進行遞增
enum week week1 = 星期5;//enum week-->表示自定義列舉型別 week1-->表示列舉變數
if (星期5 == week1)
{
printf("是%d \n", week1);
}
printf("%d \n", 星期2);
//enum只能被賦予整數,其他任意型別都不可以
enum jun
{
司令 = 10,
軍長 = 9
};
enum jun j = 司令;
printf("%d \n", 司令 > 軍長);
system("pause");
return 1;
}
程式片段(10):switch.c
內容概要:switch多分支
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//01.if-else if-else內容總結:
// 1.用於多分支判斷情況:
// 多個入口,單個出口
// 2.用於區間範圍判斷
// 判斷情況模糊
// 3.作為區間判斷的時候需要
// 注意區間範圍必須有序
// 4.沒有任何返回值
int main01(void)
{
int num = 9;
//if-else if-else-->很容易混淆,不匹配情況
//switch-->不容易混淆,絕對匹配情況
if (num == 1)
{
if (1 > 0) {}else {}
}
else if (num == 2)
{
if (2 > 0) {}else {}
}
else if (num == 3)
{
}
else if (num == 4)
{
}
else if (num == 5)
{
}
else if (num == 6)
{
}
else
{
//處理上述之外的情況
}
system("pause");
return 1;
}
//02.switch內容總結:
// 1.用於多分支判斷情況:
// 多個入口,單個出口
// 2.用於等值判斷
// 待判斷變數必須和常量
// 等值才能匹配成功
// 3.特殊情況分析:
// (1).每種情形完成之後需要新增break語句
// 如果沒有break語句,會發生穿透現象
// (2).穿透現象可以用於離散區間模擬
// 類似於區間形式的判斷(前提有序)
// (3).無論default語句放在哪個位置
// 它都是最後才進行判斷的,只有排除了
// 所有情況之後才會到default語句
// (4).switch語句只有一個出口
// (5).只要沒有break關鍵字,但是存在default
// 語句,那麼最後執行的一定是default語句
// 如果最後執行的default語句後面沒有break
// 而且該default語句執行之後會發生穿透現象
// 直到遇到break才會終止switch語句
// 4.switch語句只支援整數型別的等值判斷
// 不支援其它型別的等值判斷
// 5.case關鍵字後面的常量匹配值不能是表示式
// 只能是整型常量或者本質為整型常量的字元型資料
int main02(void)
{
int num = 1;
scanf("%d", &num);
char fl = 'A';
enum week { X, Y, Z };
enum week week1 = X;
int data = 2;
switch (num)
{//要處理的變數 error C2050:switch 表示式不是整型
//case 10://不可以出現相同的case後置常量
case 10:
printf("一個士兵! \n");
break;
case 1:
printf("一個班12個人! \n");
break;
case 2:
printf("一個排36個人! \n");
case 3:
printf("一個連108個人! \n");
break;
case 4:
printf("一個營324個人! \n");
break;
case 5:
printf("一個團972個人! \n");
break;
default:
printf("我只能處理到團級編制! \n");
break;
}
system("pause");
return 1;
}
程式片段(11):go.c+周瑞富的報仇計劃.c
內容概要:周瑞富的報仇計劃
///go.c
#include <Windows.h>
//01.模擬一個自動化的過程:
// 1.開啟瀏覽器
// 2.跳轉到網址
// 3.輸入+搜尋
// 4.回車進入到
// 5.關閉瀏覽器
//02.按鍵程式自動化模擬:
// 1.鍵盤事件函式:keybd_event(按鍵虛擬對映值|按鍵字元, 0, 鍵盤操作, 0);
// keybd_event(0x5B, 0, 0, 0);//按下
// keybd_event(0x5B, 0, 2, 0);//鬆開
int main01(void)
{
//keybd_event(0x5B, 0, 0, 0);//按下
//keybd_event(0x5B, 0, 2, 0);//鬆開
keybd_event(0x5B, 0, 0, 0);
keybd_event('M', 0, 0, 0);
keybd_event('M', 0, 2, 0);
keybd_event(0x5B, 0, 2, 0);
//system("pause");
return 1;
}
//02.滑鼠程式自動化模擬:
// 1.滑鼠事件函式:mouse_event(待執行的滑鼠操作, 滑鼠移動到x位置, 滑鼠移動到y位置, 0, 0);
// mouse_event(MOUSEEVENT_ABSOLUTE | MOUSEEVENTF_MOVE, 座標x, 座標y, 0, 0);
// 2.整數在進行乘除法的時候:
// 與運算順序密切相關
int main02(void)
{
main01();//全螢幕最小化,回到桌面
//移動滑鼠到40,40這個位置
Sleep(2000);
//移動到某個指定位置
//mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 100 / 1366 * 65535, 100 / 768 * 65535, 0, 0);//錯誤寫法-->資料丟失
//mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 30, 30, 0, 0);//錯誤寫法-->螢幕分點為65535(寬和高都分佈為這麼多個點)
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 25 * 65535 / 1366, 25 * 65535 / 768, 0 , 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
system("pause");
return 1;
}
///周瑞富的報仇計劃.c
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
//01.模擬一個自動化流程:
// 1.進入到桌面
// 2.移動滑鼠點
// 3.開啟瀏覽器
// 4.跳轉到網址
// 5.輸入+搜尋
// 6.點選進入到
// 7.關閉瀏覽器
//02.ShellExecuteA(0, "open", str, 0, 0, 3);
// 該函式可以實現定製化的開啟各種視窗
void openBrowser(char *str)
{
ShellExecuteA(0, "open", str, 0, 0, 3);
}
//03.system("taskkill /f /im 360chrome.exe");
// 1.該函式用於關閉某種程式名稱的所有程式
// 2.只要程式名稱是指定名稱,就會被全部關閉掉
void closeBrowser()
{
system("taskkill /f /im 360chrome.exe");
}
//04.鍵盤模擬方式:
// 1.模擬JINGDONG英文字母的輸入
// 2.模擬Enter鍵按下
void searchKeyword()
{
keybd_event('J', 0, 0, 0);//按下
keybd_event('J', 0, 2, 0);//鬆開
keybd_event('I', 0, 0, 0);
keybd_event('I', 0, 2, 0);
keybd_event('N', 0, 0, 0);
keybd_event('N', 0, 2, 0);
keybd_event('D', 0, 0, 0);
keybd_event('D', 0, 2, 0);
keybd_event('O', 0, 0, 0);
keybd_event('O', 0, 2, 0);
keybd_event('N', 0, 0, 0);
keybd_event('N', 0, 2, 0);
keybd_event('G', 0, 0, 0);
keybd_event('G', 0, 2, 0);
Sleep(100);
keybd_event('1', 0, 0, 0);
keybd_event('1', 0, 2, 0);
Sleep(100);
keybd_event(0x0D, 0, 0, 0);//按下
keybd_event(0x0D, 0, 2, 0);//鬆開
}
//05.模擬組合鍵的按下
// 最大化當前視窗
void maxbaidu()
{
//組合快捷鍵模擬
keybd_event(VK_LMENU, 0, 0, 0);//按下
keybd_event(VK_SPACE, 0, 0, 0);//按下
keybd_event(VK_SPACE, 0, 2, 0);//鬆開
keybd_event('X', 0, 0, 0);//按下
keybd_event('X', 0, 2, 0);//鬆開
keybd_event(VK_LMENU, 0, 0, 0);//鬆開
}
//06.滑鼠操作模擬:
// 1.模擬滑鼠移動
// 2.模擬滑鼠雙擊
// 注意:整數的書寫方式
void click()
{
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 335 * 65535 / 1366, 225 * 65535 / 768, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 2, 0);
}
int main01(void)
{
//01.採用預設瀏覽器開啟指定連結:
openBrowser("http://www.baidu.com");
Sleep(3000);
//02.搜尋指定關鍵字
searchKeyword();
Sleep(3000);
//03.最大化瀏覽器視窗
maxbaidu();
//04.模擬滑鼠移動並開啟
click();
Sleep(5000);
//05.關閉瀏覽器
closeBrowser();
system("pause");
return 1;
}
程式片段(12):go.c
內容概要:if-switch
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
//01.switch多分支語句內容總結:
// 1.switch能夠操作的引數說明:
// (1).switch();括號引數最終只能有一個值
// (2).case後的校對常數使用特點:
// 必須是:整型資料或者常量表示式(本質常量)
// 不能是:實數,變數
// 如果使用逗號表示式:常量結果
// 必須使用括號括上,否則無效
// (3).default後面沒有指定匹配常量
// default語句的位置可以任意指定,
// 如果其他case專案不匹配,始終最後執行該項
// 如果沒有放在末尾,切記注意穿透現象,直達break
// 語句才會結束switch選擇結構
// default語句可有可無
// (4).break語句的使用特殊:
// 用於跳出選擇結構,如果沒有,將會貫穿執行
// 貫穿執行可以利用,也可以避免
// 2.switch多分支語句與if-else if-esle使用特點:
// switch:等值判斷,離散區間判斷
// 結構清晰
// if-else if-else:區間判斷
// 結構混亂
// 注意:區間判斷要求資料必須有序
int main01(void)
{
int num;
scanf("%d", &num);//隨機數
switch (num)
{
case 1+21:
keybd_event('J', 0, 0, 0);//按下
keybd_event('J', 0, 2, 0);//鬆開
keybd_event('I', 0, 0, 0);//按下
keybd_event('I', 0, 2, 0);//鬆開
keybd_event('N', 0, 0, 0);//按下
keybd_event('N', 0, 2, 0);//鬆開
keybd_event('G', 0, 0, 0);//按下
keybd_event('G', 0, 2, 0);//鬆開
keybd_event('D', 0, 0, 0);//按下
keybd_event('D', 0, 2, 0);//鬆開
keybd_event('O', 0, 0, 0);//按下
keybd_event('O', 0, 2, 0);//鬆開
keybd_event('N', 0, 0, 0);//按下
keybd_event('N', 0, 2, 0);//鬆開
keybd_event('G', 0, 0, 0);//按下
keybd_event('G', 0, 2, 0);//鬆開
Sleep(50);
keybd_event('1', 0, 0, 0);//按下
keybd_event('1', 0, 2, 0);//鬆開
break;
default :
break;
}
system("pause");
return 1;
}
//02.如何判斷小寫字母?大寫字母?數字
// char x;
// x >= 'a' && x <= 'z'
// x >= 'A' && x <= 'Z'
// x >= '1' && x <= '1'
//double db = 1.9;
//double data;
//if (num == db)
//{}
//else if (num == 1.1 && num > data && data > 10)
//{}
//else if (num == 1.1 )
//{}
//else
//{}
程式片段(13):while.c
內容概要:while迴圈
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main01(void)
{
while (0)//0和非0
{
malloc(1024 * 1024 * 10);
}
system("pause");
return 1;
}
int main02(void)
{
int i = 0;
while (i < 500)
{
system("notepad");
i++;
}
system("pause");
return 1;
}
int main03(void)
{
int i = 0;
int j = 0;
//0
//1
//2
//3
//4-->5次
//while (i++ < 5)//++ <
//{
// //i++;
// system("notepad");
//}
//i++ < 5 <==> ++j <6-->依然5次
while (i++ < 5 && ++j < 6)
{
system("notepad");
}
system("pause");
return 1;
}
//01.如何識別一條語句:
// 1.空語句(";")
// 2.只要以分號(";")結尾就算一條語句
// 3.語句塊兒
// 4.任意一個結構:
// 順序-->迴圈-->分支
int main04(void)
{
while (1)
{//while()之後不要新增空語句(;),如果是塊兒語句,則整個塊兒語句被當做一個語句,否則就是最近的一條語句(例如:空語句;)
system("notepad");
}
system("pause");
return 1;
}
//02.如何判斷一個迴圈結構到底執行執行多少次?
// 判斷多少對對映關係成立就行了
int main05(void)
{
int i = 1;
int res = 0;
while (i <= 100)
{//100組對映關係成立-->執行100次
res += i;
i++;
}
printf("%d \n", res);
system("pause");
return 1;
}
int main06(void)
{
int n = 0;
scanf("%d", &n);
int i = 0;
int res = 1;
while (i < n)//迴圈條件
{
res *= 2;//迴圈執行體
i++;
}
printf("%d \n", res);
system("pause");
return 1;
}
void shellOpenQQ()
{
ShellExecuteA(0, "open", "D:\\ProgramFiles\\Tencent\\QQ\\Bin\\QQScLauncher.exe", 0, 0, 1);
}
int main01(void)
{
shellOpenQQ();
Sleep(3000);
HWND win = FindWindowA("TXGuiFoundation", "QQ");
if (win != NULL)//找到
{
//控制窗體顯示和隱藏
/*printf("窗體顯示和隱藏! \n");
while (1)
{
ShowWindow(win, SW_SHOW);
Sleep(30);
ShowWindow(win, SW_HIDE);
Sleep(30);
}*/
//控制窗體從左向右移動
printf("窗體從左往右移動! \n");
//while (1)
//{
// int i = 0;
// while (i < 1000)
// {
// SetWindowPos(win, NULL, i, 0, 500, 400, 1);
// //Sleep(30);
// i++;
// //i=0;i-->1000(從左往右進行移動)
// //500,400-->指定窗體的寬高
// }
//}
//控制窗體從上往下移動
printf("窗體從上往下移動! \n");
/*while (1)
{
int i = 0;
while (i < 500)
{
SetWindowPos(win, NULL, 1000, i, 500, 400, 1);
Sleep(30);
i++;
}
}*/
//控制窗體從右往左
printf("控制窗體從右往左! \n");
/*while (1)
{
int i = 1000;
while (i > 0)
{
SetWindowPos(win, NULL, i, 500, 500, 400, 1);
Sleep(30);
i--;
}
}*/
//控制窗體從下往上
printf("控制窗體從下往上! \n");
int i = 500;
while (i > 0)
{
SetWindowPos(win, NULL, 0, i, 500, 400, 1);
Sleep(30);
i--;
}
}
system("pause");
return 1;
}
程式片段(14):dowhile.c
內容概要:do-while迴圈
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main01(void)
{
do
{
system("notepad");
} while (-1);//do-while至少執行迴圈體一次,非0將會永遠迴圈執行下去
system("pause");
return 1;
}
//01.通過對映對數判斷執行次數的方式:
// 執行-->4
// 執行-->3
// 執行-->2
// 執行-->1
// 執行-->0-->不再執行
int main02(void)
{
int i = 5;
do
{//相當於直接將5對映的哪一次給執行了5-->1:執行5次
system("notepad");
i--;
} while (i);//5次
system("pause");
return 1;
}
//02.通過對映對數判斷執行次數的方式:
// 執行-->5
// 執行-->4
// 執行-->3
// 執行-->2
// 執行-->1
// 執行-->0-->不再執行
// 注意:後面的整數是根據while();後面的整個表示式結果進行判斷的
//03.迴圈結構轉換特點:
// 1.while迴圈結構一定能夠轉換成為do-while迴圈結構;
// 2.do-while迴圈結構卻不一定能夠轉換成為while迴圈結構
// 注意:while<--->do-while迴圈結構之間的轉換規律
int main03(void)
{
int i = 5;
do
{
printf("notepad \n");
} while (i--);//6次-->整個表示式的對映多加了一個0對映
system("pause");
return 1;
}
int main04(void)
{
do
{
printf("notepad \n");
malloc(1024 * 1024 * 500);
} while (0);
system("pause");
return 1;
}
int main05(void)
{
int i = 5;
int j = 4;
//執行規律特點分析:
// 0.確定邏輯與的前後判斷關係
// 1.針對j的規律分析:
// 執行-->4
// 執行-->3
// 執行-->2
// 執行-->1
// 執行-->0-->對映對數5-->執行5次
// 2.針對i的規律分析:
// 執行-->4
// 執行-->3
// 執行-->2
// 執行-->1
// 執行-->0-->對映對數5-->執行5次
do
{
printf("notepad \n");
printf("i = %d, j = %d \n", i, j);
} while (j-- && --i);//與,有一個為0就終止迴圈結構
system("pause");
return 1;
}
int main06(void)
{
char ch;
do
{
ch = getchar();
if (ch >= 'A' && ch <= 'Z')
{
ch = ch + 32;//大寫轉小寫
}
getchar();//緩衝回車
putchar(ch);
putchar('\n');
} while (ch != '\t');//等於tab退出do-while迴圈結構
system("pause");
return 1;
}
//03.Window操作API與do-while函式的結合使用
int main07(void)
{
//非同步啟動一個記事本
system("start notepad");
Sleep(2000);
//獲取窗體編號
HWND win = FindWindowA("Notepad", "無標題 - 記事本");
if (win != NULL)
{
system("echo find notepad! \n");
int i = 0;
do
{
//設定窗體資訊:
//win00000000-->窗體控制程式碼號
//i---------------->窗體x座標
//i * 768 /1366--->窗體y座標
//400------------->窗體寬度
//400------------->窗體高度
SetWindowPos(win, NULL, i, i * 768 / 1366, 400, 400, 1);//設定座標,尺寸
i++;
} while (i < 1000);
}
//窗體描述資訊
// 窗體左上角的座標表示(IpRect.left, IpRect.top);
// 窗體右下角的座標表示(IpRect.right, IpRect.bottom);
RECT IpRect;
GetWindowRect(win, &IpRect);
printf("%d, %d, %d, %d \n", IpRect.top, IpRect.bottom, IpRect.left, IpRect.right);
if (win != NULL)
{
printf("find! \n");
//SWP_SHOWWINDOW-->表示顯示視窗
SetWindowPos(win, NULL, 0, 0, 300, 300, SWP_SHOWWINDOW);//設定座標尺寸
//SetWindowPos();
int i = 400;
Sleep(1000);
do
{
SetWindowPos(win, NULL, 0, 0, i, i, SWP_SHOWWINDOW);
//MoveWindow();
printf("%d \n", i);
Sleep(100);
i += 20;
} while (i <= 700);
}
else
{
printf("not find! \n");
}
system("pause");
return 1;
}
程式片段(15):for.c
內容概要:for迴圈
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
//01.for迴圈的死迴圈結構:
// 空語句:for(;;);
// 含語句:for(;-1;);中間只要!0就行
int main01()
{
for (;;)//中間的語句起到判斷的作用,為空為真,不為空的情況下非0即真,0則假
{
MessageBoxA(0, "china", "hello", 0);
}
for (;;);
for (; -1;);
system("pause");
}
//02.還是通過對映對數判斷在迴圈的執行次數
// 先判斷,在執行
//03.某種執行結構的末尾空語句和塊兒語句特點:
// 所有結構後面都可以出現空語句和塊兒語句
// 無論是順序->分支-->迴圈結構都是一樣的
// 只要是空語句也就當做一條語句進行處理
// 只要是塊兒語句也當做一條語句進行處理
// 所有的空語句;都可以通過塊兒語句進行替換
// 所有的塊兒語句都可以通過空語句進行替換
// 前提條件是一一對應(一個塊兒語句對應於一條空語句)
int main02(void)
{
//for的作用範圍,要麼是最近的分號,要麼是塊兒語句
for (int i = 0; i < 5; i++)//i作為初始化條件,i < 5作為迴圈判斷條件,i++作為趨於迴圈終止的語句
{
system("calc");
}
system("pause");
}
//04.區域性變數作用域分析:
// 迴圈變數的作用域類似於函式形參這個區域性變數一樣
// 只在其後面的首個塊兒語句當中使用才會有效果
int main02(void)
{
int res = 0;
for (int i = 1; i <= 100; i++)
{//迴圈變數不容易被外部給修改
res += i;
}
printf("res = %d \n", res);
int i = 1;
while (i <= 100)
{
res += i;
}
//i = 190;
system("pause");
}
//05.fox迴圈特殊點分析:
// for迴圈的迴圈初始化條件,迴圈判斷條件,迴圈趨向於結束的條件
// 都只會支援一條語句,但是卻可以通過逗號運算子或者其他運算子支援多個邏輯執行
// 一個逗號表示式最終只會當做一條語句進行處理
int main03(void)
{
for (int i = 0; i < 100; i += 3) {}
for (int i = 0, j = 0; i < 100 && j < 100; i += 3, j += 4) {}//for迴圈通過,逗號運算子支援符合語句
system("pause");
}
//06.通過for迴圈實現邏輯:
// 1*2 + 3*4 + 5*6 + ... + 99*100
// (2n-1)*(2n)-->n從1到50-->由一個資料生成兩個資料
int main04(void)
{
int res = 0;
for (int i = 1; i <= 50; i++)
{
res += i*(i + 1);//C語言當中的乘號不能像數學中的一樣進行省略
}
printf("res = %d \n", res);
system("pause");
}
int main05(void)
{
int res = 0;
for (int i = 2; i <= 100; i += 2)
{
res = (i - 1)*i;//推理公式
}
printf("res = %d \n", res);
system("pause");
}
int main06(void)
{
//讓視窗從右上角網左下角移動
HWND win = FindWindowA("gdkwindowToplevel", "Cocos");
if (win == NULL)
{
printf("Cocos玩兒失蹤! \n");
}
else
{
for (int i = 0; i < 1000; i++)
{
SetWindowPos(win, NULL, 1366 - i, i * 768 / 1366, 400, 400, 1);
}
}
system("pause");
}
程式片段(16):break.c+break習題.c+google.c
內容概要:break關鍵字
///break.c
#include <stdio.h>
#include <stdlib.h>
//01.不安全函式和安全函式:
// 不安全函式會在安全函式的名稱後面新增一個"_s"以作為安全函式的標識
//02.case語句特點:
// 1.swtich當中如果沒有使用break關鍵字,那麼switch會貫穿執行
// 2.case語句塊兒當中雖然沒有使用塊兒語句,但是仍然可以編寫多條語句
int main01(void)
{
int num;
scanf_s("%d", &num);//安全的scanf_();函式使用
switch (num)
{
case 1://case就像一個開關一樣,有一個符合條件,就由開關處從上往下進行執行case後面的語句塊兒,一直執行到break關鍵字為止
//如果沒有break,就全部進行執行
system("tasklist");//程式列表
//printf("test \n");//case語句塊兒後的語句塊兒可以寫多條語句
break;
case 2:
system("calc");//計算器
break;
case 3:
system("mspaint");//畫圖板
break;
case 4:
system("記事本");
break;
}
system("pause");
}
//03.break關鍵字使用總結:
// 1.使用環境:
// 只能用於switch多分支結構和迴圈結構
// 2.使用特點:
// 用於switch多分支結構:
// 表明終止switch多分支結構(包含break關鍵字的最內部switch結構)
// 用於迴圈結構
// 表明終止迴圈結構(包含break關鍵字的最內部迴圈結構)
int main02(void)
{
for (int i = 0; ; i++)
{//for迴圈第二個語句為空,照樣表示的是死迴圈,除非第二個語句為0,否則都是死迴圈
if (900 == i)
{
break;//退出迴圈,break一旦執行,表明退出迴圈結構執行體,也就是說迴圈結構執行體後面的語句都將得不到執行
}
printf("%d \n", i);//列印資料
}
system("pause");
}
///break習題.c
#include <stdio.h>
#include <stdlib.h>
//01.求解二元一次方程的兩個解
// 二元一次方程
// 316=13*x+11*y
// 316=13*i+11*j
// 窮舉法-->列舉法-->暴力破解法
// (316-13*i) % 11 == 0;//沒有餘數-->說明整除成功,得到實際的解
int main03(void)
{
for (int i = 0;; i++)
{
printf("%d \n", i);
if ((316 - 13 * i) % 11 == 0)//判定能否完成整除
{//沒有餘數,說明整除成功-->有結果
printf("316 = %d*13 + %d*11 \n", i, (316 - 13 * i) / 11);//整除成功之後的結果就是相應的解
break;
}
}
system("pause");
}
///google.c
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>//ShellExecuteA
//開啟Google瀏覽器
void openGoogle()
{
ShellExecuteA(0, "open", "C:\\Users\\ZHEN\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe", 0, 0, 1);//預設視窗開啟
}
//控制Google瀏覽器
void moveGoogle()
{
//尋找一個視窗,獲取以後,將視窗編號賦值給變數win
HWND win = FindWindowA("Chrome_WidgetWin_1", "開啟新的標籤頁 - Google Chrome");
if (win == NULL)
{
printf("谷歌玩兒失蹤! \n");
return;
}
//0,10,20,30,40,50
//0,1,2,3,4,5
for (int i = 0;; i = i + 10)
{
if (i > 1500)
{
break;
}
SetWindowPos(win, NULL, i, 0, 200, 200, 0);//設定視窗位置,大小
if (i / 10 % 2 == 1)
{
ShowWindow(win, SW_HIDE);//隱藏
}
else
{
ShowWindow(win, SW_SHOW);//顯示
}
Sleep(30);
}
int x = 1600;
while (1)
{
if (x == 0)
{
break;//跳出迴圈
}
SetWindowPos(win, NULL, x, 0, 200, 200, 0);//設定視窗座標,尺寸
Sleep(50);
x = x - 10;
}
SetWindowPos(win, NULL, 0, 0, 100, 100, 0);//初始位置
//do-while實現放大和縮小
int y = 100;//y長度從100~768,寬度從100*16/9~1366
do
{
if (y == 768)
{
break;//跳出死迴圈
}
SetWindowPos(win, NULL, 0, 0, y * 16 / 9, y, 0);//放大,對應於螢幕的解析度
Sleep(50);
y += 10;
} while (1);
y = 768;
do
{
if (y == 100)
{
break;//跳出死迴圈
}
SetWindowPos(win, NULL, 0, 0, y * 16 / 9, y, 0);//通過設定長度,寬度實現縮小
Sleep(50);
y -= 10;
} while (1);
system("pause");
}
//關閉Google瀏覽器
void closeGoogle()
{
system("taskkill /f /im chrome.exe");
}
int main04(void)
{
closeGoogle();//關閉以前的Google瀏覽器
Sleep(2000);
openGoogle();//開啟最新的Google瀏覽器
Sleep(5000);
moveGoogle();
system("pause");
}
程式片段(17):continue.c+遊戲迅雷.c
內容概要:continue關鍵字
///continue.c
#include <stdio.h>
#include <stdlib.h>
//01.continue關鍵字使用總結:
// 1.使用場景:
// conti`這裡寫程式碼片`nue關鍵字只能用於迴圈語句當中
// 2.使用特點:
// 用於結束包含continue關鍵字的最內層迴圈結構
// 的執行體當中的本次剩餘語句
int main01(void)
{
for (int i = 100; i < 201; i++)
{
if (i % 3 == 0)
{//不會列印能夠整除3的數字
//break;//結束迴圈結構
continue;//結束本次迴圈,執行下一次迴圈,在關鍵字continue之後的本次迴圈語句就不被執行了
}
printf("%d \n", i);
}
system("pause");
}
///調戲迅雷.c
#define _CRT_SECURE_NO_WARNINGS//關閉安全檢查
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
//能夠被3整除的秒,我們就進行隱藏,否則我們進行顯示
//開啟迅雷
void openThunder()
{
ShellExecuteA(0, "open", "D:\\ProgramFiles\\ThunderNetwork\\Thunder\\Program\\Thunder.exe", 0, 0, 1);
}
void showThunder(int i)
{//i為非0的時候隱藏,i為0的時候顯示
//尋找描述迅雷的窗體
HWND win = FindWindowA("XLUEFrameHostWnd", "迅雷");
if (i)
{
ShowWindow(win, SW_HIDE);//隱藏
}
else
{
ShowWindow(win, SW_SHOW);//顯示
}
}
void closeThunder()
{
system("taskkill /f /im Thunder.exe");
}
int main02(void)
{
closeThunder();
Sleep(2000);
openThunder();
Sleep(3000);
HWND win = FindWindowA("XLUEFrameHostWnd", "迅雷7");
//計數器的使用:
// 計數器構建:
// int i = 0;
// 計數器使用:
// 1, 3, 5, 7, 9, 11:隱藏
// 2, 4, 6, 8, 10, 0 :顯示
int i = 0;
while (1)
{
char str[20];//字元陣列,作為字串的緩衝區模擬,最大長度為20
sprintf(str, "title 第%3d秒 \n", i);
//跟printf();函式一樣,sprintf();函式也是用於列印字串的:
// printf();函式用於將字串列印到螢幕
// sprintf();函式用於將字串列印到字串
system(str);//當前命令列中執行的命令,標題就是當前命令列視窗的標題
Sleep(1000);
if (i % 3 == 0)
{
ShowWindow(win, SW_HIDE);//隱藏
continue;//提前結束本次迴圈的的餘後迴圈執行體-->節省時間,提升效率
}
ShowWindow(win, SW_SHOW);//顯示
i++;//計數器自增-->事情完成之後才增加,沒有完成就不用增加(完成為1,未完成不為1)
}
system("pause");
}
程式片段(18):googleearth.c
內容概要:遞迴調戲GoogleEarth
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
//01.HWND型別的變數介紹:
// 1.窗體的唯一標識號
// 2.全域性變數,誰都可以進行訪問,遞迴函式同樣可以呼叫
HWND win;
//開啟GoogleEarth
void openGoogleEarth()
{
ShellExecuteA(0, "open", "\"C:\\Program Files (x86)\\Google\\Google Earth\\client\\googleearth.exe\"", 0, 0, 1);
}
//GoogleEarth窗體的隱藏和顯示切換
void HSGoogleEarth()
{//死迴圈-->反覆呼叫-->遞迴的形式-->遞迴函式
ShowWindow(win, SW_HIDE);//隱藏
Sleep(1000);
ShowWindow(win, SW_SHOW);//顯示
Sleep(1000);//實現完美間隔形式需要這行程式碼
HSGoogleEarth();
}
//Google瀏覽器窗體的從左往右移動
void moveGoogleEarth(int n)
{//遞迴函式
if (1600 == n)//當n == 1600的時候,結束遞迴迴圈
{
return;//跳出遞迴迴圈,進行遞迴函式的彈棧操作
}
else
{
SetWindowPos(win, NULL, n, 0, 500, 500, 0);//設定窗體座標,尺寸
Sleep(50);//休眠當前處理本函式的執行緒
n += 10;//讓遞迴迴圈函式趨於終止的條件
}
moveGoogleEarth(n);//遞迴呼叫
}
//0~1600,長度,寬度都會改變,放大
void googleEarthSmallToBig(int n)
{
if (1600 == n)
{
return;//跳出遞迴迴圈結構
}
else
{
//實現從小到大,GoogleEarth有一個最小的視窗比例,最小不能小於這個視窗比例
SetWindowPos(win, NULL, 0, 0, n, n * 768 / 1366, 0);//設定窗體座標,尺寸
Sleep(50);//休眠
n += 10;
}
googleEarthSmallToBig(n);
}
//關閉GoogleEarth
void closeGoogleEarth()
{
system("taskkill /f /im googleearth.exe");
}
//玩兒弄GoogleEarth
void playGoogleEarth()
{
//尋找GoogleEarth窗體本身
win = FindWindowA("QWidget", "Google Earth");
if (NULL == win)
{
printf("GoogleEarth正在玩失蹤! \n");
return;
}
Sleep(2000);
SetWindowTextA(win, "拉里佩奇!你的產品好垃圾! \n");
Sleep(2000);
moveGoogleEarth(0);//移動
googleEarthSmallToBig(0);//放大
HSGoogleEarth();//顯示隱藏切換
}
int main01(void)
{
closeGoogleEarth();
Sleep(2000);
openGoogleEarth();
Sleep(5000);
playGoogleEarth();
system("pause");
}
程式片段(19):playjobs.c
內容概要:goto調戲apple
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
void openApple()
{
ShellExecuteA(0, "open", "\"C:\\Program Files (x86)\\iTunes\\iTunes.exe\"", 0, 0, 1);//啟動iTunes
}
void moveApple()
{
//建立一個視窗編號變數,尋找iTunes的窗體
HWND win = FindWindowA("iTunes", "iTunes");//類名,標題
if (NULL == win)
{
printf("apple iTunes正在玩兒失蹤! \n");
}
int i = 0;
A: if (i < 1600)//等價於迴圈結構趨於終止的條件
{
SetWindowPos(win, NULL, i, i * 768 / 1366, 700, 400, 0);//設定窗體座標以及尺寸
Sleep(10);//便於我們觀察,不要太快
i++;
goto A;//跳轉到A
}
SetWindowPos(win, NULL, 0, 0, 700, 400, 0);//恢復原始位置
B:Sleep(100);//休眠100毫秒
ShowWindow(win, SW_HIDE);//隱藏
Sleep(100);
ShowWindow(win, SW_SHOW);//顯示
goto B;
}
void closeApple()
{
system("taskkill /f /im iTunes.exe");
}
int main01(void)
{
closeApple();
Sleep(2000);
openApple();
Sleep(5000);
moveApple();
system("pause");
}
相關文章
- MySQL體系結構詳解MySql
- MySQL體系結構圖詳解MySql
- 【00】Oracle體系結構詳解Oracle
- 【DATAGUARD】Oracle Dataguard體系架構詳解Oracle架構
- Oracle Golden Gate體系架構詳解OracleGo架構
- springmvc中Dispatchservlet繼承體系詳解SpringMVCServlet繼承
- View 體系詳解:View 的工作流程View
- 詳解iOS打包、釋出與證書體系iOS
- 【PG體系結構】Postgresql 配置檔案詳解SQL
- Java核心知識體系6:集合框架詳解Java框架
- Java Servlet詳解(體系結構+註解配置+生命週期)JavaServlet
- 一圖詳解騰訊雲原生安全防護體系
- Tungsten Fabric架構解析丨詳解vRouter體系結構架構VR
- .NET平臺系列7 .NET Core 體系結構詳解
- Eureka詳解系列(三)--探索Eureka強大的配置體系
- 三極體使用詳解
- Http請求體詳解HTTP
- DIY天地(硬體詳解)
- 28頁PPT詳解騰訊資料探勘體系及應用
- 20160217.CCPP體系詳解(0027天)
- SQL Server資料體系和應用程式邏輯詳解SQLServer
- jQuery事件系統詳解jQuery事件
- View 體系詳解:座標系、滑動、手勢和事件分發機制View事件
- Express中介軟體原理詳解Express
- JVM記憶體模型詳解JVM記憶體模型
- 詳解css媒體查詢CSS
- JVM堆記憶體詳解JVM記憶體
- iOS記憶體管理詳解iOS記憶體
- middleware 中介軟體詳解
- Java集合中List,Set以及Map等集合體系詳解(史上最全)Java
- 20160124.CCPP詳解體系(0003天)
- 20160125.CCPP詳解體系(0004天)
- 20160127.CCPP體系詳解(0006天)
- 20160130.CCPP體系詳解(0009天)
- 20160203.CCPP體系詳解(0013天)
- 20160211.CCPP體系詳解(0021天)
- 20160213.CCPP體系詳解(0023天)
- 20160214.CCPP體系詳解(0024天)