程序设计基础套课件幻灯片完整版ppt教学教程最全电子讲义(最新)_第1页
程序设计基础套课件幻灯片完整版ppt教学教程最全电子讲义(最新)_第2页
程序设计基础套课件幻灯片完整版ppt教学教程最全电子讲义(最新)_第3页
程序设计基础套课件幻灯片完整版ppt教学教程最全电子讲义(最新)_第4页
程序设计基础套课件幻灯片完整版ppt教学教程最全电子讲义(最新)_第5页
已阅读5页,还剩647页未读 继续免费阅读

下载本文档

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

文档简介

1、第1章 绪论程序设计基础(C语言版)1.1 程序设计语言 程序设计语言是一组用来定义计算机程序的语法规则,即程序设计语言必须是计算机能够理解的 用程序设计语言编写的程序称为源程序(source program)或源代码(source code) 程序设计语言的发展:机器语言(machine language)汇编语言(assembly language)高级语言解释方式编译方式1.2 C语言概况一、C语言的发展历史 C语言标准的变迁C89ANSI CC90ISO/IEC 9899:1990C99ISO/IEC 9899:1999C11ISO/IEC 9899:2011 注:Microsoft

2、Visual C+(简称VC)仅支持C90二、C语言的特点1.3 C语言程序的基本结构【例1.1】 输出Hello!#include int main(void) printf(Hello, the world!n); return 0;【例1.2】 求两个整数的和并输出#include int main(void) int a, b, sum; a = 10; b = 20; sum = a + b; printf(sum = %dn, sum); return 0; C 语言程序书写格式自由【例1.1】 输出Hello!#include int main(void) printf(Hell

3、o, the world!n); return 0;#include int main(void)printf(Hello!n);return 0; 为增强程序的可读性,通常书写C语言程序时应遵循以下规则:一行内仅写一条语句正反大括号分别各占一行每对大括号上下对齐语句采用缩进格式,错落有致1.4 C语言程序的上机执行过程可执行文件(.exe)Executable File目标文件(.obj)Object File源文件(.c)Source Fileedit编辑compile编译其他目标文件(可选)C标准库C standard library link连接第2章 标记、类型与表达式程序设计基础(

4、C语言版)2.1 标记 标记(token)是具有唯一含义的语言的最小单位,分为五种:关键字(keyword)标识符(identifier)常量(constant)串字面量(string literal)标点符号(punctuator)一、关键字 关键字也称为保留字,所有关键字都有固定的含义,且其含义不可改变 C语言共有44个关键字:autoexternshortwhilebreakfloatsigned_Alignascaseforsizeof_Alignofchargotostatic_Atomicconstifstruct_Boolcontinueinlineswitch_Complexd

5、efaultinttypedef_Genericdolongunion_Imaginarydoubleregisterunsigned_Noreturnelserestrictvoid_Static_assertenumreturnvolatile_Thread_local二、标识符 标识符用于表示程序中的对象(object)函数(function)结构体(structure)的标记(tag)或成员(member)共同体(union)的标记或成员枚举(enumeration)的标记或成员typedef名(typedef name)标号名(label name)宏名(macro name)宏参数

6、(macro parameter) 标识符由小写字母、大写字母、数字、下画线、通用字符名(universal character name)或实现定义的字符(implementation-defined character)构成 注意:数字不能作为标识符的第一个字符关键字不能作为标识符 标识符的例子:areaPerimeter_3wu03b1w VC允许在标识符中使用$,因此,$123在VC中是标识符 不是标识符的例子:6abccheck-itemint 大写字母和小写字母是有区别的,即所谓大小写敏感Ageage C语言对标识符的最大长度没有具体的限制,VC允许标识符的最大长度为247个字符

7、应该选择相应的英文单词或其缩写作为标识符,做到见名知义 表示长方体的长、宽、高abclengthwidthheight(更合适)三、常量 在程序运行过程中,其值不变的量称为常量。常量分为四种类型:整数常量(integer constant)浮点常量(floating constant)枚举常量(enumeration constant)字符常量(character constant)1、整数常量 整数包括正整数、零和负整数 整数常量只包括正整数和零,不包括负整数。整数常量分为:十进制整数常量八进制整数常量十六进制整数常量 十进制整数常量由 09 组成,且以非零数字开头1231000 八进制整数

