C语言基本语法归纳.ppt

上传人:sh****n 文档编号:7546519 上传时间:2020-03-22 格式:PPT 页数:262 大小:923KB
返回 下载 相关 举报
C语言基本语法归纳.ppt_第1页
第1页 / 共262页
C语言基本语法归纳.ppt_第2页
第2页 / 共262页
C语言基本语法归纳.ppt_第3页
第3页 / 共262页
点击查看更多>>
资源描述
C语言基本语法归纳及实例介绍 计算机教学中心李雪飞 提纲 C语言概况C程序的结构数据类型 运算符与表达式最简单的C程序设计 顺序程序设计选择结构程序设计循环控制数组函数指针 C语言概况 C的优点1 高效2 可移植3 灵活C的缺点可读性差 学习应用较难 C语言概况 简单的C程序 例1 1 main printf ThisisaCprogram n 该程序的作用 在屏幕上输出一行信息 ThisisaCprogram 1 main 表示 主函数 每一个C程序都必须有且只有一个主函数 2 main函数体由大括号 括起来 3 语句后面有一个分号 4 printf 是C语言的输出函数 双引号内的字符被原样输出 5 n 是换行符 即在输出ThisisaCprogram之后换行 例1 2 求两数之和 main inta b sum 定义三个整型变量 int integer a 123 b 456 把常数123赋给变量a 把常数456赋给变量b sum a b 计算a b之和 并把和值赋变量给sum printf Sumis d n sum 输出sum的值 程序的输出信息为 sumis579 中间的内容表示 注释 注释是程序员对程序某部分的功能和作用所做的说明 是给人看的 对编译和运行不起作用 d表示输出的数据类型是十进制整数类型 在输出时 该位置用对应变量sum的值代替 例1 3 输入两个整数 输出其中的最大值 intmax intx inty 求两数最大值函数max intz if x y z x elsez y return z 将z的值返回给主函数main 返回值通过函数名max带回main函数调用处 main 主函数 inta b c scanf d d 输出最大值 C程序的结构 C程序是由函数构成的 一个C源程序至少包括一个函数 main函数 它代表程序开始执行的起始位置 也可以包括一个main函数和若干其它函数 因此 函数是C程序的基本单位 C程序中有三种类型的函数 1 main 主函数 每一个C程序必须且只有一个main 函数 2 开发系统提供的特殊函数 如printf scanf 等 TurboC开发系统提供三百多个函数 3 程序员自己设计的函数 如例1 3中的函数max C的函数相当于其它语言中的子程序 用函数来实现特定的功能 可以说C是函数式的语言 程序全部工作都是由函数来完成的 C的这种特性很容易实现模块化 C程序的结构 C程序的结构 一个函数由两部分组成 函数的说明部分 包括函数名 函数类型 函数属性 函数参数 形参 名 形式参数类型 如intmax intx inty 函数类型函数名函数参数类型函数参数名函数参数类型函数参数名 函数体 即函数说明部分下面的大括弧 内的部分 如果一个函数内有多个大括弧 则最外层的一对 为函数体的范围 函数体一般包括 变量定义 如 例1 3 中main函数中的 inta b c 执行部分 由若干个语句组成 当然 在某些情况下也可以没有变量定义部分 例如 例1 1 甚至可以既无变量定义也无执行部分 如 dump 它是一个空函数 什么也不干 但这是合法的 C程序的结构 一个C程序总是从main函数开始执行的 而不论main函数在整个程序中的位置如何 main函数可以放在程序最前头 也可以放在程序最后 或在一些函数之前在另一些函数之后 C程序书写格式自由 一行内可以写几个语句 一个语句可以分写在多行上 C程序没有行号 也不象fortran或cobol那样严格规定书写格式 语句必须从某一列开始书写 C程序的结构 每个语句和数据定义的最后必须有一个分号 分号是C语句的必要组成部分 例如 c a b 分号不可少 即使是程序中最后一个语句也应包含分号 这是和pascal语言不同的 C语言本身没有输入输出语句 输入和输出的操作是由库函数scanf和printf等函数来完成的 C对输入输出实行 函数化 可以用 对C程序中的任何部分作注释 可以增加程序的可读性 C程序的结构 程序开发过程 数据类型 运算符与表达式 3 1信息在计算机中的存储与表示 计算机的基本功能是进行数据的计算和加工处理 程序和数据在计算机的存储是用二进制形式表示的 数与字符是自然信息与计算机二进制信息的中转环节 数制 就是用一组固定的数字和一套统一的规则来表示数据的方法 日常使用的十进制 逢十进一 机器内部的二进制 逢二进一 其它常用的数制 八进制 十六进制 不同数制之间的对应表示 10 A B C D E F 20 10 11 12 13 14 15 16 17 数制间的转换 1 二 八 十六进制转换为十进制按权展开法 例 101 11 2 1 22 0 21 1 20 1 2 1 1 2 2 5 75 10 127 4 8 1 82 2 81 7 80 4 2 1 87 5 10 数制间的转换 2 十进制转换为二 八 十六进制整数部分 除R取余法 先余为低 后余为高 小数部分 乘R取整法 先整为高 后整为低 转换精度问题例 4 6875 10 2结果 100 1011 2 87 5 10 8结果 127 47 8 数制间的转换 3 二进制与八 十六进制之间的转换八 十六进制转换为二进制一分为三 一分为四例 23 54 8 010011 101100 2 10011 1011 2 13 B 16 00010011 1011 2 10011 1011 2二进制转换为八 十六进制合三为一 合四为一 3 2C的数据类型 数据结构指的是数据的组织形式 不同的计算机语言所允许定义和使用的数据结构是不同的 处理同一类问题 如果数据结构不同 算法也会不同 所以 我们应当综合考虑算法和数据结构 选择最佳的数据结构和算法 数据结构 算法 程序对程序当中所用到的所有数据都必须指定其数据类型 C语言的数据结构是以数据类型形式出现的 C的数据类型如下 3 2常量与变量 3 2 1常量和符号常量3 2 2变量 3 2 1常量和符号常量 在程序运行过程中 其值不能被改变的量称为常量 常量分为 1 整型常量 如12 0 3等 2 实型常量 如4 6 1 23等 3 字符常量 如 a d 等 将在后面的小节中详细讲解 常量一般从其字面形式即可判别 这种常量称为字面常量或直接常量 也可以用一个标识符代表一个常量 如例3 1 例3 1符号常量的使用 definePRICE30main intnum total num 10 total num PRICE printf total d total 程序中用 define命令行定义PRICE代表常量30 此后凡在本文件中出现的PRICE都代表30 可以和常量一样进行运算 程序运行结果为 total 300 符号常量 用一个标识符代表一个常量的 称为符号常量 即标识符形式的常量 注意 符号常量不同于变量 符号常量的值在其作用域 例3 1中即为main 函数 内不能被改变 也不能被再次赋值 如 在主函数main中再次用 PRICE 40 语句对PRICE赋值是错误的 为了方便区分符号常量与变量 习惯上符号常量名大写 变量名小写 使用符号常量的好处 1 含义清楚 定义符号常量名时应考虑 见名知意 在一个规范的程序中不提倡使用很多的常数 如 sum 15 30 23 5 43 在检查程序时搞不清各个常数究竟代表什么 应尽量使用 见名知意 的变量名和符号常量 2 在需要改变一个常量时能够做到 一改全改 例如 在程序中多处用到某物品的价格 如果价格用常数表示 则在价格进行调整时 需要在程序中作多处修改 若使用符号常量PRICE代表价格 则只需在定义该符号常量处作一次修改即可 如 definePRICE 35 3 2 2变量 其值可以改变的量称为变量 一个变量应该有一个名字 在内存中占据一定的存储单元 在该存储单元中存放该变量的值 注意 变量名与变量值的区别 3 a 变量名 一个符号地址 在对程序编译时系统分配给它一个内存地址 变量值 在程序中对变量取值 实际上是通过变量名找到相应内存地址 从其存储单元中读取数据 存储单元 变量的使用是程序设计的中心环节之一 应掌握 1 变量的定义 某一时刻值是确定的 不同时刻可能取不同的值 其改变是不连续的 2 变量的两个要素变量名 它是一个标识符 代表一定的内存存储单元 存储单元有一个地址 C语言以 变量名 表示变量的地址 变量值 它存放在相应的存储单元中 C语言在使用变量名时 实际上是在使用存储单元中存放的变量的值 变量的命名规则 变量的命名符合一般标识符 名字 的命名规则 1 字母数字串 以字母开头 后边跟以字母或者数字 下划线等同于字母 汉字看作字母 但编程时尽量避免使用汉字 因为汉字的兼容性不好 2 建议长度不超过8个字符 可移植性要求 3 区分大小写 一般使用小写字母 4 尽量做到 见名知意 避免使用代数符号 如a b 5 不能有空格 不能有小数点 变量的强制定义 在C语言中 要求对所有用到的变量作强制定义 就是 先定义 后使用 这样做的目的是 1 凡是没有被事先定义的 不作为变量名 这就能保证程序中变量名使用的正确 2 每一个变量被指定为一确定类型 在编译时就能为其分配相应的存储单元 3 制定每一变量属于一个类型 这就便于在编译时 据此检查该变量所进行的运算是否合法 3 3整型数据 3 3 1整型常量的表示方法3 3 2整型变量3 3 3整型常量的类型 3 3 1整型常量的表示方法 整形常量即整常数 C整常数可用以下三种形式表示 1 十进制整数 如123 456 0 2 八进制整数 以0开头的数是八进制数 如0123表示八进制数123 即 123 8 等于十进制数83 1 82 2 81 3 80 83 011表示八进制数 11 即十进制数 9 3 十六进制整数 以0 x开头的数是16进制数 如0 x123 代表16进制数123 3 3 2整型变量 1 整型数据在内存中的存放形式2 整型变量的分类3 整型变量的定义4 整型数据的溢出 整型变量的分类 1 基本型 以int表示 2 短整型 以shortint表示 或以short表示 3 长整型 以longint表示 或以long表示 4 无符号型 以存储单元中全部二进位 bit 存放数本身 而不必空出最高位作为符号位 无符号型中又分为无符号整型 无符号短整型和无符号长整型 分别以unsignedint unsignedshort unsignedlong表示 如果整量在内存中占2个字节 16位 则int型变量数的范围为 32768 32767 而unsignedint型变量数的范围为0 65535 各类数据所占内存字节数 C标准没有具体规定以上各类数据所占内存的字节数 只要求long型数据长度不短于int型 short型不长于int型 具体如何实现 有各计算机系统自行决定 通常的做法是 把long定为32位 把short定为16位 而int可以是16位 也可以是32位 在微机上用long型可以得到大范围的整数 但同时会降低运算速度 因此不要随便使用long型 整型变量的定义 前面已提到 C规定在程序中所有用到的变量都必须在程序中指定其类型 即 定义 这和BASIC FORTRAN不同 而和PASCAL相类似 例如 inta b 指定变量a b为整型 unsignedshortc d 指定变量c d为无符号短整型 longe f 指定变量e f为长整型 对变量的定义 一般是放在一个函数的开头部分的声明部分 变量的作用域是整个函数 也可以放在函数中的某一分程序内 但变量的作用域只限于该分程序内 这将在第8章介绍 例3 2整型变量的定义与使用 main inta b c d 指定a b c d为整型变量 unsignedu 指定u为无符号整型变量 a 12 b 24 u 10 c a u d b u printf a u d b u d n c d 运行结果为 a u 22 b u 14可以看到 不同种类的整型数据可以进行算术运算 在本例中是int型数据与unsignedint型数据进行加减运算 3 4实型数据 3 4 1实型常量的表示方法3 4 2实型变量3 4 3实型常量的类型 3 4 1实型常量的表示方法 实数在C语句中又称为浮点数 实数有两种表示形式 1 十进制数形式 它由数字和小数点组成 注意必须有小数点 0 123 123 123 0 123 0 0都是十进制数形式 2 指数形式 如123e3或123E3都代表123 103 但注意字母e 或E 之前必须有数字 且e后面指数必须为整数 如e3 2 1e3 5 e3 e等都不是合法的指数形式 3 4 2实型变量 1 实型数据在内存中的存放形式2 实型变量的分类3 实型数据的舍入误差 3 4 2实型变量 1 实型数据在内存中的存放形式2 实型变量的分类3 实型数据的舍入误差 3 5字符型数据 3 5 1字符常量3 5 2字符变量3 5 3字符数据在内存中的存储形式3 5 4字符串常量 3 5 1字符常量 C的字符常量是用单引号括起来的一个字符 如 a D 等都是字符常量 注意 a 和 A 是不同的字符的常量 除了以上形式的字符常量外 C还允许用一种特殊的字符常 就是以一个 开关的字符序列 例如 前面已经遇到过的 在printf函数中的 n 它代表一个 换行 符 这种非显示字符难以用一般形式的字符表示 故规定用这种特殊形式表示 这类特殊的字符称为 转义字符 转义字符 a 控制字符 t水平制表 跳到下一个tab位置 r回车 n换行 b 疑难字符 单引号字符 反斜杠字符c 指定ASCII码对应的字符 格式1 xhh 1到2位十六进制数ASCII码对应的字符如 x42表示字符 B 格式2 ddd 1到3位八进制数ASCII码对应的字符如 102同样表示字符 B 3 5 2字符变量 字符型变量用来存放字符常量 注意只能放一个字符 不要以为在一个字符变量中可以放一个字符串 包括若干字符 字符变量的字义如下 charc1 c2 它表示c1和c2为字符型变量 各可以放一个字符 因此可以用下面语句对c1 c2赋值 c1 a c2 b 一般以一个字节来存放一个字符 或者说一个字符变量在内存中占一个字节 3 5 3字符数据在内存中的存储形式 将一个字符常量放到一个字符变量中 并不是把该字符本身放到内存单元中 而是将该字符的ASCII码放到存储单元中 而且以二进制形式存放 例如 执行赋值语句c1 a c2 b 字符 a 的ASCII码为97 b 为98 在内存中变量c1 c2的值如图所示 既然在内存中 字符数据以ASCII码存放 它的存储形式就与整数的存储类似 这使得字符型数据和整型数据之间可以通用 97 98 c1 c2 01100001 01100010 c1 c2 字符型数据和整型数据的通用性 一个字符数据既可以以字符形式输出 也可以以整数形式输出 两种通用形式的输出 以字符形式输出时 需要先将存储单元中的ASCII码转换成相应字符 然后输出 以整数形式输出时 直接将ASCII码作为整数输出 对字符数据进行算术运算 相当于对它们的ASCII码进行整数的算术运算 相互赋值 字符数据与整型数据可以相互赋值 两种通用形式的输出 main charc1 c2 c1 97 c2 98 等价于c1 a c2 b printf c c n c1 c2 printf d d n c1 c2 将97和98两个整数直接存放到c1和c2的内存单元中 先将字符 a 和 b 化成ASCII码97和98 然后放到内存单元中 两者的作用和结果是完全相同的 程序输出如下 ab9798 对字符数据进行算术运算 例3 7大小写字母的转换 main charc1 c2 c1 a c2 b c1 c1 32 c2 c2 32 printf c c c1 c2 运行结果为 AB a 的ASCII码为97 A 为65 b 为98 B 为66 从ASCII代码表中可以发现 每一个小写字母比它相应的大写字母的ASCII码大32 C语言允许字符数据与整数直接进行算术运算 相互赋值 字符数据与整型数据可以相互赋值 main inti charc i a c 97 printf c d n c c printf c d n i i 运行结果 a 97a 97 3 5 4字符串常量 前面已提到 字符常量是由一对单引号括起来的单个字符 C语言除了允许使用字符常量外 还允许使用字符串常量 字符串常量是一对双引号括起来的字符序列 如 Howdoyoudo CHINA 123 45 都是字符串常量 可以输出一个字符串 如printf Howdoyoudo 不要将字符常量与字符串常混淆 a 是字符常量 a 是字符串常量 二者不同 假设C被指定为字符变量 charc c a 是正确的 而c a 是错误的 c CHINA 也是错误的 不能把一个字符串赋给一个字符变量 究竟为什么c a 就是正确的 而c a 就错了呢 3 6变量赋初值 程序中常需要对一些变量预先设置初值 C语言允许在定义变量的同时使变量初始化 inta 3 指定a为整型变量 初值为3 floatf 3 56 指定f为实型变量 初值为3 56 charc a 指定c为字符变量 初值为 a 也可以使被定义的变量的一部分赋初值 inta b c 5 指定a b c为整型变量 只对c初始化 如果对几个变量赋予初值3 应写为 inta 3 b 3 c 3 不能写成 inta b c 3 初始化不是在编译阶段完成的 只有在第8章中介绍的静态存储变量和外部变量的初始化时在编译阶段完成的 如 inta 3 相当于 inta 指定a为整型变量 a 3 赋值语句 将3赋给a 如 inta b c 5 相当于 inta b c 指定a b c为整型变量 c 5 赋值语句 将5赋给c 3 7算术运算符和算术表达式 3 7 1C运算符简介3 7 2算术运算符和算术表达式1 基本的算术运算符2 算术表达式和运算符的优先级与结合性3 强制类型转换运算符4 自增 自减运算符5 有关表达式使用中的问题说明 3 7 1C运算符简介 C语言是表达式语言 除了控制语句和输入输出外几乎都是表达式 如 赋值符 作为赋值运算符 而方括号 作为下标运算符等 C的运算符有13类之多 C的运算符 1 算术运算符 即加 减 乘 除 求余 2 关系运算符 5 赋值运算符 及其扩展赋值运算符 6 条件运算符 7 逗号运算符 8 指针运算符 和 9 求字节数运算符 sizeof 10 强制类型转换运算符 类型 11 分量运算符 12 下标运算符 13 其他 如函数调用运算符 运算符详见本书附录III 基本的算术运算符 四则运算 加法运算符 或正值运算符 如3 5 3 减法运算符 或负值运算符 如5 2 2 乘法运算符 如3 5 除法运算符 如5 3 模运算符 或求余运算符 两则应均为整型数据 说明 运算如果除数或被除数中有一个为负数 则舍入的方向是不固定的 如 5 3有的机器上结果为 1 有的为 2 但多数机器采取 向零取整 的方法 即5 3 1 5 3 1 取整后向零靠拢 算术表达式和运算符的优先级与结合性 用算术运算符和括号将运算对象 操作数 连接起来 符合C语法规则的式子 称C算术表达式 运算对象包括常量 变量 函数 合法的C算术表达式如 a b c 1 5 a 优先级 若运算对象两侧运算符的优先级不同 则先乘除后加减 结合性 若一个运算对象两侧的运算符的优先级相同 则满足结合性规则 自左向右 左结合性 运算对象先与左面的运算符结合 自增 自减运算符 有前置和后置两种形式 前置形式 变量名 变量名后置形式 变量名 变量名 功能 对变量的值进行自加1 自减1 的运算 例 语句 a 相当于执行a a 1 前置形式运算规则 先对表达式中含有前置自增 减 运算符的变量进行自加 减 1 然后用这些变量的新值参与表达式运算 后置形式运算规则 先用变量原值参与表达式运算 然后对含有后置自加 减 运算符的变量进行自加 减 1运算 main main intj i 3 intj i 3 j i 相当于i i 1 j i j i 相当于j i i i 1 printf d d i j printf d d i j 运行结果 4 4运行结果 4 3 1 自增运算符 和自减运算符 只能用于变量 不能用于常量或表达式 2 和 的结合方向为 自右至左 考虑 若i的初值为3 那么print d i 的结果应该为多少呢 3 8赋值运算符和赋值表达式 1 赋值运算符2 类型转换3 复合的赋值运算符4 赋值表达式 1 赋值运算符 赋值符号 就是赋值运算符 作用是将一个数据赋给一个变量 如 a 3 的作用是执行一次赋值操作 或称赋值运算 把常量3赋给变量a 也可以将一个表达式的值赋给一个变量 如 a 3 5 8 5 相当于把结果值5赋给变量a a 5 2 类型转换 如果赋值运算符两侧的类型不一致 但都是数值型或字符型时 在赋值时要进行类型转换 3 复合的赋值运算符 在赋值符 之前加上其他运算符 可以构成复合的运算符 如 a 3等价于a a 3 x 3等价于x x 3 注意 赋值符 右边看作一项 凡是二元运算符 都可以与赋值符一起组成复合赋值符 C语言规定了10种复合赋值运算符 规则 1 后边先加括号 2 前边复制到 后边 4 赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子称为 赋值表达式 一般形式为 赋值表达式求解过程 将赋值运算符右侧 表达式 的值赋给左侧的变量 表达式的值就是被赋值的变量的值 上述一般形式中的 表达式 还可以是一个赋值表达式 如 a b 5 所以 C语言允许连续赋值 inta b c a b c 0 连续使用等号时 从右向左顺序赋值 a b c 0 赋值表达式也可以包含复合的赋值运算符 如 a a a a也是一个赋值表达式 若a的初值为12 则 先进行 a a a 相当于a a a a a的值为12 144 132 再进行 a 132 的运算 相当于 a a 132 a的值为 132 132 264 3 9逗号运算符和逗号表达式 逗号运算符 又称顺序求值运算符 逗号表达式 用逗号运算符把两个表达式连接起来的表达式 一般形式为 表达式1 表达式2 表达式n逗号表达式的值 表达式n的值 如 逗号表达式 3 5 6 8 的值为14 如 a 3 5 a 4 由于赋值运算符的优先级高于逗号运算符 逗号运算符在所有运算符中级别最低 因此应先求解a 3 5 再求解a 4 得到逗号表达式的值60 一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式 如 a 3 5 a 4 a 5 先计算出a的值为15 由于a 4的操作并没有改变a的值 所以a 5的值为20 因此 逗号表达式最终的值为20 在许多情况下 使用逗号表达式的目的只是想分别得到各个表达式的值 逗号表达式最常用于循环 for 语句 注意 并不是任何地方出现的逗号都作为逗号运算符 例如函数参数也是用逗号来间隔的 如 printf d d d a b c 课堂作业 2 1指出下面哪些是合法的变量名 123 abc a b a b pad 12 Li Li P2 2 a 在内存中占个字节 a 在在内存中占个字节 2 3写出下面程序的运行结果 main charch ch B B的ascii码的值为66 printf c d n ch ch 12B66 2 4写出下面程序的运行结果 main inta 10 b c d intb c a 6 b c 20 6 a 2 printf a d b d c d n a b c 运行结果 a 16 b 18 c 20 2 5写出下面程序的运行结果 main inta 4 intb c c a b 2 a a a a printf d d d n a b c 2 6写出下面程序的运行结果 main inta b c 9 a 3 b 4 c a b printf d n c 运行结果 24 2 6运行结果 2 2 7写出下面程序的运行结果 main inti j m n i 8 j 10 m i n j printf d d d d n i j m n 运行结果 9 11 9 10 2 8写出下面程序的运行结果 main floatx 5 4 inti i int x printf x f i d n x i 运行结果 x 5 400000 I 5 第四章最简单的C程序设计 顺序程序设计 4 1C语句概述 4 2赋值语句 4 3数据输入输出的概念及实现 4 4字符数据输入输出函数 4 5格式输入与输出 4 6顺序结构程序设计举例 4 1C语句概述 与其他高级语言一样 C语言的语句用来向计算机系统发出操作指令 一个语句经编译后产生若干条机器指令 一个实际的程序应当包含若干条语句 C语句都是用来完成一定的操作任务的 声明部分的内容不应称为语句 如 inta 不是一个C语句 它不产生机器操作 而只是对变量的定义 C程序结构 C程序 源程序文件1 源程序文件2 源程序文件n 预处理命令 全局变量声明 函数1 函数n 函数首部 函数体 局部变量声明 执行语句 C语句分类 C语句可以分为以下5类 1 控制语句 2 函数调用语句 3 表达式语句 4 空语句 5 复合语句 1 控制语句 完成一定的控制功能 C只有9种控制语句 if else 条件语句 for 循环语句 while 循环语句 do while 循环语句 continue 结束本次循环语句 break 中止switch或循环语句 switch 多分支选择语句 goto 转向语句 return 从函数返回语句 表示条件 表示内嵌的语句 2 函数调用语句 由一次函数调用加一个分号构成一个语句 如 printf ThisisaCstatement 一次函数调用 分号 3 表达式语句 由一个表达式构成一个语句 最典型的是 由赋值表达式构成一个赋值语句 表达式后面加分号即构成语句 如 a 3是一个赋值表达式 而a 3 是一个赋值语句 一个语句必须在最后出现分号 任何表达式都可以加上分号而成为语句 如 x y 是语句 但没有意义 没有将相加之和赋给另一个变量 表达式能构成语句是C语言的一个重要特色 C中大多数语句是表达式语句 包括函数调用语句 所以有人称C语言为 表达式语言 4 空语句 空语句 仅包含一个分号的语句 它什么都不做 有时用来做被转向点 或是循环语句中的循环体 循环体是空语句 表示循环体什么也不做 如 5 复合语句 由大括号 括起来的语句序列 称为复合语句 或是分程序 如 z x y t z 100 printf f t 注意 复合语句中最后一个语句最后的分号不能忽略不写 C语言允许一行写几个语句 也可以一个语句拆开写在几行上 4 2赋值语句 C语言的赋值语句具有其他高级语言赋值语句的一切特点和功能 但也有不同之处 1 C语言中的赋值号 是一个运算符 而其它大多数语言中赋值号 不是运算符 2 关于赋值表达式和赋值语句的概念 其他大多数高级语言中没有 赋值表达式 这一概念 作为赋值表达式可以包括在其他表达式之中 如 if a b 0 t a 先赋值 将b的值赋给a 再判断a是否 0 若 0 则执行t a if a b 0 t a 不合法 if条件不能包含赋值语句 4 3数据输入输出的概念及实现 所谓输入输出是以计算机主机为主体而言的 从计算机向外部输出设备 显屏 打印机 输出数据称为 输出 从输入设备 键盘 磁盘 向计算机输入数据称为 输入 C语言本身不提供输入输出语句 输入和输出操作是由函数来实现的 在C的标准函数库中提供了一些输入输出函数 例如 printf函数和scanf函数 在使用它们时 千万不要简单地认为它们是C语言的 输入输出语句 printf和scanf不是C语言的关键字 完全可以不用printf和scanf这两个名字 而另外编两个函数 另用其它函数名 C提供的函数以库的形式存放在系统中 它们不是C语言文本中的组成部分 因此各函数的功能和名 在各种不同的计算机系统所不同 有些通用的函数 如printf和scanf等 各种计算机系统都提供 成为各种计算机系统的标准函数 标准输入输出库的一部分 在程序编译连接时 用户程序与标准文件相连 所以在程序中可以直接使用printf和scanf函数 注意 在源程序中有printf函数 在编译时并不把它翻译成目标指令 而是在执行阶段中调用已被连接的函数库中的printf函数 C语言函数库中有一批 标准输入输出函数 它是以标准的输入输出设备 一般为终端设备 为输入输出对象的 其中有 putchar 输出字符 getchar 输入字符 printf 格式输出 scanf 格式输入 puts 输出字符串 gets 输入字符串 在使用标准I O库函数时 要用预编译命令 include 将 stdio h 文件包括到用户源文件中 即 include stdio h 或 include stdio h是standartinput output的缩写 它包括了标准I O库有关的变量定义和宏定义 有关预编译命令见第九章 在需要使用标准I O库中的函数时 应在程序前使用上述预编译命令 但在用printf和scanf函数时 则可以不要 只有printf和scanf例外 预编译命令 include 都是放在程序的开头 因此这类文件被称为 头文件 4 4字符数据输入输出函数 4 4 1putchar函数 字符输出函数 4 4 2getchar函数 字符输入函数 4 4 1putchar函数 putchar函数的作用是向终端输出一个字符 例如 putchar c 输出字符串变量C的值 C可以是字符型变量或整型变量 例4 1 include stdio h main chara b c a B b O c Y putchar a putchar b putchar c 运行结果 BOY 也可以输出控制字符 如putchar n 输出一个换行符 如果将例4 1程序最后一行改为 putchar a putchar n putchar b putchar n putchar c putchar n 则输出结果为 BOY 也可以输出其它转义字符 如 putchar 101 输出字符 A putchar 输出单引号字符 putchar 015 输出回车 不换行 使输出的位置移到本行开头 4 4 2getchar函数 此函数的作用是从终端 或系统隐含指定的输入设备 输入一个字符 getchar函数没有参数 其一般形式为 getchar 函数的值就是从输入设备得到的字符 例4 2 include stdio h main charc c getchar putchar c 在运行时 如果从键盘输入字 a a 输入a后 按 回车 键 字符才送到内存 a 输出变量c的值 a 请注意 getchar 只能接收一个字符 getchar函数得到的字符可以赋给一个字符变量或整型变量 也可以不赋给任何变量 作为表达式的一部分 例如 例4 2第4 5行可以用下面一行代替 putchar getchar 也可以用printf函数 printf c getchar 在函数中要用getchar函数 应该在函数的前面 或本文件开头 用 include stdio h 因为在使用标准I O库中的函数时需要用到 stdio h 文件中包含的一些信息 4 5格式输入与输出 4 5 1printf函数 格式输出函数 4 5 2scanf函数 格式输入函数 4 5 1printf函数 1 printf函数的一般格式2 格式字符 printf函数的一般格式 printf函数的作用是 向终端 或系统隐含指定的输出设备 输出若干个任意类型的数据 注意 putchar只能输出字符 而且只能是一个字符 而printf可以输出多个数据 且为任意类型 一般格式 printf 格式控制 输出列表 如 printf d c n i c 格式说明 将数据转换为指定格式输出 普通字符 即需要原样输出的字符 逗号 空格和换行符 输出列表 需要输出的数据 可以是表达式 例 printf a d b d a b 双引号中的字符除了 d 和 d 以外 还有非格式说明的普通字符 a b 及空格 它们按原样输出 若a 3 b 4 则输出为 a 3 b 4 格式字符 对不同类型的数据用不同的格式字符 常用的有以下几种格式字符 1 d格式符 6 s格式符 2 o格式符 7 f格式符 3 x格式符 8 e格式符 4 u格式符 9 g格式符 5 c格式符 d格式符 输出十进制整数 d 按整型数据的实际长度输出 md 输出m位 指定的输出字段宽度 数据位数小于m位时左端补空格 大于m位时按实际长度输出 ld mld l表示输出 长整型 数据 也可以指定输出字段宽度 一个int型数据可以用 d或 ld格式输出 注 后面的m 位数控制 对于其它格式符也适用 例 表示空格 inti 123 longj 123456 printf d 5d ld 8ld i i j j 输出 123 123 123456 123456 c格式符 输出一个字符 一个整数 只要它的值在0 255之间 也可以用字符形式输出 在输出前 系统会将该整数作为ASCII码转换成相应的字符 反之 字符数据也可以用整数形式输出 例 4 4main charc a inti 97 printf c d n c c printf c d n i i 可以指定输出字段宽度 printf 3c c 则输出 a 输出 a 97a 97 s格式符 输出一个字符串 1 s 原样输出字符串 如 printf s CHINA 输出 CHINA 2 ms 输出字符串占m列 m全输出m 则m自动取n值 即保证n个字符正常输出 例4 5main printf 3s 7 2s 4s 5 3s n CHINA CHINA CHINA CHINA 输出 CHINA CH CHIN CHI m自动取n值 即等价于 4 4s f格式符 以小数形式输出实数 单 双精度 1 f 由系统自动指定字段宽度 使整数部分全部输出 并输出6位小数 2 m nf 指定输出的数据共占m列 其中由n位小数 若数值长度 m 则左端补空格 3 m nf 同 m nf 只是输出的数值向左端靠 右端补空格 注意 并非全部数字都是有效数字 单精度实数的有效位数一般为7位 而双精度实数的有效位数一般为16位 小数6位 例4 6main floatx y x 111111 111 y 222222 222 printf f x y 运行结果为 333333 328125显然 只有前7位数字是有效数字 例4 7main doublex y x 1111111111111 111111111 y 2222222222222 222222222 printf f x y 运行结果为 3333333333333 333010可以看到 最后3位小数 超过16位 是无意义的 例 4 8main floatf 123 456 printf f 10f 10 2f 2f 10 2f n f f f f f 输出 123 455994 123 455994 123 46 123 46 123 46 按原样输出的字符 由于格式定义而输出的字符 4 5 2scanf函数 getchar函数只能用来输入一个字符 用scanf函数可以用来输入任何类型的多个数据 在前面已初步接触到了scanf函数 在本节中再作详细介绍 1 一般形式2 格式说明3 使用scanf函数时应注意的问题 一般形式 scanf 格式控制 地址表列 格式控制 含义同printf函数 地址表列 是由若干个地址组成的表列 可能是变量的地址 或字符串的首地址 例4 9 用scanf函数输入数据 main inta b c scanf d d d 运行时按以下方式输入a b c的值 345 输入a b c的值 3 4 5 输出a b c的值 a b c中的 是 地址运算符 a指a在内存中的地址 上面scanf函数的作用是 按照a b c在内存的地址将a b c的值存进去 见下图 a b c的地址是在定义a b c之后就确定的 在编译阶段分配的 3 5 4 a c b d d d 表示按十进制整数形式输入数据 输入数据时 在两个数据之间以一个或多个空格间隔 也可以用回车键 跳格键tab 下面输入各法 345 345 3 按tab键 45用 d d d 格式输入时 不能用逗号作为两个数据间的分隔符 如下面输入不合法 3 4 5 格式说明 和printf函数中的格式说明相似 以 开始 以一个字符结束 中间可以插入附加的字符 格式字符 说明 d i 用来输入有符号的十进制整数 u 用来输入无符号的十进制整数 o 用来输入无符号的八进制整数 x X c 用来输入单个字符 s 输入字符串 将字符串送到一个字符数组中 输入以非空白符开始 以第一个空白符结束 以 0 作为其最后一个字符 f 用来输入实数 可以用小数形式或指数形式输入 e E g G 与f作用相同 e与f g可以互相替换 大小写作用相同 用来输入无符号的十六进制整数 大小写作用相同 scanf的附加格式说明字符 字符 l h 域宽 说明 用于输入长整型数据 可用 ld lo lx lu 以及double型数据 用 lf或 le 用于输入短整型数据 可用 hd ho hx 指定输入数据所占宽度 列数 域宽应为正整数 表示本输入顶在读入后不赋给相应的变量 4 6顺序结构程序设计举例 例4 10 输入三角形的三边长 计算其面积 算法 问题求解的方法与步骤 算法的表示 1 自然语言 Step1 输入a b cStep2 计算s a b c 2Step3 计算面积areaStep4 输出面积area2 传统流程图 3 结构化流程图 N S图 4 伪代码 1 用英语描述 begin 算法开始 inputa b cs a b c 2area s s a s b s c outputareaend5 计算机语言 1 设计算法 设三边长a b c 面积area的算法是 2 画出流程图 求平方根函数sqrt 在math h中定义 include math h main floata b c s area scanf f f f 运行情况如下 3 4 6 a 3 00 b 4 00 c 6 00area 5 33 例4 11输入一个大写字母 改为小写字母输出 includemain charc1 c2 c1 getchar printf c d n c1 c1 c2 c1 32 printf c d n c2 c2 运行情况如下 AA 65a 97 第5章选择结构程序设计 C语言中选择结构是用if语句实现的 if语句最常用的形式是 if 关系表达式 语句1else语句2例如 if x 0 y 1 elsey 1 其中 x 0是一个关系表达式 是一个关系运算符 5 1关系运算符和关系表达式 5 2逻辑运算 5 3if语句 5 4switch语句 5 5程序举例 5 1关系运算符和关系表达式 关系运算是逻辑运算的一种 所谓 关系运算 实际上是 比较运算 将两个值进行比较 判断比较的结果是否符合给定的条件 例如 a 3是关系表达式 大于号 是一个关系运算符 如果a的值为5 则满足给定的的 a 3 条件 因此关系表达式a 3的值为 真 即 条件满足 如果a的值为2 不满足 a 3 条件 则称关系表达式的值为 假 5 1 1关系运算符及其优先次序5 1 2关系表达式 5 1 1关系运算符及其优先次序 C语言有六种关系运算符 1 大于 4 大于或等于 5 等于 优先级相同 低 6 不等于 算术运算符 关系运算符 赋值运算符 5 1 2关系表达式 用关系运算符将两个表达式 算术表达式或关系表达式 逻辑表达式 赋值表达式 字符表达式 连接起来的式子 称为关系表达式 如 a b a b b c a 3 b 5 a b 的值为 真 表达式的值为1 b c a 的值为 假 表达式的值为0 例 a 3 b 2 c 1 1 c a b等效于c a b 表达式的值为02 a b c等效于 a b c表达式的值为13 a bc等效于a b c 赋值表达式 表达式的值为1例 a 3 b 2 c 1 d ab cf的值为0 赋值表达式 5 2逻辑运算 5 2 1逻辑运算符及其优先次序5 2 2逻辑表达式 5 2 1逻辑运算符及其优先次序 C语言提供三种逻辑运算符 逻辑与 双目 元 运算符 相当于AND 逻辑或 双目 元 运算符 相当于OR 逻辑非 一目 元 运算符 相当于NOT 如 a b x y a b x y a b 逻辑运算举例如下 a b若a b为真 则a b为真 a b若a b之一为真 则a b为真 a若a为真 则 a为假 在一个逻辑表达式中如果包含多个逻辑运算符 如 a b x y c 按以下的优先次序 1 非 与 或 即 为三者中最高的 2 逻辑运算符中的 和 低于关系运算符 高于算术运算符 如 a b x y 可写成 a b x y a b x y 可写成 a b x y a a b 可写成 a a b 逻辑非 算术运算符关系运算符 和 赋值运算符 5 2 2逻辑表达式 用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式 逻辑表达式的值是一个逻辑量 真 或 假 C语言编译系统在给出逻辑运算结果时 以1代表 真 以0代表 假 但在判断一个量是否为 真 时 以0代表 假 以非0代表 真 即将一个非零的数值认作为 真 若a 4 a的值为0 若a 4 b 5 a b的值为1 a b值同前 a b的值为1 a b值同前 a b的值为1 4 0 2的值为1 如果在一个表达式中不同位置上出现数值 应区分哪些是作为数值运算或关系运算的对象 哪些作为逻辑运算的对象 如 5 3 8 4 0 结果为0 逻辑运算符两侧的运算对象不但可以是0和1 或者是0和非0的整数 也可以是任何类型的数据 可以是字符型 实型或指针型等 系统最终以0和非0来判断它们属于 真 或 假 例如 c d 的值为1 因为 c 和 d 的ASCII值都不为0 按 真 处理 在逻辑表达式的求解中 并不是所有的逻辑运算符都被执行 只是在必须执行下一个逻辑运算符才能求出表达式的解时 才执行该运算符 如 1 a b c 2 a b c例 m a b n c d 当a 1 b 2 c 3 d 4 m和n的原值为1时 由于 a b 的值为0 m 0 而 n c d 不被执行 因此n的值不是0而仍保持原值1 用逻辑表达式来表示复杂的条件 例如 判别某一年year是否闰年 闰年的条件是符合下面二者之一 能被4整除 但不能被100整除 能被400整除 逻辑表达式表示为 year 4 0 year 100 0 year 400 0上述表达式值为真 1 则year为闰年 否则为非闰年 还可以加一个 来判别非闰年 year 4 0 year 100 0 year 400 0 若表达式值为真 1 year为非闰年 5 3if语句 5 3 1if语句的三种形式5 3 2if语句的嵌套5 3 3条件运算符 5 3 1if语句的三种形式 if语句 判别条件是否满足 来决定程序的流程 执行两路操作之一 1 if 表达式 语句例如 if x y printf d x 表达式 语句 假 0 真 非0 2 if 表达式 语句1else语句2例如 if x y printf d x elseprintf d y 表达式 语句1 语句2 假 真 3 if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3elseif 表达式m 语句melse语句n例如 if num 500 cost 0 15 elseif num 300 cost 0 10 elseif num 100 cost 0 075 elseif num 50 cost 0 05 elsecost 0 表达式1 表达式2 表达式3 表达式4 语句5 语句4 语句3 语句2 语句1 假 假 假 假 真 真 真 真 对if语句的三点说明 1 if后面的 表达式 一般为逻辑表达式或关系表达式 例如 if a b执行结果 97 2 第二 第三种形式的if语句中 在每个else前面有一分号 整个语句结束处有一分号 例如 if x 0 printf f x elseprintf f x 这个分号是if语句中的内嵌语句所要求的 如果无此分号 则出现语法错误 3 在if和else后面可以只含一个内嵌的操作语句 也可以有多个操作语句 若有多个操作语句 则用花括号 将几个语句括起来成为一个复合语句 例如 if a b c注意 在 外面不需要再加分号 例5 1 输入两个实数 按代数值由小到大输出这两个数 main floata b t scanf f f 运行示例 3 6 3 2 3 20 3 60 例5 2 输入三个数a b c 按由小到大输出 main floata b c t scanf f f f 运行示例 3 7 1 1 00 3 00 7 00 371 371 173 137 5 3 2if语句的嵌套 一般形式 if if 语句1else语句2elseif 语句3else语句4 注意 使用嵌套if语句时 必须特别注意if与else配对 1 从最内层开始 else总是与它上面最接近的 未曾配对的 if配对 2 避免if与else配对错位的最佳办法是加大括号 同时 为了便于阅读 使用适当的缩进 只有大括号能保证if和else不错位配对 缩进只是为了便于阅读 内嵌if 内嵌if 5 3 3条件运算符 若if语句中 在表达式为 真 和 假 时 且都只执行一个赋值语句给同一个变量赋值时 可以用简单的条件运算符来处理 例如 if a b max a elsemax b 可以用下面的条件运算符来处理 max a b a b 其中 a b a b 是一个 条件表达式 它是这样执行的 如果 a b 条件为真 则条件表达式取值a 否则取值b 条件运算符要求有三个操作对象 称三目 元 运算符 它是C语言中唯一的三目运算符 条件表达式的一般形式为 表达式1 表达式2 表达式3 表达式1 条件表达式取表达式2的值 条件表达式取表达式3的值 假 0 真 非0 5 4switch语句 switch语句是多分支选择语句 if语句只有两个分支可供选择 而实际问题中常常需要用多分支的选择 一般形式 switch 表达式 case常量表达式1 语句1case常量表达式2 语句2 case常量表达式n 语句ndefault 语句n 1 例 按照考试成绩的等级打印出百分之分数段 grade 输出 60 69 输出 60 输出 error 输出 70 84 输出 85 100 用switch语句实现 switch grade case A printf 85 100 n case B printf 70 84 n case C printf 60 69 n case D printf 60 n default printf error n 问题1 各个case和default的出现次序影响执行结果吗 问题2 若grade B 以上程序的输出结果是什么 Default的出现次序会不会影响结果 和书中意见不同 应该在执行一个case分支后 使流程跳出switch结构 即终止switch语句的执行 可以用一个break语句来达到此目的 switch grade case A printf 85 100 n break case B printf 70 84 n break case C printf 60 69 n break case D printf 60 n break default printf error n 在case
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!