C语言程序设计教程共页.ppt_第1页
C语言程序设计教程共页.ppt_第2页
C语言程序设计教程共页.ppt_第3页
C语言程序设计教程共页.ppt_第4页
C语言程序设计教程共页.ppt_第5页
已阅读5页,还剩312页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计教程 目录 第1章C语言概述第2章数据类型 运算符和表达式第3章C程序中的输入 输出第4章C程序的控制结构第5章数组第6章函数第7章编译预处理命令第8章指针第9章结构体第10章文件 第1章C语言概述 学习目标 对C语言有一个概括的了解 能够编写包含键盘输入 计算和显示输出等操作的简单C程序 主要内容 C语言的产生与特点简单C程序的组成C语言应用程序开发的基本步骤 1 1C语言的产生及特点 C语言是为了编写系统程序而在1968年开始研发的计算机高级语言C语言表达能力强 使用灵活 程序结构清晰 紧凑 可移植性好C语言是进一步学习面向对象的程序设计语言C 和VC的基础 主函数名 最简单的C程序的组成 对程序的注释 1 2C语言程序的结构及书写格式 一 C程序的结构 main intx y z sum scanf d d d printf sum d n sum 定义变量x y z和sum 从键盘输入三个整数赋给变量x y和z 显示变量sum的值 计算x y z 并将结果赋给变量sum 程序说明 一般C程序的组成 例1 2 采用模块结构 改写例1 1的程序 add intx inty intz return x y z main intx y z printf PleaseInputThreeIntegers n scanf d d d 注意 每个C程序必定有一个 而且只能有一个主函数main 主函数可以调用其它子函数 而子函数不可以调用主函数 子函数彼此之间也可以相互调用 C程序的组成 二 C程序的书写格式 1 C程序允许一行写一个或多个语句 当一个语句分几行书写时 在换行前应加上 符 然后从下一行的开头继续 2 习惯上 书写C程序时均使用小写英文字母 3 C程序一般都采用缩进格式的书写方法 不同结构层次的语句 从不同的起始位置开始 同一结构层次中的语句 缩进同样个数的字符位置 4 应当在程序中适当地添加一些注释行 1 3C程序的编辑 调试和运行 编辑源程序生成目标程序经编译经连接库修改源程序函数生成exe文件运行运行时出错 第1章结束 第2章数据类型 运算符和表达式 学习目标 1 掌握基本数据类型的概念和常量表示方法 掌握变量的定义方法 能够根据实际情况选用适当的数据类型2 熟练掌握数值表达式的构造方法 能够利用表达式完成数值计算 主要内容 C数据类型概述常量和变量算术运算表达式赋值表达式自增 自减表达式 2 1概述 C语言支持的数据类型 基本数据类型说明符 整型 intlong字符型 char实型 floatdoublelongdouble 2 2常量 常量 在程序运行过程中 其值不能被改变的量 一 不同数制整型常量的表示例如 12 十进制数12012 八进制数12 等于十进制数10 用前导符0表示八进制数常量 0 x12 十六进制数12 等于十进制数18 用前导符0X或0 x表示十六进制数常量 二 字符常量的表示用 括起来的可显示字符 如 A 3 等 转义字符除外 2 用八进制数表示其ASC代码的字符 如 101 表示西文字符A 63 表示数字字符3 3 用十六进制数表示其ASC代码的字符 如 x41 表示西文字符A x2A 表示字符 4 用 表示字符 表示字符 表示字符 5 用双引号括起来的字符序列表示字符串常量 其中最后一个字符是字符串结束符 0 不显式地表示出来 如 English 例2 1 常量的例子main floatr printf PleaseInputRadius n scanf f 定义浮点型变量r 人机对话 通知用户输入半径的值 从键盘输入半径的值 并将值赋给变量r 显示结果 常量2 常量3 1415926 三 符号常量 可以用 define命令定义符号常量 在程序的执行过程中不允许改变符号常量的值 例2 2 说明符号常量的例子 definePRICE30main intnum total num 10 total num PRICE printf total d total 通过 include定义符号常量PRICE为30 定义二个整型变量num和total 使变量num的值为10 执行运算10 30并把运算的结果赋予变量total 显示结果 2 3变量的定义和初始化 变量 在程序运行时 其值可变的量被称为变量 分为整型变量 实型变量和字符型变量 一 C语言中的标识符 C语言把用户给常量 变量 函数 标号和其它对象所起的名字统称为标识符 用户定义的标识符须遵循如下规则 标识符只能由字母 数字和下划线三种字符组成 且第一个字符必须为字母或下划线 标识符的长度不超过32个字符 同时 C语言的关键字和库函数名不能作为标识符 例如 下面的字符序列均为合法的C语言标识符 a b word file file2 F name f name注意 C编译程序字母区分大小写 所以上述F name和f name是二个不同的标识符 下面的字符序列为不合法的C语言标识符 2L 违反了标识符第一个字符必须为字母或下划线的规定 a 违反了标识符只能由字母 数字和下划线三种字符组成的规定 int 违反了C语言的关键字和库函数名不能作为标识符的规定 二 变量分类1 整型变量分类 整型变量的值域 2 浮点型变量的分类及其值域 Longdouble 取值 绝对值 范围占字节数 3 字符型变量及其值域 在设计程序时 应当根据数据本身的特点和变化范围正确选择变量类型 三 变量的定义和初始化 变量的定义格式 类型说明符变量名表 int unsigned long float double char等 变量名只能由字母 数字和下划线三种字符组成 且第一个字符必须为字母或下划线 例如 语句 inta1 a2 age floatx y z charch 分别定义了整型变量a1 a2 age 浮点型变量x y z和字符型变量ch 变量的初始化 在定义变量的同时对变量预先设置初值 例如 执行语句 intnum 20 floatpi 3 14 charc1 c2 M 变量num pi c2的初值分别为20 3 14和字符M 四 各类数值型数据间的混合运算 高doublefloatlongunsigned低intchar 当各种不同类型的数据混合运算时 其运算结果的类型由上图所示的类型转换原则确定 例2 3 设程序中定义变量 inti floatf doubled 执行运算 i f d f i 这里的 表示乘法 下图给出了在运算过程中所发生的数据类型的转换i f d f i doubledoubledoubledoubledoubledoubledoubledoubledouble 2 4算术运算符和算术运算表达式 一 算术运算符算术运算符包括 加 减 乘 除 求余 操作符 只作用于整数x y的值就是x除以y的余数 操作符 的两种含义 整数除法 整除 当被除数和除数都是整型数据时 运算的结果为整型 例如 5 2的值为2 而不是2 5 实数除法当被除数和除数中至少有一个是实数型数据时 运算的结果为实数型 例如 5 0 2的值为2 5 二 算术运算表达式 用算术运算符和括号将运算对象连接起来 并符合C语言语法规则的式子 称为算术运算表达式或算术表达式 例如 设r x y是已经定义的数值型变量 则 3 14 r r x 2 y 3 z x y x y 2 均是合法的算术运算表达式 单独的r x y也是合法的算术运算表达式 实际上 单独的常量或变量是最简单的算术运算表达式 注意 算术运算表达式中的分数线须用 表示例如 2 3 ik j表示为C语言表达式就是 2 3 i k j 或 2 3 i k j C程序中 称表达式的运算结果为表达式的值 C语言规定 在表达式求值时 须按运算符优先级的高低次序执行 对算术运算而言 必须遵循先括号内后括号外 先乘 除及求余运算 后加减的运算优先级规则 C语言规定了运算符二种不同的结合方向 左结合 当参于运算的数据两侧的运算符优先级相同时 运算顺序为自左至右 C语言规定算术运算符遵循左结合的规则 例如 计算算术运算表达式a b c时 运算符 和 具有相同的优先级 所以先执行a b 其结果再和c相减 右结合 当参于运算的数据两侧的运算符优先级相同时 运算顺序为自右向左 C语言提供的运算符中有少量运算符遵循右结合的规则 教材的附录部分列出了C语言中所有运算符以及它们的优先级和结合性 2 5赋值运算符与赋值运算表达式 一 赋值运算符赋值符号 就是赋值运算符 它的作用是将一个数据赋给一个变量 例如 执行程序段inta a 3 a a 5 当执行语句 a 3 就完成一次赋值运算 把赋值运算符右边的值3赋给赋值运算符左边的变量a 赋值后 a的值为3 再执行语句 a a 5 赋值运算符右边的表达式a 5的运算结果为 2 将 2赋给a 最后 变量a的值变为 2 复合的赋值运算符复合的赋值运算符的格式 算术运算符 所以 都是复合的赋值运算符 二 赋值运算表达式将一个变量通过赋值运算符或复合的赋值运算符与一个表达式连接而成的式子称为赋值运算表达式 赋值运算表达式的格式为 变量名 表达式或变量名复合的赋值运算符表达式 例如 x 1 414 m1 E s 3 14159 r r或a 5 x a 1上述各例都是合法的赋值运算表达式 赋值运算表达式的作用是把赋值运算符右边表达式的值赋给赋值运算符左边的变量 当算术运算符和赋值运算符同时出现在一个表达式中时 算术运算符的优先级高于赋值运算符 C语言允许赋值运算表达式中的表达式部分还是一个赋值表达式 这样就构成了多重赋值 多重赋值表达式中 赋值运算符遵循右结合的法则 即 自右向左的运算顺序 例如 多重赋值语句a b c x 8 在执行时等价于依次执行三个语句 c x 8 b c a b 将一个变量通过复合的赋值运算符与一个表达式连接而成的式子同样称为赋值运算表达式 例如 a 5 x a 1下面的例子说明了复合的赋值运算符的运算规则 表达式a 5等价于a a 5表达式a 4 b等价于a a 4 b 表达式a b 1等价于a a b 1 注意 复合的赋值运算符右边的表达式是作为一个整体参与其左边算术运算符所规定的运算的 例2 4 赋值运算表达式举例1 y 3 x 1 将3 x 1 的结果赋值给变量y 2 a b 4 c 6 这里的赋值运算表达式 b 4 c 6 参于算术运算 C言规定 将赋值运算符右边表达式的值作为赋值运算表达式的值 所以 赋值运算表达式 b 4 的值为4 c 6 的值为6 最后将它们的和赋值给变量a 由于算术运算符的优先级高于赋值运算符 所以表达式中的括号是必须的 3 a a a 2 这里的语句等价于 a a a 2 a a a 三 字符型与整型的关系字符型数据的值在内存表现为它们的ASC代码值 0 255之间的一个整数 2 字符常量以其ASC代码值参与整数运算 如 A 2的值为67 字符A的ASC码值为65 例2 5 字符型变量参与算术运算main inta chari a B 1 i a 10 printf a d a c n a a printf i d i c n i i 以字符格式输出变量a的值结果为字符A 以整型格式输出变量a的值结果为67 例2 6 大小写字母的转换 main charc1 a c2 B c1 c1 32 c2 c2 32 printf c1 c c2 c c1 c2 大小写英文字母的ASC码值相差32 2 6自增 自减运算符 功能 设i为整型变量 i 在使用i之前 先执行i 1 使i的值加1 i 在使用i之前 先执行i 1 使i的值减1 i 在使用i之后 执行i 1 使i的值加1 i 在使用i之后 执行i 1 使i的值减1 上述 使用 指的是i加1或减1前后的其他操作 如赋值 运算 显示等 若不存在其它操作 则i 与 i一样 执行i 1 使i的值加1 i 与 i一样 执行i 1 使i的值减1 例2 7 自加 自减运算符的应用 main inti 10 j floatpi 3 14 pa j i pa pi printf j d pa f n j pa printf i d pi f n i pi 先将i的值赋给变量j再执行i 1 先执行pi 1 再将pi的值赋给变量pa 先将i的值输出再执行i 1 先执行pi 1 再将pi的值输出 2 7位运算符 位运算以字节 byte 中的每一个二进位 bit 为运算对象 最终的运算结果是整型数据 位运算分为按位逻辑运算和移位运算 一 按位逻辑运算符按位逻辑运算符包括 按位逻辑与运算符 按位逻辑或运算符 按位逻辑非运算符 按位逻辑异或运算符 运算法则设用x y表示字节中的二进位 取值为0或1 按位逻辑运算符的运算法则为 按位逻辑与运算 x y的结果为1 当且仅当x y均为1 否则x y的结果为0 按位逻辑或运算 x y的结果为0 当且仅当x y均为0 否则x y的结果为1 按位逻辑异或运算 x y的结果为1 当且仅当x y的值不相同 否则x y的结果为0 按位逻辑非运算 当x 1时 x 0 而当x 0时 x 1 位运算表达式的格式 整型变量名运算符 整型变量名或 整型变量名 例2 8 位运算符的应用设有 inta 55 b 36 计算 a b a b a b及 a的结果 假定每个整型变量占二个字节 16bit 则在内存中的二进制数a b为 a 0000000000110111b 0000000000100100按上述按位运算的法则 列出下述算式 a b a b 00000000001101110000000000110111 0000000000100100 000000000010010000000000001001000000000000110111a b 00000000001101110000000000100100a 0000000000110111 0000000000100100 a 11111111110010000000000000010011 结果 a b 24 a b 37a b 13 a ffc8 用十六进制表示 二 移位运算符 C语言提供的移位运算实现将整数数据按二进位右移或左移的功能 向右移位运算符 向左移位运算符 移位运算表达式的格式 整型变量名移位运算符整型常量其中 整型常量指出右移或左移的位数 例2 9 移位运算符的应用设定义inta 55 b 36 计算 a b 2 a b 3的结果 a b和a b的结果91和19在内存中的二进制数分别为 a b 0000000001011011和a b 0000000000010011 2 8其他运算符和表达式 一 强制类型转换运算符C语言提供的强制类型转换运算符可以将一个表达式转换成指定的数据类型 格式 类型说明符 表达式 例如 double x y 将表达式x y的结果转换成双精度型 int a 将变量a的值转换成int类型 例2 10 强制类型转换运算符的使用main floatx 3 6 y 6 6 printf x y f n x y printf x y f n int x int y 将x的值强制转换成整型值3 将y的值强制转换成整型值6 二 逗号运算符和逗号表达式C语言通过逗号运算符 将两个以上的表达式连接起来 组成逗号表达式 逗号表达式的一般格式 表达式1 表达式2 表达式k 逗号表达式的运算 依次求表达式1 表达式2 表达式k的值 并以最后一个表达式k的值作为整个逗号表达式的值 例如 语句 x a 3 6 3 等价于 a 3 x 6 3 x 6 3 将表达式6 3的结果作为整个逗号表达式的值 第2章结束 第3章C程序中的输入 输出 学习目标 对C语言的输入 输出有一个初步的了解 学会使用scanf printf 函数实现整型 浮点型和字符型数据的输入 输出 主要内容 C语言的输入 输出 printf 函数 scanf 函数 getchar 函数和putchar 函数 3 1概述 C语言中没有输入 输出语句 通过调用库函数中的输入 输出函数printf scanf getchar 和putchar 实现输入 输出 在使用输入 输出函数时 应当在源程序的开始处使用 include命令将输入 输出函数的头文件包含进来 以便在编译时实现连接 一 格式输出函数printf 函数 功能 从指定的输出设备输出数据 默认的输出设备为显示器 使用格式 printf 格式控制 输出表列 由格式控制符 和格式字符实现 表达式 3 2格式输入 输出函数scanf 和printf 格式控制的内容 这部分是用双引号括起来的字符串 其中包含两种信息 格式说明 由 和格式字符组成 如 d f f等 它们的作用是将待输出的数据按指定的格式输出 普通字符 即需要按原样输出的字符 例如 语句 printf TotalNumberis d Priceis f n total price 中的TotalNumberis Priceis 输出表列部分 这部分是需要输出的数据值 通常是表达式 如上例中的total price 常用的printf 格式字符 格式字符说明c 以字符形式输出 只输出一个字符d 以带符号的十进制形式输出整数 正数不输出符号 e或 E以指数形式输出实数 数字部分小数位数为6位f 以小数形式输出单 双精度数 隐含输出6位小数l用于长整型数据 可加在格式符d o x u前面 如 2 5E 3相当于 2 5 10 3 如 ld lo lx等 接上页格式字符说明o以八进制无符号形式输出整数 不输出前导符0 s 输出字符串u以无符号十进制形式输出整数x或X以十六进制无符号形式输出整数 不输出前导符0 x 用x则输出十六进制数的a f以小数形式 用X时 则用大写字母输出 例3 1 输出格式控制符的应用main intx 35 floaty 123 456 charch A printf x d n x printf y f n y printf y 10 2f n y printf y 10 2f n y printf ch c n ch printf String s n Shanghai 以整数格式输出表达式x的值 n为转义字符 输出时将光标移到下一行的开始处 按原样输出字符串String m nf与 m n相似 只是在其右边以空格补足不足部分 m nf表示以小数形式输出 输出结果共占m位 其中小数部分占n位 如果输出结果不足m个字符 则在其左边以空格补足 格式转义字符 字符形式功能 n 换行 t 横向跳格 即跳到下一个输出区 v竖向跳格 b退格 r回车 双引号字符 反斜杠字符 单引号字符 ddd1到3位8进制数所代表的字符 xhh1到2位16进制数所代表的字符 例3 2 转义字符的应用main printf Chinese tEnglish n printf Welcome friends n printf 101 x41 n 转义字符 t 使字符串 English 输出到第2个输出区 转义字符 用以输出双引号字符 101以八进制形式给出大写字母A的ASC码值65 x41以十六进制形式给出大写字母A的ASC码值65 二 格式输入函数scanf 功能 从键盘输入数据 并存入相应变量的存储单元 使用格式 scanf 格式控制 地址表 与printf 函数的格式控制类似 以 d f c s为最常用 由取地址运算符 取出变量的存储单元的起始地址 格式字符说明c用以输入单个字符d用以输入有符号的十进制整数f用以输入实数 可以用小数形式或指数形式输入L用以输入长整型数据以及double型数据o用以输入无符号的八进制整数s用以输入字符串 将字符串送到一个字符数组中 在输入时以非空白字符开始 以第一个空白字符结束 字符串以串结束标志 0 作为其最后一个字符u用以输入无符号的十进制整数x或X用来输入无符号的十六进制整数 大小写作用相同 表示本输入项在读入后不赋给相应的变量域宽指定输入数据所占宽度 列数 域宽应为正整数 常用的scanf 格式字符表 例3 3 输入格式控制符的应用main inta b floatc d chare scanf d d 当二个 d之间没有分隔符时 相应的二个输入数据之间也必须用空格分隔 当二个 f之间用逗号分隔时 相应的二个输入数据之间也必须用逗号分隔 3 3字符输入 输出函数getchar 和putchar 一 字符输出函数putchar putchar 函数用以输出字符变量的值 调用putchar 函数的一般格式 putchar 整型表达式 其中 整型表达式 的值应当在字符ASC码值的范围内 通常 putchar 的参数是字符型变量 字符常量 也可以是整型变量 整型常量 例3 4 字符输出函数putchar 的应用 includemain chara C inti 97 putchar a putchar b putchar t 将变量或表达式的值以字符格式输出 使用putchar 函数 必须用命令 include 将标准输入输出函数的头文件 stdio h 包含到用户的源文件中 二 getchar 函数功能 getchar 函数用以从键盘上输入一个字符 调用getchar 函数的一般格式 getchar 例3 5 字符输入函数getchar 的使用 includemain charch ch getchar putchar ch putchar getchar 由getchar 函数从键盘输入一个字符 并立即由putchar 函数将其输出 使用getchar 函数 必须用命令 include 将标准输入输出函数的头文件 stdio h 包含到用户的源文件中 第3章结束 第4章C程序的控制结构 学习目标 熟练掌握if语句 掌握switch语句 会利用这两种语句进行条件分支结构的程序设计 熟练掌握for语句 while语句和do while语句 会利用这三种语句进行循环结构的程序设计 掌握break语句和continue语句与上述语句配合使用的方法 主要内容 程序算法的概念顺序结构分支结构循环结构 4 1程序算法简介计算机科学家沃思提出公式 数据结构 算法 程序数据结构 对数据的描述 如前面所介绍的各种数据类型就是最简单的数据结构 算法 对操作的描述 是为解决一个问题而采取的方法和步骤 通常用流程图表示算法 一 算法的概念 计算1 2 3 4 100可以二种不同的算法 算法一 先作1 2 再加3 再加4 一直加到100 最后得到结果 5050 算法二 利用等差数列求和公式 n n 1 2 比较算法一和算法二 算法二不具有普遍性 许多级数求和问题是不能简单地用公式表示的 如 cos1 cos2 cos3 cosn算法一所反复实施的是二个数的加法运算 1 1 2 1 2 3 1 2 3 4 1 2 3 99 100这种看似枯燥 单一 反复实施的运算利用C语言提供的选择结构和循环结构却是很容易实现的 而且这一算法适用于不同的级数求和问题 由于计算机具有极高的运算速度 这样的程序结构恰好发挥了计算机的特长 结论 对计算机而言 算法一优于算法二 选择一个好的算法是设计出高质量程序的前提 例4 1 为计算1 2 3 n设计一个算法 其中n的值由键盘输入步骤1 从键盘输入n的值步骤2 0 sum 使变量sum具有初值0 步骤3 1 i 使变量i具有初值1 步骤4 sum i sum 用sum i的值取代sum原来的值 步骤5 i 1 i 使变量i的值增1 步骤6 若i n 再返回到步骤4 否则结束 说明 算法中 步骤4到步骤6组成一个循环 最后的计算结果存放在变量sum中 上述算法中的每一个步骤都可以用C语言来描述 并最终成为一个完整的C程序 二 算法的表示算法用流程图来表示 所谓流程图就是用一些图框表示各种操作 形象直观 易于理解 常用的流程图符号 开始 结束框 输入 输出框 处理框 判断框 流程线 按算法一计算1 2 3 n的流程图 其中n的值由键盘输入 开始 输入n 0sum1i sum ifaci 1i i n y 输出sum n 结束 返回 三 算法的特性 有穷性 一个算法所包含的操作步骤必须是有限的 2 确定性 指算法中的每一个步骤的含义必须是明确的 不能有二义性 3 由零个或多个输入 如果算法中的n是已知的数据 而不是来自外部 可以没有输入 4 有一个或多个输出 通过输出了解算法的结果 5 有效性 算法中的每一个步骤都应当是可以被执行的 并能得到确定的结果 4 2顺序结构 顺序结构 顺序结构是最简单的程序结构 在执行时 按语句的先后次序依次执行 直至结束 例4 2 编写程序 要求从键盘输入圆的半径r 计算圆的面积s和周长l definePI3 1415926main floats l r printf PleaseInputr scanf f 将r2表示为r r或用函数表示为 pow r 2 定义符号常量 例4 3 从键盘上输入一个三位正整数 然后逆序输出 main inta b scanf d 取出个位数 得到由百位数数字和个位数数字组成的二位数 4 3关系运算符和关系运算表达式 一 关系运算符关系运算符用于表达式之间的比较 大于比较运算符 小于比较运算符 小于等于比较运算符 具有相同的运算优先级 和 具有相同的运算优先级 后一组的运算优先级又低于前一组 同优先级的关系运算符遵循左结合 自左至右的结合方向 二 关系运算表达式二个表达式通过关系运算符连接而成为关系运算表达式 关系运算表达式的一般形式为 例如 c a b a 2 5 b c都是合法的关系运算表达式 关系运算表达式的结果为逻辑值 1 表示 真 当关系运算表达式成立时 True 逻辑值 0 表示 假 当关系运算表达式不成立时 False 关系运算符的优先级高算术运算符 关系运算符 关系运算符 低赋值运算符 例4 4 设 a 3 b 4 c 5 判断下列各关系运算表达式的结果 x b a由于关系运算符优先于赋值运算符 所以原式等价于x b a 由题设可知b a成立 结果为1 故最后执行赋值运算x 1 2 a b c由于关系运算符 的运算优先级低于关系运算符 所以原式等价于a b c 由题设可知b c不成立 结果为0 原式可化为a 0 由题设可知a 0成立 结果为1 3 a b bb不成立 结果为0 b1 其结果为0 4 f a b c由于同优先级的关系运算符遵循自左至右的结合方向 故原式等价于 f a b c 由题设可知 a b的结果为1 a b c的结果为1 最后执行赋值运算 f 1 4 4逻辑运算符和逻辑运算表达式 逻辑运算符包括 逻辑非运算 逻辑与运算 逻辑或运算 逻辑表达式 用逻辑运算符连接而成的表达式 逻辑运算的结果为逻辑值 以1表示 真 true 以0表示 假 false 高逻辑运算符 算术运算符 关系运算符 关系运算符 逻辑运算符 低赋值运算符 n 运算符的优先级 注意 C 允许算术运算表达式参与逻辑运算 在参与逻辑运算时 一切非零值均作为逻辑值1 而将零值作为逻辑值0 逻辑运算法则 设A B是参与逻辑运算的二个量 逻辑 与 运算法则 运算符 A B的结果为1 当且仅当A B的值均为非0 否则 A B的结果为0 例如 1 0的结果为0 5 3 14的结果为10 0的结果为0 逻辑 或 运算法则 运算符 A B的结果为0 当且仅当A B的值均为0 否则 A B的结果为1 例如 1 0的结果为1 5 3 14的结果为10 0的结果为0逻辑 非 运算法则 运算符 A的结果为0 当且仅当A的值为非0 否则 A的结果为1 例如 0的结果为1 3 14的结果为0 例4 5 设inta 3 b 4 c 5 判断下列表达式的值 说明 由于逻辑与 或运算的优先级低于关系运算符 故将下列各式中的括号去除后对结果没有影响 1 a b c a 由题设可知 原式等于0 1 结果为1 2 ca b3 43 4 3 也即是 1 1 0 按自左向右的结合方向 最后结果为1 例4 6 设inta 3 b 4 c 5 判断表达式a b a c b 的值 原表达式等价于a b a c b C语言规定 在执行 运算时 如果 运算符左边表达式的值为0 则已经可以确定 运算的结果一定为0 故不再执行 运算符右边表达式规定的运算 类似地 在执行 运算时 如果 运算符左边表达式的值为1 则已经可以确定 运算的结果一定为1 故不再执行 运算符右边表达式规定的运算 由题设可知 a的值为0 故赋值运算表达式b a的值为0 按C语言规定 赋值运算表达式 c b 将不被执行 c的值还是5 b的值为0 由于逻辑运算表达式 b a c b 的值为0 故a的值为0 整个赋值运算表达式为0 逻辑表达式的应用举例 1 数学中的1 x 5 并且x 3可用逻辑表达式表示为 x 1 x 5 x 3 2 x是3的倍数或5的倍数 可用逻辑表达式表示为 x 3 0 x 5 0 4 5选择结构 在许多场合 需要根据不同的情况执行不同的语句 称这种程序结构为选择结构 C语言提供的条件语句和开关语句可用于实现选择结构程序设计 一 if语句和if else 语句 if语句if语句的格式 if 表达式 语句 值为0 执行时 首先计算表达式的值 若其值不为0 表示真 则执行语句部分 否则 跳过语句部分 执行其后面的语句 例4 7 从键盘输入实数a 输出a的绝对值main floata printf Enterafloat n scanf f 若a 0成立 执行a a否则直接执行printf语句 例4 8 从键盘输入一个正整数n 如果n是一个三位数 将其逆序输出 否则 直接结束 main inta b scanf d b a 10 a 10 printf d b b a 10 printf d b a 10 printf d n a 复合语句 取出个位数字 取出由百位数字和十位数字构成的二位数 if else 语句if else 语句的格式 if 表达式 语句1else语句2 执行时 首先计算表达式的值 若其值不为0 则执行语句1 否则 执行语句2 语句1和语句2必定有一个 而且只能有一个被执行 之后 执行其后续语句 例4 9 从键盘上输入两个整数a和b 按先大后小的顺序输出 main inta b printf Pleaseentertwointegers n scanf d d a b成立 执行这一语句 a b不成立 执行这一语句 例4 10输入a b c 利用求根公式求一元二次方程ax2 bx c 0的根 流程图 includemain floata b c floatx1 x2 delta printf PleaseInputa b c scanf f f f printf x1 f b delta 2 a printf x2 f n b delta 2 a else delta sqrt delta printf x1 f fi n b 2 a delta 2 a printf x1 f fi n b 2 a delta 2 a 程序 if与else配对 用以找出a b中的大者 例4 11 编程求整数a b c中的最大者 a b c由键盘输入 main inta b c max print Pleaseenterthreeintegers n scanf d d d 条件运算符C语言提供了条件运算符 由条件运算符构成的表达式称为条件运算表达式 在某些情况下 条件语句if else 可以用条件运算表达式来代替 条件运算表达式的格式 表达式1 表达式2 表达式3执行时 先判断表达式1的值 如果其不为0 则以表达式2的值作为条件运算表达式的值 否则 以表达式3的值作为条件运算表达式的值 只有在if语句内嵌的语句为赋值语句 且两个分支都给同一个变量赋值时 才能用条件表达式代替if语句 例4 12 从键盘输入二个整数 输出其中的较大者 main inta b printf Pleaseinputtwointegers n scanf d d 使用条件运算符使程序变得简洁 二 条件语句的嵌套C语言允许在条件语句中又包含另一个条件语句 称之为条件语句的嵌套 在if语句中又嵌套了另一个if语句 例4 13 从键盘上输入一个字符 判断它是英文字母 数字或其它字符 流程简图 程序 includemain charch printf Enteracharacter ch getchar if ch 0 例4 14 修改例4 10的程序 要求在求解方程之前 先判断输入的二次项系数a是否为0 若为0 则输出出错信息 if 和 else 的正确配对复合语句和条件语句的嵌套结构为解决一些较为复杂的编程问题提供了必要的条件 但同时也使程序的结构变得复杂 不易读懂 特别是在程序中有多个 和if else 的情况 在阅读程序之前 必须能正确地将 和 配对 将 if 和 else 配对 使程序的结构变得清晰和有条理 if 和 else 配对应遵循下述规律 自上而下 else 总是和上面离它最近的 if 配对 而且 每一个 else 只能和一个 if 配对 由于单独的 if 也是条件语句 所以 允许无 else 配对的 if 单独存在 同理 和 配对应遵循下述规律 自上而下 总是和上面离它最近的 配对 例4 15 如果变量x的值是 15 变量y的值是 10 则执行下面的程序段后 屏幕上显示的内容是什么 if x 0 if x 10 printf A elseprintf B elseif y 20 printf C elseprintf D printf E 为了看清程序结构 必须先将if和else正确配对 将if和else正确配对 该程序段采用了缩进格式 这种格式更容易反映出程序结构 流程图 switch语句的格式 switch 整型表达式 case整型常量表达式1 语句序列1 break case整型常量表达式2 语句序列2 break case整型常量表达式k 语句序列k break default 语句序列k 1 三 开关语句开关语句用于在程序中实现多路选择 Switch语句的执行流程 说明 格式中的break语句不是必须的 应根据需要而定 格式中的default语句不是必须的 在缺省的情况下 相当于语句序列k 1是空语句 格式中的 是必须的 例4 16 编写一个四则运算计算器程序 可以实现输入二个数和一个四则运算符 输出运算结果的功能 main floatoperandl operand2 result charoperator scanf f c f 由operator的值决定执行哪一个case语句 执行break语句后就结束switch语句 例4 17 用switch语句实现从键盘输入成绩 转换成相应的等级后输出 90 100为A 80 89为B 70 79为C 60 69为D 59及以下为E main intscore printf PleaseInputAScore scanf d 用以将输入的成绩按等级与10以内的某一个非负整数相对应 case10 case9执行相同的语句 4 6循环结构在程序中 若干个在一定条件下反复执行的语句就构成了循环体 循环体连同对循环的控制就组成了循环结构 循环结构也是最常见的程序结构 几乎所有实用的程序都包含循环结构 在C程序中常用的循环语句包括 while语句 do while语句 for语句 资源来源 http baidu 例4 18 编程求1 2 3 4 n n由键盘输入 并输出结果 根据例4 1给出的算法和流程图 设计如下的程序 main intn i 1 sum 0 printf Pleaseinputn n scanf d 流程图 while i n sum i 循环体 在循环体中须有修改循环变量的语句 例4 19 编程计算级数1 的和 当最后一项小于0 00001时结束 分析 这也是一个连加问题 可以采用类似于例4 18的算法来实现 用变量sum存放部分和 级数第i项的分母为 i 1 i i 2 3 main inti 2 floatsum 1 0 while 1 0 i 1 i 0 00001 printf SUM f sum 循环的次数预先不知 sum 1 0 i 1 i i 循环体是复合语句 例4 20 用do while语句实现 例4 18 main intn i 1 sum 0 printf Pleaseinputn scanf d 循环体至少被执行一次 流程图 main intn i 2 longintfac 1 printf Pleaseinputn scanf d 程序 说明 表达式1用于给循环变量赋初值 表达式2给出执行循环体的条件 表达式3用于修改循环变量 例4 22 编程计算1 3 5 7 99分析 原题就是计算1 3 5 7 99 这还是一个连加问题 主要应解决加数符号的交叉变化 在程序中用变量j表示符号 以1表示正号 1表示负号 main inti j sum 0 j 1 for i 1 i 99 i 2 sum i j j 1 printf 1 3 5 7 99 d n sum 例4 23 编程求1到100以内所有能被3整除但不能被7整除的整数的和 分析 本例还是一个连加问题 只是要求加数能被3整除且不能被7整除 main inti sum 0 for i 1 i 100 i if i 3 0 C语言允许for语句一般格式中的表达式1 表达式2和表达式3空缺 但它们所具有的功能应当在适当的地方由另外的语句来实现 例4 23 1与例4 23程序的功能是一样的 例4 23 1 main inti 1 sum 0 for i 100 i if i 3 0 对循环变量i赋初值 省却了对循环变量i赋初值的表达式1 四 循环的嵌套循环的嵌套是指一个循环体内又包含另一个完整的循环结构 例如 1 while 2 while while do while 再如 3 do 4 for for while while 注意 在循环嵌套时 外循环必须完全包含内循环 例4 24 编程输出如下由 组成的三角形 外循环控制输出5行 字符 内循环控制一行输出2 i 1个 字符 输出一行 字符后换行 main inti j for i 1 i 5 i for j 1 j 2 i 1 j printf printf n 4 7continue语句和break语句continue语句和break语句属于转向语句 它们常用在循环体中 用于改变循环的执行顺序 一 continue语句在循环体中执行continue语句后 程序将立即跳过continue语句之后尚未执行的语句 提前结束本轮循环 返回到循环的开始处 准备执行下一轮循环 注意 1 continue break语句必须和if语句配合使用 否则 循环体中continue break语句后面的部分将是多余的 2 continue break语句只对其直接所属的循环语句起作用 例4 25 从键盘输入整数 如果是奇数 则继续输入 如果是非0偶数 则显示该偶数后继续输入 如果是0则输出 Theend 后结束 分析 题目要求不断地从键盘输入整数 直到输入0时结束 这可以用循环结构来实现 main intn 1 while n 0 printf Pleaseinputaninteger n scanf d 保证循环体至少被执行一次 若输入的是奇数则结束本轮循环并返回循环开始处 用for语句来实现 例4 25 例4 25 1 main intn 1 for n 0 printf Pleaseinputaninteger n scanf d 二 break语句在循环体中执行break语句后 将立即结束循环 例4 26 每次从键盘输入一个整数进行累加 一旦累加和大于100时 停止输入并输出累加和 main intn sum 0 while 1 printf Pleaseinputaninteger n scanf d 若条件满足 则结束本次循环 永真条件 用for语句来实现 例4 26 例4 26 1 main intn sum 0 for printf Pleaseinputaninteger n scanf d 省却了对循环条件的判断 用break语句控制结束循环 第4章结束 第5章数组 学习目标 熟练掌握一维数组 二维数组 字符数组的定义 初始化 熟练掌握数组元素的引用方法 3 熟练掌握C程序处理字符串的常用方法 主要内容 一维数组二维数组字符数组和字符串 5 l一维数组的定义及应用 一 一维数组的定义n次多项式通常被表示为 f x anxn an 1xn 1 an 2xn 2 a2x2 a1x a0各项系数为 an an 1 an 2 a2 a1 a0它们有下列特点 同名 a同类型 实数类型以下标0 1 2 n 1 n区别各元素 an an 1 an 2 a2 a1 a0 在C语言中 把具有一定顺序关系的同名 同类型变量的集合称为数组 称元素的共名a为数组名 将各元素记为 a 0 a 1 a 2 a n 1 a n 根据元素下标的个数将数组分为一维数组 二维数组 故又称数组元素为下标变量 一维数组的定义 数据类型数组名 元素个数 例如 intdata 4 定义了一个有4个元素的一维数组data 元素类型为int型 又如 charc 10 定义了一个有4个元素的一维数组c 元素类型为char型 注意 在数组定义中 方括号中的元素个数只能是整数常量 包括符号常量 2 数组元素的下标从0开始 3 数组名的命名规则与变量名相同 4 数组在内存中按其下标递增的顺序连续存储各元素的值 数组名表示第一个变量的存储地址 5 参加数据处理的只能是数组中的元素变量 数组整体不能参加数据处理 二 一维数组的初始化一维数组的初始化就是在定义数组时对所有的数组元素赋初值 例如 定义intdata 4 3 0 5 0 则等号右边花括号中的数值3 0 5 0依次被赋予data 0 data 1 data 2 及date 3 作为初值 设数组data从地址为2000H的内存单元开始存放 其在内存中的存储情况如下图所示 data 0 2000H03data 1 2002H00data 2 2004H05data 3 2006H00 此外 在初始化的格式中 中的某个初始化数据可以缺省 但是用以分隔数据的逗号不能省略 默认缺省的数据为零值 例如 执行语句 intdata 4 3 5 和intdata 4 3 0 5 0 的结果也是一样的 C语言还允许在数组初始化时不指明数组元素的个数 例如 用intb 1 2 3 4 定义并初始化一维数组b 是合法的 此时 中初始化数据的个数即为数组元素个数 所以 数组b 有4个元素 说明 在初始化的格式中 中的初始化数据用逗号分隔 当初始化数据个数少于数组元素个数时 剩下的数组元素被赋予零值 所以 intdata 4 3 0 5 和intdata 4 3 0 5 0 的结果是一样的 三 一维数组元素的引用数组元素在程序中可参与同类型的变量所能进行的各种运算 并遵循与同类型变量相

温馨提示

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

评论

0/150

提交评论