8、常量由 07 组成,且以 0 开头,或者只有一个 00170 十六进制整数常量由 AF(或af)、09 组成,且以 0 x 或 0X 开头0 x1a0XD5【例2.1】 八进制、十进制、十六进制整数常量之间的混合运算#include int main(void) printf(sum = %dn, 014 + 12 + 0 xc); return 0;2、浮点常量 数学中的实数包括有理数和无理数。其中,有理数包括整数和分数;无理数是无限不循环小数 计算机中的浮点数(floating-point number)只能近似地表示值在某个范围之内的有理数和一些特殊值,如NAN(非数值)、+INF(正无

9、穷大)、-INF(负无穷大)等 浮点常量是非负的浮点数,其十进制书写形式有两种:小数表示法 由数字09和小数点组成,必须有小数点123.00.4520.01.25123.4520.0指数表示法60000.0的指数表示法为6E40.000035的指数表示法为3.5e-5十进制整数常量E符号位 十进制整数常量浮点常量的小数表示法E符号位 十进制整数常量3、枚举常量 枚举常量是类型为int的标识符4、字符常量 ASCII码-American Standard Code for Information Interchange 字符常量分为:整数字符常量(integer character consta

10、nt)宽字符常量(wide character constant) 整数字符常量是由一对单引号括起来的一个或多个字符,其类型为int,在内存中占4个字节aababc 本课程讨论的字符常量是指单引号内只有一个字符的整数字符常量 单引号内的字符可以是普通字符?A09 printf(%d, %d, %d, %d, A, b + 2, 0, 1 + 3); 单引号内的字符还可以是转义序列(escape sequence)141x61u03b1四、串字面量 串字面量分为三种:字符串字面量(character string literal)UTF-8串字面量(UTF-8 string literal)宽串

11、字面量(wide string literal) 本课程仅讨论字符串字面量 字符串字面量是用一对双引号括起来的零个或多个字符 在翻译的第七个阶段,空字符(null character)即 0 被加到字符串字面量的末尾,然后字符串字面量以数组元素类型为char的数组的形式存储在内存中 如果字符串字面量中不含0,则该字符串字面量又称为字符串(character string),即字符串是以空字符0结束的连续字符序列ab0c 是字符串字面量,但不是字符串abc 既是字符串字面量,又是字符串 字符串的长度是指空字符前的字符在内存中所占的字节数。因此,长度为n的字符串,在内存中占n + 1个字节字符串字

12、符串的长度占用内存/字节01 12hello56hellon67hx65llon67c是字符常量,占4个字节c是字符串,占2个字节【例2.2】 输出字符串#include int main(void) printf(12345678901234567890n); printf(abcnabdbcn); printf(efgr); printf(110 x49tijkn); return 0;五、标点符号2.2 类型 类型(type)分为:基本类型(basic type)枚举类型(enumerated type)空类型(void)派生类型(derived type) 基本类型分为四种: char

13、有符号整数类型(signed integer type)标准有符号整数类型(standard signed integer type)扩展有符号整数类型(extended signed integer type)无符号整数类型(unsigned integer type)标准无符号整数类型(standard unsigned integer type)扩展无符号整数类型(extended unsigned integer type)浮点类型(floating type)实数浮点类型(real floating type)复数类型(complex type) 在声明(declaration)中必

14、须使用类型说明符(type specifier) 本节中用斜体字表示类型说明符,例如:charsigned charint 或 signed 或 signed intunsigned charunsigned 或 unsigned intfloatdouble 字符类型(character type)包括:charsigned charunsigned char 整数类型(integer type)包括:char枚举类型有符号整数类型无符号整数类型 实数类型(real type)包括:整数类型实数浮点类型 算数类型(arithmetic type)包括:整数类型浮点类型2.3 变量与常用类型说

15、明符一、变量 对象(object)是执行环境中的数据存储区,其内容表示值 变量(variable)是有名字的对象 变量声明(variable declaration)的简单形式:类型说明符 变量名1 , 变量名2, , 变量名n; 其中,变量名是一个标识符int area;int length, width; 变量必须先声明后使用 C语言允许在程序的任何位置声明变量,只要满足先声明后使用的原则即可 VC要求函数内的变量声明必须紧接在开始大括号之后【例2.3】 变量声明的位置#include int main(void) int length, width; length = 10; width

