教学课件:C语言程序设计(第2版)_第1页
教学课件:C语言程序设计(第2版)_第2页
教学课件:C语言程序设计(第2版)_第3页
教学课件:C语言程序设计(第2版)_第4页
教学课件:C语言程序设计(第2版)_第5页
已阅读5页,还剩596页未读 继续免费阅读

下载本文档

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

文档简介

1、第1章 为什么要学C语言本章学习内容C语言的传奇历史游戏、黑客、图灵奖C语言教给我们的事不同专业的不同需求计算思维什么是“编程”两个骨灰级游戏玩家Ken Thompson江湖人称 kenDennis M. Ritchie江湖人称 dmr他们干了什么?1969年,ken和dmr梦想能遨游宇宙ken设计了一款电子游戏“Space Travel”游戏在PDP-7小型机上开发,因为这台机器免费免费的机器没有操作系统玩游戏之前,先给PDP-7做个操作系统,命名为“UNIX”汇编编写UNIX太慢,又没有称手的高级语言,怎么办?dmr设计了一种新的高级语言,命名为“C语言”1983年,因为UNIX和C语言的

2、巨大成功, ken和dmr共同获得当年度的计算机界最高奖图灵奖Ken和dmr被尊为黑客的鼻祖他们未对UNIX和C语言申请任何版权或专利UNIX和C语言是黑客世界里的两大神器黑客精神做事情以兴趣为出发点,并不在乎未来会怎样极富钻研精神,喜欢迎接挑战乐于分享,不计回报今天的C语言编程语言受欢迎程度排行C语言“好”吗?C语言诡异离奇,缺陷重重,但却获得巨大成功 C语言的爱与恨爱信任程序员给程序员最大的发挥空间运行效率高恨无限制的自由如程序员不自我约束,代码将是灾难不安全不稳定不易于维护HIT-C Programming C程序设计语言是一种高级语言并不“高级”,只是相对低级语言在一个高的级别上进行编

3、程实际上是一种介于高级语言和低级语言之间的语言历史悠久,战勋卓著诞生于20世纪70年代初,成熟于80年代很多重量级软件都是用C语言写的上天入地,无所不能几乎没有不能用C语言实现的软件,没有不支持C语言的系统很多流行语言、新生语言都借鉴了它的思想、语法从C+,到Java,再到C#C语言适合做什么选语言的标准是,适合的才是最好的编写操作系统和基础工具对运行效率要求较高的系统设备驱动程序,高性能、实时中间件,嵌入式领域,并发程序设计等继承和维护已有的C代码交流、笔试、面试时最常见的语言如何学C语言注定与C语言为伴的人C语言易学,但不易真正掌握多练、多读优秀代码要编程,但不用C语言的人透过C语言窥探计

4、算机底层原理掌握最流行的语法形式了解基本的程序设计思维永远不编程的人通过C语言,更好地了解计算机,了解计算思维通过全国计算机等级考试二级所有人了解它,爱上它HIT-C Programming 程序开发步骤What is to be done?可执行文件扩展名为.exe的文件 需求分析(Analysis)设计(Design)编码(Write)编辑(Edit)编译(Compile)连接(Link)运行 (Run)调试(Debug)How is it to be done?扩展名为.c的文件(对C语言而言) 扩展名为.obj的文件 开发C程序的步骤1.设计算法2. 编写程序源代码把自己的意图写入源代

5、码3. 编辑源程序4. 编译和连接5. 调试程序 ,直到改正了所有的编译错误和运行错误6. 运行程序C程序的编译环境Visual C+Windows平台上最流行的C/C+集成开发环境之一Code:Blocks(简称CB,)是近年出现并获得关注的C/C+开发环境 CB的功能远远优于TC,也优于VC 6.0 CB只是一个IDE(集成开发环境),没有内置的编译器和调试器但可以支持多种编译器(不包括TC),例如GCC编译器和GDB调试器 Turbo C 2.0 (或WIN-TC)早已淘汰VC+ 6.0的初始界面HIT-C Programming 建立新文件保存文件编译运行在编译之前,VC先弹出对话框,

