第1讲 程序的最小单元-语句
C语言语句 | 表达式语句 | 运算表达式语句 | 1+2+3;单纯的一个运算表达式,虽无意义,但语法无误。 | |
赋值语句 | int a=20; | |||
流程控制语句 | 结构化语句 | 条件语句 | if语句 | |
switch语句 | ||||
循环语句 | for语句 while语句 do while语句 | |||
非结构化语句 | 限定转向语句 | break语句 continue语句 return语句 | ||
非限定转向语句 | goto语句 | |||
函数调用语句 | test(); | |||
空语句 | ;什么都不写,就一个分号的语句就是空语句 | |||
块语句 | {}一个函数中可以内嵌很多{}块,{}括起来的语句就是块语句。 | |||
查看不同块语句中的变量地址:
intmain(){
inta;
printf("%x\n",&a);
{
inta;
printf("%x\n",&a);
}
{
inta;
printf("%x\n",&a);
}
return0;
}
结果为:
第2讲 结构化程序设计的三种结构
SetCursorPos(100,100);//设置鼠标位置
mouse_event();//鼠标事件。要查看其参数,可在VS中右击mouse_event,选择“转到定义”:
mouse_event(
__in DWORD dwFlags,
__in DWORD dx,
__in DWORD dy,
__in DWORD dwData,
__in ULONG_PTR dwExtraInfo);
#defineMOUSEEVENTF_MOVE 0x0001/* mouse move */
#defineMOUSEEVENTF_LEFTDOWN 0x0002/* left button down */
#defineMOUSEEVENTF_LEFTUP 0x0004/* left button up */
#defineMOUSEEVENTF_RIGHTDOWN 0x0008/* right button down */
#defineMOUSEEVENTF_RIGHTUP 0x0010/* right button up */
#defineMOUSEEVENTF_MIDDLEDOWN 0x0020/* middle button down */
#defineMOUSEEVENTF_MIDDLEUP 0x0040/* middle button up */
#defineMOUSEEVENTF_XDOWN 0x0080/* x button down */
#defineMOUSEEVENTF_XUP 0x0100/* x button down */
#defineMOUSEEVENTF_WHEEL 0x0800/* wheel button rolled */
案例:模拟鼠标自动点击百度推广链接
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
voidopenbaidu(){//打开百度一个推广链接
ShellExecuteA(0,"open","http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&ch=&tn=baidu&bar=&wd=%E9%93%81%E8%A7%82%E9%9F%B3&rn=&oq=&rsv_pq=d808933f00008f47&rsv_t=69bdG9HyZ67yEAm7XkNquPuYaDp9HV1aktZOFzHYMK2yLWkcLEjFo%2FdUqrE&rsv_enter=1&inputT=2453",0,0,3);
}
voidclosebaidu(){//关闭IE
system("taskkill /f /im iexplore.exe");
}
voidclickbaidu(){
SetCursorPos(200,250);//设置鼠标位置
Sleep(50);
//鼠标双击
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);
}
intmain(){
while(1){
openbaidu();
Sleep(5000);
clickbaidu();
Sleep(3000);
closebaidu();
Sleep(1000);
}
return0;
}
if语句——之双分支选择结构
案例:输入两个数,打印出绝对值最大的数
intmain(){
inta,b;
scanf("%d%d",&a,&b);
a=(a>=0)?a:-a;
b=(b>=0)?b:-b;
printf("%d",a>b?a:b);
return0;
}
if语句——之多分支选择结构
if语句没有{}的情况下,作用域是最靠近它的一个分号前面的语句。
案例1:将txt中的内容传递给scanf,再把printf的内容输出到另一文件
把下面的代码编译为zz.exe:
#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
printf("a=%d",a);
return 0;
}
然后在zz.exe同一目录下创建zz.txt,在里面输入12345,保存。
然后在CMD中进入zz.exe所在目录,输入下面内容:
zz.exe<zz.txt>zz2.txt
最终结果为:zz2.txt中的内容为a=12345
案例2:将txt中的内容传递给scanf,再把system执行的结果输出到另一文件
把下面的代码编译为yy.exe:
#include <stdio.h>
#include <stdlib.h>
int main(){
char str[100];
scanf("%s",str);
printf("%s",str);
system(str);
return 0;
}
然后在yy.exe同一目录下创建yy.txt,在里面输入tasklist,保存。
然后在CMD中进入yy.exe所在目录,输入下面内容:
yy.exe<yy.txt>yy2.txt
最终结果为:yy2.txt中的内容为system("tasklist");查询到的进程列表:
多分支选择应用举例
案例:判断输入字符是数字、大写字母、小写字母还是其它字符
#include<stdio.h>
intmain(){
while(1){
charc=getchar();
getchar();//用于接收回车并丢弃
if(c>='0'&& c<='9')
printf("number\n");
elseif(c>='a'&& c<='b')
printf("Small\n");
elseif(c>='A'&& c<='Z')
printf("Big\n");
else
printf("other\n");
}
return0;
}
多分支案例讲解
思考:1024个人,有一个人血液有病毒,我们化验血液,化验多少次可以找出这个人,化验一次需要一个小时。
答:可以用二分查找:把1024个人分成两半,分别将他们血液混合,再化验,无病毒的一半,可排除,这样目标可确定在另一半的512人中间。用样的方法依次进行:
512-->256->128->64->32->16->8->4->2->1
化验10次就能找出这个人。
案例:在VS中用MFC建立一个编辑器,可以容纳word、excel、ppt等大量形式的文档
CRichEditView就是一个编辑器
切换到“资源视图”窗口(在vs2010的左下角):
双击“Ribbon”下的“IDR_RIBBON”,打开界面编辑窗口:
在VS2010右侧“工具箱”中可以加入各种控件:
运行后,可以轻松地在里面插入各种对象,如下:
给按钮添加事件处理代码:右击按钮--“添加事件处理程序”--类列表:“CMainFrame”:
ifelse嵌套
一个很蛋疼的if语句:
if(1)
if(1)
if(1);
else;
else;
else;
if else之间没有大括号,就只能有一条语句(碰到分号就代表一语句结束),或者是一个循环或分支的整体。
switch语句
switch中,多个case共用一组语句的情况:
switch(c){
case 'a':
case 'b':
语句;
break;
}
注意事项:
1、break切记不能少,
2、可以不含default分支,default分支不一定要在最后。但是default不在最后时,切记不要忘记使用break。
3、switch中的表达式和case后的常量表达式类型要一致
4、case后的表达式是常量
5、如果不使用break,那么只要找到一个符合条件的case入口,就会一直往下执行,直到switch结束或直到碰到break为止。
6、switch无法处理浮点数
对分支语句有无break
每个分支有break,就是多分支中选择一个分支。
无break,就是多分支中选择多个分支。此时,需要注意case的顺序。
有一个或多个break,但并不是每个分支都有break的话,可以限定选择多个分支。