C语言的基本知识——辅助训练C语言提要C语言的语法C语言的基本运算及流程控制语句控制系统中常用的C语言函数TC2.0环境的使用C程序的编写和要求C语言的语法--C语言的特点C程序的基本组成:main(){变量定义执行语句组}子函数名称1(参数){变量定义执行语句组}子函数名称2(参数)……C语言的语法--C语言的特点程序以函数为单元,并且有且仅有一个主函数main();函数由函数说明和函数体两部分组成;变量的声明和定义必须在函数头部;语句必须以“;”结束;注释:/*…*/C语言允许直接访问物理地址;可以直接对硬件进行操作;能进行位(bit)操作C语言的语法(2)--C语言的数据类型整型:int、short、long(数据在内存中以2进制形式存放)字符型:char浮点型:float、double指针:char*、int*、float*数组:inta[10];结构体:struct公用体:union无符号数:unsigned(unsignedint;unsignedchar)C语言的基本运算-算术运算运算符名称例子运算功能+加a+b求a与b的和-减a-b求a与b的差*乘a*b求a与b的积/除a/b求a除以b的商%取余a%b求a除以b的余数++自增a++a的值加1--自减a--a的值减1-取负-a求a的负数C语言的基本运算-算术赋值运算运算符名称例子等效于+=加赋值a+=ba=a+b-=减赋值a-=ba=a-b*=乘赋值a*=ba=a*b/=除赋值a/=ba=a/b%=取余赋值a%=ba=a%bC语言的基本运算-位运算运算符名称例子运算功能&位与a&ba和b按位与|位或a|ba和b位或~位反~aa按位取反右移位a2a右移2位左移位a1a左移1位^异或^aa按位异或位运算的举例-位与运算规则:两个运算量中相应位都是1,则该位的结果为1,否则为0。例:010101010101101001010000与x=0x55(01010101)x=0x5a(01011010)x&y=0x50(01010000)位运算的举例-位或运算规则:两个运算量中相应位只要有一个是1,则该位的结果为1,否则为0。例:010101010101101001011111或x=0x55(01010101)x=0x5a(01011010)x|y=0x5f(01011111)位运算的举例-位反运算规则:一个运算量的每一位都取反,即将1变为0,0变为1。例:0101010110101010反x=0x55(01010101)~x=0xaa(10101010)位运算的举例-移位运算规则:对整型操作数中的每一位向右或向左移动,变量一端被移出的位被舍弃,另一端空出的位则以0填补。例:0101010100000101移位(舍弃0101)x=0x55(01010101)x4=0x05*在计算机系统中常常采用移位运算以快速实现乘法和除法的运算,每左移1位等效于乘以2,每右移1位等效于除以2。位运算的应用举例(1)方法1:先右移n位,再与“0x01”bit=(byten)&0x01;方法2:使用屏蔽字unsignedcharMASK[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};bit=byte&MASK[n];000011101思考:如何从一个字节byte中取出第n位?voidbyte_bit(int*bits,charbyte){inti;for(i=0;i8;i++)bits[i]=(bytei)&0x01;}unsignedcharbit_byte(unsignedint*bits){unsignedcharbyte=0;inti;for(i=0;i8;i++)byte+=(bits[i]i);returnbyte;}voidbyte_bit(int*bits,charbyte){inti;for(i=0;i8;i++)bits[i]=(bytei)&0x01;}main(){charbyte;intbit[8]={0};printf(\npleaseinputbyte\n);scanf(%c,&byte);byte_bit(bit,byte);printf(\nbit=%d,%d,%d,%d,%d,%d,%d,%d,bit[7],bit[6],bit[5],bit[4],bit[3],bit[2],bit[1],bit[0]);}C语言的基本运算-关系运算运算符名称例子运算功能大于aba大于b小于aba小于b==等于a==ba等于b=大于等于a=ba大于等于b=小于等于a=ba小于等于b!=不等于a!=ba不等于bC语言的基本运算-逻辑运算运算符名称例子运算功能&&逻辑与a&&ba与b‖逻辑或a‖ba或b!逻辑反!aa反C语言的流程控制语句选择语句if(表达式)语句1else语句2条件成立?语句1语句2不成立成立switch(表达式){case常量表达式1:语句1;break;case常量表达式2:语句2;break;…case常量表达式n:语句n;break;default:语句n+1;}学生成绩分段:90~100为A,80~89为B,60~79为C,0~59为D,输入学生成绩,然后分类输出。#includestdio.hMain(){intx;printf(“请输入学生成绩:/n”);scanf(“%d”,&x)switch(x/10){case10:printf(“x=%d-A”,x);break;case9:printf(“x=%d-A”,x);break;case8:printf(“x=%d-B”,x);break;……defaut:printf(“x=%dnumbererror!”,x);}}C语言的流程控制语句循环语句while(表达式)循环体语句do语句循环体语句while(表达式);for(i=0;iN;i++)循环体语句条件成立?不成立成立程序段C语言的流程控制语句转移语句break;continue;intn;for(n=10;n100;n++){if(n%3!=0)continue;printf(“%5d”,n);}return;goto表达式表达式NYYbreakcontinueNNYYNbreak语句退出循环continue结束本次循环表达式表达式C语言中几个常用的函数标准输入输出:scanf(“%d”,&n);printf(“This’satest!\n%d”,n);getchar();gets();I/O端口读写:inportb(BASEADDR+6);outportb(BASEADDR+13,0x05);cmd操作0返回按键的键值,该值是2个字节的整型数,若没有键按下,则该函数一直等待,直到有键按下。当按下时,若返回值的低8位为非零,则表示为普通键,其值代表该键的ASCII码。若返回值的低8位表示为扩展的ASCII码,表示按下的是特殊功能键。1此时,该函数则用来查询是否有键按下。若返回非0值,则表示有键按下,若为0,表示没键按下。2此时,该函数将返回一些控制键的状态,各键状态由该函数返回的低8位的各位值来表示。bioskey(intcmd)它在Bios.h头文件中进行了说明,该函数实际上调用了BIOS的INT16H中断,参数用来确定bioskey()如何操作键盘控制C语言中几个常用的函数(2)键盘输入:kbhit()bioskey(0)/*返回键盘输入*/while(!kbhit()){…}/*如果没有按下任意键继续*/延时:delay(millisecond)延时若干毫秒sleep(second)延时若干秒TurboC2.0环境的使用File:管理文件和目录,装入或保存程序等;Edit:进入TurboC的编辑程序,输入和修改源程序;Run:编译、连接和运行装入TurboC环境的当前程序;Compile:编译和连接装入TurboC环境的当前程序;Project:管理多文件工程;Options:设置编译程序和连接程序的各种选择项;Debug:设置各种调试选择项;Break/Watch:设置断点,在调试阶段以便监视所需的变量;TurboC2.0环境(1)管理文件和目录,装入或保存程序等进入TurboC的编辑程序,输入和修改源程序编译、连接和运行装入TurboC环境的当前程序编译和连接装入TurboC环境的当前程序管理多文件工程设置编译程序和连接程序的各种选择项设置各种调试选择项设置断点,在调试阶段以便监视所需的变量TurboC2.0环境设置TurboC2.0环境的使用菜单栏:Alt+FF10几个常用的命令打开:F3保存:F2编译连接生成EXE:F9;运行:Ctrl+F9(用Alt+F5切换到用户窗口)调试:单步:F8不可进入函数体单步:F7可进入被调函数体断点:Ctrl+F8观察变量:Ctrl+F7全屏窗口模式切换:Alt+Enter编辑程序编写程序:记事本,之后在TC中打开调试变量申明全局变量与局部变量(作用域)intx;/*x就是一个全局变量*/main(){inty;/*y就是一个局部变量*/}尽量少用全局变量,因为系统为其分配固定的永久存储空间;而系统为局部变量分配动态存储空间。模块化编程在主函数中的语句尽量的清晰明了,多用子函数来完成功能模块;voidDI(intchannel,int*DI_in){……………….}模块化编程(1)voidDO(intchannel,int*DO_Out){……………….}模块化编程(2)main(){intDI_in[6],DO_out[6],i;DI(0,DI_in);/*获得光电对管被挡情况*/……DO(0,DO_out);/*输出DO*/}IntI/*全局变量*/main(){intDI_in[6],DO_out[6],i;/*局部变量*/DataInput(参数)ReadPort(参数)WritePort(参数)Control(参数)DataOutput(参数)}程序规范(例)/*屏幕输入模块*//*I/O端口输入模块*//*I/O端口输出模块*//*控制模块*//*屏幕输出模块*/1.变量:全局变量与局部变量;2.子函数:屏幕输入/输出、I/O端口输入输出控制模块3.调式方法:主程序开始,子函数一个一个编写调试4.程序注释程序规范程序书写风格简洁、明了、易读缩进编写多写注释(TC下注释/*……*/)调试程序:单步执行,加Watch开关量输入程序及分析即:Inportb(port)一直在执行While(!kbhit()){inportb(port);}数字量输入采取一直读取得策略main(){inti=0;clrscr();while(!bioskey(1)){i=i+1;printf(%d\n,i);}return;}循环控制DI通道程序(移位取位)Num=14000011100000000100000000DI_NUM[0]=0i=0与i=1右移一位000001110000000100000001DI_NUM[1]=1与DI通道程序设置基地址循环移位获取位intBASE_ADDRESS=0x220;intcreat_DI(int*DI_NUM,intnum){inti=0;for(i=0;i6;i++)DI_NUM[i]=(numi)&0x0001;return;}DI通道程序(续)000000110000000100000001DI_NUM[3]=1与i=5右移5位000000000000000100000000DI_NUM[5]=0与00001110i=2右移2位DI通道程序(续)main(){intDI[6]={0};intD