已阅读5页,还剩198页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计 主编 高立兵 职业教育 十二五 规划教材 东北师范大学出版社 目录 项目1C语言概述 1 项目2数据类型 运算符与表达式 2 项目3顺序结构程序设计 3 项目4选择结构程序设计 4 项目5循环结构程序设计 5 项目6数组 5 项目导读项目目标项目任务 本项目主要对C语言的一些基础知识及其字符集和词汇进行介绍 使读者在学习C语言之前对其有个全面的认识 项目导读 安装 配置TC2 0和VC 6 0 成功启动TC2 0和VC 6 0 能编写一个简单的C程序的源文件 并编译该源文件 链接目标文件得到可执行文件 项目目标 任务1 1C语言的发展与特点 C语言是1972年由美国的DennisRitchie设计发明的 并首次在配备了UNIX操作系统的DECPDP 11计算机上实现 它由早期的编程语言BCPL BasicCombinedProgrammingLanguage 发展演变而来 C语言的特点1 C语言是中级语言2 C语言是结构化语言3 C语言功能齐全4 C语言适用范围广 任务1 2认识C语言 本任务通过几个简单的C程序 介绍C语言的基本组成和格式 案例1 1main printf Thisisacprogram n 本程序的功能是输入下列一行信息 Thisisacprogram 任务1 2认识C语言 程序说明 main函数是 主函数 每一个C程序必须有一个main函数 函数体由大括弧 括起来 本例中 主函数内只有一个输出语句 printf Thisisacprogram n 是C语言的输出函数 具体详见项目3 双引号内的字符串将照原样输出 n 是换行符 即在输出 Thisisacprogram 后换行 分号是C语句的基本构成 每一个C语句后都应再加上分号 分号是语句的结束标志 任务1 2认识C语言 本任务通过几个简单的C程序 介绍C语言的基本组成和格式 案例1 2main 求两数之和 inta b sum 本行开始的以下4条为C语句 a 123 b 456 sum a b printf sumis d n sum 本程序的功能是求两数之和 任务1 2认识C语言 程序说明 是注释语句 此信息对编译和运行不起作用 2 程序第二行的含义是定义a b和sum为整体变量 3 sum a b 的含义是把变量a和b的和赋给变量sum 4 该程序的输出结果是 sumis579 任务1 2认识C语言 案例1 3main 求一个数的绝对值 intx y scanf d 本程序的功能是求z的绝对值 任务1 2认识C语言 程序说明 1 本程序包括两个函数 主函数main和被调用函数abs 2 函数abs的作用是将z的绝对值返回给主调函数main 返回值是通过函数名abs带回到main函数的调用处的 3 程序中的scanf函数的作用是从键盘上输入x的值 x中的 的含义是 取地址 此scanf函数的作用是将数值输入到变量x的地址所标志的单元中去 也就是输入给变量x 关于scanf函数详见项目3 4 main函数中的第四行为调用abs函数 在调用时将实际参数x传给abs函数中的形式参数z 然后输入y的值 5 printf函数中双引号内的abs d 在输出时 其中的 d将由y值取代 abs 原样输出 该程序的运行结果是 假定从键盘上输入x的值为 6 则y 6 6 本例用到了函数调用 实际参数和形式参数等概念 只是做了简单的解释 读者若对此不大理解 可先不予深究 在学到函数项目后的相关知识后 问题自会迎刃而解 这里介绍此案例的目的 是想让读者对C语言的组成和形式有一个初步了解 任务1 2认识C语言 通过以上三个例子 我们可以得到以下几点 1 C程序是由函数构成的 一个C源程序至少包含一个main函数 也可以包含一个main函数和若干个其它函数 因此 函数是C语言的基本单位 被调用函数可以是系统提供的库函数 例如printf函数和scanf函数 也可以是用户根据需要自编译的用户函数 例如案例1 3中的abs函数 2 函数及其结构 一个函数由两部分组成 即函数首部和函数体 函数首部包括函数类型 函数名 函数参数 形参 形参类型 函数体一般包括说明部分和执行部分 函数结构如下 函数类型函数名 形参表 说明部分 函数体执行部分 函数体以左花括号 开始 以右花括号 结束 其间可以有说明部分和执行部分 在某些情况下 甚至可以既无说明部分 也无执行部分 如 dump 它是一个空函数 表示什么也不做 但它是合法的 任务1 2认识C语言 3 一个C程序中 不论main函数在整个程序中的位置如何 main函数可以放在程序最前头 也可以放在程序最后头 或在一些函数之前 或在另一些函数之后 但程序执行时 总是从main函数开始执行 4 C程序书写格式自由 一行中可以书写多个语句 一个语句也可以书写在连续的多行上 当一行写不下时 用连字符 连接 并且每条语句的后面以分号 作为结束标记 5 C语言本身没有输入输出语句 C语言的函数库提供了标准输入输出函数 6 可以用 对C程序中的任何一部分做注释 以增加程序的可读性 任务1 3C程序的执行过程 C语言程序是一种编译型的中级语言 用C语言编写的源程序必须先进行编译和连接 生成可执行的程序之后才能执行 执行一个C语言程序一般经过如下几个步骤 1 编辑2 编译3 连接4 运行C语言程序的开发是一个由编辑开始 经过编译 连接和运行 程序如果有错误 又回到编辑的反复循环过程 如图所示 项目2数据类型 运算符与表达式 1 项目导读项目目标项目任务 C语言中 为解决具体问题 需要采用多种类型的数据 本项目将主要介绍C语言的数据类型 常用运算符和表达式 项目导读 学会声明整型变量 为声明的变量赋值 交换变量的值 输出变量的值 学会声明浮点型变量 为声明的浮点型变量赋值 对浮点型变量值进行加法运算 并将运算结果存放到浮点型变量中 输出浮点型变量的值 学会声明字符型变量 为声明的字符型变量赋值 按 d或 c格式输出变量的值 项目目标 任务2 1常量 变量和标示符 2 1 1标识符在计算机高级语言中 用来对变量 符号常量名 函数 数组 类型等命名的有效字符序列统称为标识符 identifier 简单地说 标识符就是一个对象的名字 C语言规定标识符只能由字母 数字和下划线组成 且第1个字符必须为字母或下划线 下面列出的是合法的标识符 可以作为变量名 Sum average total Class day month Student name lotus 1 2 3 BASIC li ling 下面是不合法的标识符和变量名 M D John 123 33 3D64 a b 注意 编译系统将大写字母和小写字母认为是两个不同的字符 因此 sum和SUM是两个不同的变量名 同样 Class和class也是两个不同的变量名 通常 变量名用小写字母表示 习惯用对应的英文字母缩写形式 做到见名知意 与人们日常习惯一致 以增加可读性 任务2 1常量 变量和标示符 2 1 2常量和变量1 常量在程序运行过程中 其值不能被改变的量称为常量 如案例2 1程序中的5 9 32和案例2 2程序中的1000 0 0036 0 0225 0 0198都是常量 数值常量就是数学中的常数 常用的常量有以下几类 整型常量 如1000 12345 0 345等都是整型常量 实型常量 有两种表现形式 十进制小数形式 由数字和小数点组成 如122 456 0 345 55 79 0 0 12 0等 指数形式 如12 34e3 代表12 34 103 345 87e 25 代表 345 87 10 25 0 145E25 代表0 145 10 25 等 由于在计算机输入或输出时 无法表示上标或下标 故规定以字母e或E代表以10为底的指数 但应注意 e或E之前必须有数字 且e或E后面必须为整数 如不能写成e4 12e2 5 任务2 1常量 变量和标示符 字符常量 有两种形式的字符常量 普通字符 用单撇号括起来的一个字符 如 a Z 3 注意 单撇号只是界限符 字符常量只能是一个字符 不包括单撇号 a 和 A 是不同的字符常量 字符常量存储在计算机存储单元中时 并不是存储字符 如a z 等 本身 而是以其代码 一般采用ASCII代码 存储的 例如字符 A 的ASCII话代码是97 因此 在存储单元中存放的是97 以二进制形式存放 ASCII字符与代码对照表见附录 转义字符 除了以上形式的字符常量外 C还允许用一种特殊形式的字符常量 就是以字符 开头的字符序列 例如 前面已经遇到过的 在printf函数中的 n 它代表一个 换行 符 常用的以 开头的特殊字符见表2 1 任务2 1常量 变量和标示符 表2 1 任务2 1常量 变量和标示符 字符串常量 如 boy 123 等 用双撇号把若干个字符括起来 字符串常量是双撇号中的全部字符 但不包括双撇号本身 注意不能错写成 CHINA boy 123 单撇号内只能包含一个字符 双撇号内可以包含一个字符串 符号常量 用 define指令 指定用一个符号名称代表一个常量 如 definePI3 1416 注意行末没有分号经过以上的指定后 本文件中从此行开始所有的PI都代表3 1416 在对程序进行编译前 预处理器先对PI进行处理 把所有的PI全部置换为3 1416 这种用一个符号名代表一个常量的 称为符号常量 在预编译后 符号常量全部变成字面常量 3 14159 使用符号常量有以下好处 含义清楚 在需要改变程序中多处用到的同一个常量时 能做到 一改全改 任务2 1常量 变量和标示符 2 变量变量代表一个有名字的 具有特定属性的存储单元 它用来存放数据 也就是存放变量的值 在程序运行期间 变量的值是可以改变的 变量必须先定义 后使用 在定义时指定该变量的名字和类型 一个变量应该有一个名字 以便被引用 请注意区分变量名和变量值这两个不同的概念 图2 1中a是变量名 3是变量a的值 即存放在变量a的内存单元中的数据 变量名的实质是以一个名字代表的一个存储地址 在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址 从变量中取值 实际上是通过变量名找到相应的内存地址 从该储存单元中读取数据 图2 1 任务2 1常量 变量和标示符 3 常变量如constinta 3表示a被定义为一个整型变量 指定其值为3 而且在变量存在期间其值不能改变 常变量与常量的异同是 常变量具有变量的基本属性 有类型 占存储单元 只是不允许改变其值 可以说 常变量是有名字的不变量 而常量是没有名字的不变量 有名字就便于在程序中被引用 任务2 2数据类型 在定义变量时需要指定变量的类型 C语言要求在定义所有的变量时都要指定变量的类型 常量也是区分类型的 所谓类型 就是对数据分配存储单元的安排 包括存储单元的长度 占多少字节 以及数据的存储形式 不同的类型分配不同的长度和存储形式 C语言允许使用的类型见图2 2 图2 2 任务2 2数据类型 2 2 1整型数据1 整型数据的分类 基本整型 int型 编译系统为int型数据分配2个字节或4个字节 有具体的C编译系统自行决定 如TurboC2 0为每一个整型数据分配2个字节 16个二进位 而VisualC 为每一个整型数据分配4个字节 32位 在存储单元中的存储方式是 用整数的补码 complement 形式存放 5的补码 5的补码 任务2 2数据类型 短整型 shortint 类型名为shortint或short 如用VisualC 5 0 编译系统分配给int数据4个字节 短整型2个字节 存储方式与int型相同 一个短整型变量的值的范围是 32768 32767 长整型 longint 类型名为longint或long 一个longint型变量的值的范围是 231 231 1 即 2147483648 2147483647 VisualC 5 0 编译系统分配给long数据4个字节 双长整型 longlongint 或longlong 一般分配8个字节 说明 C标准没有具体规定各种类型数据所占用存储单元的长度 这是由各编译系统自行决定的 C标准只要求long型数据长度不短于int型 short型不长于int型 即Sizeof short sizeof int sizeof longlong Sizeof是测量类型或变量长度的运算符 任务2 2数据类型 2 整型变量的符号属性以上介绍的几种类型 变量值在存储单元中都是以补码形式存储的 存储单元中的第1个二进位制代表符号 整型变量的值的范围包括负数到正数 见表2 2 表2 2整型数据常见的存储空间和值的范围 任务2 2数据类型 在实际应用中 有的数据的范围常常只有正值 如学号 年龄 库存量 存款额等 为了充分利用变量的值的范围 可以将变量定义为 无符号 类型 可以在类型符号前面加上修饰符unsigned 表示指定该变量是 无符号整数 类型 如果加上修饰符signed 则是 有符号 类型 因此 在以上4种整型数据的基础上可以扩展为以下8种整型数据 即有符号基本整型 signed int 无符号基本整型unsignedint 有符号短整型 signed short int 无符号短整型unsignedshort int 有符号长整型 signed long int 无符号长整型unsignedlong int 有符号双长整型 signed longlong int 无符号双长整型unsignedlonglong int 以上方括号表示其中的内容是可选的 既可以有 也可以没有 如果既未指定为signed也未指定为unsigned的 默认为 有符号类型 如signedinta和inta等价 任务2 2数据类型 2 2 2字符型数据1 字符与字符代码字符与字符代码并不是任意写一个字符 程序都能识别的 例如圆周率 在程序中是不能识别的 只能使用系统的字符集中的字符 目前大多数系统采用ASCII字符集 各种字符集 包括ASCII字符集 的基本集都包括了127个字符 其中包括 字母 大写英文字母A Z 小写英文字母a z 数字 0 9 专门符号 29个 空格符 空格 水平制表符 tab 换行 换页 formfeed 不能显示的字符 空 null 字符 以 0 表示 警告 以 a 表示 退格 以 b 表示 回车 以 r 表示 等 任务2 2数据类型 2 字符变量字符变量使用类型符char定义字符变量 Char是英文character 字符 的缩写 见名即可知意 如 charc 定义c为字符型变量并使初值为字符 的ASCII代码是63 系统把整数63赋给变量c c是字符变量 实质上是一个字节的整形变量 由于它常用来存放字符 所以称为字符变量 可以把0 127之间的整数赋给一个字符变量 在输出字符变量的值时 可以选择以十进制整数形式输出 或以字符形式输出 如 printf d c n c c 输出结果是 63 用 d 格式输出十进制整数63 用 c格式用字符形式输出字符 任务2 2数据类型 2 2 3浮点型数据浮点型数据是用来表示具有小数点的实数的 浮点数类型包括float 单精度浮点型 double 双精度浮点型 longdouble 长双精度浮点型 1 float型 单精度浮点型 编译系统为每一个float型变量分配4个字节 数值以规范化的二进制数值形式存放在存储单元中 在存储时 系统将实型数据分成小数部分和指数部分两个部分 分别存放 小数部分的小数点前面的数为0 如3 14159在内存中的存放形式可以用图2 9表示 图2 9 任务2 2数据类型 double型 双精度浮点型 为了扩大能表示的数值范围 用8个字节存储一个double型数据 可以得到15位有效数字 数值范围为 1 7 10 308 1 7 10308 在C语言中进行浮点数的算术运算时 将float型数据都自动转换为double型 然后进行运算 longdouble型 长双精度 型 不同的编译系统对longdouble型的处理方法不同 TurboC对longdouble型分配16个字节 而VisualC 6 0则对longdouble型和double型一样处理 分配8个字节 请读者在使用不同的编译系统时注意其差别 表2 4列出实型数据的有关情况 表2 4 任务2 3运算符和表达式 2 3 1基本的算术运算符 表2 5最常用的算术运算符 任务2 3运算符和表达式 2 3 2自增 自减运算符作用是使变量的值加1或减1 例如 i i 在使用i之前 先使i的值加 减 1 i i 在使用i之后 使i的值加 减 1 粗略地看 i和i 的作用相当于i i 1 但 i和i 的不同之处在于 i是先执行i i 1后 再使用i的值 而i 是先使用i的值后 再执行i i 1 如果i的原值等于3 请分析下面的赋值语句 j i i的值先变成4 再赋给j j的值为4 j i 先将i的值3赋给j j的值为3 然后i变为4 又例如 i 3 printf d i 输出4 若改为Printf d n i 则输出3 任务2 3运算符和表达式 2 3 3算术表达式和运算符的优先级与结合性用算术运算符和括号将运算对象 也称操作数 连接起来的 符合C语法规则的式子 称为C算术表达式 运算对象包括常量 变量 函数等 例如 下面是一个合法的C算术表达式 a b c 1 5 a C语言除了规定了运算符的优先级外 还规定了运算符的结合性 在表达式求值时 先按运算符的优先级别顺序执行 例如先乘除后加减 如表达式a b c b的左侧为减号 右侧为乘号 而乘号优先级高于减号 因此 相当于a b c 如果在一个运算对象两侧的运算符的优先级别相同 如a b c 则按规定的 结合方向 处理 C语言规定了各种运算符的结合方向 结合性 算术运算符的结合方向都是 自左至右 及先左后右 因此b先与减号结合 执行a b的运算 然后再执行加c的运算 自左至右的结合方向 又称 左结合性 即运算对象先于左面的运算符结合 以后可以看到有些运算符的结合方向为 自右至左 即右结合性 例如 赋值运算符 若有a b c 按从右到左顺序 先把变量c的值赋给变量b 然后把变量b的值赋给变量a 任务2 3运算符和表达式 2 3 4不同类型数据间的混合运算在程序中经常会遇到不同类型的数据进行运算 如5 3 5 如果一个运算符的两侧的数据类型不同 则先自动进行类型转换 使二者具有同一种类型 然后进行运算 因此整型 实型 字符型数据间可以进行混合运算 规律为 1 运算的两个数中有一个数为float或double型 结果是double型 因为系统将所有float型数据都先转换为double型 然后进行运算 2 如果int型与float或double型数据进行运算 先把int型和float型数据转换为double型 然后再进行运算 结果是double型 3 字符 char 型数据与整型数据进行运算 就是把字符的ASCII代码与整型数据进行运算 如 12 A 由于字符A的ASCII代码是65 相当于12 65 等于77 字符数据可以直接与整型数据进行运算 如果字符型数据与实型数据进行运算 则将字符的ASCII代码转换为double型数据 然后进行运算 任务2 3运算符和表达式 示例2 1编程 给定一个大写字母 要求用小写字母输出 编写程序 include stdio h intmain charc1 c2 c1 A 将字符 A 的ASCII代码放到c1变量中c2 c1 32 得到字符 a 的ASCII代码 放在c2变量中printf c n c2 输出c2的值 是一个字符printf d n c2 输出c2的值 是字符 a 的ASCII代码reurn0 运行结果 a97 任务2 3运算符和表达式 2 3 6C运算符除了算术运算符外 C还提供其他运算符 共有以下几类 关系运算符 逻辑运算符 位运算符 赋值运算符 及其扩展赋值运算符 条件运算符 逗号运算符 指针运算符 和 求字节数运算符 sizeof 强制类型转换运算符 类型 成员运算符 下标运算符 其他 如函数调用运算符 任务2 3运算符和表达式 2 3 5强制类型转换运算符可以利用强制类型转换运算符将一个表达式转换成所需类型 例如 double a 将a转换成double类型 int x y 将x y的值转换成int型 float 5 3 将5 3的值转换成float型 其一般形式为 类型名 表达式 注意 表达式应该用括号括起来 如果写成 int x y则只将x转换成整型 然后与y相加 需要说明的是 在强制类型转换时 得到一个所需类型的中间数据 而原来变量的类型未发生变化 例如 a int x如果已定义x为float型变量 a为整型变量 进行强制类型运算 int x后得到一个int类型的临时值 它的值等于x的整数部分 把它赋给a 注意x的值和类型都未变化 仍为float型 该临时值在赋值后就不存在了 任务2 4赋值语句 在C程序中 最常用的语句是 赋值语句和输入输出语句 其中最基本的是赋值语句 程序中的计算功能大部分是由赋值语句实现的 几乎每一个有实用价值的程序都包括赋值语句 有的程序中的大部分语句都是赋值语句 先分析一个例子 给出三角形的三边长 求三角形面积 解题思路 假设给定的三个边符合构成三角形的条件 任意两边之和大于第三边 解此题的关键是要找到求三角形面积的公式 从数学知识已知求三角形面积的公式为 其中s a b c 2 任务2 4赋值语句 编写程序 根据上面的公式编写程序如下 include stdio h include math h intmain doublea b c s area 定义各变量 均为double型a 2 67 对边长a赋值b 4 43 对边长b赋值c 5 21 对边长c赋值s a b c 2 计算sarea sqrt s 计算areaprintf a f tb f t f n a b c 输出三边a b c的值printf area f n area 输出面积area的值return0 运行结果 a 2 670000b 4 4300005 210000area 8 903431 任务2 4赋值语句 2 4 1赋值运算符赋值符号 就是赋值运算符 它的作用是将一个数据赋给一个变量 如a 3的作用是执行一次赋值操作 或称赋值运算 把常量3赋给变量a 也可以将一个表达式的值赋给一个变量 2 4 2复合的赋值运算符在赋值符 之前加上其它运算符 可以构成复合的运算符 如果在 前加一个 运算符就成了复合运算符 例如可以有以下的复合赋值运算 a 3等价于a a 3x y 8等价于x x y 8 x 3等价于x x 3以 a 3 为例来说明 它相当于使a进行一次自加3的操作 即 先使a加3 再赋给a 同样 x y 8 的作用是使x乘以 y 8 再赋给x 任务2 4赋值语句 2 4 3赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为 赋值表达式 它的一般形式为变量赋值运算符表达式赋值表达式的作用是将一个表达式的值赋给一个变量 因此赋值表达式具有计算和赋值的双重功能 如a 3 5是一个赋值表达式 对赋值表达式求解的过程是 先求赋值运算符右侧的 表达式 的值 然后赋给赋值运算符左侧的变量 既然是一个表达式 就应该有一个值 赋值表达式a 3 5的值为15 对表达式求解后 变量a的值和表达式的值都是15 2 4 4赋值过程中的类型转换如果赋值运算符两侧的类型一致 则直接进行赋值 如 i 234 设已定义i为整型变量此时直接将整数234存入变量i的存储单元中 如果赋值运算符两侧的类型不一致 但都是算术类型时 在赋值时要进行类型转换 类型转换是由系统自动进行的 任务2 4赋值语句 2 4 5赋值表达式和赋值语句在C程序中 赋值语句是用的最多的语句 在任务1的C语句分类中 并没有看到赋值语句 实际上 C语言的赋值语句属于表达式语句 由一个赋值表达式加一个分号组成 注意 要区分赋值表达式和赋值语句 赋值表达式的末尾没有分号 而赋值语句的末尾必须有分号 在一个表达式中可以包含一个或多个赋值表达式 但绝不能包含赋值语句 2 4 6变量赋初值可以用赋值语句对变量赋值 也可以在定义变量时对变量赋以初值 这样可以使程序简练 如 inta 3 定义a为整型变量 初值为3floatf 2 56 定义f为浮点型变量初值为2 56charc a 定义c为字符变量 初值为 a 项目3顺序结构程序设计 1 项目导读项目目标项目任务 在项目2中介绍了C程序中用到的一些基本要素 如常量 变量 运算符 表达式等 本项目将介绍编写简单的C程序所必需的一些内容 项目导读 使用scanf函数从键盘为变量输入值 使用printf函数输出数据 能编写简单的C程序的源文件 并运行程序 项目目标 任务3 1顺序程序设计举例 示例3 1用温度计测量出用华氏法表示的温度 如69 F 今要求把它转换为以摄氏法表示的温度 如20 解题思路 这个问题的算法很简单 关键在于找到二者之间的转换公式 根据物理学知识 知道以下转换公式 c 5 9 f 32 其中f代表华氏温度 c代表摄氏温度 据此可以用N S图表示算法 见图3 1 图3 1 算法由3个步骤组成 这是一个简单的顺序结构 编写程序 有了N S图 很容易用C语言表示 写出求此问题的C程序 任务3 1顺序程序设计举例 include stdio h intmain floatf c 定义f和c为单精度浮点型变量f 63 0 定义f的值c 5 9 f 32 利用公式计算c的值printf f nc n f c 输出c的值return0 运行结果 f 63 000000c 16 777778 任务3 1顺序程序设计举例 示例3 2计算存款利息 有1000元 想存一年 有三种方法可选 活期 年利率为r1 一年期定期 年利率为r2 存两次半年定期 年利率为r3 请分别计算出一年后按三种方法所得到的本息和 解题思路 关键是确定计算本息和的公式 从数学知识可知 若存款额为p0 则 活期存款一年后本息和为p1 p0 1 r1 一年期定期存款 一年后本息和为p2 p0 1 r2 两次半年定期存款 一年后本息和为p3 p0 1 r3 2 1 r3 2 画出N S流程图 见图3 2 图3 2 任务3 1顺序程序设计举例 include stdio h intmain floatp0 1000 r1 0 0036 r2 0 0225 r3 0 0198 p1 p2 p3 定义变量p1 p0 1 r1 计算活期本息和p2 p0 1 r2 计算一年定期本息和p3 p0 1 r3 2 1 r3 2 计算存两次半年定期的本息和printf p1 f np2 fnp3 f n p1 p2 p3 输出结果return0 运行结果 P1 1002 599976P2 1022 500000P3 1018 898010 任务3 2C语句概述 C程序的执行部分是由语句组成的 程序的功能也是由执行语句实现的 C程序主要包含表达式语句 函数调用语句 控制语句 复合语句和空语句 其中控制语句包含多种情况 本任务将分别进行介绍 C程序结构可以用图3 3表示 即一个C程序可以由若干个源程序文件 编译时以文件模块为单位 组成 一个源文件可以由若干个函数和预处理指令以及全局变量声明部分组成 关于 全局变量 见项目7 一个函数由数据声明部分和执行语句组成 图3 3 任务3 2C语句概述 C语句分为以下5类 1 控制语句 控制语句用于完成一定的控制功能 C语句只有9种控制语句 它们的形式是 if else 条件语句 for 循环语句 while 循环语句 do while 循环语句 continue 结束本次循环语句 break 中断执行switch或循环语句 switch 多分支选择语句 return 从函数返回语句 goto 转向语句 在结构化程序中基本不用goto语句 上面9种语句表示形式中的 表示括号中是一个 判别条件 表示内嵌的语句 例如上面的 if else 的具体语句可以写成 if x y z x elsez y 任务3 2C语句概述 2 函数调用语句 函数调用语句由一个函数调用加一个分号构成 例如 printf Thisisacstatement 其中printf Thisisacstatement 是一个函数调用 加一个分号成为一个语句 表达式语句 表达式语句由一个表达式加一个分号构成 最典型的是 有赋值表达式构成一个赋值语句 例如 a 3是一个赋值表达式 而a 3 是一个赋值语句 空语句 下面是一个空语句 此语句只有一个分号 它什么也不做 那么它有什么用呢 可以用来作为流程的转向点 流程从程序其他地方转到此语句处 也可以用来作为循环语句中的循环体 循环体是空语句 表示循环体什么也不做 任务3 2C语句概述 复合语句 可以用 把一些语句和声明括起来成为复合语句 又称语句块 例如下面是一个复合语句 floatpi 2 14159 r 2 5 area 定义变量area pi r r printf area f area 可以在复合语句中包含声明部分 如上面的第2行 C99允许将声明部分放在复合语句中的任何位置 但习惯上把它放在语句块开头位置 复合语句常用在if语句或循环中 此时程序需要连续执行一组数据 注意 复合语句中最后一个语句中最后的分号不能忽略不写 C语言允许一行写几个语句 也允许一个语句拆开写在几行上 书写格式无固定要求 任务3 3数据的输入 输出 3 3 1输入输出举例案例3 3求ax2 bx c 0方程的根 a b c由键盘输入 设b2 4ac 0 解题思路 首先要知道求方程式的根的方法 由数学知识已知 如果b2 4ac 0 则一元二次方程有两个实根 可以将上面的分式分为两项 则x1 p q x2 p q有了这些式子 只要知道a b c的值 就能顺利的求出方程的两个根 任务3 3数据的输入 输出 include include 程序重要调用求平方根函数sqrtintmain doublea b c disc x1 x2 p q disc用来存放判别式 b b 4ac 的值scanf 1f 1f 1f 运行结果 132X1 1 00X2 2 00 任务3 3数据的输入 输出 3 3 2有关数据输入输出的概念从前面的程序可以看到 几乎每一个C程序都包含输入输出 因为要进行运算 就必须给出数据 而运算的结果当然需要输出 以便人们应用 没有输出的程序是没有意义的 输入输出是程序中最基本的操作之一 在讨论程序的输入输出时首先要注意以下几点 所谓输入输出是以计算机主机为主体而言的 C语言本身不提供输入输出语句 输入和输出操作是由C标准函数库中的函数来实现的 在使用系统库函数时 要在程序文件的开头用预处理指令 include把有关头文件放在本程序中如 include注意 应养成这样的习惯 只要在本程序文件中使用标准输入输出库函数时 一律加上 include指令 任务3 3数据的输入 输出 3 3 3用printf函数输出数据在C程序中用来实现输出和输入的 主要是printf函数和scanf函数 这两个函数是格式输入输出函数 用到两个函数时 程序设计人员必须制定输入输出数据的格式 即根据数据的不同类型指定不同的格式 1 printf函数的一般格式printf函数的一般格式为printf 格式控制 输出表列 例如 printf d c n i c 2 格式字符 1 d格式字符 用来输出一个有符号的十进制整数 可以在格式声明中指定输出数据的域宽 所占的列数 如用 5d 指定输出数据占5列 输出的数据显示在此5列区域的右侧 如 printf 5d n 5d n 12 345 输出结果为12 12前面有3个空格 345 345前面有1个空格 任务3 3数据的输入 输出 2 c格式符 用来输出一个字符 例如 charch a printf c ch 运行时输出a一个整数 如果在0 127范围中 也可以用 c 使之按字符形式输出 在输出前 系统会将该整数作为ASCII码转换成相应的字符 如 shorta 121 printf c a 输出字符y 3 s格式符 用来输出一个字符串 如 printf s CHINA 执行此函数时在显示屏上输出字符串 CHINA 不包括双引号 任务3 3数据的输入 输出 4 f格式符 用来输出实数 包括单 双精度 长双精度 以小数形式输出 有几种用法 基本型 用 f 不指定输出数据的长度 由系统根据数据的实际情况决定数据所占的列数 系统处理的方法一般是 实数中的整数部分全部输出 小数部分输出6位 示例3 4用 f输出实数 只能得到6位小数 includeintmain doublea 1 0 printf f n a 3 return0 运行结果 0 333333虽然a是双精度型 a 3的结果也是双精度型 但是用 f格式声明只能输出6位小数 任务3 3数据的输入 输出 指定数据宽度和小数位数 用 m nf 如果想在示例3 4输出双精度变量a的15位小数 可以采用案例3 3所用的方法 用 20 15f n a 3 运行结果 0 333333333333333注意 在用 f输出时要注意数据本身能提供的有效数字 如float型数据的存储单元只能保证6位有效数字 double型数据能保证15位有效数字 不要以为计算机输出的所有数字都是绝对精确有效的 输出的数据向左对齐 用 m nf 在m n的前面加一个负号 其作用与 m nf形式作用基本相同 但当数据长度不超过m时 数据向左靠 右端补空格 如 printf 24 15f 24 15f n a a 运行结果 3332 3333333333335003332 333333333333500第1次输出a时输出结果向左端靠 右端空5列 第2次输出a使输出结果向右端靠 左端空5列 任务3 3数据的输入 输出 5 e格式符 用格式声明 e指定以指数形式输出实数 例如 printf e 122 456 输出如下 1 234560e 002所输出的实数共占13列宽度 注 不同系统的规定略有不同 也可以用 m ne 形式的格式声明 如 printf 12 2e 122 456 输出为1 23e 002 数的前面有4个空格 格式符e也可以写成大写E形式 因此输出的数据中的指数不是以小写字母e表示而以大写字母E表示 如1 23460E 002 任务3 3数据的输入 输出 表3 1printf函数中用到的格式字符 任务3 3数据的输入 输出 3 3 4scanf函数输入数据1 scanf函数的一般形式scanf 格式控制 地址表列 格式控制 的含义同printf函数 地址表列 是由若干个地址组成的的表列 可以是变量的地址 或字符串的首地址 2 scanf函数中的格式声明与printf函数中的格式声明相似 以 开始 以一个格式字符结束 中间可以插入附加的字符 表3 4scanf函数中用到的格式附加字符 任务3 3数据的输入 输出 表3 3scanf函数中所用到的格式字符 任务3 3数据的输入 输出 3 3 5字符数据的输入输出除了可以用printf函数和scanf函数输出和输入字符外 C函数库还提供了一些专门用于输入和输出字符的函数 用putchar函数输出一个字符putchar函数的一般形式为putchar c 示例3 6先后输出BOY三个字符 解题思路 定义3个变量 分别赋以初值 B O Y 然后用putchar函数输出这3个字符变量的值 任务3 3数据的输入 输出 includeintmain chara B b O c Y 定义3个字符变量并初始化putchar a 向显示器输出字符Bputchar b 向显示器输出字符Oputchar c 向显示器输出字符Yputchar n 向显示器输出一个换行符return0 运行结果 BOY连续输出B O Y3个字符 然后换行 任务3 3数据的输入 输出 用getchar函数输入一个字符为了向计算机输入一个字符 可以调用系统函数库中的getchar函数 字符输入函数 getchar函数的一般形式为getchar 示例3 7从键盘输入BOY3个字符 然后把它们输出到屏幕 解题思路 用3个getchar函数先后从键盘向计算机输入BOY3个字符 然后用putchar函数输出 任务3 3数据的输入 输出 includeintmain chara b c 定义字符变量a b ca getchar 从键盘输入一个字符 送给字符变量ab getchar 从键盘输入一个字符 送给字符变量bc getchar 从键盘输入一个字符 送给字符变量cputchar a 将变量a的值输出putchar b 将变量b的值输出putchar c 将变量c的值输出putchar n 换行return0 运行结果 BOYBOY 任务3 4顺序结构的程序设计 示例3 9输入三角形的三边长 求三角形面积 为简单起见 设输入的三边长a b c能构成三角形 从数学知识已知三角形的面积的公式为 其中s a b c 2据此编写程序如下 includemain floata b c s area scanf f f f 任务3 4顺序结构的程序设计 示例3 10从键盘输入一个大写字母 要求改用小写字母输出 includemain charc1 c2 c1 getchar printf c d n c1 c1 c2 c1 32 printf c d n c2 c2 运行情况如下 A A 65a 97 项目4选择结构程序设计 1 项目导读项目目标项目任务 选择结构是三种基本结构之一 在大多数程序中都会包含选择结构 本项目将介绍如何用C语言编写含选择结构的程序 项目导读 了解if和if else语句的用法以及了解多重条件下if语句的嵌套使用 掌握switch开关语句的用法 熟悉条件运算符的使用 项目目标 任务4 1if语句 4 1 1选择结构简介选择结构体现了程序的判断能力 在程序执行过程中能依据运行时某些变量的值确定某些操作是否执行 或者确定若干个操作中选择哪个操作执行 这种程序结构称为选择结构 又称为分支结构 C语言提供了两种分支语句 if条件语句和switch多分支选择语句用于实现选择程序的设计 其中 if语句又分三种结构 在程序设计过程中 根据各语句的结构特点 灵活应用 任务4 1if语句 4 1 2简单的if语句if结构是一种常用的分支结构 用它可以构成复杂的判断选择 if语句是最简单的一种单分支结构 其一般形式为 if 表达式 语句A 其中 表达式 一般为条件表达式或逻辑表达式 if结构的功能是 先判断 表达式 的逻辑值 若该逻辑值为 真 则执行 语句A 否则 什么也不执行 if结构的流程图如图4 1所示 图4 1 任务4 1if语句 示例4 1设x与y有如下函数关系 试根据输入的x值 求出y的值 解题思路 依题意知 当x 0时 y x 7 当x 0时 y 2 当x 0时 y 3 x x 其程序流程图如图4 2所示 图4 2程序流程图 任务4 1if语句 程序代码如下 include stdio h voidmain floatx y printf 请输入x的值 scanf f if x 0 y 3 x x x为负数时 printf y的值是 2f n y 任务4 1if语句 4 1 3if else语句双分支结构是按照某个条件判断出执行两个语句 可以是复合语句 中的哪个语句 双分支结构如图4 3所示 在C语言中 使用if else语句可以实现双分支结构 其格式为 if 表达式 语句1 else语句2 功能 计算表达式的值 如果为真 非0 则执行 语句1 否则执行 语句2 图4 3双分支结构 任务4 1if语句 示例4 3设计一个猜数游戏 由计算机产生一个随机数magic 从键盘输入一个数guess 若输入的数guess的大小等于随机数magic 则输出 恭喜你 猜对了 否则 输出 很遗憾 猜错了 include stdio h include stdlib h main intguess magic magic rand 获取一个随机数字 printf 请输入你猜的数字 scanf d guess if guess magic printf 恭喜你 猜对了 elseprintf 很遗憾 猜错了 任务4 1if语句 4 1 4if else if语句if else if结构是分支嵌套常用的一种形式 它并不是C语言的一种语句 它常用于多分支处理 其常用结构为 if 表达式1 语句1elseif 表达式2 语句2 elseif 表达式3 语句3 else 该语句执行过程是 先判断条件1 表达式1 若条件1成立 则执行语句1后 退出该if结构 否则 再判断条件2 表达式2 若条件2成了 则执行语句2后 退出该if结构 否则 再判断条件3 表达式3 若条件3成立 则执行语句3后 退出该if结构 任务4 1if语句 示例4 6运输公司对用户计算运费 路程 s 越远 每千米运费越低 标准如下 s 250km没有折扣250 s 500km2 折扣500 s 1000km5 折扣1000 s 2000km8 折扣2000 s 3000km10 折扣3000 s15 折扣设每千米每吨货物的基本运费为p 货物重量为w 距离为s 折扣为d 总的运费为f 任务4 1if语句 include stdio h voidmain ints floatp w d f printf 请输入每千米每吨货物的基本运费p 货物运费w和距离s n scanf f f d p w s if s 250 d 0 elseif s 500 d 2 elseif s 1000 d 5 elseif s 2000 d 8 elseif s 3000 d 10 elseifd 15 f p w s 1 d 100 0 依据不同折扣计算总运费 printf 1 d 100 0 f n 1 d 100 0 printf 总的运费为 f n f 任务4 1if语句 说明 依题意知 当S 250时 没有折扣 当250 s 500时 折扣d 2 当500 s 1000时 折扣d 5 当1000 s 2000时 折扣d 8 当2000 s 3000时 折扣d 10 当3000 s时 折扣d 15 则得其流程图如图4 4所示 图4 4程序流程图 任务4 1if语句 4 1 5if语句的嵌套if结构可以嵌套使用 当然 还可以相互嵌套使用 如简单if结构中可以包含if else结构 if else结构中也可以包含简单if结构等 1 简单if语句的嵌套一般形式为 if 表达式1 if 表达式2 语句A单分支if语句的内嵌语句本身又是一个单分支if语句 程序在执行时先判断表达式1 若条件1成立 再判断表达式2 当条件2成立时 才会执行语句A 否则退出if语句 如图4 5所示 图4 5简单if语句的套嵌结构图 任务4 1if语句 示例4 8简单if结构的嵌套 include stdio h include math h voidmain floatx y
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学主题班会课件:关注健康生活培养积极心态
- 快乐周末:感受生活的美好小学主题班会课件
- 全护理课件下载站
- 项目验收与效果评估模板
- 2026湖南长沙市雨花区统计局公开招聘工作人员备考题库含答案详解(满分必刷)
- 2026顶峰滑雪公司招聘2人备考题库带答案详解
- 富顺县2026年“筑梦巴蜀万才兴农”行动第一批岗位招聘备考题库(45人)及答案详解(典优)
- 2026贵州黔东南州天柱县招聘乡镇政府专职消防员19人备考题库含答案详解(满分必刷)
- 2026四川成都市公共交通集团有限公司招聘储备人才等岗位备考题库及答案详解(新)
- 2026北京顺义区教委所属事业单位第二次招聘教师备考题库及1套参考答案详解
- 无证还建房买卖合同范本
- JG/T 287-2013保温装饰板外墙外保温系统材料
- 医疗行业腐败案例警示教育心得体会
- 广州2025年上半年广州开发区黄埔区事业单位招聘18人笔试历年参考题库附带答案详解
- 蜜雪冰城转让店协议合同
- 马克思主义基本原理全套课件
- 麻醉车管理制度
- 劳动铸就梦想奋斗开创未来课件-高一下学期五一劳动节励志主题班会
- 新能源汽车维护 课件 任务3.3 冷却系统维护
- 2025年福建福州市金融控股集团有限公司招聘笔试参考题库含答案解析
- 空间生产与历史记忆-深度研究
评论
0/150
提交评论