计算机等级考试二级C课件.ppt_第1页
计算机等级考试二级C课件.ppt_第2页
计算机等级考试二级C课件.ppt_第3页
计算机等级考试二级C课件.ppt_第4页
计算机等级考试二级C课件.ppt_第5页
已阅读5页,还剩268页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

全国计算机等级考试 二级教程 C语言程序设计 2012版 目录 第1章程序设计基本概念第2章C程序设计的初步知识第3章顺序结构第4章选择结构第5章循环结构第6章字符型数据第7章函数第8章地址和指针第9章数组第10章字符串 第11章对函数的进一步讨论第12章C语言中用户标识符的作用域和存储类第13章编译预处理和动态存储分配第14章结构体 共用体和用户定义类型第15章位运算第16章文件第17章上机指导 1 1程序和程序设计 C语言源程序 C语言编译程序 二进制机器指令 目标程序 C OBJ 高级语言 机器语言 C语言连接程序 可执行文件 EXE 考点 算法的基本特征 有穷性 确定性 可行性 有零个或多个输入 有一个或多个输出 结构化程序设计的三种基本结构 顺序结构选择结构循环结构 考点总结 由以上3种基本结构组成的算法可以完成任何复杂的问题 考点总结 用C程序实现的算法可以没有输入 但必须要有输出 习题 1 1在VC6 0环境中用RUN命令运行一个C程序时 这时所运行的程序的后缀是 1 2C语言源程序文件名的后缀是 经过编译后 生成文件的后缀是 经过连接后 生成文件的后缀是 1 3结构化程序由 三种基本结构组成 exe c obj exe 顺序结构 选择结构 循环结构 第2章C程序设计的初步知识 2 1简单C语言程序的构成和格式2 2标识符 常量和变量2 3整型数据2 4实型数据2 5算术表达式2 6赋值表达式2 7自加 自减运算符和逗号运算符 2 1简单C语言程序的构成和格式 本节将通过一个简单的程序例子 介绍C程序的一些基本构成和格式 使大家对C语言程序有一个初步的了解 例2 1已知矩形的两条边长 用a表示宽 b表示长 求矩形的面积 area includemain doublea b area a 1 2 b 3 6 area a b printf a f b f area f n a b area a 1 200000 b 3 600000 area 4 320000 注意 1 C程序由函数组成 一个程序必须有一个且只能有一个主函数 main C程序总是从主函数开始执行 并且也是从它结束的 2 函数体必须放在一对花括号 内 在函数体中 通常有定义 说明 语句和执行语句 定义语句应出现在执行语句之前 每条语句后面的分号不可少 多条语句可以写在同一行上 并且一条语句也可以写在多行上 3 C程序中的注释必须放在 和 之间 和 之间不允许有空格 和 之间不允许再插入 或 注释可以出现在程序中任意位置 包含头文件 主函数 程序的入口 声明部分 定义了3实型个变量 给变量a赋值 给变量b赋值 将a b的结果赋值给变量area 分别输出矩形的两条边长和面积 a b area 1 2 3 6 4 32 函数体 2 2标识符 常量和变量 2 2 1标识符在C语言中 有许多东西都需要命名 如变量名 函数名 数组名等 在命名的时候都必须遵守一定的规则 按此规则命名的符号称为标识符 在C语言中 合法的标识符由字母 数字和下划线组成 遵守以下规则命名 必须以字母 大小写皆可 或下划线开头 随后可跟若干个 包括0个 字母 数字 下划线 标识符的长度各个系统不同 最好不要超过8个字符 如 areaPI inia arrays1234P101p 合法 456Pcade yw wa b 不合法 注意 C语言区分大小写 如page Page是两个不同的标识符 2 2标识符 常量和变量 2 2 1标识符C语言的标识符可以分为以下三类 a 关键字b 预定义标识符c 用户标识符关键字 C语言规定了一批标识符 它们在程序中都代表着固定的含义 不能另作它用 例如 用来说明变量类型的标识符int float double以及if语句中的if else等都已有专门的用途 它们不能再用作变量名或函数名 注意 所有的关键字都必须小写 C语言中的关键字请参考附录4 预定义标识符 这些标识符在C语言中也都有特定的含义 如C语言提供的库函数的名字 如include 和预编译处理命令 如define 等 用户标识符 由用户根据需要定义的标识符称为用户标识符 一般用来给变量 函数 数组或文件等命名 如例2 1中的a b area三个变量 2 2标识符 常量和变量 2 2 2常量在程序运行过程中 其值不能被改变的量 称为常量 常量 整型常量 实型常量 符点型 字符常量 字符串常量 单精度型 双精度型 由上述可见 常量的类型从字面形式上就可以区分开来 我们称此常量为字面常量 12 1 0 A d NCRE Beijing 3 14159 2 71828 0 0 12 5678 12 5678 2 2标识符 常量和变量 2 2 3符号常量在C语言中 可以用一个符号名来代表一个常量 称为符号常量 但是这个符号名必须在程序中用 define 进行特别的 指定 例2 2计算圆面积和周长 此程序中将如何教大家使用符号常量 include stdio h definePI3 14159main doubler s l r 5 0 s PI r r l 2 PI r printf s f l f n s l S 78 539750 l 31 415900 包含头文件 定义符号常量 符号常量名为PI 用PI来代表3 14159 主函数 程序的入口 声明部分 定义了3实型个变量 给变量r赋值 计算圆的面积 计算圆的周长 分别圆的面积和周长 注意 习惯上 符号常量名用大写 变量名用小写 以示区别 函数体 r s l 5 0 78 53975 31 4159 2 2标识符 常量和变量 2 2 4变量1 所谓变量是指在程序运行过程中可以改变的量 如下程序 includemain doublea b a 1 5 b 2 5 printf f f n a b a a 1 b b 1 printf f f n a b a b 1 5000002 500000 2 在程序中 声明变量就是在计算机内存中申请了某个内存单元 对变量进行赋值 实质上就是把数据存入该变量所代表的存储单元中 3 C语言规定 程序中所有变量都必须先定义后使用 如程序例2 1 例2 2 内存空间 a b 2 5000003 500000 1 5 2 5 2 5 3 5 1 5 2 5 2 5 3 5 2 3整型数据 2 3 1整型常量 在C语言中 按整型常量的表示形式可以有三种形式 整型常量 由0 9十个数字组成 如32767 32768 0等 由0 7八个数字组成 如010 011 016等 注意 最高位必须用0作引导符 与十进制和十六进制区分 如 018 为不合法的八进制常量 由0 9十个数字和a f A F 六个字母组成 如0 x10 0Xde 0 xf注意 最高位必须用0 x 0X 作引导符 与十进制和八进制区分 如 oxff 0X12H 都为不合法的十六进制常量 在C语言中 按整型常量的表示范围可以分为四种 在C语言中 八进制数和十六进制数只能是正整数 注意 如 077 0X11 01 0等 不合法 短整型 基本整型 长整型 无符号整型 三种进制之间的转换 十六进制常量 八进制常量 十进制常量 2 3整型数据 2 2 2整型变量 整型变量是用来存放整型常量的工具 可以把整型变量抽象为一个盒子 由于整型常量有短整型 基本整型 长整型和无符号整型四种类型 既然整型变量是用来存放整型数据的 那整型变量也要分为四种对应类型的整型变量 以方便存放不同类型的整型常量 在此我们只介绍基本整型变量 也叫整型变量 在C语言中 整型变量我们需要用一个符号来表示它 即整型变量名 例如 intk 定义k为整型变量 k为变量名 关键字int是用来说明变量k的类型为整型 又如 inti j k 定义i j k为整型变量 inti intj intk 相同 注意 在同一行上使用关键字定义多个变量时 变量之间用逗号隔开 所有定义语句后必须以一个 号结束 表示它是一条语句 2 3整型数据 2 2 2整型变量 在前面已经讲过 声明变量就是在计算机内存中申请某个内存单元 在VC6 0环境中 用关键字int声明变量时 计算机将会为每个变量开辟4字节 32个二进制位 的内存单元 例如 当前的某段内存空间如右图所示 有如下程序段 内存空间 地址 2000 2001 2002 2003 2004 2005 2006 2007 2011 2010 2009 2008 2012 inti intj i 100 j 200 C语言规定 可以在定义变量的同时给变量赋初值 该过程称为变量的初始化 例如 includemain inti 1 j 0 k 2 i j 100 200 在声明变量的同时 为三个变量赋值 2 3整型数据 2 3 3整型数据的分类 不同的计算机系统对整型数所占用的字节数和数值范围有不同规定 下表列出了在VC6 0中定义的整型数所占用的字节数和数值范围 由于整型数据在C语言中分为上述几类 比如123 它是属于哪一类型的 int 123L 345l 0L 123456L 123U 345u 0U 123456U 123LU 345lu 0LU 123456LU long unsigned unsignedlong 2 3整型数据 2 3 4整数在内存中的存储形式 计算机中 内存储器的最小的存储单位称为 位 bit 每一位中只能存放0或1 因此称为二进制位 8个二进制位组成一个 字节 并给每一个字节分配一个地址 数据在内存中是以二进制形式进行存放的 一 正整数 正整数在内存中是以 原码 形式存放的 如果定义了一个short类型变量i shorti i 5 声明i为短整型变量 给i赋以整数5 十进制数5的二进制形式为101 在VC6 0中 由于短整型变量在内存中占2个字节 i i 符号位 0代表正整数 1代表负整数 二 负整数 负整数在内存中是以 补码 形式存放的 5 2 4实型数据 2 4 1实型常量 在C语言中 实型常量的表示形式有两种 实型常量 由数字和小数点组成 如0 123 123 123 0 0 指数形式 如 0 23026x1012 3026x10023 026x10 1 0 23026E12 3026e023 026e 1 注意 E e 前后必须有数字 并且后面的必须为整型数 3e33 0e33 e3 合法 3ee355e0 3 不合法 小数形式 2 4实型数据 2 4 2实型变量 单精度型变量定义的形式如下 floata b c 双精度型变量定义的形式如下 doublex y z 实数在内存中是以 指数 形式存放的 也可以在定义实型变量的同时 对变量进行初始化 例如 includemain floata 1 5 b 5 c 0 0 doublex 1 5 y 5 z 0 0 在声明变量的同时 为三个变量赋值 在声明变量的同时 为三个变量赋值 2 5算术表达式 2 5 1基本的算术运算符 加法运算符 或正值运算符 如 1 2 3 9 减法运算符 或负值运算符 如 3 4 54 乘法运算符 如 1 2 3 2 3 4 2 x 除法运算符 如 5 3 a b x y 单目运算符 双目运算符 两个整数相除 其值仍然为整数 如 5 3值为1 1 2值为0 两个实数相除 其值仍然为实数 如 1 0 2 0值为0 5 除数 被除数只要有一个为实数时 系统将自动进行类型转换 转换为double型 如 1 2 0 0 5 1 0 2 0 0 5最后结果的类型为double型 求余运算符 注意 运算符的两侧必须为整型数据 如 7 4的结果为3 7 4 7 4 7 4的结果为多少 33 3 结果的符号和被除数相同 2 5算术表达式 2 5 2运算符的优先级 结合性和算术表达式 一 优先级 单目 双目 同级 同级 同级 高 低 二 结合性 单目运算符的结合性是从右往左的 即表达式从右往左进行计算 称为右结合 其余运算符的结合性是从左往右的 即表达式从左往右进行计算 称为左结合 例如 5 1 25 1 25 2 5 2 三 算术表达式 用算术运算符和一对圆括号将运算量 或称操作数 连接起来的 符合C语法的表达式称为算术表达式 算术表达式中 运算对象可以是常量 变量和函数等 例如 2 sqrt c b 5 10 3 2 5算术表达式 2 5 3强制类型转换表达式 表达式的形式如下 类型名 表达式 强制类型转换运算符 作用 可以利用强制类型转换运算符将一个表达式转换成想要的类型 例如 int 3 234 double 10 3 3 注意 int3 234 错误 double 10 3 错误 例 阅读如下程序 关于强制类型转换 includemain doublea intb a 3 6 b int a printf a f b d n a b a 3 600000 b 3 1 0 a b 3 6 3 2 6赋值表达式 2 6 1赋值运算符和赋值表达式 赋值运算符 赋值表达式 由赋值运算符组成的表达式称为赋值表达式 它的形式如下 变量名 表达式 赋值号的左边必须是一个代表某一存储单元的变量名 赋值运算的功能是先求出右边表达式的值 然后把此值赋给左边的变量 例如 若a和b都被定义成int类型变量a 10 把常量10赋给变量a b a 把a中的值赋给变量b a中的值不变 注意 1 赋值运算符的优先级别只高于逗号运算符 比其它任何运算符的优先级都低 且具有自右向左的结合性 例如 a 2 7 32 赋值运算符的左侧只能是变量不能是常量或表达式 如a b c是不合法的赋值表达式 3 赋值号右边的表达式也可以是一个赋值表达式 如a b 7 1 4 作为一个表达式 它自己也应该有一个值 C语言规定最左边变量中所得到的新值就是赋值表达式的值 2 6赋值表达式 2 6 2复合赋值表达式 在赋值运算符 之前加上其它运算符可以构成复合赋值运算符 等价于n n 1等价于a a 3等价于n n m 3 注意 有括号 例2 3已有变量a 初始值为9 计算表达式a a a a的值 a 表达式 如 n 1a 3n m 3 a a a a 9 18 a a 18 a a 18 9 9 a 9 a a 9 a a 9 18 18 a a a a的值是 18 2 6赋值表达式 2 6 3赋值运算中的类型转换 在赋值运算中 只有在赋值号右侧表达式的类型与左侧变量类型完全一致时 赋值操作才能进行 如 inta doubleb a 10 b 3 5 如果赋值运算符两侧的数据类型不一致 在赋值前 系统将自动先把右侧表达式求得的数值 按赋值号左边变量的类型进行转换 也可以用强制类型转换的方式 人为地进行转换后赋给赋值号左边的变量 a 10 b 3 5 如 inta doubleb a 20 5 b 15 a 20 b 15 0 3 在C语言的表达式中 不包括赋值表达式 如果运算符两边的数据类型不相同 将进行类型之间的转换 转换规则如下 double long unsigned int float char short 低 高 如 10 97 1 5 8765 1234 98 8765 1234 98 0 double 2 7自加 自减运算符和逗号运算符 2 7 1自加运算符 和自减运算符 自加运算符 自减运算符 1 运算符是单目运算符 运算对象只能变量 不能是常量和表达式 2 和 运算符的结合方向是 自右至左 i i i i i i 1 i i 1 例如 inti 5 i inti 5 i inti 5 i inti 5 i i 表达式 运算规则运算符在前 先计算 后赋值运算符在后 先赋值 后计算 例如 inti 3 i inti 3 i i 表达式 思考 程序示例 自增自减运算 includemain inti 0 j j i printf d d n i j i 0 j i printf d d n i j 上机练习 6 5 6 6 4 5 4 4 4 3 2 7自加 自减运算符和逗号运算符 2 7 2逗号运算符和逗号表达式 逗号运算符 用逗号将表达式连接起来的式子称为逗号表达式 逗号表达式的一般形式为 表达式1 表达式2 表达式n 表达式之间用逗号进行连接 1 逗号运算符的结合性为从左到右 因此逗号表达式将从左到右进行运算 如 i 3 i i i 5 i 表达式 3 3 i 表达式 4 3 i 表达式 5 5 i 表达式 5 10 逗号表达式的值为 2 在所有运算符中 逗号运算符的优先级别最低 习题 一 选择题2 1以下选项中正确的整型常量是A12 B 20C1 000D4562 2以下选项中正确的实型常量是A0B3 1415C0 329X102D 8712 3以下选项中不正确的实型常量是A2 607E 1B0 8103e2C 77 77D456e 22 4以下选项中不合法的用户标识符是Aabc cBfileCMainDPRINTF2 5以下选项中不合法的用户标识符是A 123BprintfCA DDim2 6C语言中运算对象必须是整型的运算符是A B C D 2 7可在C程序中用作用户标识符的一组标识符是AvoidBas b3CForD2cdefine 123 abcDOWORDIfcaseSIG B D B A BC A B 2 8若变量已正确定义并赋值 符合C语言语法的表达式是Aa a 7 Ba 7 b c a Cint 12 3 4 Da a 7 c b2 9以下中叙述中正确的是Aa是实型变量 C允许进行赋值a 10 但不可以这样说 实型变量中允许存放整型值B在赋值表达式中 赋值号左边既可以是变量也可以是任意表达式C执行表达式a b后 在内存中a和b存储单元中的原有值都将被改变 a的值已由原值改变为b的值 b的值由原值变为0D已有a 3 b 5 当执行了表达式a b b a之后 使a中的值为5 b中的值为32 10以下中叙述中正确的是A在C程序中无论是整数还是实数 只要在允许的范围内都能准确无误的表示BC程序由主函数组成CC程序由若干个函数组成DC程序中只允许包含一个函数2 11VC6 0中int类型变量所占字节数是A1B2C3D4 习题 B A C D 习题 2 12合法的八进制数是A0B028C 077D01 02 13不合法的十六进制数是AoxffB0XabcC0 x11D0 x19二 填空题2 14若k为int型变量且赋值11 请写出运算k 后表达式的值 和变量k的值 2 15若x为double型变量 请写出运算x 3 2 x后表达式的值 和变量x的值 2 16函数体由符号 开始 到符号 结束 函数体内的前面是 部分 后面是 部分 2 17C语言中的标识符可分为 和预定义标识符三类 2 18在C语言程序中 用关键字 定义基本整型变量 用关键字 定义单精度实型变量 用关键字 定义双精度实型变量 2 19把a1 a2定义成双精度实型变量 并赋初值1的定义语句是 2 20C程序中定义的变量 代表内存中的一个 11 12 4 2 4 2 定义和说明 语句 关键字 用户标识符 int float double doublea1 1 a2 1 存储单元 A A 习题 2 21表达式3 5 1 2的计算结果是 2 22对数学式axb 写出三个等价的C语言表达式 c2 23表达式s 10应当读做 三 改错题 2 24 includestdio h main mainfunction floatr s risradius sisareaofcircular r 5 0 s 3 14159 r r printf f n s 2 25main mainfunction floata b c v a b caresides visvolumeofcube a 2 0 b 3 0 c 4 0v a b c printf f n v 3 5 a b c a b c a b c 将10赋给变量s 第3章顺序结构 3 1赋值语句3 2数据输出3 3数据输入3 4复合语句和空语句3 5程序举例 3 1赋值语句 在赋值表达式的尾部加上一个 号 就构成了赋值语句 也称表达式语句 例如 a a b 赋值表达式 a a b 赋值语句 3 2数据输出 3 2 1printf函数的一般调用形式 首先 我们先来了解一些其它知识 一个程序 一般情况下都包含数据输入 数据处理 数据输出三个部分 输出 把数据从计算机内部送到计算机的外部设备上的操作称为 输出 输入 从计算机外部设备将数据送入计算机内部的操作称为 输入 显示器 键盘 在C语言中 数据的输入和输出是通过调用输入和输出函数来实现的 在VC6 0环境下 在调用输入和输出的库函数之前要求在源程序中出现包含头文件命令行 include或 include stdio h 1 printf函数的调用形式如下 printf 格式控制 输出项表 作用 按照指定的格式将输出项中的值输出到终端 要输出的内容 常量 变量 表达式等 双引号括起来的字符串 按照该指定的格式进行输出 3 2数据输出 3 2 1printf函数的一般调用形式 例如 printf a d b d a b 函数名 格式控制 输出项 实参 在printf函数调用的后面加一个分号就构成输出语句 例 对于printf函数的调用形式 请见下面的程序示例 includemain inti 2518 doublea 3 1415 printf i d a f a 10 e n i a a 10 格式控制 输出项 实参 i 2518 a 3 141500 a 10 3 141500e 001 i d a f a 10 e n 原样输出 d f e 为引导符 d f e为格式字符 转义字符 3 2数据输出 3 2 1printf函数的一般调用形式 printf也可以没有输出项 函数的调用形式将为 printf 格式控制 比如 printf OK OK 3 2数据输出 3 2 2printf函数中常用的格式说明 格式字符 d 以十进制整数进行输出o 以八进制数进行输出x 以十六进制数进行输出f 以小数形式进行输出 使用时 以 作为引导符 格式字符必须使用小写 如 d o x f 简单的格式字符形式 完整的格式字符形式 0nn1 n2l h格式字符 n指定输出的宽度printf 6d n k n1 n2n1指定输出的宽度 n2指定输出的小数位数printf 12 2f n f 0输出的数据右对齐 前面补0printf 06d n k 输出的数据左对齐printf 6d n k 输出的数据为正数时 使前面带有 符号printf 6d n k l输出整数时 为长整型 输出实数时 为双精度型printf ld n k h输出整数时 为短整型printf hd n k 有如下程序段intk floatf k 1234 f 123 456 jj1234 jjjjjj123 46 001234 1234jj 1234j 1234 1234 3 2数据输出 3 2 2printf函数中常用的格式说明 下面 将简单的介绍一些输出格式形式和输出结果 printf f n f printf 12f n f printf 6f n f printf 12 0f n f printf e n f printf 13e n f printf 13 8e n f printf 3 8e n f printf 8e n f printf 13 9e n f printf 13 2e n f printf g n f printf 10g n f printf f n 12 5 123 456000jj123 456000123 456000jjjjjjjjj1231 234560e 0021 234560e 0021 23456000e 0021 23456000e 0021 23456000e 0021 234560000e 002jjjj1 23e 002123 456jjj123 45612 500000 以指数形式输出 输出时 先以小数位数为基准 再考虑输出的宽度 以原数的最小宽度进行输出 指定宽度时 按指定宽度进行输出 3 2数据输出 3 2 3使用printf函数时的注意事项 1 在使用输出函数时 输出的数据要清晰 视觉感要好 例如 k 1234 f 123 456 printf d d f n k k f printf d d f n k k f printf f d i d f f n f i f 12341234123 456000 2 在格式控制串中 格式说明与输出项从左到右在类型上要一一对应匹配 如不匹配 将导致数据不能正确输出 这时 系统并不报错 最好 例如 inta 10 floatb 12 5 printf a f b d n a b a 0 000000 b 1076428800 inta 10 floatb 12 5 printf a d b f n a b a 10 b 12 500000 编译时能通过 则输出时为不正确的数据 输出时类型一定要一一对应 1234 1234 123 456000 k 1234 k 1234 f 123 456000 3 2数据输出 3 2 3使用printf函数时的注意事项 若格式说明中的个数少于输出项的个数时 则多余的输出项不予输出 若格式说明中的个数多于输出项的个数时 则将输出一些毫无意义的数字 例如 inta 10 b 20 c 30 printf d d n a b c 10 20 inta 10 b 20 c 30 printf d d d d n a b c 10 20 30 2367460 4 在格式控制串中 除了合法的格式说明外 可以包含任意的合法字符 还可以包括转义字符 这些字符在输出时将 原样照印 例如 printf my tname tis tchenhao n mynameischenhao t为转义字符 制表符 代表八个空格字符 5 如果需要输出百分号 则应该在格式控制串中用两个连续的百分号 来表示 例如 printf d 100 100 6 printf函数的返回值通常是本次调用中输出字符的个数 思考 printf my tname tis tchenhao n 函数的返回值是多少 3 2数据输出 3 2 3使用printf函数时的注意事项 7 思考 如 intk 8 printf d d n k k 9 9 8 输出时 也可以用参数作为域宽 如 intm 8 i 10 printf d m i jjjjjj10 123 4560000000 intm 8 n 10 floatf 123 456 printf f m n f 首先先对应匹配 然后再输出 输出的过程 是按输入项从右往左 printf 8d i printf 8 10f f 3 3数据输入 3 3 1scanf函数的一般调用形式 scanf 格式控制 输入项表 1 scanf函数的调用形式如下 作用 把从终端设备 如 键盘 上输入的数据传送给对应的输入项 如变量地址 双引号括起来的字符串 按照该指定的格式进行输入 把从键盘上输入的数据送到该指定的输入项中 输入项中必须为变量的地址 例如 intk floata doubley scanf d f lf 函数名 输入格式控制 变量地址 实参 在scanf函数调用的后面加一个分号就构成输入语句 变量地址形式 变量名 3 3数据输入 3 3 1scanf函数的一般调用形式 例 对于scanf函数的调用形式 请见下面的程序示例 includemain inta floatb scanf d f scanf d f 比如 想把23赋值给a 12 345赋值给b 输入形式为 程序执行到此 停止执行 等待用户从键盘输入数据 等输入数据后 待用户安回车键后 继续向后执行 2312 345 a b 输出结果为 23 12 345000 23 12 345 3 3数据输入 3 3 2scanf函数中常用的格式说明 scanf函数中的格式说明字符与输出函数中的格式说明字符相同 在使用scanf函数进行输入时 应该注意以下几点 1 在格式控制中 格式说明的类型与输入项的类型 应该一一对应匹配 如果类型不匹配 系统并不给出出错信息 但不可能得到正确的数据 2 在输入项表中 输入项的个数要与格式符的个数相同 且排列顺序要一一对应 若格式符个数少于输入项 scanf函数按格式符的数目结束输入 多余的输入项没有得到新的数据 若格式符个数多于输入项 scanf函数则按输入项的数目结束输入 多余的格式符不起作用 作废 例如 inta b c scanf d d 10 20 858993460 比如说 我们从键盘读入 102030 inta b c scanf d d d d 10 20 30 比如说 我们从键盘读入 10203040 3 3数据输入 3 3 2scanf函数中常用的格式说明 在scanf函数中的格式字符前可以用一个整数指定输入数据所占宽度 当输入函数的格式说明的类型与输入项的类型一一对应匹配时 程序在运行的过程中 当我们输入的数据个数少于输入项时 运行的程序将一直等待输入 直到满足要求时才继续向下执行 当我们输入的数据个数多于输入项时 多于的数据没有作废 依然在缓冲区中等待等待下一个输入操作语句 5 scanf函数在调用结束后将返回一个函数值 其值等于得到输入值的输入项的个数 例如 inta scanf 5d 该输入函数正确的输入形式为 88 输入宽度为5 思考 scanf d d d d 函数的返回值是多少 3 3数据输入 3 3 3通过scanf函数从键盘输入数据 1 输入数值数据 例如 intk floata doubley scanf d f lf 若要给k赋值10 a赋值12 3 y赋值1234567 89 正确的输入格式如下 1012 31234567 89 1012 31234567 89 1012 31234567 89 如果输入函数的格式控制符 之间没有用任何符号隔开 如 d f d 那么输入的数据之间必须用间隔符隔开可以使用的间隔符有 空格 回车符 制表符 错误的输入格式 1012 31234567 89 3 3数据输入 3 3 3通过scanf函数从键盘输入数据 2 指定输入数据所占的宽度 例如 intk floata doubley scanf 3d 5f 5lf 若从键盘上从第1列开始输入 123456 789 123 用printf k da fy f n k a y 输出的结果是 k 123a 456 700000y 89 120000 k y a 123 456 7 89 12 3 3数据输入 3 3 3通过scanf函数从键盘输入数据 3 跳过某个输入数据 例如 intx y z scanf d d d d 若从键盘上输入 12345678 则输出的结果是 125678 3 3数据输入 3 3 3通过scanf函数从键盘输入数据 4 在格式控制字符串中插入其他字符 又如 intx y z scanf d d d 这时从键盘上输入时 一定要用向下形式进行输入 Pleaseinputx y z 123456 在格式控制字符中出现了其他字符的语句如下 intx y z scanf Pleaseinputx y z d d d 则正确的输入形式 12 34 56 12 34 56 12 34 56 错误的输入形式 123456 12 34 56 3 4复合语句和空语句 3 4 1复合语句 复合语句是用符号 和 括起来的语句组 也可称为 语句块 在语法上被视为一条语句 复合语句的语句形式如下 语句1 语句2 语句n 例如 a b a printf b d b 3 4复合语句和空语句 3 4 2空语句 空语句由一个分号构成 但它是一个C语句 程序执行空语句时不产生任何操作 如 main 3 5程序举例 例3 1以下程序由终端输入两个整数给变量x和y 然后输出x和y 在交换x和y中的值后 再输出x和y 验证两个变量中的数是否正确地进行了交换 程序分析 输入两个整数分别给变量x和y 输出两个变量 交换两个变量中的值 再输出两个变量 自然语言描述 开始 输入x y 输出x y 交换x和y中的值 输出x y 结束 一般流程图描述 includemain intx y printf Enterx 通过流程图 编写出程序 x y 123 456 z z x x y y z 交换x和y中的值 z x x y y z intz Enterx y 123456 x 123y 456 x 456y 123 3 5程序举例 例3 2输入一个double类型的数 使该数保留小数点后两位 对第三位小数进行四舍五入处理 然后输出此数 以便验证处理是否正确 程序分析 输入一个double类型的数给变量x 使该数保留两位小数 要进行四舍五入 输出四舍五入后的值 开始 输入x 对x进行四舍五入 输出x 结束 123 4567123 4567x10012345 6712345 67 0 512346 1712346123 46 includemain doublex printf Enterx n 输出的时候进行提示 scanf lf Enterx 123 4567 1 x 123 456700 2 x 123 460000 习题 一 选择题3 1若a b c d都是int型变量且初值为0 以下选项中不正确的赋值语句是Aa b c 100 Bd Cc b Dd c 22 b 3 2下列选项中不是C语句的是A inti i printf d n i B Ca 5 c 10D 3 3合法的C语言赋值语句是Aa b 58Bk int a b Ca 58 b 58D i 3 4有以下程序 includemain intx 10 y 3 printf d n y x y 执行后的输出结果是A0B1C3D不确定的值3 5若变量已正确定义为int型 要给a b c输入数据 正确的输入语句是Aread a b c Bscanf d d d a b c Cscanf D D D C C D C D 习题 3 6若变量已正确定义为float类型 要通过输入语句 scanf f f f 执行后的输出结果是A0B1 2C0 5D1 B C D A 习题 3 10若有以下程序段inta 0 b 0 c 0 c a 5 a b b 3 printf d d d n a b c 执行后的输出结果是A3 0 10B0 0 5C 10 3 10D3 0 3 二 填空题3 11若有以下定义 请写出以下程序段中输出语句执行后的输出结果 inti 200 j 2500 printf 1 d d i j printf 2 i d j d n i j printf 3 i d nj d n i j 3 12变量i j k已定义为int类型并均有初值0 用以下语句进行输入时 scanf d 从键盘输入 12 3则变量i j k的值分别是 3 13复合语句在语法上被认为是 空语句的形式是 B 1 200 2500 2 i 200 j 2500 3 i 200j 2500 1200 一条语句 习题 3 14C语句的最后用 结束 3 15以下程序段要求通过scanf语句给变量赋值 然后输出变量的值 写出运行时给k输入100 给a输入15 81 给x输入1 89234时的三种可能的输入形式 intk floata doublex scanf d f lf 10015 811 8923410015 811 8923410015 811 89234 习题 3 16以下程序多处有错误 若指定必须按下面的形式输入数据 并且必须按下面指定的形式输出数据 请对该程序做相应的修改 main doublea b c s v printf inputa b c n scanf d d d a b c s a b v a b c printf d d d a b c printf s f n s v d n v 当程序执行时 屏幕的显示和要求输入形式如下 inputa b c 2 02 03 0a 2 000000 b 2 000000 c 3 000000s 4 000000 v 12 000000 第4章选择结构 4 1关系运算和逻辑运算4 2if语句和用if语句构成的选择结构4 3条件表达式构成的选择结构4 4switch语句以及用switch和break语句构成的选择结构4 5语句标号和goto语句 4 1关系运算和逻辑运算 4 1 1C语言的逻辑值 关系表达式和逻辑表达式的运算结果是一个逻辑值 逻辑值 真 假 非0 0 4 1关系运算和逻辑运算 4 1 2关系运算符和关系表达式 1 关系运算 是对两个量进行 比较运算 2 关系运算符 高 低 3 结合性 自左向右 左结合 4 和其他运算符进行混合运算时 其运算符之间的优先级为 算术运算符 关系运算符 赋值运算符 逗号运算符 低 高 关系表达式 由关系运算符组成的表达式 称为关系表达式 关系运算符两边的运算对象可以是C语言中任意合法的表达式 例如 a b a 3 b 4 a c c 例如 a 10 b 6 c 15 真 假 假 关系运算的值为 逻辑值 真 假 1 0 1 0 0 4 1关系运算和逻辑运算 4 1 3逻辑运算符和逻辑表达式 1 逻辑运算符 逻辑与 逻辑或 逻辑非 双目 单目 在运算对象的左边 3 结合性 自左向右 左结合 4 它们的优先级由高到低为 逻辑非 逻辑与 逻辑或 5 和其他运算符进行混合运算时 其运算符之间的优先级为 逻辑非 算术运算符 关系运算符 逻辑与 逻辑或 赋值运算符 逗号运算符 高 低 逻辑表达式 由逻辑运算符组成的表达式 称为逻辑表达式 逻辑运算的运算对象可以是C语言中任意合法的表达式 例如 a b x y a b b 0 a b 例如 a 10 b 16 x 5 y 8 0 1 1 其逻辑运算规则见书中表4 1所示 思考 5 3 2 8 4 2的结果为 4 1关系运算和逻辑运算 4 1 3逻辑运算符和逻辑表达式 注意 在C语言中 x的值必须要在0和10之间 应如何表示 0 x 10 错误的表示方式 比如 x 20 上面的表达式也满足条件 正确的表示方式为 x 0 x 10 或0 x x 10 6 C语言中 由 或 构成的逻辑表达式 在特定的情况下会产生 短路 现象 例如 a b 若 a 0 b 0 若 a 1 b 1 例如 a b 若 a 1 b 1 若 a 0 b 0 0 1 1 0 a b 1 0 a 2 b 2 a b 2 1 a 1 b 1 4 2if语句和用if语句构成的选择结构 4 2 1if语句 C语言的if语言有两种形式 if 表达式 语句 if 表达式 语句1else语句2 单分支if语句不含else子句 双分支if语句含else子句 关键字 关键字 b 图 表达式 语句1 语句2 满足 不满足 a 图 表达式 语句 满足 不满足 例如 if a b t a a b b t 例如 if a 0 printf a 0 n elseprintf a 0 n 4 2if语句和用if语句构成的选择结构 4 2 1if语句 例4 1输入两个数 分别放入x和y中 若两数不相等 则输出其中的最大数 若两数相等 则输出字符串x y和x的值 程序分析 输入两个整数分别赋给变量x和y 比较两个数 不相等 相等 x大于y x y x小于y x y x等于y x y 输出x 输出y 输出x y和x 开始 输入x y 结束 x y x y x y 满足 不满足 满足 满足 不满足 不满足 includemain intx y printf Enterx printf x y d d n x y 输出x 输出y 输出x y和x 4 2if语句和用if语句构成的选择结构 4 2 1if语句 例4 2输入三个整数 分别放在变量a b c中 然后把输入数据重新按由小到大的顺序放在变量a b c中 最后输出a b c中的值 程序分析 输入三个整数分别放在变量a b c中 把三个整数由小到大进行排序 a b c 输出a b c 开始 输入a b c 结束 输出a b c 排序 includemain inta b c printf inputa b c scanf d d d a b c 30 20 10 a ba cb c 交换两个变量中的值交换两个变量中的值交换两个变量中的值 30 20 20 10 20 30 if a b t a a b b t if a c t a a c c t if b c t b b c c t includemain inta b c t printf inputa b c scanf d d d inputa b c 302010a 30 b 20 c 1010 20 30 4 2if语句和用if语句构成的选择结构 4 2 1if语句 例4 3输入两个数 分别赋给x和y 输出其中的大数 程序分析 1 输入两个数分别赋给变量x和y 2 输出其中的最大数 两数进行比较判断 如果x y 则输出x 否则 输出y 开始 输入x y 结束 x y 输出x 输出y 不满足 满足 includemain intx y printf Enterx Enterx y 53x y 53max x 5 end 4 2if语句和用if语句构成的选择结构 4 2 1if语句 例4 4输入一个数 判别它是否能被3整除 若能被3整除 打印YES 不能被3整除 打印NO 程序分析 1 输入一个数赋给一个变量 比如n 2 判断它是否能被3整除 可以 则输出YES 否则 输出NO n 3 0 若能整除 则余数肯定为0 开始 输入n 结束 n 3 0 输出YES 输出yNO 不满足 满足 includemain intn printf inputn scanf d inputn 9YES inputn 5NO 4 2if语句和用if语句构成的选择结构 4 2 1if语句 注意 if后面圆括号中的表达式 可以是任意合法的C语言表达式 如 逻辑表达式 关系表达式 算术表达式 赋值表达式等 也可以是任意类型的数据 如 整型 实型 字符型 指针型等 无论是否有else子句 if子句中如果只有一条语句 则此语句后的分号不能省略 如 if x 0 printf f x elseprintf f y 此处的分号不能省略 此处的分号也不能省略 4 2if语句和用if语句构成的选择结构 4 2 2嵌套的if语句 第一种嵌套形式 if 表达式1 if 表达式2 语句1else语句2else语句3 图1 表达式1 语句3 不满足 表达式2 语句1 语句2 满足 满足 不满足 4 2if语句和用if语句构成的选择结构 4 2 2嵌套的if语句 第二种嵌套形式 if 表达式1 if 表达式2 语句1 else语句2 图2 表达式1 语句2 不满足 满足 表达式2 语句1 满足 不满足 注意 在if子句中的一对花括号不可缺少 if 表达式1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论