C语言的基础知识

本文由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;iC语言的流程控制语句 语言的流程控制语句
选择语句
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

相关文档
最新文档