C语言的基础知识
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文由a890105a贡献
ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
C语言的基本知识 语言的基本知识
——辅助训练 辅助训练
C语言提要 语言提要
C语言的语法 语言的语法 C语言的基本运算及流程控制语句 语言的基本运算及流程控制语句 语言的基本运算及 控制系统中常用的C语言函数 控制系统中常用的 语言函数 TC2.0 环境的使用 C程序的编写要求 程序的编写要求
C语言的语法--C语言的特点 语言的语法 语言的特点
程序以函数为单元, 程序以函数为单元,并且有且仅有一个主函 数 main(); ; 变量的声明和定义必须在函数头部; 变量的声明和定义必须在函数头部; 语句必须以“ 结束 结束; 语句必须以“;”结束; 注释: 注释:/*…*/ C语言允许直接访问物理地址;可以直接对 语言允许直接访问物理地址; 语言允许直接访问物理地址 硬件进行操作;能进行位(bit)操作 硬件进行操作;能进行位( )
C语言的语法--C语言的数据类型 语言的语法 语言的数据类型
整型: 、 数据在内存中以2进制形式存放) 整型:int、short、long(数据在内存中以2进制形式存放) 、 字符型: 字符型:char 浮点型:float、double 浮点型: 、 指针: 指针:char*、int*、float* 、 、
数组是有序数据的集合, 一维整形数组:int a[10]; 数组是有序数据的集合,数组中的每 一个元素都属于同一个数据类型 结构体: 结构体 struct 公用体: 公用体:union 无符号数: 无符号数 unsigned(unsigned int;unsigned char) ;
C语言的基本运算-算术运算 语言的基本运算
运算符 + - * / % ++ 名称 加 减 乘 除 取余 自增 自减 取负 例子 a+b a-b a*b a/b a%b a ++ a --a 运算功能 求a与b的和 求a与b的差 求a与b的积 求a除以b的商 求a除以b的余数 a的值加1 a的值减1 求a的负数
--
C语言的基本运算-算术赋值运算 语言的基本运算
运算符 += -= *= /= %= 名称 加赋值 减赋值 乘赋值 除赋值 取余赋值 例子 a+=b a-=b a*=b a/=b a%=b 等效于 a= a+ b a= a- b a= a* b a= a/b a= a%b
注意:5/2 == 2;
5/2.0 == 2.5
C语言的基本运算-位运算 语言的基本运算
运算符 & | ~ >> << 名称 位与 位或 位反 右移位 左移位 例子 a&b a|b ~a 运算功能 a和b按位与 a和b位或 a按位取反
a >>2 a右移2位 a<<1 a左移1位
位运算的举例-位与运算
规则: 规则: 两个运算量中相应位都是 两个运算量中相应位都是1,则该位的结果为1, 相应位都是1 则该位的结果为1 否则为0 否则为0。例:
0 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0
x=0x55(01010101) y=0x5a(
01011010) x&y=0x50(01010000)
与
0 1 0 1 0 0 0 0
位运算的举例-位或运算
规则: 规则: 两个运算量中相应位只要有一个是 两个运算量中相应位只要有一个是1,则该位的 相应位只要有一个是1 结果为1 否则为0 结果为1,否则为0。例:
0 0 1 1 0 0 1 1 0 1 1 0 0 1 x=0x55(01010101) 1 0
y=0x5a(01011010)
或
0 1 0 1 1 1 1 1 x|y=0x5f(01011111)
位运算的举例-位反运算
规则: 规则: 一个运算量的每一位都取反,即将1变为0,0变 一个运算量的每一位都取反,即将1变为0 为 1。 例 :
( ) 0 1 x=0x55(01010101)
0
1
0
1
0
1
反
1 0 1 0 1 0 1
( ) 0 ~x=0xaa(10101010)
位运算的举例-移位运算
规则: 规则: 对整型操作数中的每一位向右或向左移动,变量 对整型操作数中的每一位向右或向左移动, 一端被移出的位被舍弃,另一端空出的位则以0填补。 一端被移出的位被舍弃,另一端空出的位则以0填补。 例:
0 1 0 1 0 1
( ) 0 1 x=0x55(01010101)
移位(舍弃0101) 移位
0 0 0 0 0 1 0 1 x >>4 =0x05
*在计算机系统中常常采用移位运算以快速实现乘法
和除法的运算,每左移1位等效于乘以2 每右移1 和除法的运算,每左移1位等效于乘以2,每右移1位 等效于除以2 等效于除以2。
位运算的应用举例 思考:如何从一个字节byte中取出第n 思考:如何从一个字节byte中取出第n位? byte中取出第
0 0 0 0 1 1 1 0 1
方法1:先右移n位,再与“0x01”进行与运算 方法 :先右移 位 再与“
bit = (byte>>n)&0x01;
方法2: 方法 :使用屏蔽字
unsigned char MASK[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; bit = byte & MASK[n];
C语言的基本运算-关系运算 语言的基本运算
运算符 > < == >= <= != 名称 大于 小于 等于 例子 a>b a= b 小于等于 a <= b 不等于 a != b
C语言的基本运算-逻辑运算 语言的基本运算
运算符 名称 例子 && 逻辑与 a && b 逻辑或 a ‖ b ‖ !a ! 逻辑反 运算功能 a与b a或b a反
C语言的流程控制语句(1) 语言的流程控制语句( ) 语言的流程控制语句
if (表达式 语句 表达式) 表达式 语句1 else 语句 语句2 while (表达式 语句 表达式) 表达式 do 语句 while (表达式 表达式); 表达式 for (i=0;i
选择语句
if (表达式 语句 表达式) 表达式 语句1 else 语句 语句2
成立 条件成立? 不成立
语句1
语句2
C语言的流程控制语句 语言的流程控制语句
循环语句
while (表达式 表达式) 表达式 循环体语句 do 语句 循环体语句 while (表达式 表达式)
; 表达式
C语言的流程控制语句 续) 语言的流程控制语句(续 语言的流程控制语句
for (i=0;i
C语言的流程控制语句(2) 语言的流程控制语句( ) 语言的流程控制语句
多分支选择语句:当表达式的值与某一个case后面的常量表达式的值 相等时就执行此case后面的语句,若所有的case中的常量表达式的值 都没有与表达式的值匹配的,就执行defaut后面的语句 switch(表达式) 表达式) 表达式 { case 常量表达式 常量表达式1: 语句1; 语句 ;break; case 常量表达式 常量表达式2: 语句2; 语句 ;break; … case 常量表达式 常量表达式n: 语句n; 语句 ;break; default: 语句n+1; 语句 }
辅助控制语句
Break语句 多分支选择语句 switch语句,在执行一个case分支后, 使流程跳出switch结构,即终止switch语句的执行。可 以用一个break语句来达到此目的。实际上break语句用 来从循环体内跳出循环体,即提前结束循环接着执行循 环下面的语句。 break语句的一般形式为: Break; Break语句不能用于循环语句和switch语句之外的任何 其它语句中。
辅助控制语句
Continue语句 一般形式为:Continue; 其作用为结束本次循环,即跳过循环体中下面尚未执 行的语句,接着进行下一次是否执行循环的判定。 continue语句和Break语句的区别是: continue语句 只结束本次循环,而不是终止整个循环的执行。而 Break语句则是结束整个循环过程,不再判断执行循 环的条件是否成立。
C语言的流程控制语句 语言的流程控制语句
转移语句
表达式
break; Y continue; int n; Y 表达式 for(n=10;n<100;n++) break N { if(n%3!=0) continue; printf(“%5d”,n); } d:十进制 return; 整数 break语句退出循环 5:输出 goto 字段的宽
度
N
N
表达式1
Y Y
表达式2
N
continue
continue结束本次循环
辅助控制语句
Goto语句: goto语句为无条件转向语句,它的一般形式为: goto 语句标号; 语句标号用标识符表示它的定名规则与变量名 相同(即由字母、数字及下划线组成,第一个字 符必须为字母或下划线)。
辅助控制语句
Return语句 return语句将被调用函数中的一个确定值带回主调函 数中去。 如果需要从被调用函数带回一个函数值(供主调函 数使用),被调用函数中必须包含一个return语句 如果不需用被调用函数带回函数值可以不要return 语句。 一个函数中可以有一个以上的return语句执行到哪 一个return语句,哪一个语句起作用。 return语句后面的括弧也可以不要。
常用的C语言函数(1) 常用的C语言函数(1)
地址运算符 &+变量名
变量名
标准输入输出: 标准输入输出:
scanf (“格式控制字符串”,地址列表); 格式控制字符串” 地址列表 格式控制字符串
format printf(“格式控制字符串”,输出列表 格式控制字符串” 输出列表); 格式控制字符串
例:printf(“%d \n”,a); , I/O端口读写: 端口读写: 端口读写
例: scanf(“%d ”,&a); ,
\n换行,将当前位 换行, 换行 置移到下一行开头
按10进制 进制 整形输出
Inportb(BASEADDR+6);/*读I/O端口 读 端口*/ 端口 Outportb(BASEADDR+13, 0x05); /*写端口 写端口*/ 写端口
键盘控制
bioskey(int cmd) 它在Bios.h头文件中进行了说明,该 函数实际上调用了BIOS的INT16H中断,参数用来确定 BIOSKEY()如何操作
cmd 操作 返回按键的键值,该值是2个字节的整型数,若没有 键按下,则该函数一直等待,直到有键按下。当按 下时,若返回值的低8位为非零,则表示为普通键, 其值代表该键的ASCII码。若返回值的低8位表示为 扩展的ASCII码,表示按下的是特殊功能键。 此时,该函数则用来查询是否有键按下。若返回非0 值,则表示有键按下,若为0,表示没键按下。 此时,该函数将返回一些控制键是否被按过,按过的 状态由该函数返回的低8位的各位值来表示。
0
1 2
C语言中几个常用的函数 语言中几个常用的函数(2) 语言中几个常用的函数
键盘输入: 键盘输入: kbhit() /* 检查当前按下的键*/ bioskey(0) /*返回键盘输入并清空*/ while(!kbhit()) {…} /* 如果没有按下任意键继续 */ 延时: 延时: delay(millisecond) Sleep(second)
/*延时若干毫秒*/
/*延时若干秒*/
Turbo C 2.0 环境
进入Turbo C 编译和连接装入Turbo 进入Turbo , 的编辑程 Turbo 编译和连接装入 管理文件和目录,装 设置断点, 管理文件和目录、连接和运行装入 在调试阶段 编译、 设置编译程序和连接 编译 设置断点, 管理多文件工程 设置各种调试选择项 序,输入和修改源程序 C C Turbo 环境的当前程序 以便监视所需的变量 程序的各种选择项 入或保存程序等 环境的当前程序
Turbo C 2.0 环境
File:管理文件和目录,装入或保存程序等; Edit:进入Turbo C的编辑程序,输入和修改源程序; Run:编译、连接和运行装入Turbo C环境的当前程序; Compile:编译和连接装入Turbo C环境的当前程序; Project:管理多文件工程; Options:设置编译程序和连接程序的各种选择项; Debug:设置各种调试选择项; Break/Watch:设置断点,在调试阶段以便监视所需要 观察的变量。
Turbo C 2.0 环境
Break/Watch:Watch指屏幕的监视窗口,位于屏幕的 编辑窗口的下部,可以从这个监视窗口中看到你所指定的 某些变
量在程序执行过程中的变化。 Add Watch :允许键入变量名或表达式,在调试程序 时,通过窗口监视该变量或表达式的变化情况; Delete Watch :在监视窗口中删除变量或表达式; Edit Watch :允许修改监视窗口中的变量或表达式。
Turbo C 2.0 环境的使用
菜单栏: 菜单栏 Alt+F 几个常用的命令 F10
打开: 打开:F3 保存:F2 保存: 编译连接生成EXE:F9; 编译连接生成 运行:Ctrl+F9(用Alt+F5切换到用户窗口 切换到用户窗口) 运行 切换到用户窗口 调试: 调试:
单步: 不可进入函数体,取消ctrl+F2 单步:F8 不可进入函数体,取消 单步: 单步 F7 可进入被调函数体 断点:Ctrl+F8 断点 观察变量: 观察变量:Ctrl+F7
Turbo C 2.0 环境的使用
模式切换:Alt+Enter 全屏 窗口 模式切换 ALT+X退出
Ctrl+break跳出
编辑程序
编写程序:打开记事本进行编辑, 编写程序:打开记事本进行编辑,保存文件名 后缀为TXT,之后在 中打开调试 后缀为 ,之后在TC中打开调试
编译时出现:Unable to open input file ‘xxxxx’,不能打开输入文件‘xxxxx’(例 cos.OBJ) 解决办法:1、点右键 另存 2、设路径 3、或者点属性,取消只读文件
编译时出现:Unable to open input file ‘xxxxx’,不能打开输入文件‘xxxxx’(例 cos.OBJ) 解决办法:激活菜单到options derectory E:\turboc2.0\include E:\turboc2.0\lib E:\turboc2.0 save
Turbo C 2.0 环境
环境配置文件: 环境配置文件:
C语言程序的编写和要求 语言程序的编写和要求
需要解决的问题是什么? ——抓住主要问题 把自然语言描述转换为计算机语言描述: ——伪代码 如何解决? ——理清思路,画出流程图 记事本上先编写代码,在TC环境中调试 模块化编程:主函数中的语句尽量清晰明了,多用子函 数来完成功能模块。
程序编写提示
使用帮助:F1 或Ctrl+F1根据函数说明快速使用
提高程序可读性:
程序模块化 简洁、明了、易读 缩进编写 多写注释
程序调试:单步执行,加watch,观察变量。
例1
main() { ….. for(k=0;k…..) { for(j=0;j….) { …….. } } }
例2
main() { ……………… for(k=1,……) { for(j=1;……) { ……. } } ………………… }
复合语句配对的括弧要对齐
变量申明
全局变量与局部变量(作用域) int { int y; } 尽量少用全局变量,因为系统为其分配固定的永久存 储空间;而系统为局部变量分配动态存储空间。 /*y就是一个局部变量 */ x; /* x就是一个全局变量 */ main()
程序规范( 程序规范(例)
Int I /* 全局变量 全局变量*/ main() { int DI_in[6],DO_out[6],i; /* 局部变量 局部变量*/ /*屏幕输入模块
屏幕输入模块* /*屏幕输入模块*/ DataInput(参数) /*I/O端口输入模块 端口输入模块*/ 端口输入模块 ReadPort(参数) /*I/O端口输出模块 端口输出模块*/ 端口输出模块 WritePort(参数) /*控制模块 控制模块* /*控制模块*/ Control(参数) /*屏幕输出模块 屏幕输出模块* /*屏幕输出模块*/ DataOutput(参数) }
训练内容
完成下列位操作程序代码: 完成下列位操作程序代码: 字节byte 位bits[8] 字节
把一个字节byte分离成 位,存于数组 分离成8位 存于数组bits[8]: 把一个字节 分离成 : void bytetobits(unsigned int byte, unsigned int* bits) 把存于数组bits[8]中的 位合成一个字节 中的8位合成一个字节 把存于数组 中的 位合成一个字节byte: : unsigned int bitstobyte(unsigned int* bits)
实现方法
把一个字节byte分离成 位,存于数组 分离成8位 存于数组bits[8] 把一个字节 分离成
void bytetobits(unsigned int byte, unsigned int* bits) { int i; for(i=0; i<8; i++) bits[i] = (byte>>i)& 0x01; }
程序规范
变量:全局变量与局部变量; 1. 变量:全局变量与局部变量; 2. 子函数:屏幕输入/输出、I/O端口输入输出 子函数:屏幕输入/输出、I/O端口输入输出 控制模块 调试方法:主程序开始, 3. 调试方法:主程序开始,子函数一个一个编 写调试 4. 程序注释
1