16、 = 8; int area; / 符合C语言的语法,但在VC中是错误的 area = length * width; printf(area = %dn, area); return 0;#include int main(void) int length, width, area; length = 10; width = 8; area = length * width; printf(area = %dn, area); return 0;二、int 类型 int 属于整数类型 在不同的C编译系统中,int 类型的数据所占用的内存大小不同,能表示的数据范围也不同 在VC中,int 类型

17、的数据占 4 个字节,能表示的数据范围是-231231-1即:-21474836482147483647【例2.4】 int 类型数据的溢出#include int main(void) int x, y; x = 2147483646 + 1; y = 2147483646 + 2;/ 溢出 printf(x = %dn, x); printf(y = %dn, y); return 0;三、char 类型 char 属于整数类型 char 类型的数据占1个字节 在VC中,char类型的数据默认能表示的数据范围是 -128127【例2.5】 使用库函数 putchar 输出字符#includ

18、e int main(void) char ch; ch = c; putchar(ch); putchar(o); putchar(155); putchar(n); return 0;【例2.6】 使用库函数 getchar 输入小写字母,输出其对应的大写字母#include int main(void) char ch; ch = getchar(); putchar(ch - 32); putchar(n); return 0; 【例2.7】 输入两个数字字符,求其和并输出char ch1, ch2;int n1, n2, sum;ch1 = getchar();ch2 = getch

19、ar();n1 = ch1 - 0;n2 = ch2 - 0;sum = n1 + n2;printf(sum = %dn, sum);四、float 类型和 double 类型 float 和 double 都属于实数浮点类型 双精度浮点类型 double 比单精度浮点类型 float 的精度更高,表示数据的范围更大 在不同的C编译系统中,float 类型的数据和 double 类型的数据所占用的内存大小不同,能表示的数据范围也不同在VC中, float 和 double 的区别float类型数据double类型数据数据长度4字节8字节最小正值1382.225073

20、858507201410-308最大正值3.40282346610381.797693134862315810308精度6位15位 浮点常量默认是 double 类型,在浮点常量后加后缀 f 或 F 则是 float 类型7.45/ double 类型7.45f/ float 类型7.45F/ float 类型 在VC中,将double类型的浮点常量存放到float类型的变量中,会产生警告:truncation from const double to floatfloat price;price = 7.45;/ 产生警告double price;price = 7.45;float pri

21、ce;price = 7.45f;2.4 运算符与表达式一、表达式 表达式(expression)是由运算符(operator)和运算对象(operand)构成的序列。表达式具有以下一个或多个功能:描述一个值的计算指定一个对象或一个函数产生副作用(side effect) 访问易变对象(volatile object),修改对象或文件(file),或者调用包含这些操作的函数(function)都是副作用 基本表达式(primary expression)包括:标识符常量串字面量用小括号括起来的表达式generic选择 根据运算符的运算对象的数量,可将运算符分为:单目运算符(unary oper

22、ator)双目运算符(binary operator)三目运算符(ternary operator)二、乘法类运算符 乘法类运算符(multiplicative operators)有三个,分别是:乘法运算符 *除法运算符 /模运算符(又称求余数运算符) % 乘法类运算符都是双目运算符5.0 / 2.0的值是 2.55.0 / 2的值是 2.55 / 2.0的值是 2.55 / 2的值是 28 / -3的值是 -2表达式 5.0 / 2.0的值是 2.5表达式 5.0 / 2的值是 2.5表达式 5 / 2.0的值是 2.5表达式 5 / 2的值是 2表达式 8 / -3的值是 -2表达式 5

23、.0 % 2.0错误表达式 5.0 % 2错误表达式 5 % 2.0错误表达式 5 % 2的值是 1表达式 8 % -3的值是 2三、加法类运算符 加法类运算符(addtive operators)有两个,分别是:加法运算符 +减法运算符 - 加法类运算符都是双目运算符四、运算符的优先级与结合性 优先级(precedence)高的运算符先绑定(binding)运算对象6 + 2 * 5 结合性(associativity)分两种:左结合性(left-associativity)右结合性(right-associativity) 优先级相同的运算符按结合性绑定运算对象,左结合性指左边的运算符先绑