6、询问是否建立一个默认的项目工作区。VC必须有项目才能编译,所以这里必须选择“Yes”。系统在保存.c文件的目录里自动生成与C源文件同名的.dsw和.dsp等文件。以后可直接打开这些文件来修改程序,不必再重复上面的过程 CB的初始界面 认识 C语言从运行这个程序开始第一个程序范例打印“Hello World!”#include main()printf(Hello world!n);考考你:如何把Hello和world!分别打印在两行?Preprocessor instructionC has small instruction set,though the actual implementat

7、ions include extensive library functionsEvery C program must have a main functionThe execution of C program starts from main() function如何学好编程?多读 多写擅于利用身边的工具与环境Knowlegde, Practice, SkillQuestions and answers第2章 C数据类型哈尔滨工业大学计算机科学与技术学院苏小红sxh本章学习内容 常量和变量,整型和实型 标识符命名,变量的定义和赋值 计算数据类型占用内存空间的大小 2.1 常量与变量C语言

8、程序处理的数据形式常量(Constant)在程序中不能改变其值的量变量(Variable)其值在程序执行过程中是可以改变的一个简单的C程序例子 #include /*函数功能:计算两个整数相加之和 入口参数:整型数据a和b 返回值: 整型数a和b之和*/int Add(int a, int b)return (a + b);/*主函数*/main()int x, y, sum = 0;printf(Input two integers:);scanf(%d%d, &x, &y); /*输入两个整型数x和y*/sum = Add(x, y); /*调用函数Add计算x和y相加之和*/printf

9、(sum = %dn, sum); /*输出x和y相加之和*/ 并列的两个函数其中主函数是程序的入口程序注释编译预处理命令C程序常见符号分类 关键字(Keyword)又称保留字( C Reserved Word )A word that has special meaning in C标识符(Identifier)系统预定义标识符(C Standard Identifier)A word having special meaning but may be redefined (but is not recommended!)用户自定义标识符变量,函数名,C程序常见符号分类 运算符(Operat

10、or)详见附录C 分隔符(Separator) 空格、回车/换行、逗号等 其他符号 和标识函数体或语句块 /*和*/是程序注释的定界符 常量(Constant)在程序中不能改变其值的量包括:整型(如 0,67, -2, 123L, 123u, 022, 0 x12)默认为int实型(如 2.3, 1.2e-5, 2.73F, 2.73L)默认为double字符型(如 z, 3, $, n )用开头的字符为转义字符, 代表1个字符字符串(如 UKM, 1, 5a )枚举型2.1.1常量(Constant)长整型无符号整型八进制十六进制单精度实型长双精度实型十进制小数指数形式十进制2.1.2变量(

11、Variable )变量的值在程序执行过程中是可以改变的 变量的属性Name 变量名Type 变量类型Value 变量的值Address 变量的存储单元地址变量的声明 类型关键字 变量名;变量声明(Variable Declaration)使用变量的基本原则变量必须先声明,后使用所有变量必须在第一条可执行语句前声明声明的顺序无关紧要一条声明语句可声明若干个同类型的变量变量声明(Variable Declaration)声明变量是初始化变量的最好时机不被初始化的变量,其值为随机数结果会是什么?运算规则: 变量 表达式 语法: 变量 = 表达式 ;规则: 左值和右值类型一致Valid Exampl

12、e:Invalid Example:int x; int y;x = 12;y = 5.75;变量赋值(Variable Assignment)2.3数据类型(Data Type)为什么要区分类型?变量的类型决定了数据的存储形式合法的取值范围占用内存空间的大小可参与的运算种类 数据类型(Data Type)数据类型基本类型构造类型指针类型无类型整型实型(浮点型)字符型枚举类型数组类型结构体类型共用体类型单精度实型双精度实型基本整型长整型短整型无符号整型长双精度实型基本数据类型int整数,在目前绝大多数机器上占4个字节TC 2.0,2个字节float单精度浮点数,4个字节double双精度浮点数

