(推荐课件)C++入门教程_第1页
(推荐课件)C++入门教程_第2页
(推荐课件)C++入门教程_第3页
(推荐课件)C++入门教程_第4页
(推荐课件)C++入门教程_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

最简单的C程序设计 在上一章介绍了程序中用到的一些基本要素 常量 变量 运算符 表达式等 它们是构成程序的基本成份 在第一章中已经介绍了几个简单的C程序 本章将介绍为编写简单的程序所必须的一些内容 3 1C语句概述和其它高级语言一样 C语言的语句用来向计算系统发出操作指令 一个语句经编译后产生若干条件机器指令 在C语言中只有 可执行语句 没有 非执行语句 BASIC有可执行语句和非执行语句之分 一个为实现特定目的的程序应当包含若干语句 从第一章已知 一个函数包含数据定义部分 执行部分即由语句组成 C程序可以用图3 1表示 即一个C程序可以由若干个源程序文件 分别编译的文件模块 组成 一个源文件可以由若干个函数和预编译命令组成 关于 预编译命令 见第七章 一个函数由数据定义部分和执行语句组成 在第二章中已经说明 程序应该包括数据描述 由数据定义部分来实现 和数据操作 由语句来实现 数据描述主要定义数据结构 用数据类型型表示 和数据初值 数据操作的任务是对已提供的数据进行加工 1 C程序结构 2 C语句可以分为以下五类 1 控制语句 完成一定的控制功能 C只有9种控制语句 它们是 if else 条件语句 for 转向语句 while 循环语句 do while 循环语句 continue 结束本次循环语句 break 中止执行switch或循环语句 switch 多分支选择语句 goto 转向语句 return 从函数返回语句 上面9种语句中的括号 表示其中是一个条件 表示内嵌的语句 例如 if else 的具体语句可以写成 if x y z x elsez y 3 2 函数调用语句 由一次函数调用加一个分号构成一个语句 例如 printf thisisaCstatement c max a b 3 表达式语句 由一个表达式构成一个语句 最典型的是 由赋值表达式构成一个赋值语句 a 3是一个赋值表达式 而a 3 是一个赋值语句 可以看到一个表达式的最后加一个分号就成了一个语句 一个语句必须在最后出现分号 分号是语句中不可缺少的一部分 而不像PASCAL语言那样 分号只是语句间的分隔符号 例如 i i十1 是表达式 不是语句 i i l 是语句 4 任何表达式都可以加上分号而成为语句 例如i 是一语句 作用是使i值加1 又如x y 也是一个语句 作用是完成x y的操作 它是合法的 但是并不把调x y的和赋给另一变量 所以它并无实际意义 表达式能构成语句是C语言的一个特色 其实 函数调用语句 也是属于表达式语句 因为函数调用也属于表达式的一种 只是为了便于理解和使用 我们把 函数调用语句 和 表达式语句 分开来说明 由于C程序中大多数语句是表达式语句 包括函数调用语句 所以有人把C语言称作 表达式语言 4 空语句 下面是一个空语句 即只有一个分号的语句 它什么也不做 有时用来作被转向点 或循环语句中的循环体 循环体是空语句 表示循环体什么也不做 5 5 可以用 把一些语句括起来成为复合语句 如下面是一个复合语句 z x y t Z 100 printf f t 注意 复合语句中最后一个语句中最后的分号不能忽略不写 这是和PASCAL不同的 C语言允许一行写几个语句 也允许一个语句拆开写在几行上 书写格式无固定要求 FORTRAN COBOL有严格要求 6 3 2程序的三种基本结构 近年来广泛采用结构化程序设计方法 使程序结构清晰 易读性强 以提高程序设计的质量和效率 结构化程序由若干个基本结构组成 每一个基本结构可以包含一个或若干个语句 有三种基本结构 1 顺序结构 见图3 2 先执行A操作 再执行B操作 两者是顺序执行的关系 图中 b 是N S结构化流程图 下同 7 2 选择结构 见图 p代表一个条件 当p条件成立 或称为 真 时执行A 否则执行B 注意 只能执行A或B之一 两条路径汇合在一起然后出口 8 2 选择结构 见图 p代表一个条件 当p条件成立 或称为 真 时执行A 否则执行B 注意 只能执行A或B之一 两条路径汇合在一起然后出口 9 3 循环结构 有两种循环结构 1 当型循环结构 见图3 4 当p条件成立 真 时 反复执行A操作 直到p为 假 时才停止循环 2 直到型循环结构 见图3 5 先执行A操作 再判断p是否为 假 若p为 假 再执A行 如此反复 直到p为 真 为止 10 由选择结构可以派生出另一种基本结构 多分支选择结构 见图3 6 根据k的值 k1 k2 kn不同而决定执行A1 A2 An之一 11 已经证明 由以上基本结构组成的程序能处理任何复杂的问题 图3 2 图3 7中方框中的A B A1 An 等可以是一个简单的语句 也可以又是一个基本结构 例如 图3 7是一个顺序结构 它由两个操作顺序组成 虚线框内是一个当型循环结构 可以用 B 表示 因此图3 7就可以理解力图3 2 a 所示的顺序结构 12 在此不再重复 只是应当强调说明 在今后的程序设计中应当采用结构化程序设计方法 在本章中 我们介绍了几种最基本的语句 以及用它们构成顺序结构的程序 在第四 第五章介绍选择结构和循环结构的程序设计 3 3赋值语句前已说到 赋值语句是由赋值表达式加上一个分号构成 由于赋值语句应用十分普遍 所以专门再讨论一下 13 C语言的赋值语句具有其它高级语言中赋值语句的一切特点和功能 但也应当注意到它们的不同 C语言中的赋值号 作为赋值运算符 关于赋值表达式与赋值语句的概念 其它多数高级语言没有 赋值表达式 这一概念 作为赋值表达式可以被包括在其它表达式之中 例如if a b 0 t a 按语法规定if后面的 内是一个条件 例如可以是 if x 0 现在在x的位置上换上一个赋值表达式 a b 其作用是 先进行赋值运算 将b的值赋给a 然后判断a是否大于 如大于是 执行t a 在if语句中的 a b 不是赋值语句而是赋值表达式 这样写是合法的 如果写成if a b 0 t a 就错了 在if的条件中不能包含赋值语句 由此可以看到 C把赋值语句和赋值表达式区别开来 增加了表达式的种类 使表达式的应用几乎 无孔不入 能实现其它语言中难以实现的功能 14 3 4数据输出首先说明 C语言本身不提供输入输出语句 输入和输出操作是由函数来实现的 在C的标准函数库中 stdio h 提供了一些输入输出函数 例如 printf函数和scanf函数 在使用它们时 千万不要简单地认为它们是c语言的 输入输出语句 printf和scanf不是C语言的关键字 完全可以不用printf和scanf这两个名字 而另外编两个函数 另用其它函数名 C提供的函数以库的形式存放在系统中 它们不是C语言文本中的组成部分 因此各函数的功能和名字 在各种不同的计算机系统中有所不同 不过 有些通用的函数 如printf和scanf等 各种计算机系统都提供 成为各种计算机系统的标准函数 标准输入输出库stdio h的一部分 在程序编译连接时 用户程序与标准文件相连 所以在程序中可以直接使用printf和scanf函数 在本节中先介绍两个最基本的输出函数 它们都以终端 即系统隐含指定的输出设备 为对象 它们是字符输出函数和格式输出函数 15 3 4 1putchar函数 字符输出函数 putchar函数的作用是向终端输出一个字符 例如putchar c 输出字符变量c的值 c可以是字符型变量或整型变量 在使用标准I O库函数时 要用预编译命令 include 将 stdio h文件包括到用户源文件中 即 include stdio h stdio h是standardinputb O c Y putchar a putchar b putchar c 16 运行结果 BOY也可以输出控制字符 如putchar n 输出一个换行符 如果将例3 1程序最后一行改为putchar a putchar n putchar b putchar c putchar n 则输出结果为 BOY也可以输出其它转义字符 如 putchar 101 输出字符 A putchar 输出单引号字符 putchar 015 使输出回车 不换行 17 3 4 2printf函数 格式输出函数 在前面各章节中已用到printf函数 它的作用是向终端 或系统隐含指定的输出设备 输出若干个任意类型的数据 putchar只能输出字符 而且只能是一个字符 而printf可以输出多个数据 且为任意类型 一 printf函数的一般格式为printf 格式控制 输出表列 格式控制 是用双引号括起来的字符串 也称 转换控制字符串 它包括两种信息 1 格式说明 由 和格式字符组成 如 d f等 它的作用是将输出的数据转换为指定的格式输出 格式说明总是由 字符开始的 18 2 普通字符 即需要原样输出的字符 输出表列 是需要输出的一些数据 可以是表达式 例如 printf a db d a b printf a b d a b a b a b 格式说明输出表列在上面双引号中的字符除了 d 以外 还有非格式说明的普通字符 它们按原样输出 如果a b值分别为3 4 则输出为a 3b 4其中有下划线的字符是printf函数中的 格式控制 字符串中的普通字符原样输出的结果 3和4是a和b的值 注意3和4无前导空格和尾随空格 其数字位数由a b值而定 假如a 12 b 123 则输出结果为a 12b 123由于printf是函数 因此 格式控制 字符串和 输出表列 实际上都是函数的参数 可以表示为printf 参数1 参数2 参数3 参数n printf函数的功能是将参数2 参数n 按参数1给定的格式输出 19 二 格式字符对不同类型的数据用不同的格式字符 有以下几种格式字符 1 d格式符 用来输出十进制整数 有以下几种用法 1 d 按整型数据的实际长度输出 见上面 2 md m为指定的输出字段的宽度 如果数据的位数小于m 则左端补以空格 若大于m 则按实际位数输出 如printf 4d 4d a b 若a 123 d 12345 则输出结果为 123 12345 3 ld 输出长整型数据 如1onga 135790 printf ld a 如果用 d输出 就会发生错误 对1ong型数据应当用 ld格式输出 对长整型数据也可以指定字段宽度 如将上面printf函数中的 ld 改为 81d 则输出为1357908列一个int型数据可以用 d或 ld格式输出 举例 20 2 O格式符 以8进制数形式输出整数 由于是将内存单元中的各位的值 0或1 按八进制形式输出 因此输出的数值下带符号 即将符号位也一起作为八进制数的一部分输出 例如 在内存单元中 以补码形式存放 如下 a 11111111111111111inta 1printf d o a a 输出为 1 177777不会输出带负号的八进制整数 对长整数 1ong型 可以用 1o 格式输出 同样可以指定字段宽度 如printf 8o a 输出数据为177777 21 3 x格式符 以16进制数形式输出整数 同样不会出现负的十六进制数 例如 inta 一1 printf x 0 d a a a 输出结果为ffff 177777 1同样可以用 lx 输出长整型数 也可以指定输出字段的宽度 如 12x 4 u格式符 用来输出unsigned型数据 即无符号数 以十进制形式输出 一个有符号整数 int型 也可以用 u格式输出 反之 一个unsigned型数据也可以用 d格式输出 按相互赋值的规则处理 见第二章2 9 unsigned型数据也可用 o或 x格式输出 22 例3 2 unsignedinta 65535 intb 2 printf a d o x u n a a a a printf a d o x u n b b b b 运行结果为 a 一1 177777 ffff 655351111111111111111a 65535b 一2 177776 fffe 655341111111111111110b 2请读者自己分析 23 5 c格式符 用来输出一个字符 如 charc a prinft c c 输出字符 a 请注意 c 中的c是格式符 逗号右边的c是变量名 不要搞混 一个整数 只要它的值在0 255范围内 也可以用字符形式输出 在输出前 将该整数转换成相应的ASCII字符 反之 一个字符数据也可以用整数形式输出 例3 3 main charc a inti 97 printf c d n c c printf c d n i i 运行结果为 a 97a 97也可以指定输出字数宽度 如果有printf 3c c 则输出 a 即c变量输出占3列 前2列补空格 24 6 s格式符 用来输出一个字符串 有几种用法 1 s 例如printf s CHINA 输出 CHINA 字符串 不包括双引号 2 ms 输出的字符串占m列 如字符串本身长度大于m 则突破m的限制 将字符串全部输出 若串长小于m 则左补空格 3 ms 如果串长小于m 则在m列范围内 字符串向左靠 右补空格 4 m ns 输出占m列 但只取字符串中左端n个字符 这n个字符输出在m列的右侧 左补空格 5 m ns 其中m n含义同上 n个字符输出在m列范围的左侧 右补空格 如果n m 则m自动取n值即保证n个字符正常输出 例3 4 main printf 3s 7 2s 4s 5 3s n CHINA CHINA CHINA CHINA 输出如下 CHINA CH CHIN CHI其中第三个输出项 格式说明为 4s 即只指定了n 没指定m 自动使m n 4 故占4列 25 7 f格式符 用来输出实数 包括单 双精度 以小数形式输出 有以下几种用法 1 f 不指定字段宽度 由系统自动指定 使整数部分全部如数输出 并输出6位小数 应当注意 并非全部数字都是有效数字 单精度实数的有效位数一般为7位 例3 5 main floatx y x 111111 111 y 222222 222 printf f x十y 运行结果为333333 328125显然 只有前7位数字是有效数字 千万不要以为凡是打印出来的数字都是准确的 双精度数也可用 f格式输出 它的有效位数一般为16位 给出小数6位 26 例3 6 main doublex y x 111111111111 11111111 y 2222222222222 22222222 printf f x十y 输出结果为3333333333333 328125显然 双精度数也可用 f格式输出 它的有效位数一般为16位 给出小数 位 可以看到最后3位小数 超过16位 是无意义的 27 2 m nf指定输出的数据共占m列 其中有n位小数 如果数值长度小于m 则左端补空格 3 一m nf基本相同 只是使输出的数值向左端靠 右端补空格 例3 7 main floatff 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 f的值应为123 456 但输出为123 455994 这是由于实数在内存中的存储误差引起的 28 8 e格式符 以指数形式输出实数 可用以下形式 1 e不指定输出数据所占的宽度和数字部分小数位数 由系统自动指定给出6 5 位小数 指数部分占5 4 位 如e 002 e 02 其中 e 占一位 指数符号占一位 指数占3 2 位 数值按标准化指数形式输出 即小数点前必须有而且只有一位非零数字 例如printf e 123 456 输出 1 234560e 002 1 23456e 02 也就是说用 e格式输出的实数共占13 11 列宽度 29 2 m ne和 m nem n和 字符含义与前相同 此处n指数据的数字部分 与书上讲的不同 若f 123 456 则printf e 10e 10 3e 3e 10 3e f f f f f 输出如下 1 23456e 02 1 23456e 02 1 23e 02 1 23e 02 1 23e十02第二个输出项按 10e输出 即只指定了m 10 未指定n 凡未指定n 自动使n 6 整个数据长11列 超过给定的10列 乃突破10列的限制 按实际长度输出 第三个数据共占10列 小数部分占2列 第四个数据按字 2e 格式输出 只指定n 2 未指定m 自动使m等于数据应占的长度 今为8列 第五个数据应占10列 数值只有8列 由于是 10 2e 数值向左靠 右补二个空格 30 9 g格式符 用来输出实数 它根据数值的大小 自动选f格式或e格式 选择输出时占宽度较小的一种 且不输出无意义的零 例如 若 f 123 456 则printf f e g f f f 输出如下 123 456001 1 23456e 02 123 456用 f格式输出占10列 用 e格式输出占11列 用 g格式时 自动从上面两种格式中选择短者 今为 f格式为短 故占7列 且按 f格式用小数形式输出 最后三个小数位 0 为无意义的0 不输出 g格式用得较少 31 以上介绍了9种格式符 归纳如表表3 1printt格式字符格式字符说明d以带符号的十进制形式输出整数 正数不输出符号 o以8进制无符号形式输出整数 不输出前导符0 x以16进制无符号形式输出整数 不输出前导符0 x u以无符号10进制形式输出整数c以字符形式输出 只输出一个字符 s输出字符串 f以小数形式输出单 双精度数 隐含输出6位小数 e以标准指数形式输出单 双精度数 数字部分小数位数为6位 g选用 f或 e格式中输出宽度较短的一种格式 不输出无意义的0 32 在格式说明中 在 和上述格式字符间可以插入以下几种附加符号 表8 2附加格式说明字符字符说明l 用于长整型整型 可加在格式符dox u前面 m 代表一个正整数 数据最小宽度 n 代表一个正整数 对实数 表示输出n位小数 对字符串 表示截取的字符个数 输出的数字或字符在域内向左靠 33 用printf函数输出时 应注意数据类型应与上述格式说明匹配 否则将会出现错误 在使用printf函数时 还有几点要说明 1 有些系统要求格式字符要用小写字母 如 d不能写成 D 2 可以在printf函数中的 格式控制 字符串内包含第二章中的 转义字符 如 n t b r f 377 等 3 上面介绍的d o x c s f e g等字符 如用在 后面就作为格式符号 一个格式说明以 开头 以上述9个格式字符之一为结束 中间可以插入附加格式字符 也称修饰符 例如 printf c cf fs s c f s 第一个格式说明为 c 而不包括其后的f 第二个格式说明为 f 不包括其后的s 第三个格式说明为 s 其它的字符为原样输出的普通字符 34 4 如果想输出字符 则应该在 格式控制 字符串中用连续两个 表示 如printf f 1 0 3 输出0 333333 5 不同的系统在实现格式输出时 输出结果可能会有一些小的差别 例如用 e格式符输出实数时 有些系统输出的指数部分为4位 如e十02 而不是5位 e 002 前面的数字部分为5位小数而不是6位等等 35 3 5数据输入本节介绍两个输入函数 是以终端 或系统隐含指定的输入设备 为输入设备的 3 5 1gefchar函数 字符输入函数 此函数的作用是从终端 或系统隐含指定的输入设备 输入一个字符 getchar函数没有参数 其一般形式为 getchar 函数的值就是从输入设备得到的字符 例如 例3 8 include stdio h main charc c getchar putchar c 在运行时 如果从键盘输入字符a a 输入 a 后 按 回车 键 字符才送到内存 a 输出变量c的值 a 36 请注意 getchar 只能接收一个字符 getchar函数得到的字符可以赋给一个字符变量或整型变量 也可以下赋给任何变量 作为表达式的一部分 例如 例3 8第4 5行可以用下面一行代替 putchar getchat 因为getchar 的值为 a 因此输出 a 也可以甩printf函数 printf c getchar 在一个函数中要用getchar函数 应该在函数的前面 或本文件开头 用 jnclude stdio h 因为在使用标准i o库中的函数时需要用到 stdio h 文件中包含的一些信息 37 3 5 2scanf函数 格式输入函数 getchar函数只能用来输入一个字符 用scanf函数可以用来输入任何类型的多个数据 在第一章中已初步接触到了scanf函数 在本节中再作详细介绍 一 一般形式scanf 格式控制 地址表列 格式控制 的含义同printf函数 地址表列 是由若干个地址组成的表列 可以是变量的地址 或字符串的首地址 例3 9main inta b c scanf d d d a b c 按照a b c在内存的地址将a b c的值存进去 prinrf d d d n a b c 38 运行时按以下方式输入a b c的值 345 输入a b c的值 3 4 5 输出a b c的值 a b c中的 是地址运算符 a指a在内存中的地址 用 d d d 格式输入时 不能用逗号 可用空格 作两个数据间的分隔符 如下面输入下合法 3 4 5 39 二 格式说明和printf函数中的格式说明相似 以 开始 以一个格式字符结束 中间可以插入附加的字符 表3 3列出scanf用到的格式字符 表3 4列出scanf可以用的附加说明字符 修饰符 scanf格式字符d用来输入十进制整数 o用来输入八进制整数 x用来输入十六进制整数 c用来输入单个字符 s用来输入字符串 将字符串送到一个字符数组中 在输入时以非空白字符开始 以第一个空白字符结束 字符串以串结束标志 0 作为其最后一个字符 f用来输入实数 可以用小数形式或指数形式输入 e与f作用相同 e与f可以互相替换 40 附加的格式说明字符l用于输入长整型数据 可用 ld lo lr 以及double型数据 用 lf或 1e h用于输入短整型数据 可用 hd hO hx m域宽 为一正整数 指定输入数据所占宽度 列数 表示本输入项在读人后不赋给相应的变量 说明 1 标准C在scanf中不使用 u说明符 对unsigned型数据 以 d或 o x互格式输入 2 可以指定输入数据所占列数 系统自动按它截取所需数据 如scanf 3d 3d 输入3个字符 把第一个字符赋给ch 例如输入abc ch得到字符 a 41 3 后的 附加说明符 用来表示跳过它相应的数据 例如scanf 2d 3d 2d n 如果输入如下信息 1234567将12赋给a 67赋给b 第二个数据 345 被跳过不赋给任何变量 在利用现成的一批数据时 有时不需要其中某些数据 可用此法 跳过 它们 4 输入数据时不能规定精度 例如scanf 7 2f a 是不合法的 不能企图输入1234567而使a的值为12345 67 三 scanf函数的执行中应注意的问题1 scanf函数中的 格式控制 后面应当是变量地址 而不应是变量名 例如 如果a b为整型变量 则scanf d d a b 是不对的 应为 a b 这是C语言与其

温馨提示

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

评论

0/150

提交评论