24、定运算对象,依次向右进行;右结合性指右边的运算符先绑定运算对象,依次向左进行6 - 3 + 53 + 7 - 2 * 53 + 7 - (2 * 5)(3 + 7) - (2 * 5)五、sizeof 运算符 sizeof 运算符是单目运算符,表达式的值是运算对象所占内存大小(按字节计算),其运算对象是表达式或用小括号括起来的类型名printf(sizeof(char) = %dn, sizeof(char);printf(sizeof(int) = %dn, sizeof(int);printf(sizeof(float) = %dn, sizeof(float);printf(sizeof

25、(double) = %dn, sizeof(double);printf(sizeof 5 = %dn, sizeof 5); printf(sizeof A = %dn, sizeof A);printf(sizeof 5.0f = %dn, sizeof 5.0f);printf(sizeof 5.0 = %dn, sizeof 5.0);printf(sizeof hello = %dn, sizeof hello);int n;printf(sizeof n = %dn, sizeof n);printf(sizeof 2 + 3 = %dn, sizeof 2 + 3);print

26、f(sizeof(2 + 3) = %dn, sizeof(2 + 3);六、一元加运算符与一元减运算符一元加运算符(unary plus operator) + 是单目运算符,表达式的值是运算对象的值一元减运算符(unary minus operator) - 是单目运算符,表达式的值是运算对象的相反数 如果运算对象是整数类型,要先对运算对象的值进行整数提升(integer promotions),表达式的类型是提升以后的类型 对于常用类型char、int、float和double,只有char类型的值需要整数提升,即将char类型的值转换为int类型的值char ch; printf(si

27、zeof +ch = %dn, sizeof +ch);printf(sizeof ch = %dn, sizeof ch);printf(sizeof -ch = %dn, sizeof -ch);printf(sizeof ch = %dn, sizeof ch);七、常用算术转换 乘法类运算符的运算对象要执行常用算术转换(usual arithmetic conversions) 如果加法类运算符的两个运算对象都是算术类型,也要执行常用算术转换 对于常用类型char、int、float和double,常用算术转换的含义如下:如果其中一个运算对象是double类型,另一个运算对象的值被转换

28、为double类型的值如果以上条件不满足,并且其中一个运算对象是float类型,另一个运算对象的值被转换为float类型的值如果以上两个条件不满足,对两个运算对象进行整数提升,即char类型运算对象的值被转换为int类型的值char ch1, ch2;int i;float f1, f2;double d;表达式 ch1 + d表达式 f1 + f2表达式 i * ch1表达式 ch1 - ch2八、赋值运算符 赋值运算符(assignment operators)是双目运算符,分为两种:简单赋值运算符(simple assignment operator)复合赋值运算符(compound a

29、ssignment operators)1、简单赋值运算符 简单赋值运算符(在不至混淆的情况下又称赋值运算符)是 =,赋值表达式(assignment expression)有两个功能:求赋值表达式的值产生副作用 赋值表达式的值是赋值以后左运算对象的值 赋值表达式的类型是左运算对象的类型 副作用是将右运算对象的值转换为赋值表达式的类型的值,并将转换后的值存储到左运算对象中 注意:右运算对象的类型并没有改变double d;表达式 d = 9【例2.10】 求赋值表达式的值#include int main(void) int a, b; printf(%dn, a = b = 2 + 3);

30、printf(a = %dn, a); printf(b = %dn, b); return 0; 赋值运算符的左运算对象必须是可修改的左值(modifiable lvalue) 基本类型的变量属于可修改的左值 左值(lvalue)是一个表达式(具有除void以外的对象类型)。该表达式潜在地标明一个对象,即左值是可以标明一块内存的表达式 右值(rvalue)是表达式的值表达式 5 = 2 + 3 是错误的 在变量声明时给变量赋值,称为初始化(initialization)int i = 0;double d1 = 3.6, d2 = 7.2;int a = b = c = 100;/ 错误in

31、t a = 100, b = 100, c = 100;/ 正确 赋值运算符的两个运算对象的类型不同时发生的类型转换,可能会丢失数据int i;表达式 i = 3.6char ch;表达式 ch = a对于常用类型char、int、float和double,按下表进行的类型转换通常是可接受的左运算对象的类型右运算对象的类型doublefloat、int 或 charfloatint 或 charintchar 当左运算对象的类型为 int,右运算对象的类型为 float 或 double 时,截断取整#include int main(void) int i; printf(%dn, i =

32、3.6); printf(i = %dn, i); return 0;2、复合赋值运算符 简复合赋值运算符有10个,本节介绍其中的5个,分别是:*=/=%=+=-= 除了左值E1仅被计算一次,赋值表达式 E1 op= E2 等价于E1 = E1 op (E2), 其中,op是*、/、%、+ 或 - 中的任何一个r *= 2 + 3等价于r = r * (2 + 3)#include int main(void) int r; r = 3; printf(%dn, r *= 2 + 3); printf(r = %dn, r); return 0; 执行序列中某些特定的点被称为序点(sequen

33、ce point) 表达式A和表达式B之间有序点,意味着与表达式A相关的每一个值计算和副作用完成后,与表达式B相关的每一个值计算和副作用才开始 如果与表达式相关的副作用有多个,C语言并没有规定这多个副作用发生的先后次序,仅规定这多个副作用在序点之前完成int a = 12;a += a -= a * a;/ 不推荐使用九、后缀增1运算符与后缀减1运算符 后缀增1运算符(postfix increment operator)是 +,属于单目运算符,其运算对象必须是可修改的左值表达式 5+ 是错误的 由后缀增1运算符和运算对象构成的表达式有两个功能:求表达式的值产生副作用 求表达式的值在副作用之前

34、完成 表达式的值是运算对象的值;表达式的类型是运算对象的类型 副作用是使运算对象的值增1 后缀减1运算符(postfix decrement operator)是 -,除了副作用是使运算对象的值减1以外,后缀减1运算符与后缀增1运算符是类似的int a = 20, b = 10;printf(%dn, a+);printf(a = %dn, a);printf(%dn, b-);printf(b = %dn, b);十、前缀增1运算符与前缀减1运算符 前缀增1运算符(prefix increment operator)是 +,属于单目运算符,其运算对象必须是可修改的左值表达式 +5 是错误的

35、由前缀增1运算符和运算对象构成的表达式有两个功能:求表达式的值产生副作用 表达式的值是运算对象的值加1;表达式的类型是运算对象的类型 副作用是使运算对象的值增1 表达式 +E 等价于 E += 1 前缀减1运算符(prefix decrement operator)是 -,除了“表达式的值是运算对象的值减1”和“副作用是使运算对象的值减1”以外,前缀减1运算符与前缀增1运算符是类似的int a = 20, b = 10;printf(%dn, +a);printf(a = %dn, a);printf(%dn, -b);printf(b = %dn, b);int a = 3, b;b = +

36、a + 2;十一、类型转换运算符 类型转换运算符(cast operator)是 (type-name),属于单目运算符,表达式的值是将运算对象的值转换为 type-name 类型得到的值,表达式的类型是 type-name 注意:运算对象的类型并没有改变double d = 8.7;printf(%dn, (int)d % 3);printf(sizeof d = %dn, sizeof d);printf(d = %fn, d);十二、逗号运算符 逗号运算符(comma operator) “,”是双目运算符,表达式的值是右运算对象的值,表达式的类型是右运算对象的类型表达式 5 , 3.6

37、 逗号运算符的两个运算对象之间有序点int a = 3, b = 5, t;t = a;a = b;b = t;等价于int a = 3, b = 5, t;t = a , a = b , b = t; 逗号既是分隔符也是运算符printf(%d %d, 10, (20, 30);第三章 顺 序 结 构程序设计基础(C语言版)第3章:顺序结构3.1 结构化程序设计3.1.1 算法的基本概念程序对数据的处理流程: 程序的主要功能就是对数据的处理,其整个流程主要包括数据的输入、数据的处理、数据的输出。数据处理数据输入数据输出 程序 = 数据结构 + 算法。 算法:简而言之,就是解决问题的方法与步骤

38、。 程序设计语言:是程序开发工具,即是将算法转化为程序的开发工具。 程序:算法的具体实现。 学习C语言,不仅要熟练掌握其语言本身的特点、语法规则等意外,更重要的就是掌握分析问题、解决问题的方法,就是锻炼分析、分解,最终归纳整理出算法的能力。 3.1.1 算法的基本概念3.1.2 流程图 算法的结构化描述(1) 顺序结构ABCA条件ABTF(2) 分支结构条件TF(3) 循环结构ATF条件A条件TF3.2 语句 语言程序的执行部分是由语句组成的。程序的功能也是由执行语句实现的。C语言中的语句可以分为以下5类: 3.2.1 表达式语句 由表达式加上分号“;”组成。其一般形式为:表达式; a = 1

39、0 赋值表达式a = 10; 赋值语句k+ 表达式k+; 表达式语句 说明: (1) “”后不加分号 (2) 语法上和单一语句相同 (3) 复合语句可嵌套 (4) 复合语句内定义的变量只能在复合语句内使用。 3.2.2 复合语句 用 括起来的一组语句。 一般形式为: 数据说明部分; 执行语句部分; int a = 2, b = 3, c; c = a + b; printf (c = %dn, c); #include void main ( ) int x = 10, y = 20, z; z = x + y; int z; z = x * y; printf (z = %dn, z); /

40、输出复合语句中z的值 printf (z = %dn, z); /输出复合语句外z的值输出结果:z = 200z = 303.3 常用数据类型输出和输入3.3.1 数据输入/输出的概念库函数printf 用于向显示器输出数据;库函数scanf 用于从键盘输入数据。使用这两个库函数,必须包含头文件stdio.h。3.3.2 常用类型数据和字符串的输出 一般格式printf (格式控制字符串,表达式1,表达式2,表达式n); 功能 按照“格式控制字符串”的要求,将表达式1,表达式2,表达式n的值显示在计算机屏幕上。 说明 格式控制字符串用于指定输出格式。它包含两类字符: 常规字符:包括可显示字符和

41、用转义字符表示的字符。 格式控制符:以%开头的一个或多个字符,以说明输出数据的类型、形式、长度、小数位数等。其格式为:%修饰符格式转换字符例: long int x = 0 x8AB6; printf (“The Value of x is %ldn”, x); printf使用时的注意事项(1) 格式控制字符串可以不包含任何格式控制符。(2) 当格式控制字符串中既含有常规字符,又包含有格式控制符时,则表达式的个数应与格式控制符的个数一致。此时,常规字符原样输出,而格式控制符的位置上输出对应的表达式的值,其对应的顺序是:从左到右的格式控制符对应从左到右的表达式。(3) 如果格式控制字符串中格式

42、控制符的个数多于表达式的个数,则余下的格式控制符的值将是不确定的。(4) 不同类型的表达式要使用不同的格式转换符,同一表达式如果按照不同的格式转换符来输出,其结果可能是不一样的。 printf (“how are you?n”); /只有一个字符串参数, 输出为:how are you?printf (“how old are you?n”, 20); /带有两个参数,20没有意义, 输出为:how old are you?已 知: int a = 2;函数调用: printf(a * a = %d, a + 5 = %dn, a * a, a + 5);实际输出: a * a = 4, a

43、+ 5 = 7 printf (5 + 3 = %d, 5 - 3 = %d, 5 * 3 = %d, 5 + 3, 5 - 3); 输出结果将是:5 + 3 = 8,5 3 = 2,5 * 3 = -28710输出随机char ch = A;printf (ch = %c, ch); /输出结果:ch = A (以字符形式输出)printf (ch = %d, ch); /输出结果:ch = 65 (以A字符的ASCII码形式输出) printf函数中的格式转换字符及其含义 格式转换符含 义对应的表达式数据类型%d 或 %i以十进制形式输出一个整型数据。例如:int a = 20;print

44、f (%d, a); /输出20有符号整型%x,%X以十六进制形式输出一个无符号整型数据。例如:int a = 164;printf (%x, a); /输出a4printf (%X, a); /输出A4无符号整型%o ( 字母o )以八进制形式输出一个无符号整型数据。例如:int a = 164;printf (%o, a); /输出244无符号整型%u以十进制形式输出一个无符号整型数据。例如:int a = -1;printf (%u, a); /BC下输出65535,VC下4294967295无符号整型%c输出一个字符型数据。例如:char ch = A;printf (%c, ch);

45、 /输出A字符型 printf函数中的格式转换字符及其含义 格式转换符含 义对应的表达式数据类型%s输出一个字符串。例如:printf (my name is %s, wangjinghua); /输出my name is wangjinghua字符串%f以十进制小数形式输出一个浮点型数据。例如:float f = -12.3;printf (%f, f); /输出-12.300000浮点型%e,%E以指数形式输出一个浮点型数据。例如:float f = 1234.8998;printf (%e, f); /输出1.234900e+003printf (%E, f); /输出1.234900E

46、+003浮点型%g,%G按照%f或%e中输出宽度比较短的一种格式输出。浮点型%p以主机的格式显示指针,即变量的地址。例如:int a = 2;printf (“%p”, &a); /BC下输出FFD8, VC下 0012FF7C指针类型3.3.3 常用类型数据的输入 一般格式scanf (“格式控制字符串”,变量1的地址,变量2的地址,变量n的地址); 功能 第一个参数格式控制字符串的控制下,接受用户的键盘输入,并将输入的数据依此存放在变量1、变量2、变量n中 。 int a;scanf (%d, &a); 取地址运算符(与按位“与”同符号),只能作用于变量! 格式控制符与后续参数中的变量地址

47、的对应关系 已 知: int a , b;函数调用: scanf (%d%d, &a , &b);假设输入: 1020 变量的值: a的值是10,b的值是20【例】数据的格式化输入 输入一学生的学号(8位数字)、生日(年-月-日)、性别(M:男,F:女)及三门功课(语文、数学、英语)的成绩,现要求计算该学生的总分和平均分,并将该学生的全部信息输出(包括总分、平均分)。#include void main ( ) unsigned long no; /学号 unsigned int year, month, day; /生日(年、月、日) unsigned char sex; /性别 float

48、 chinese, math, english; /语文、数学、英语成绩 float total, average; /总分、平均分 printf (input the students NO: ); scanf (%8ld, &no); printf (input the students Birthday(yyyy-mm-dd): ); scanf (%4d-%2d-%2d, &year, &month, &day); fflush (stdin); /清除键盘缓冲区 printf (input the students Sex(M/F): ); scanf (%c, &sex); pri

49、ntf (input the students Scores(chinese, math, english): ); scanf (%f,%f,%f, &chinese, &math, &english); total = chinese + math + english; /计算总分 average = total / 3; /计算平均分 printf (n=NO=birthday=sex=chinese=math= english=total=averagen); printf (%08ld %4d-%02d-%02d %c %-5.1f %-5.1f %-5.1f %-5.1f %-5.

50、1fn, no, year, month, day, sex, chinese, math, english, total, average);假设输入 :input the students NO:20040101input the students Birthday(yyyy-mm-dd):1987-9-8input the students Sex(M/F):Minput the students Scores(chinese, math, english):90,80,90输出结果 :=NO=birthday=sex=chinese=math=english=total=average

51、20040101 1987-09-08 M 90.0 80.0 90.0 260.0 86.7 一般形式: :表示可选项,可缺省。 :表示输出的数据左对齐,缺省时是右对齐。 :输出正数时,在数的前面加上号。 数字0:右对齐时,如果实际宽度小于width,则在左边的空位补0。 width:无符号整数,表示输出整数的最小域宽(即占屏幕的多少格)。若实际宽度超过了width,则按照实际宽度输出。 .precision:无符号整数,表示至少要输出precision位。若整数的位数大于precision,则按照实际位数输出,否则在左边的空位上补0。 字母l:如果在d的前面有字母l(long),表示要输出

52、长整型数据。 字母h:如果在d的前面有字母h(short),表示要输出短整型数据。 说明:%- + 0 width .precision l h d辅助格式控制字符(修饰符) 3.4 库函数printf详解【例】整数的格式化输出 #include void main ( ) int a = 123; long L = 65537; printf ( 12345678901234567890n); printf (a=%d-(a=%d)n, a); printf (a=%6d-(a=%6d)n, a); printf (a=%+6d-(a=%+6d)n, a); printf (a=%-6d-(

53、a=%-6d)n, a); printf (a=%-06d-(a=%-06d)n, a); printf (a=%+06d-(a=%+06d)n, a); printf (a=%+6.6d-(a=%+6.6d)n, a); printf (a=%6.6d-(a=%6.6d)n, a); printf (a=%-6.5d-(a=%-6.5d)n, a); printf (a=%6.4d-(a=%6.4d)n, a); printf (L=%ld-(L=%ld)n, L); printf (L=%hd-(L=%hd)n, L); 12345678901234567890a=123-(a=%d)a=

54、 123-(a=%6d)a= +123-(a=%+6d)a=123 -(a=%-6d)a=123 -(a=%-06d)a=+00123-(a=%+06d)a=+000123-(a=%+6.6d)a=000123-(a=%6.6d)a=00123 -(a=%-6.5d)a= 0123-(a=%6.4d)L=65537-(L=%ld)L=1-(L=%hd)运行结果:L是一长整型数65537,其值为十六进制0X00010001,所以要将其转换成短整型,即取低16位0 x0001,将其输出,故输出为1。 Why?实数的输出 一般形式: :表示可选项,可缺省。 | :表示互斥关系。 #:必须输出小数点。

55、 .precision:规定输出实数时,小数部分的位数。 l:输出double型数据(缺省时也是输出double型数据)。 L:输出long double型数据。 其它字段的含义与前面介绍的相同。 说明:%- + # 0 width .precision l | L f | e | E | g | G辅助格式控制字符(修饰符) 【例】实数的格式化输出 #include void main ( ) double f = 2.5e5; printf ( 12345678901234567890n); printf (f=%15f-(f=%15f)n, f); printf (f=%015f-(f=

56、%015f)n, f); printf (f=%-15.0f-(f=%-15.0f)n, f); printf (f=%#15.0f-(f=%#15.0f)n, f); printf (f=%+15.4f-(f=%+15.4f)n, f); printf (f=%15.4E-(f=%15.4E)n, f); 12345678901234567890f= 250000.000000-(f=%15f)f=00250000.000000-(f=%015f)f=250000 -(f=%-15.0f)f= 250000.-(f=%#15.0f)f= +250000.0000-(f=%+15.4f)f=

57、2.5000E+005-(f=%#15.4E)运行结果:字符和字符串的输出 一般形式: :表示可选项,可缺省。 .precision:表示只输出字符串的前precision个字符。 其它字段的含义与前面介绍的相同。 说明: 输出字符: %- 0 width c 辅助格式控制字符(修饰符) 输出字符串: %- 0 width .precision s 辅助格式控制字符(修饰符) 【例】字符及字符串的格式化输出 #include void main ( ) char ch = A; printf ( 12345678901234567890n); printf (ch=%c-(ch=%c)n, c

58、h); printf (ch=%4c-(ch=%4c)n, ch); printf (ch=%-4c-(ch=%-4c)n, ch); printf (ch=%04c-(ch=%04c)n, ch); printf (st=%s-(st=%s)n, “WUSE); printf (st=%6s-(st=%6s)n, “WUSE); printf (st=%06.3s-(st=%06.3s)n, “WUSE); 12345678901234567890ch=A-(ch=%c)ch= A-(ch=%4c)ch=A -(ch=%-4c)ch=000A-(ch=%04c)st=WUSE-(st=%s)

59、st= WUSE-(st=%6s)st=000WUS-(st=%06.3s)运行结果:辅助格式控制符(修饰符)小结 修饰符功 能例 子width输出数据域宽,数据长度width,补空格;否则按实际输出%4d:表示输出至少占4格.precision对于整数:表示至少要输出precision位,当数据长度小于precision,左边补0%6.4d:表示至少要输出4位数对于实数:指定小数点后位数(四舍五入)%6.2f:表示输出2位小数对于字符串:表示只输出字符串的前precision个字符%.3s:表示输出字符串前3个字符输出数据在域内左对齐(缺省右对齐)%-16d:表示输出数据左对齐+输出有符号正

60、数时,在其前面显示正号(+)%+d:表示输出整数的正负号0输出数值时,指定左边不使用的空格自动填0%08X:表示输出十六进制无符号整数,不足8位时左补0辅助格式控制符(修饰符)小结 修饰符功 能例 子#对于无符号数:在八进制和十六进制数前显示前导0,0 x或0X%#X:表示输出的十六进制前显示前导0X对于实数:必须输出小数点%#10.0f:表示输出的浮点数必须输出小数点h在d、o、x、u前,指定输出为短整型数%hd:表示输出短整型数l在d、o、x、u前,指定输出为long int型%ld:表示输出长整型数在e、f、g前,指定输出精度为double型(缺省也为double)%lf:表示输出为do

温馨提示

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

评论

0/150

提交评论