13、,8个字节char字符,1个字节表示256个ASCII字符,或0255的整数数据类型修饰符shortshort int,简写为short,短整数,2个字节longlong int,简写为long,长整数,4个字节long double,长双精度(高精度)浮点数,10个字节unsigned用来修饰char、int、short和long无符号整数(正整数和0)不同类型取值范围不同C语言直接提供的任何类型都有取值范围不同类型取值范围不同Most significant bit (MSB) is sign(最高位为符号位)2.4如何计算变量或数据类型所占内存空间的大小1 TB = 1 024 GB1

14、GB = 1 024 MB1 MB = 1 024 KB1 KB = 1 024 B1 B = 8 b英文称谓中文称谓换算方法bit(b)位(比特)Byte(B)字节1 B = 8 bKilobyte(KB)千字节1 KB = 1 024 BMegabyte(MB)兆字节1 MB = 1 024 KBGigabyte(GB)吉字节1 GB = 1 024 MBTerabyte(TB)太字节1 TB = 1 024 GB一个位有多大?只能是0或者1,二进制一个字节有多大?可以表示0255之间的整数2.4如何计算变量或数据类型所占内存空间的大小不同类型占用的内存字节数不同同种类型在不同的平台其占字

15、节数不尽相同如int在16位、32位和64位系统上分别占2、4和8个字节不要对变量所占的内存空间字节数想当然用sizeof获得变量或者数据类型的长度现象与危害在平台间移植时会出现问题,导致数据丢失或者溢出注意!sizeof到底是什么?C语言的关键字,并非函数计算类型占用的字节数两种语法形式 sizeof(类型)结果为类型占用的字节数 sizeof(表达式)结果为表达式值所属类型占用的字节数 一般都使用sizeof(变量名) 现场演示例2.2在TC和VC、CB下的运行结果#include main()printf(Data type Number of bytesn);printf(- -n);

