热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言逻辑流程

1概论不论哪种编程语言,都提供了三种基本的程序流程控制语句,分别是顺序,选择和循环,这三种程序结构可以解决生活中的一切单线程的问题,各种算法的基础也是由这三种程序流程结构组成的。

1 概论

不论哪种编程语言,都提供了三种基本的程序流程控制语句,分别是顺序,选择和循环,这三种程序结构可以解决生活中的一切单线程的问题,各种算法的基础也是由这三种程序流程结构组成的。

其中顺序流程控制语句意味着程序是从main方法的第一行代码开始执行,如果main函数中有调用到其他函数,则会进入到被调用函数的代码块,执行完该函数的代码块返回后,再接着执行main函数的代码块,直到程序结束,不过很多事不会是预料的那么顺利,在软件开发过程中间,调试修改错误的时间远远超过编码的时间

而C语言正是通过函数(Java中称为方法)将现实中复杂的业务逻辑逐步分解成多个函数实现了自顶向下,逐步细化,结构化,模块化编程的。

下面以浏览器实现自动搜索的功能为例来说明结构化和函数调用的案例:

第一步:实现打开和浏览器的关闭函数

#include
#include
#include /*打开浏览器@param str 指定的URL地址@author Tony 18601767221@163.com@since 20160606 09:03
*/

void open_broswer(char *str) {ShellExecuteA(0,"open",str,0,0,3);
}
/*关闭浏览器,默认是谷歌@author Tony 18601767221@163.com@since 20160606 09:04
*/

void close_broswer() {system("taskkill /f /im Chrome.exe");
}

第二步:使用键盘的按键实现模拟用户输入关键字搜索网页

#include
#include
#include
/*搜索关键字@param keywords 关键字参数@author Tony 18601767221@163.com@since 20160606 09:012
*/

void search_key(char keywords[50]) {//遍历输入的字符参数for (int i &#61; 0; i <50;i&#43;&#43;) {//非空校验if (keywords[i]!&#61;&#39;\0&#39;) {char key_words &#61; keywords[i];keybd_event(key_words, 0, 0, 0);//按下键盘keybd_event(key_words, 0, 2, 0);//松开键盘}
}//关键字输入完成之后再回车enter();}

第三步:将程序的执行流程以及函数的调用写入到main方法中

#include
#include
#include
void main() {open_broswer("www.baidu.com");Sleep(3000);char search_keywords[100] &#61; "TAOBAO";search_key(search_keywords);//close_broswer();system("pause");
}

选择结构映射到生活中就是条件判断,例如相亲时需要判断年龄&#xff0c;身高&#xff0c;体重以及财富是否符指定的条件,高考时的录取总分是否符合指定大学的录取分数线等等。

循环结构映射到生活中就是满足某个条件下一直重复的做着某件事情&#xff0c;想想那个两点一线的生活&#xff0c;每天都在重复的做着 起床,上班,回家,睡觉……

2 选择结构

C语言中的选择结构通过if/else语句和switch语句来实现,其中if/else适合做区间判断,switch适合做等值判断。

2.1 if/else

if/else有四种表现形式如下:通常开发中都是嵌套或者多分支

分支结构表现方式
单分支()if(表达式){代码块}
双分支(二选一)if(表达式){代码块}else{代码块}
多分支(多选一)if(表达式){代码块}else if(表达式){代码块}else{代码块}
嵌套分支if(表达式){if(表达式){代码块}}else{}

它们的计算流程都是判断表达式的计算结果如果为非0,这执行代码块的语句们。
如果代码的{}不写,则执行第一个分号结束之前的语句不过建议每个代码块的{}必须加上,增加程序的可读性。
else不能单独存在,与最近的if语句相互匹配

使用if语句求整数的绝对值

#define _CRT_SECURE_NO_WARNINGS
#include
#include
/*计算输入的整数的绝对值&#64;author Tony 18601767221&#64;163.com&#64;since 20160605 12:09
*/

