《C语言中编程规范.pptx》由会员分享,可在线阅读,更多相关《C语言中编程规范.pptx(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言提要C语言的语法C语言的基本运算及流程控制语句控制系统中常用的C语言函数TC2.0环境的使用C程序的编写和要求第1页/共43页C语言的语法-C语言的特点C程序的基本组成:main()变量定义 执行语句组子函数名称1(参数)变量定义 执行语句组子函数名称2(参数)第2页/共43页C语言的语法-C语言的特点程序以函数为单元,并且有且仅有一个主函数main();函数由函数说明和函数体两部分组成;变量的声明和定义必须在函数头部;语句必须以“;”结束;注释:/*/C语言允许直接访问物理地址;可以直接对硬件进行操作;能进行位(bit)操作第3页/共43页C语言的语法(2)-C语言的数据类型整型:in
2、t、short、long(数据在内存中以(数据在内存中以2 2进制形式存放)进制形式存放)字符型:char浮点型:float、double指针:char*、int*、float*数组:inta10;结构体:struct公用体:union无符号数:unsigned(unsignedint;unsignedchar)第4页/共43页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的负数第5页/共43页C语言的基本运算算术赋值运算运算符
3、名称例子等效于加赋值a+b a a+b减赋值a-b a a b*乘赋值a*b a a*b/除赋值a/b a a/b%取余赋值a%b a a%b第6页/共43页C语言的基本运算位运算运算符名称例子运算功能&位与a&ba和b按位与|位或a|ba和b位或位反 aa按位取反右移位a 2 a右移2位左移位a4 0 x05 *在计算机系统中常常采用移位运算以快速实现乘法在计算机系统中常常采用移位运算以快速实现乘法在计算机系统中常常采用移位运算以快速实现乘法在计算机系统中常常采用移位运算以快速实现乘法和除法的运算,每左移和除法的运算,每左移和除法的运算,每左移和除法的运算,每左移1 1 1 1位等效于乘以位
4、等效于乘以位等效于乘以位等效于乘以2 2 2 2,每右移,每右移,每右移,每右移1 1 1 1位等位等位等位等效于除以效于除以效于除以效于除以2 2 2 2。第11页/共43页位运算的应用举例(1)方法方法1:先右移:先右移n位,再与位,再与“0 x01”bit=(byten)&0 x01;方法方法2:使用屏蔽字:使用屏蔽字unsigned char MASK8=0 x01,0 x02,0 x04,0 x08,0 x10,0 x20,0 x40,0 x80;bit=byte&MASKn;0 0 0 0 1 1 1 01思考:如何从一个字节思考:如何从一个字节bytebyte中取出第中取出第n
5、n位?位?第12页/共43页void byte_bit(int*bits,char byte)void byte_bit(int*bits,char byte)int i;int i;for(i=0;i8;i+)for(i=0;ii)&0 x01;bitsi=(bytei)&0 x01;unsigned char bit_byte(unsigned int*bits)unsigned char bit_byte(unsigned int*bits)unsigned char byte=0;unsigned char byte=0;int i;int i;for(i=0;i8;i+)for(i=
6、0;i8;i+)byte+=(bitsii);byte+=(bitsii);return byte;return byte;第13页/共43页 voidbyte_bit(int*bits,charbyte)inti;for(i=0;ii)&0 x01;main()charbyte;intbit8=0;printf(npleaseinputbyten);scanf(%c,&byte);byte_bit(bit,byte);printf(nbit=%d,%d,%d,%d,%d,%d,%d,%d,bit7,bit6,bit5,bit4,bit3,bit2,bit1,bit0);第14页/共43页C语
7、言的基本运算关系运算运算符名称例子运算功能大于aba大于b小于a=大于等于a=ba大于等于b=小于等于a=ba小于等于b!=不等于a!=ba不等于b第15页/共43页C语言的基本运算逻辑运算运算符名称例子运算功能&逻辑与a&ba与b逻辑或a ba或b!逻辑反!aa反第16页/共43页C语言的流程控制语句选择语句if(表达式)语句1 else语句2第17页/共43页switch(表达式)case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;case 常量表达式n:语句n;break;default:语句n+1;第18页/共43页学生成绩分段:90100为A,80
8、89为B,6079为C,059为D,输入学生成绩,然后分类输出。includeMain()int x;printf(“请输入学生成绩:/n”);scanf(“%d”,&x)switch(x/10)case 10:printf(“x=%d-A”,x);break;case 9:printf(“x=%d-A”,x);break;case 8:printf(“x=%d-B”,x);break;defaut:printf(“x=%d number error!”,x);第19页/共43页C语言的流程控制语句循环语句while(表达式)循环体语句do 语句循环体语句while(表达式);for(i=0;
9、iN;i+)循环体语句第20页/共43页C语言的流程控制语句转移语句break;continue;int n;for(n=10;n100;n+)if(n%3!=0)continue;printf(“%5d”,n);return;goto 表达式表达式NYYbreakcontinueNNYYNbreak语句退出循环continue结束本次循环表达式表达式第21页/共43页C语言中几个常用的函数标准输入输出:scanf(“%d”,&n);printf(“Thiss a test!n%d”,n);getchar();gets();I/O端口读写:inportb(BASEADDR+6);outport
10、b(BASEADDR+13,0 x05);第22页/共43页cmd操作操作0返回按键的键值,该值是返回按键的键值,该值是2 2个字节的整型数,若没有个字节的整型数,若没有键按下,则该函数一直等待,直到有键按下。当按键按下,则该函数一直等待,直到有键按下。当按下时,若返回值的低下时,若返回值的低8 8位为非零,则表示为普通键,位为非零,则表示为普通键,其值代表该键的其值代表该键的ASCIIASCII码。若返回值的低码。若返回值的低8 8位表示为位表示为扩展的扩展的ASCIIASCII码,表示按下的是特殊功能键。码,表示按下的是特殊功能键。1此时,该函数则用来查询是否有键按下。若返回非此时,该函数
11、则用来查询是否有键按下。若返回非0 0值,则表示有键按下,若为值,则表示有键按下,若为0 0,表示没键按下。,表示没键按下。2此时此时,该函数将返回一些控制键的状态,各键状态由该函数将返回一些控制键的状态,各键状态由该函数返回的低该函数返回的低8 8位的各位值来表示。位的各位值来表示。bioskey(int cmd)bioskey(int cmd)它在它在Bios.hBios.h头文件中进行了说明,头文件中进行了说明,该函数实际上调用了该函数实际上调用了BIOSBIOS的的INT16HINT16H中断,参数用来确中断,参数用来确定定bioskey()bioskey()如何操作如何操作 键盘控制
12、 第23页/共43页C语言中几个常用的函数(2)键盘输入:kbhit()bioskey(0)/*返回键盘输入*/while(!kbhit()/*如果没有按下任意键继续*/延时:delay(millisecond)延时若干毫秒sleep(second)延时若干秒第24页/共43页TurboC2.0环境的使用File:管理文件和目录管理文件和目录,装入或保存程序等装入或保存程序等;Edit:进入进入TurboC 的编辑程序的编辑程序,输入和修改源程序输入和修改源程序;Run:编译、连接和运行装入编译、连接和运行装入TurboC 环境的当前程序;环境的当前程序;Compile:编译和连接装入编译和连
13、接装入TurboC 环境的当前程序;环境的当前程序;Project:管理多文件工程;管理多文件工程;Options:设置设置编译程序和连接程序的各种选择项编译程序和连接程序的各种选择项;Debug:设置设置各种调试选择项各种调试选择项;Break/Watch:设置设置断点,在调试阶段以便监视所需的断点,在调试阶段以便监视所需的 变量变量;第25页/共43页TurboC2.0环境(1)管理文件和目录管理文件和目录,装装入或保存程序等入或保存程序等进入进入Turbo C Turbo C 的编辑程的编辑程序序,输入和修改源程序输入和修改源程序编译、连接和运行装入编译、连接和运行装入Turbo C T
14、urbo C 环境的当前程序环境的当前程序编译和连接装入编译和连接装入Turbo Turbo C C 环境的当前程序环境的当前程序管理多文件工程管理多文件工程设置编译程序和连接设置编译程序和连接程序的各种选择项程序的各种选择项设置各种调试选择项设置各种调试选择项设置断点,在调试阶段设置断点,在调试阶段以便监视所需的变量以便监视所需的变量第26页/共43页TurboC2.0环境设置第27页/共43页TurboC2.0环境的使用菜单栏菜单栏:Alt+F F10几个常用的命令几个常用的命令打开:打开:F3保存:保存:F2编译连接生成编译连接生成EXE:F9;运行运行:Ctrl+F9(用AltF5切换
15、到用户窗口切换到用户窗口)调试:调试:单步:单步:F8 不可进入函数体不可进入函数体单步单步:F7 可进入被调函数体可进入被调函数体断点断点:Ctrl+F8观察变量:观察变量:Ctrl+F7全屏全屏窗口窗口 模式切换模式切换:Alt+Enter编辑程序编辑程序编写程序:记事本,之后在编写程序:记事本,之后在TC中打开调试中打开调试第28页/共43页变量申明全局变量与局部变量(作用域)全局变量与局部变量(作用域)intx;/*x就是一个全局变量就是一个全局变量*/main()inty;/*y就是一个局部变量就是一个局部变量*/尽量少用全局变量,因为系统为其分配固定的永久存储空间;尽量少用全局变量
16、,因为系统为其分配固定的永久存储空间;而系统为局部变量分配动态存储空间。而系统为局部变量分配动态存储空间。第29页/共43页模块化编程在主函数中的语句尽量的清晰明了,多用子函数来完成功能模块;在主函数中的语句尽量的清晰明了,多用子函数来完成功能模块;void DI(int channel,int*DI_in).第30页/共43页模块化编程(1)void DO(int channel,int*DO_Out).第31页/共43页模块化编程(2)main()int DI_in6,DO_out6,i;DI(0,DI_in);/*获得光电对管被挡情况获得光电对管被挡情况*/DO(0,DO_out);/*
17、输出输出DO*/第32页/共43页Int I /*全局变量全局变量*/main()int DI_in6,DO_out6,i;/*局部变量局部变量*/DataInput(参数)ReadPort(参数)WritePort(参数)Control(参数)DataOutput(参数)程序规范程序规范(例例)/*/*屏幕输入模块屏幕输入模块*/*I/O端口输入模块端口输入模块*/*I/O端口输出模块端口输出模块*/*/*控制模块控制模块*/*/*屏幕输出模块屏幕输出模块*/第33页/共43页1.1.变量:变量:全局变量与局部变量;全局变量与局部变量;全局变量与局部变量;全局变量与局部变量;2.2.子函数:
18、子函数:屏幕输入屏幕输入屏幕输入屏幕输入/输出、输出、输出、输出、I/OI/OI/OI/O端口输入输出端口输入输出端口输入输出端口输入输出 控制模块控制模块控制模块控制模块3.3.调式方法:调式方法:主程序开始,子函数一个一个编主程序开始,子函数一个一个编主程序开始,子函数一个一个编主程序开始,子函数一个一个编 写调试写调试写调试写调试4.4.程序注释程序注释程序规范程序规范 第34页/共43页程序书写风格简洁、明了、易读简洁、明了、易读缩进编写缩进编写多写注释多写注释(TC下注释下注释/*/)调试程序:单步执行,加调试程序:单步执行,加Watch第35页/共43页开关量输入程序及分析第36页
19、/共43页即:Inportb(port)一直在执行While(!kbhit()inportb(port);o数字量输入采取一直读取得策略第37页/共43页main()main()int i=0;int i=0;clrscr();clrscr();while(while(!bioskey(1)!bioskey(1)i=i+1;i=i+1;printf(%dn,i);printf(%dn,i);return;return;循环控制循环控制 第38页/共43页DIDI通道程序(移位取位)通道程序(移位取位)Num=14Num=140 0 0 0 1 1 1 00 0 0 0 1 1 1 00 0 0
20、 0 0 0 0 10 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0DI_NUM0=DI_NUM0=0 0i=0i=0与与i=1i=1右移一位右移一位0 0 0 0 0 1 1 10 0 0 0 0 1 1 10 0 0 0 0 0 0 10 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1DI_NUM1=DI_NUM1=1 1与与第39页/共43页DIDI通道程序通道程序设置基地址设置基地址循环循环移位获取位移位获取位 int BASE_ADDRESS=0 x220;int BASE_ADDRESS=0 x2
21、20;int creat_DI(int*DI_NUM,int num)int creat_DI(int*DI_NUM,int num)int i=0;int i=0;for(i=0;i6;i+)for(i=0;ii)&0 x0001;DI_NUMi=(numi)&0 x0001;return;return;第40页/共43页DIDI通道程序通道程序(续续)0 0 0 0 0 0 1 10 0 0 0 0 0 1 10 0 0 0 0 0 0 10 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1DI_NUM3=DI_NUM3=1 1与与i=5i=5右移右
22、移5 5位位0 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 10 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0DI_NUM5=DI_NUM5=0 0与与0 0 0 0 1 1 1 00 0 0 0 1 1 1 0i=2i=2右移右移2 2位位第41页/共43页DIDI通道程序通道程序(续续)main()main()int DI6=0;int DI6=0;int DI_out;int DI_out;char c;char c;clrscr();clrscr();while(1)while(1)DI_out=inp
23、ortb(BASE_ADDRESS+6);DI_out=inportb(BASE_ADDRESS+6);creat_DI(DI,DI_out);creat_DI(DI,DI_out);printf(n%d,%d,%d,%d,%d,%dn,DI0,printf(n%d,%d,%d,%d,%d,%dn,DI0,DI1,DI2,DI3,DI4,DI5);DI1,DI2,DI3,DI4,DI5);printf(nPress n to next and other key to printf(nPress n to next and other key to quit!n);quit!n);c=bioskey(0);c=bioskey(0);if(c=n|c=N)continue;if(c=n|c=N)continue;else return;else return;定义变量定义变量清屏清屏循环循环读读DIDI低字节低字节 调用子程序调用子程序 判断是否继续循环判断是否继续循环第42页/共43页感谢您的欣赏!第43页/共43页
限制150内