16、printf(char %dn, sizeof(char);printf(int %dn, sizeof(int);printf(short int %dn, sizeof(short);printf(long int %dn, sizeof(long);printf(float %dn, sizeof(float);printf(double %dn, sizeof(double);2.5变量的赋值和赋值运算符简单赋值(Simple Assignment)语法: 变量 = 表达式 ;Dont forget the semicolon !Every assignment expression

17、has a value语法: 变量1 = 变量2 = 表达式 ;多重赋值Multiple AssignmentDont forget the semicolon !右结合:从右向左赋值 变量1 = (变量2 = 表达式) ;Example:int a, b;float x, y;. . . a = b = 0;x = y = 100.0;b?a? x? y?00100.0100.0多重赋值Multiple AssignmentQuestions and answers第3章 简单的算术运算和表达式哈尔滨工业大学计算机科学与技术学院苏小红sxh本章学习内容 算术运算符 增1和减1运算符 宏常量与

18、 const常量 表达式与赋值中的自动类型转换 强制类型转换运算符 常用的标准数学函数运算符( Operator )详见附录C常见的运算符算术运算符赋值运算符强制类型转换关系运算符逻辑运算符增和减位运算符3.1C运算符和表达式(Operator and Expression)Example:W + Z操作数(Operand)运算符(Operator)操作数(Operand)何谓运算符和操作数?3.1.1算术运算符和表达式Addition (+)Subtraction (-)Multiplication (*)Division (/)Modulus (%)Arithmetic Operators

19、除法(Division)Example:W / Z浮点数除法(Floating Division)W or Z or both are floats整数除法(Integer Division)W and Z are integersExample:an integeran integer the result is also an integer整数除法(Integer Division)11 / 5 = 2Example:实数除法(Floating Division)11.0 / 5 = 2.2a floatan integerthe result is a float求余(Modulus)

20、It returns the remainder that occurs after performing the division of 2 operandsRule: Operands must be integers注意!Example:11 % 5 = 1an integeran integerthe result is the remainder of 11/51152101remainderresult求余(Modulus)Example:-11 % 5 = -1an integeran integer-115-2-10-1remainderresultthe result is

21、the remainder of -11/5求余(Modulus)Example:11 % -5 = 1an integeran integer11-5-210 1remainderresultthe result is the remainder of 11/-5求余(Modulus)Example:11.0 % 5 = ?a floatan integerINVALID! 求余(Modulus)注意!当算术表达式包含两个或两个以上的算术运算符时 首先要确定运算顺序 所有的运算符都有一个优先级( Order of Precedence ) 算术表达式(Arithmetic Expressio

22、n) 优先级(Order of Precedence) High:* / %Low: + -不同优先级时的运算顺序:从高到低相同优先级时的运算顺序:算术运算符为左结合(从左到右)算术表达式(Arithmetic Expression)Example:?48.52.5 + 6 44.52.5 + 6 2 * 2 = 算术表达式(Arithmetic Expression)4.5巧妙使用圆括号改变运算顺序从内往外运算Example:( 9 ( 3 + 2 ) ) * 3 = ?算术表达式(Arithmetic Expression)Example: ( 9 ( 3 + 2 ) ) * 3 = ?

23、5412 ( 9 ( 3 + 2 ) ) * 3 = 12算术表达式(Arithmetic Expression)赋值语句(Assignment Statement)三种赋值形式:Simple简单赋值Multiple多重赋值Shorthand简写的复合赋值算术混合运算 【例3.1】计算并输出一个三位整数的个位、十位和百位数字之和 关键是如何分离个位、十位和百位数字?153 % 10 = 3153 / 100 = 1153 1*100 = 53 53 / 10 = 5【例3.1】计算并输出一个三位整数的个位、十位和百位数字之和 #include main() int x = 153, b0, b

24、1, b2, sum; b2 = x / 100; b1 = (x - b2 * 100) / 10; b0 = x % 10; sum = b2 + b1 + b0; printf(b2=%d, b1=%d, b0=%d, sum=%dn, b2, b1, b0, sum);变量的赋值简单赋值(Simple Assignment): 变量 = 表达式 ;多重赋值(Multiple Assignment): 变量1 = 变量2 = 表达式 ;Syntax: 变量x = 变量x 运算符op 表达式 ; 变量x 运算符op = 表达式; 3.1.2复合的赋值运算符(Combined Assignm

25、ent Operators)这种形式看起来更直观,且执行效率一般也更高一些Example:num = num + 5;num1515 + 52020Example:num += 5;similar to num = num + 5shorthand assignment operator3.1.2复合的赋值运算符(Combined Assignment Operators)已知 int a = 3;执行 a += a -= a * a 后,变量a的值? a += a -= a * a a += a -= 9 a += -6 a = -123-6-12执行 a += a -= a *= a 后,

26、变量a的值? a += a -= a *= a a += a -= 9 a += 0 a = 03900OperationExamples of expressionDescription+=num += 5;num = num + 5;-=num -= 5;num = num 5;*=num *= 5;num = num * 5;/=num /= 5;num = num / 5;%=num %= 5;num = num % 5;简写的复合赋值(Shorthand Assignment)3.1.2复合的赋值运算符(Combined Assignment Operators)3.1.3增1和减1

27、运算符(Increment and Decrement)n+,n-,+n,-n+让参与运算的变量加1,-让参与运算的变量减1作为后缀(postfix)运算符时,先取n的值,然后加/减1m = n+;m = n;n+;3.1.3增1和减1运算符(Increment and Decrement)n+,n-,+n,-n+让参与运算的变量加1,-让参与运算的变量减1作为后缀(postfix)运算符时,先取n的值,然后加/减1作为前缀(prefix)运算符时,先加/减1,然后取n的值m = +n;n+; m = n;Example:j = +i - 2i5similar to i = i + 1;j =

28、 i 2;j?46前缀( Prefix )增1和减1运算符Example:j = i+ - 2i5similar to j = i 2;i = i + 1;后缀(Postfix)增1和减1运算符j?36int a=3;printf(%d, -a+);a3similar to printf(%d, -a);a = a + 1;后缀(Postfix)增1和减1运算符4良好的程序设计风格提倡:在一行语句中,一个变量只能出现一次增1或者减1运算过多的增1和减1运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不同的运行结果3.1.3增1和减1运算符(Increment and D

29、ecrement)【例3.2】计算圆的周长和面积 circumference = 33.300854area = 88.247263#include main() double r = 5.3; printf(circumference = %fn, 2*3.14159*r); printf(area = %fn, 3.14159*r*r);#include main() double r; printf(Input r:); scanf(%lf, &r); printf(circumference = %fn, 2*3.14159*r); printf(area = %fn, 3.14159

30、*r*r); 【例3.3】计算圆的周长和面积 Input r: 5.3circumference = 33.300854 area = 88.247263在程序中直接使用的常数称为幻数(Magic Number) 使用幻数存在的问题?直接使用常数会有什么影响?程序的可读性变差容易发生书写错误当常数需要改变时,要修改所有引用它的代码,工作量大,还可能有遗漏解决方案:避免使用幻数把幻数定义为常量(宏常量、const常量)3.2宏常量与宏替换 #define 标识符 字符串宏常量(Macro Constant )也称符号常量一般采用全大写字母表示 宏定义不是语句,而是一种编译预处理命令#includ

31、e main() double r; printf(Input r:); scanf(%lf, &r); printf(circumference = %fn, 2*PI*r); printf(area = %fn, PI*r*r);【例3.4】计算圆的周长和面积 宏替换#include #define PI 3.14159;#define R 5.3;main()printf(area = %fn, PI * R * R);printf(circumference = %fn, 2 * PI * R);相当于执行#include main()printf(area = %fn, 3.1415

32、9;*5.3;*5.3;);printf(circumference = %fn, 2*3.14159;*5.3;);语法错误计算圆的周长和面积 #include main() const double PI = 3.14159; double r; printf(Input r:); scanf(%lf, &r); printf(circumference = %fn, 2*PI*r); printf(area = %fn, PI*r*r);const常量与宏常量相比的优点是什么?const常量有数据类型某些集成化调试工具可以对const常量进行调试3.3 const常量【例3.5】表达式与

33、赋值中的自动类型转换相同类型数据的运算结果,还是该类型不同类型数据的运算结果,是两种类型中取值范围大的那种long double double float long int short chardoublefloatlongunsignedintchar,short低高表达式与赋值中的自动类型转换取值范围小的类型赋值给取值范围大的类型是安全的反之是不安全的若大类型的值在小类型能容纳的范围之内,则平安无事。但是浮点数转为整数,会丢失小数部分,而非四舍五入反之转换后的结果必然是错误的,具体结果与机器和实现方式有关避免如此使用,好的编译器会发出警告注意!表达式与赋值中的自动类型转换【例 3.6】下面

34、程序演示了赋值中的类型转换Example: int x = 10;float y;y = (float)x; (float)10 10.000000 x10y?10.0000003.4自动类型转换与强制类型转换运算符强转(Casting)可以消除从大到小的警告通过下面方式把表达式的值转为任意类型(类型)表达式不改变xExample: int total, number;float average;average = total / number; 15 / 2 7total15number2average?7.000000两个整数运算的结果还是整数,不是浮点数3.4自动类型转换与强制类型转换运

35、算符Example: int total, number;float average;average = (float)total / number; 15.000000 / 2 7.500000total15number2average?7.5000003.4自动类型转换与强制类型转换运算符【例3.7】演示强制类型转换运算符的使用m/2 = 2(float)(m/2) = 2.000000(float)m/2 = 2.500000m = 53.5 常用的标准数学函数 【例3.8】计算三角形面积 area = sqrt(s * (s - a) * (s - b) * (s - c)area =

36、 sqrt(s(s-a)(s-b)(s-c)s = 0.5 * (a + b + c)s = 1.0/2 * (a + b + c)s = (a + b + c) / 2.0s = (float)(a + b + c) / 2s = 1/2 * (a + b + c)s = (float)(a + b + c) / 2) 注意!【例3.8】计算三角形面积 Input a,b,c:3,4,5area = 6.000000Questions and answers第4章 键盘输入和屏幕输出哈尔滨工业大学计算机科学与技术学院苏小红sxh本章学习内容 字符常量与转义字符 字符输出函数putchar()

37、 字符输入函数getchar() 数据的格式化输出函数printf() 数据的格式化输入函数scanf() 字符常量字符常量是用单引号括起来的一个字符a是字符常量,而a则是一个标识符3表示一个字符常量,而3则表示一个整数 转义字符(Escape Character)一些特殊字符(无法从键盘输入或者另有他用)用转义字符表示字符型变量的取值范围取决于计算机系统所使用的字符集ASCII(美国标准信息交换码)字符集规定了每个字符所对应的编码 一个字符以其对应的ASCII码的二进制形式存储在内存中一个字节,保存一个字符(英文字母、数字、符号)字符常数就是一个普通整数,也可参与各种数学运算每个字符具有一个

38、0255之间的数值,可从ASCII表查出注意:5和整数5的区别5的ASCII码值是53字符常量4.1单个字符的输入/输出通过调用标准库函数来实现 #include 字符输出函数putchar(ch)输出一个字符ch字符输入函数getchar()无参数函数值为从输入设备接收的字符【例4.1】大小写英文字母转换Press a key and then press Enter: Bb ch = ch - (a A); What does this statement mean?4.2数据的格式化屏幕输出格式printf(格式控制字符串, 输出项列表);printf(a=%d b=%f, a, b);

39、可以输出若干任意类型的数据 函数名可选输出列表普通字符格式说明%c character以字符形式输出单个字符%s string 输出一个字符串%d decimal 以带符号十进制整数输出%f float 以小数形式输出浮点数(6位小数)%e exponent 以标准指数形式输出(6位小数)%g 选用%f,%e中输出宽度较小的一种格式%o octal 以八进制无符号整数输出(无前导0)%x hex 以十六进制无符号整数输出(无前导0 x)%u unsigned 以十进制无符号整数输出printf()格式字符【例4.2】大小写英文字母转换Press a key and then press Ent

40、er: Bb, 98m 表示数据占用的最小宽度 数据宽度大于m,按实际宽度输出 数据宽度小于m时,补空格n 对实数表示输出n位小数 对字符串表示最多输出的字符个数l 长整型整数,加在d、o、x、u前L long double型数,加在f、e、g前- 改变输出内容的对齐方式 默认为右对齐printf()的格式修饰符printf()的格式修饰符Format for float: %f General format:% . fExample:printf(Value is:%10.4f, 32.6784728); Value is: 32.6785 10 characters4 digitsprin

41、tf()的格式修饰符Example:printf(Value is:%10f, 32.6784728); Value is: 32.67847310 characters6 digits (default)Example:printf(Value is:%.3f, 32.6784728); Value is:32.678 3 digitsprintf()的格式修饰符Input r: 5.3printf WITHOUT width or precision specifications:circumference = 33.300854, area = 88.247263printf WITH

42、width and precision specifications:circumference = 33.30, area = 88.25【例4.3】计算圆的周长和面积 #include main() const double pi = 3.14159; double r, circum, area; printf(Input r:); scanf(%lf, &r); circum = 2 * pi * r; area = pi * r * r; printf(printf WITHOUT width or precision specifications:n); printf(circum

43、ference = %f, area = %fn, circum, area); printf(printf WITH width and precision specifications:n); printf(circumference = %7.2f, area = %7.2fn, circum, area);4.3数据的格式化键盘输入格式scanf(格式控制字符串, 地址列表); scanf(%d,%f, &a, &b);格式字符指定输入数据格式输入数据地址列表非格式字符输入数据以,分隔没有时可以空格、Tab或回车分隔c 以字符形式输入单个字符s 输入字符串,以非空字符开始,遇第一个 空

44、白字符结束d 以带符号十进制形式输入整型数据f 以小数形式输入浮点数e 以标准指数形式输入o 以八进制无符号形式输入(无前导0)x 以十六进制无符号形式输入(无前导0 x)scanf()的格式字符m 表示数据占用的宽度l 加在d、o、x、u前:输入长整型 加在f、e 前:输入双精度型L 加在f、e 前:输入long double型h 加在d、o、x 前:输入短整型* 本输入项在读入后不赋给相应的变量scanf ()的格式修饰符#include main() int a, b; printf(Please input a and b:); scanf(%2d%*2d%2d, &a, &b); p

45、rintf(a=%d, b=%d, a+b=%dn,a,b,a+b);Please input a and b:a=12, b=56, a+b = 68123456跳过一个输入项输入数据的格式控制#include main() int a, b;scanf(%d %d, &a, &b);printf(a = %d, b = %dn, a, b);问题1:当要求程序输出结果为 a = 12, b = 34时,用户应该如何输入数据? 12 34输入数据的格式控制例4.4#include main() int a, b;scanf(%d %d, &a, &b);printf(a = %d, b =

46、%dn, a, b);问题2:当限定用户输入数据以逗号为分隔符,即输入数据格式为: 12,34时,应修改程序中的哪条语句?怎样修改? , 输入数据的格式控制例4.4#include main() int a, b;scanf(%d %d, &a, &b);printf(a = %d, b = %dn, a, b);问题3:语句scanf(%d %d, &a, &b);修改为scanf(a = %d, b = %d, &a, &b);时,用户应该如何输入数据?a = 12, b = 34输入数据的格式控制例4.4#include main() int a, b;scanf(%d %d, &a,

47、&b);printf(a = %d, b = %dn, a, b); 问题4:限定用户输入数据为以下格式 1234 同时要求程序输出结果为a = 12, b = 34%2d%2d 输入数据的格式控制例4.4#include main() int a, b;scanf(%d %d, &a, &b);printf(a = %d , b = %d n, a, b); 问题5:限定用户输入数据为以下格式1234 同时要求程序输出结果为a = 12 ,b = 34%d ,b = %d输入数据的格式控制例4.4#include main() int a, b;scanf(%d %d, &a, &b);pr

48、intf(a = %d, b = %dn, a, b);问题6:设计程序使得用户可以以任意字符(回车、空格、制表符、逗号、其他字符)作为分隔符进行数据的输入输入数据的格式控制例4.4%*c#include main() int a, b;scanf(%d %d, &a, &b);printf(a = %d, b = %dn, a, b);问题7:输入123456时程序的输出结果是什么?输入数据的格式控制例4.4%*2da = 12, b = 56#include main() int a, b;scanf(%d %d, &a, &b);printf(a = %d, b = %dn, a, b)

49、;问题8:如果用户输入了非法字符,例如输入了12 3a,那么程序运行结果如何?输入数据的格式控制例4.412 3a a = 12, b = 3#include main() int a, b;scanf(%d %d, &a, &b);printf(a = %d, b = %dn, a, b);问题9:如果用户输入的是123a,那么结果又会如何呢?输入数据的格式控制例4.4123a a = 123, b = -858993460#include main() int a, b;scanf(%d %d, &a, &b);printf(a = %d, b = %dn, a, b);问题10:如果修改

50、程序第5行语句,那么结果又会如何呢?输入数据的格式控制例4.4 a, b#include main()int data1, data2, sum;char op; printf(Please enter the expression data1 + data2n);scanf(%d%c%d,&data1, &op, &data2);printf(%d%c%d = %dn, data1, op, data2, data1+data2);Please enter the expression data1 + data2 第1次测试12 + 312 4199288 = 4199300 C格式符的问题

51、及解决例4.5#include main()int data1, data2, sum;char op; printf(Please enter the expression data1 + data2n);scanf(%d%c%d,&data1, &op, &data2);printf(%d%c%d = %dn, data1, op, data2, data1+data2);Please enter the expression data1 + data2 第2次测试12 312 3 = 15 C格式符的问题及解决例4.5#include main()int data1, data2, su

52、m;char op; printf(Please enter the expression data1 + data2n);scanf(%d%c%d,&data1, &op, &data2);printf(%d%c%d = %dn, data1, op, data2, data1+data2);Please enter the expression data1 + data2 第3次测试12+312+3 = 15 C格式符的问题及解决例4.5#include main() int a; char b; float c; printf(Please input an integer:); sca

53、nf(%d, &a); printf(integer: %dn, a); printf(Please input a character:); scanf(%c, &b); printf(character: %cn, b); printf(Please input a float number:); scanf(%f, &c); printf(float: %fn, c);Please input an integer:希望得到的运行结果12Please input an character :aPlease input a float number:3.5integer:12charact

54、er :afloat number:3.500000C格式符的问题及解决例4.6#include main() int a; char b; float c; printf(Please input an integer:); scanf(%d, &a); printf(integer: %dn, a); printf(Please input a character:); scanf(%c, &b); printf(character: %cn, b); printf(Please input a float number:); scanf(%f, &c); printf(float: %f

55、n, c);Please input an integer:结果好像很奇怪呀!12Please input an character :aPlease input a float number:3.5integer:12float number:3.500000C格式符的问题及解决例4.6#include main() int a; char b; float c; printf(Please input an integer:); scanf(%d, &a); printf(integer: %dn, a); printf(Please input a character:); getcha

56、r(); /*将存于缓冲区中的回车字符读入,避免被后面的变量作为有效字符读入*/ scanf(%c, &b); printf(character: %cn, b); printf(Please input a float number:); scanf(%f, &c); printf(float: %fn, c);Please input an integer:程序修改后得到的运行结果12Please input an character :aPlease input a float number:3.5integer:12character :afloat number:3.500000C格

57、式符的问题及解决例4.6#include main() int a; char b; float c; printf(Please input an integer:); scanf(%d, &a); printf(integer: %dn, a); printf(Please input a character:); scanf(“ %c”, &b); /*第2种解决方案:在%c前加一个空格*/ printf(character: %cn, b); printf(Please input a float number:); scanf(%f, &c); printf(float: %fn,

58、c);C格式符的问题及解决例4.6#include main()int data1, data2, sum;char op; printf(Please enter the expression data1 + data2n);scanf(%d %c%d,&data1, &op, &data2);printf(%d%c%d = %dn, data1, op, data2, data1+data2);12+312 + 312+3再回头来看例4.5 如何以任意分隔符输入加法算式?格式输入函数常见错误scanf(%d,%fn,&a,&b);scanf(%d,%f,a,b);scanf(%7.2f,&