void calc_abs() {printf("请输入一个整数\n");int input_num &#61; 0;scanf("%d",&input_num);if (input_num<0) {input_num *&#61; -1; //负负得正}printf("你输入的整数是%d,该数值得绝对值是%d\n",input_num,input_num);
}

if语句结合_Bool类型的使用案例

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
/*if的单分支结构一般形式&#64;author Tony 18601767221&#64;163.com&#64;since 20160605 11:03
*/

void if_sample() {//布尔表达式_Bool flag &#61; 3 > 2;printf("flag &#61;%d\n",flag);if (flag) {//变量的值或者是表达式运算的结果为1(也就是_Bool的true)时执行if语句的代码块的内容printf("当flag&#61;&#61;1时执行了这段语句\n");}
}

使用if和变量交换的三种方式实现将输入的三个整数按照从大到小输出

#define _CRT_SECURE_NO_WARNINGS
#include
#include
* 使用if和变量交换的三种方式实现将输入的三个整数按照从大到小输出&#64;author Tony 18601767221&#64;163.com&#64;since 20160605 11:09
*/void sort() {printf("请输入三个整数,以英文的逗号分隔!!!,输入完成后回车结束\n");int one &#61; 0, two &#61; 0, three &#61; 0;scanf("%d,%d,%d", &one, &two, &three);printf("你输入的三个整数分别为%d\t%d\t%d\n", one, two, three);if (one//one和two互换之后one>two//使用中间变量实现交换两个变量的值int temp &#61; one;one &#61; two;two &#61; temp;}printf("互换之后的结果: one &#61;%d\ttwo&#61;%d\n\n",one,two);if (one//one和three互换之后one>three 此时获取到最大值//使用算术运算实现交换两个变量的值(使用乘除法也可以实现)one &#61; one &#43; three;three &#61; one - three;one &#61; one - three;}printf("互换之后的结果: one &#61;%d\tthree&#61;%d\n\n", one, three);if (two//two和three互换之后two>three//使用异或运算符实现交换两个变量的值two &#61; two^three;three &#61; two^three;two &#61; two^three;}printf("互换之后的结果: two &#61;%d\tthree&#61;%d\n\n", two, three);printf("三个整数按照从大到小输出的结果为one&#61;%d\ttwo&#61;%d\tthree&#61;%d\n",one,two,three);}

多分支并且嵌套的if/esle if /else和嵌套的三目运算符作用是相同的&#xff0c;这里以求输入三个整数的最小数为例说明。

使用if/esle的多分支和嵌套实现求输入三个整数的最小数

/*使用if else实现获取三个整数中的最小数&#64;author Tony 18601767221&#64;163.com&#64;since 20160605 08:45
*/void if_else_get_min() {printf("请输入三个整数,以英文的逗号分隔!!!,输入完成后回车结束\n");int one&#61;0, two&#61;0, three&#61;0;scanf("%d,%d,%d",&one,&two,&three);printf("你输入的三个整数分别为%d\t%d\t%d",one,two,three);if (one>two) {//one不是最小的数字 此时只需要比较two和threif (two>three) {printf("最小的整数为%d\n",three);}else {printf("最小的整数为%d\n", two);}}else if (one//two不是最小的数字,只需要比较one和threeif (one>three) {printf("最小的整数为%d\n", three);}else {printf("最小的整数为%d\n", one);}}}

使用三目运算符的嵌套实现求输入三个整数的最小数

/*使用三目运算符实现求三个整数的最小值&#64;author Tony 18601767221&#64;163.com&#64;since 20160605 08:58
*/
void ternary_operator_get_min() {printf("请输入三个整数,以英文的逗号分隔!!!,输入完成后回车结束\n");int one &#61; 0, two &#61; 0, three &#61; 0;scanf("%d,%d,%d", &one, &two, &three);printf("你输入的三个整数分别为%d\t%d\t%d", one, two, three);one > two ? (two>three?printf("最小的值为%d\n",three):printf("最小的值为%d\n",two)):oneprintf("最小的值为%d\n",one):printf("最小的值为%d",three) ;}

当使用多分支if/else if/else时,当匹配第一个if(表达式),余下的表达式都不会再执行&#xff01;&#xff01;&#xff01;

#include /*多重if/ ele if /else 判断&#64;author Tony 18601767221&#64;163.com&#64;since 20160605 16:57
*/
void get_result_str() {int age &#61; 45;//根据年龄判断是青年人 中年人或者老年人if (age>24) {printf("青年人\n");}else if (age>&#61;40) {printf("中年人\n");}else {printf("老年人\n");}
}//程序主入口
void main() {get_result_str();getchar();}

计算一组(输入的三个分数)平均成绩,计算不及格成绩(72)的个数

#include
/*计算三门功课的平均成绩,并统计不及格的科目数量&#64;author Tony 18601767221&#64;163.com&#64;since 20160605 17:26
*/

void calc_avg(){printf("请输入三门科目成绩,以英文的逗号分隔!!!,输入完成后回车结束\n");double chinese &#61; 0, math &#61; 0, english &#61; 0;scanf("%lf,%lf,%lf", &chinese, &math, &english);printf("你输入的三门科目的成绩分别为%.1f\t%.1f\t%.1f\n", chinese, math, english);int failureCount &#61; 0; //定义变量保存不及格的分数if (chinese<72) {failureCount&#43;&#43;;}if (math<72) {failureCount&#43;&#43;;}if (english<72) {failureCount&#43;&#43;;}double avg_score &#61; (chinese &#43; math &#43; english) / 3;printf("不及格的科目数量为%d,平均分为%.1f \n",failureCount,avg_score);
}

2.2 switch

switch出现的目的就是取代多重if/else if/else(嵌套太多之后代码容易出现Bug),switch只能用做整数等值判断,其基本表现形式如下:

switch(expression){case constants_value:break;case constants_value:break;default:break;
}

其中或者表达式运算的结果只能是整数或者和整数兼容类型的数据(例如字符,枚举),case中的常量值不能相等,case不能处理实数,变量表达式以及关系表达式,break也是必须添加(如果不添加,每个case语句都会执行),直到遇到break(这就实现了多分支就选择执行多分支),表示跳出当前的switch语句,如果所有的case不匹配的话,那么将会执行default语句&#xff0c;相当于多重if/else if/else的else语句。

根据输入的身高计算穿衣服的尺码

#define _CRT_SECURE_NO_WARNINGS
#include
#include
/*根据传入的身高判断穿衣服的大小&#64;author Tony 18601767221&#64;163.com&#64;since 20160606 10:44
*/

void get_size_by_height() {//定义一个男装尺寸的枚举enum ClothesSize{XS &#61; 160,M &#61; 170,L &#61; 175,XL &#61; 180,XXML &#61; 185,XXXL &#61; 190};int height&#61;0 ;printf("请输入你的身高 例如 160 170 175 180 185\n");scanf("%d",&height);switch ( height){case XS:printf("你穿衣服的尺码是XS,身高是%d",XS);break;case M:printf("你穿衣服的尺码是M,身高是%d", M);break;case L:printf("你穿衣服的尺码是L,身高是%d", L);break;case XL:printf("你穿衣服的尺码是XL,身高是%d", XL);break;case XXML:printf("你穿衣服的尺码是XXML,身高是%d", XXML);break; case XXXL:printf("你穿衣服的尺码是XXXL,身高是%d", XXXL);break;default:printf("你穿衣服的尺寸超出正常人的范围");break;}
}

根据输入的月份计算所在的季节

/*根据输入的数字判断所在的季节&#64;author Tony 18601767221&#64;163.com&#64;since 20160606 23:05
*/

void get_reason_by_number() {int number &#61; 0;printf("请输入数字\n");scanf("%d",&number);switch (number) {case 12:case 1:case 2:printf("现在是冬天\n");break; //遇到break才会跳出switch的代码块case 3:case 4:case 5:printf("现在是春天\n");break; case 6:case 7:case 8:printf("现在是夏天\n");break;case 9:case 10:case 11:printf("现在是冬天\n");break;default:printf("你输入的数字有误\n");break;}

3 循环结构

C语言(后来的C&#43;&#43;,Java,C#等编程语言)都提供了三种循环结构:分别是while,do/while和for循环&#xff0c;其中开发中常用的是while和for循环。同时还提供了循环中断的语句break,continue和goto。循环结构主要包含两个部分:循环条件和循环体,循环条件通常是控制循环执行的次数&#xff0c;而 循环体通常都是结合if/else语句以及之前学习过的运算符和表达式混合使用。

3.1 while循环

while循环常用来判断某个表达式是否成立(计算结果为0时结束循环,非0就会重复执行循环体的内容)&#xff0c;在使用while循环时需要注意程序的逻辑,防止死循环的情况出现。

使用while循环吃内存

#include
#include
#include /*死循环吃内存32位系统当个进程只能占据2G以内的内存空间&#64;author Tony 18601767221&#64;163.com&#64;since 20160606 20:18
*/

void eat_memory() {while (1) //循环的判断条件 : 0表示false,非0表示true {//循环体malloc(10*1024*1024); //字节为最小的单位 这里是10MSleep(1000);}}

使用while循环异步打开5个记事本

#include
#include
#include
/*循环打开记事本&#64;author Tony 18601767221&#64;163.com&#64;since 20160607 20:24
*/

void open_notepad() {int i &#61; 0;while (i&#43;&#43; <5) {system("start notepad"); //异步打开5个记事本}
}

使用while循环计算1-100之间的整数和

#inlcude
/*求1-100之内的整数和&#64;author Tony 18601767221&#64;163.com&#64;since 20160607 20:30
*/

void get_sum() {int sum &#61; 0;int i &#61; 1;while (i<&#61;100){sum &#43;&#61; i;i&#43;&#43;;}printf("1-100之内的整数和为%d\n",sum);
}

使用while循环计算2的N次方的结果

#include
/*计算2的N次方的结果&#64;author Tony 18601767221&#64;163.com&#64;since 20160607 20:35
*/

void calc_2n() {int num &#61; 0;//循环中断条件scanf("%d", &num);int result &#61; 1;int i &#61; 0; //循环初始条件while (i2;//每次都乘以2 知道次数达到输入的次数为止i&#43;&#43;;}printf("2的%d次方的结果是%d\n",num,result);
}

使用while循环结合Windows函数实现调戏QQ
1.使用spy工具获取QQ窗口信息:
使用spy工具获取QQ窗口信息

2 编程实现移动QQ窗口

#include
#include
#include /*关闭qq&#64;author Tony 18601767221&#64;163.com&#64;since 20160607 21:04
*/
void close_qq() {system("taskkill /f /im QQ.exe");Sleep(1000);
}/*开启QQ&#64;author Tony 18601767221&#64;163.com&#64;since 20160607 21:08
*/
void open_qq() {ShellExecuteA(0,"open","\"C:/Program Files (x86)/Tencent/QQ/Bin/QQScLauncher.exe\"",0,0,0);
}/*移动QQ窗口&#64;author Tony 1860187221&#64;163.com&#64;since 20160607 21:17
*/
void move_qq() {HWND win &#61; FindWindowA("TXGuiFoundation", "QQ"); //获取QQ窗口对象if (win &#61;&#61; NULL) {printf("QQ窗口在玩失踪");}//获取屏幕分辨率 可以在cmd中输入desk.cpl获取 我的电脑分辨率是1440*900int i &#61; 0; //纵坐标while (i<900) {SetWindowPos(win, NULL, i * 14 / 9, i, 400, 400, 0);//设置窗口大小以及窗口位置Sleep(50);i &#43;&#61; 10;}
}void main() {close_qq();Sleep(2000);open_qq();Sleep(2000);move_qq();system("pause");
}

改进一下move_qq的函数,加个if/else判断实现QQ移动并若影若现

/*QQ若隐若现&#64;author Tony 18601767221&#64;163.com&#64;since 20160607 21:22
*/
void move_qq() {HWND win &#61; FindWindowA("TXGuiFoundation", "QQ"); //获取QQ窗口对象if (win &#61;&#61; NULL) {printf("QQ窗口在玩失踪");}//获取屏幕分辨率 可以在cmd中输入desk.cpl获取 我的电脑分辨率是1440*900int i &#61; 0; //纵坐标while (i<900) {SetWindowPos(win, NULL, i * 14 / 9, i, 400, 400, 0);//设置窗口大小以及窗口为止Sleep(50);i &#43;&#61; 10;if (i/10%2&#61;&#61;0) { //偶数 显示窗口ShowWindow(win, SW_HIDE);}else {//奇数 隐藏窗口ShowWindow(win,SW_SHOW);}}
}

3.2 do while 循环

do while循环就是不管三七二十一&#xff0c;先执行一遍循环体的内容,再判断循环条件&#xff0c;相比while循环,如果循环条件不成立的话,会比while循环多执行一次。潜台词就是至少会执行一次

当表达式的运算结果为0时,do/while循环也会执行一次

#include
#include
/*do/while循环的特点&#64;author Tony 18601767221&#64;163.com&#64;since 20160607 21:30
*/

void do_while_sample() {do {system("calc");} while (0);//表达式的结果为0也会执行一次循环体}

所有的while循环都可以替换成do while

#include
#include
/*&#64;author Tony 18601767221&#64;163.com&#64;since 20160607 21:57
*/

void do_while_warning() {int i &#61; 5;do {system("calc");i--;} while (i>0);
}

do/while循环的使用场景:

#include
#include
/*先循环获取用户的数据,再执行判断循环条件&#64;author Tony 18601767221&#64;163.com&#64;since 20160607 22:03
*/

void uppper() {char input &#61; &#39;\0&#39;;do {input &#61;getchar(); //获取屏幕输入的字符if (input>&#61;&#39;a&#39;&&input<&#61;&#39;z&#39;) {input -&#61; 0x20;}putchar(input);//输出转换为大写后的字符getchar();printf("\n");} while (input!&#61;&#39;\t&#39;); //tab键盘结束输入
}

3.3 for循环

for循环是使用频率最高的循环结构&#xff0c;相对于while循环而言,for的结构更加清晰&#xff1b;

/*for循环的基本结构&#64;author Tony 18601767221&#64;163.com&#64;since 20160608 22:35
*/
void for_sample() {for (int i &#61; 0; i <5;i&#43;&#43;) { //i表示初始化条件 i<5就是终止条件 i&#43;&#43; 改变循环变量的值system("calc"); //循环体}
}

for循环的一般形式都是for(初始化表达式;判断循环条件;改变循环条件){循环体},其中初始化表达式以及判断循环条件以及改变循环条件都可以为空语句,这样就构成了for的死循环&#xff0c;需要注意的是在开发中的绝大多数场景都不应该出现死循环,可能的原因就是程序的逻辑出现了问题,要么就是出在循环的判断条件,要么就是出在没有改变循环条件

#include /*for实现死循环的两种方式&#64;author Tony 18601767221&#64;163.com&#64;since 20160607 22:21
*/
void for_dead_loop() {for (;;) { //中间的语句起到判断的作用,为空为真,不为空的情况下 非0循环,0终止循环printf("死循环1!!!");}for (; 1;) { //这里的循环条件为1 会一直循环执行循环体的代码printf("死循环2!!!");}
}

使用for循环计算2的N次方

*计算2的n次方,本质上就是N个2相乘的结果&#64;author Tony 18601767221&#64;163.com&#64;since 20160609
*/
void square(int num) {double result &#61; 1.0;for (int i &#61; 0; i *&#61; 2;}printf("2的%d次方的结果是%.0f\n",num,result);
}

使用for循环实现计算1-100之间的奇数和偶数乘积之和

在遇到这样的问题应该首先要联想到有没有数学公式,再用循环的办法解决

计算相邻的奇数和偶数的乘积数学公式:(2*n)*(2*n-1)

#include
#include /*使用for循环实现计算1-100之间 相邻两个奇偶数之和 例如 1*2&#43;3*4....计算两个相邻奇数和偶数成绩的公式: (2*n)*(2*n-1)&#64;author Tony 18601767221&#64;163.com&#64;since 20160608 22:36
*/

void get_sum_result() {int sum &#61; 0;//定义变量保存每次相邻基数和偶数的乘积for (int i &#61; 1; i <50;i&#43;&#43;) {//每次对计算相邻的奇数偶数累加sum &#43;&#61; (2 * i)*(2 * i - 1);printf("循环体中sum&#61;%d\n",sum);}printf("计算结果为%d\n",sum);}

使用for循环实现QQ窗体的反方向对称移动

#include
#include
#include
*
开启QQ
&#64;author Tony 18601767221&#64;163.com
&#64;since 20160608 23:08
*/
void open_qq_with_for() {ShellExecuteA(0, "open", "\"C:/Program Files (x86)/Tencent/QQ/Bin/QQScLauncher.exe\"", 0, 0, 0);
}/*
QQ若隐若现
&#64;author Tony 18601767221&#64;163.com
&#64;since 20160608 23:22
*/

void move_qq_with_for() {HWND win &#61; FindWindowA("TXGuiFoundation", "QQ"); //获取QQ窗口对象if (win &#61;&#61; NULL) {printf("QQ窗口在玩失踪");}//获取屏幕分辨率 可以在cmd中输入desk.cpl获取 我的电脑分辨率是1440*900for (int i &#61; 0; i <900;i&#43;&#43;) {SetWindowPos(win, NULL, 1000-i, i * 900 / 1400, 400, 400, 1);if (i / 10 % 2 &#61;&#61; 0) {ShowWindow(win, SW_HIDE);}else {ShowWindow(win, SW_SHOW);}}}
void main() {open_qq_with_for();Sleep(2000);move_qq_with_for();system("pause");}

3.4 三种循环的选择

本质上while,do/while和for循环都可以实现相同的功能&#xff0c;但是日常开发中使用频率最高的还是for和while循环,在使用do/while循环时需要排除非0的场景。

以获取输入整数的位数为例&#xff1a;

#define _CRT_SECURE_NO_WARNINGS
#include
#include //使用三种循环获取输入的整数位数/*&#64;author Tony 18601767221&#64;163.com&#64;since 20160611 17:50
*/
void get_digit_while_sample() {int num &#61; 0;printf("请输入一个整数\n");scanf("%d",&num);int i &#61; 0;while (num!&#61;0) {num /&#61; 10; // 1234 123 12 1 0i&#43;&#43;;}printf("你输入的整数位数是%d\n",i);}
/*&#64;author Tony 18601767221&#64;163.com&#64;since 20160611 17:56
*/
void get_digit_for_sample() {int num &#61; 0;printf("请输入一个整数\n");scanf("%d", &num);int i &#61; 0;for (;num!&#61;0;) {num /&#61; 10;i&#43;&#43;;}printf("你输入的整数位数是%d\n", i);}/*&#64;author Tony 18601767221&#64;163.com&#64;since 20160611 17:59
*/
void get_digit_do_while_sample() {int num &#61; 0;printf("请输入一个整数\n");scanf("%d",&num);int i &#61; 0;//do while循环条件的异常情况判断if (num &#61;&#61; 0 ) {i &#61; 0;}else {do {num /&#61; 10;i&#43;&#43;;} while (num !&#61; 0);}printf("你输入的整数位数是%d\n", i);
}void main() {//get_digit_while_sample();
// get_digit_for_sample();get_digit_do_while_sample();system("pause");
}

欢迎扫描下方的二维码,关注微信公众服务号-艺无止境,分享IT技术干货。
艺无止境


推荐阅读
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • d3dx9_26.dll极品飞车9修复工具下载及修复教程
    本文介绍了d3dx9_26.dll文件的修复工具下载和修复教程,解释了该dll文件的作用和安装方法,同时提供了其他dll文件下载安装的方法。文章涵盖了3d、windows、p2p、dll、visual studio等知识点,并由未来可期1212投稿。希望该技术和经验能帮到你解决dll文件相关技术问题。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
author-avatar
q40796672
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有