59、a);几点忠告不要拘泥于细节不要死记硬背在使用中慢慢掌握注意!Questions and answers第5章 选择控制结构哈尔滨工业大学计算机科学与技术学院苏小红sxh本章学习内容 算法的描述方法 用于单分支控制的if语句 用于双分支控制的if-else语句 用于多路选择的switch语句 break语句在switch语句中的作用 关系运算符 条件运算符 逻辑运算符 程序测试生活中的问题求解:Problem: 烤蛋糕(Baking a Cake)How to solve: Start 将烤箱预热 准备一个盘子 在盘子上抹上一些黄油 将面粉、鸡蛋、糖和香精混合在一起搅拌均匀 将搅拌好的面粉团放

60、在盘子上 将盘子放到烤箱内 End5.1生活中与计算机中的问题求解 (Problem Solving Process)分治策略(Divide and Conquer Strategy )Problem: 准备早餐( Prepare a Breakfast)1.Start2.准备早餐3.End1. Start2. 准备早餐 2.1 准备一个金枪鱼三明治 2.2 准备一些薯条 2.3 冲一杯咖啡3. End分治策略(Divide and Conquer Strategy )1. Start2.准备早餐 2.1 准备一个金枪鱼三明治 2.1.1 拿来两片面包 2.1.2 准备一些金枪鱼酱 2.2 准

温馨提示

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

评论

0/150

提交评论