1、要编写要编写C程序,需要两个方面的知识:程序,需要两个方面的知识:u一是根据所解问题的要求,设计出解题的一是根据所解问题的要求,设计出解题的具体步骤,这一步骤称为具体步骤,这一步骤称为设计算法设计算法u二是用二是用C语言语言写出程序写出程序,以便计算机能正,以便计算机能正确地执行确地执行第第3章章最简单的程序设计最简单的程序设计顺序程序设计顺序程序设计 3.1 算法是程序的灵魂算法是程序的灵魂3.2 程序的三种基本结构程序的三种基本结构3.3 语句综述语句综述3.4 赋值表达式和赋值语句赋值表达式和赋值语句3.5 数据输入输出的概念数据输入输出的概念3.6 字符数据的输入输出字符数据的输入输出
2、3.7 简单的格式输入与输出简单的格式输入与输出3.8 顺序结构程序设计举例顺序结构程序设计举例3.9 提高部分提高部分3.13.1算法是程序的灵魂算法是程序的灵魂算法是程序的灵魂算法是程序的灵魂3.1.1 算法的概念算法的概念3.1.2 怎样表示算法怎样表示算法P483.1.13.1.1算法的概念算法的概念算法的概念算法的概念一个程序包括以下两个方面的内容:一个程序包括以下两个方面的内容:u对数据的描述。在程序中要指定数据的类型对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构和数据的组织形式,即数据结构u对操作的描述。即操作步骤对操作的描述。即操作步骤,也就是算法也就是算法
3、P48数据是操作的对象数据是操作的对象操作的目的是对数据进行加工处理,以得操作的目的是对数据进行加工处理,以得到期望的结果到期望的结果著名计算机科学家沃思著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:提出一个公式:算法算法+数据结构数据结构=程序程序3.1.13.1.1算法的概念算法的概念算法的概念算法的概念P48一个程序除了一个程序除了算法和数据结构这算法和数据结构这主要要素主要要素外,还应当采用结构化程序设计方法进行外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示程序设计,并且用某一种计算机语言表示算法算法、数据结构数据结构、程序设计方法程序设
4、计方法和和语言工语言工具具是一个程序设计人员应具备的知识是一个程序设计人员应具备的知识3.1.13.1.1算法的概念算法的概念算法的概念算法的概念P48算法是解决算法是解决“做什么做什么”和和“怎么做怎么做”的问的问题题程序中的操作语句,是算法的体现程序中的操作语句,是算法的体现不了解算法就谈不上程序设计不了解算法就谈不上程序设计3.1.13.1.1算法的概念算法的概念算法的概念算法的概念P483.1.23.1.2怎样表示算法怎样表示算法怎样表示算法怎样表示算法用自然语言表示算法用自然语言表示算法用流程图表示算法用流程图表示算法用用N-S流程图表示算法流程图表示算法用伪代码表示算法用伪代码表示
5、算法P50用自然语言表示算法用自然语言表示算法用自然语言表示算法用自然语言表示算法自然语言就是人们日常使用的语言,可以自然语言就是人们日常使用的语言,可以是汉语、英语,或其他语言是汉语、英语,或其他语言用自然语言表示通俗易懂,但文字冗长,用自然语言表示通俗易懂,但文字冗长,容易出现歧义性容易出现歧义性用自然语言描述包含分支和循环的算法,用自然语言描述包含分支和循环的算法,不很方便不很方便除了很简单的问题外,一般不用自然语言除了很简单的问题外,一般不用自然语言用流程图表示算法用流程图表示算法用流程图表示算法用流程图表示算法流程图流程图是用一些图框来表示各种操作是用一些图框来表示各种操作用图形表示
6、算法,直观形象,易于理解用图形表示算法,直观形象,易于理解起止框起止框输入输出框输入输出框处理框处理框判断框判断框流程线流程线连接点连接点注释框注释框m被被2整除整除是是否否开始开始判断一个数是否偶数的算法判断一个数是否偶数的算法输入输入m的值的值输出输出m是偶数是偶数输出输出m不是偶数不是偶数结束结束输出输出110的算法的算法结束结束n1开始开始n 10输出输出n的值的值nn+1是是否否用用用用N-SN-S流程图表示算法流程图表示算法流程图表示算法流程图表示算法N-S流程图用以下的流程图符号流程图用以下的流程图符号:ABAB成立成立不成立不成立pA当当p1成立成立顺序结构顺序结构选择结构选择
7、结构循环结构循环结构判断一个数是否偶数的算法判断一个数是否偶数的算法输出输出m是偶数是偶数输出输出m不是偶数不是偶数是是否否m能被能被2整除整除输入输入m输出输出1100的算法的算法输出输出n的值的值n的值的值 10n=1n=n+1用伪代码表示算法用伪代码表示算法用伪代码表示算法用伪代码表示算法伪代码是用介于自然语言和计算机语言之伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法间的文字和符号来描述算法用伪代码写算法并无固定的、严格的语法用伪代码写算法并无固定的、严格的语法规则,可以用英文,也可以中英文混用规则,可以用英文,也可以中英文混用用伪代码表示算法用伪代码表示算法用伪代码表示
8、算法用伪代码表示算法“输出输出x的绝对值的绝对值”的算法的算法if x is positive then print xelse print-x若若x为正为正 输出输出x否则否则 输出输出-xif x为正为正 print xelse print-x3.23.2程序的三种基本结构程序的三种基本结构程序的三种基本结构程序的三种基本结构顺序结构顺序结构。各操作步骤是顺序执行的。各操作步骤是顺序执行的顺序结构是最简单的一种基本结构顺序结构是最简单的一种基本结构P53AB3.23.2程序的三种基本结构程序的三种基本结构程序的三种基本结构程序的三种基本结构选择结构选择结构又称判断结构或分支结构又称判断结构
9、或分支结构根据是否满足给定的条件而从两组操根据是否满足给定的条件而从两组操作中选择一种操作作中选择一种操作P53AB成立成立p不成立不成立A成立成立p不成立不成立3.23.2程序的三种基本结构程序的三种基本结构程序的三种基本结构程序的三种基本结构循环结构循环结构。它又称重复结构。它又称重复结构在一定条件下反复执行某一部分的操作在一定条件下反复执行某一部分的操作P53A成立成立p1不成立不成立A成立成立p2不成立不成立3.23.2程序的三种基本结构程序的三种基本结构程序的三种基本结构程序的三种基本结构一个良好的程序,无论多么复杂,都可一个良好的程序,无论多么复杂,都可以由这以由这3种基本结构组成
10、种基本结构组成用这三种基本结构构成的程序称为用这三种基本结构构成的程序称为“结结构化程序构化程序”P533.33.3语句综述语句综述语句综述语句综述P54C程序程序源程序文件源程序文件1源程序文件源程序文件2源程序文件源程序文件n预处理命令预处理命令数据声明数据声明函数函数1函数函数n函数首部函数首部函数体函数体数据声明数据声明执行语句执行语句3.33.3语句综述语句综述语句综述语句综述P54语句分为以下语句分为以下5类:类:(1)控制语句:控制语句:if、switch、for、while、dowhile、continue、break、return、goto等等(2)函数调用语句函数调用语句(
11、3)表达式语句表达式语句(4)空语句空语句(5)复合语句复合语句3.43.4赋值表达式和赋值语句赋值表达式和赋值语句赋值表达式和赋值语句赋值表达式和赋值语句3.4.1 赋值表达式赋值表达式3.4.2 赋值过程中的类型转换赋值过程中的类型转换3.4.3 赋值语句赋值语句3.4.4 变量赋初值变量赋初值P563.4.13.4.1赋值表达式赋值表达式赋值表达式赋值表达式赋值运算符赋值运算符u“”是赋值运算符是赋值运算符u作用是将一个数据赋给一个变量作用是将一个数据赋给一个变量u也可以将一个表达式的值赋给一个变量也可以将一个表达式的值赋给一个变量P563.4.13.4.1赋值表达式赋值表达式赋值表达式
12、赋值表达式复合的赋值运算符复合的赋值运算符u在赋值符在赋值符“”之前加上其他运算符,可以之前加上其他运算符,可以构成复合的运算符构成复合的运算符u 等价于等价于 P563.4.13.4.1赋值表达式赋值表达式赋值表达式赋值表达式赋值表达式赋值表达式u一般形式为:一般形式为:变量变量 赋值运算符赋值运算符 表达式表达式u对赋值表达式求解的过程:对赋值表达式求解的过程:l求赋值运算符右侧的求赋值运算符右侧的“表达式表达式”的值的值l赋给赋值运算符左侧的变量赋给赋值运算符左侧的变量P563.4.13.4.1赋值表达式赋值表达式赋值表达式赋值表达式赋值表达式赋值表达式u赋值表达式赋值表达式“a=3*5
13、”的值为的值为15,对表达式,对表达式求解后,变量求解后,变量a的值和表达式的值都是的值和表达式的值都是15u“a=(b=5)”和和“a=b=5”等价等价u“a=b”和和“b=a”含义不同含义不同P563.4.23.4.2赋值过程中的类型转换赋值过程中的类型转换赋值过程中的类型转换赋值过程中的类型转换两侧类型一致时,直接赋值两侧类型一致时,直接赋值两侧类型不一致,但都是两侧类型不一致,但都是数值型或字符数值型或字符型型,自动将右侧的类型转换为左侧类型,自动将右侧的类型转换为左侧类型后赋值后赋值定义变量时要防止数据溢出定义变量时要防止数据溢出P593.4.33.4.3赋值语句赋值语句赋值语句赋值
14、语句赋值语句是由赋值表达式加上一个分号赋值语句是由赋值表达式加上一个分号构成构成赋值表达式的末尾没有分号,而赋值语赋值表达式的末尾没有分号,而赋值语句有分号句有分号一个表达式可以包含赋值表达式,但决一个表达式可以包含赋值表达式,但决不能包含赋值语句不能包含赋值语句P603.4.43.4.4变量赋初值变量赋初值变量赋初值变量赋初值程序中常需要对一些变量预先设置一个程序中常需要对一些变量预先设置一个初值初值设置初值既可以用赋值语句去实现,也设置初值既可以用赋值语句去实现,也可以在定义变量的同时使变量初始化,可以在定义变量的同时使变量初始化,后者更为方便后者更为方便 int a,b,c=5;相当于:
15、相当于:int a,b,c;c5;P603.53.5数据输入输出的概念数据输入输出的概念数据输入输出的概念数据输入输出的概念几乎每一个几乎每一个C程序都包含输入输出程序都包含输入输出输入输出是程序中最基本的操作之一输入输出是程序中最基本的操作之一所谓输入输出是以计算机主机为主体而所谓输入输出是以计算机主机为主体而言的言的从计算机向输出设备输出数据称为从计算机向输出设备输出数据称为输出输出,从输入设备向计算机输入数据称为从输入设备向计算机输入数据称为输入输入P613.53.5数据输入输出的概念数据输入输出的概念数据输入输出的概念数据输入输出的概念语言本身不提供输入输出语句语言本身不提供输入输出语
16、句输入和输出操作是由输入和输出操作是由C函数库中的函数函数库中的函数来实现的来实现的printf、scanf、putchar、getchar、puts、gets不是关键字不是关键字在使用系统库函数时,要在程序中使用在使用系统库函数时,要在程序中使用预编译命令预编译命令“#include”P613.63.6字符数据的输入输出字符数据的输入输出字符数据的输入输出字符数据的输入输出3.6.1 用用putchar函数输出一个字符函数输出一个字符3.6.2 用用getchar函数输入一个字符函数输入一个字符P633.6.13.6.1用用用用putcharputchar函数输出一个字符函数输出一个字符函数
17、输出一个字符函数输出一个字符从计算机向显示器输出一个字符从计算机向显示器输出一个字符 putchar函数的一般形式为:函数的一般形式为:putchar(c)例例3.1 先后输出几个字符。先后输出几个字符。P63#include void main()char a,b,c;a=B,b=O,c=Y;putchar(a);putchar(b);putchar(c);putchar(n);向显示器输出字符向显示器输出字符B向显示器输出换行符向显示器输出换行符BOY#include void main()char a,b,c;a=B,b=O,c=Y;putchar(a);putchar(b);putch
18、ar(c);putchar(n);改为改为inta=66,b=79,c=89;BOYputchar(101)(输出字符输出字符)putchar()(输出单撇号字符输出单撇号字符)3.6.23.6.2用用用用getchargetchar函数输入一个字符函数输入一个字符函数输入一个字符函数输入一个字符向计算机输入一个字符向计算机输入一个字符getchar函数的一般形式为:函数的一般形式为:getchar()例例3.2 输入多个字符。输入多个字符。P64#include void main()char a,b,c;a=getchar();b=getchar();c=getchar();putchar
19、(a);putchar(b);putchar(c);putchar(n);输入一个字符,送给输入一个字符,送给变量变量aBOY BOYB O BO#include void main()char a,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);putchar(n);putchar(getchar();#include void main()char a,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c
20、);putchar(n);putchar(getchar();putchar(getchar();#include void main()char a,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);putchar(n);putchar(getchar();putchar(getchar();putchar(getchar();#include void main()char a,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(
21、b);putchar(c);putchar(n);putchar(getchar();putchar(getchar();putchar(getchar();3.73.7简单的格式输入与输出简单的格式输入与输出简单的格式输入与输出简单的格式输入与输出3.7.1 用简单的用简单的printf函数输出数据函数输出数据3.7.2 用简单的用简单的scanf函数输入数据函数输入数据P663.7.13.7.1用简单的用简单的用简单的用简单的printfprintf函数输出数据函数输出数据函数输出数据函数输出数据在在C程序中用来实现输出和输入的,主要程序中用来实现输出和输入的,主要是是printf函数和函
22、数和scanf函数函数这两个函数是格式输入输出函数这两个函数是格式输入输出函数用这两个函数时,必须指定格式用这两个函数时,必须指定格式P661.printf函数的一般格式函数的一般格式printf(格式控制,输出表列)(格式控制,输出表列)例如:例如:printf(”i=%d,c=%cn”,i,c);格式声明格式声明1.printf函数的一般格式函数的一般格式printf(格式控制,输出表列)(格式控制,输出表列)例如:例如:printf(”i=%d,c=%cn”,i,c);普通字符普通字符1.printf函数的一般格式函数的一般格式printf(格式控制,输出表列)(格式控制,输出表列)例如
23、:例如:printf(”i=%d,c=%cn”,i,c);可以是常量、变量或表达式可以是常量、变量或表达式2.基本的基本的格式字符格式字符ud格式符。按十进制整型数据的实际长度输出格式符。按十进制整型数据的实际长度输出ui格式符。作用与格式符。作用与d格式符相同格式符相同2.基本的基本的格式字符格式字符uc格式符。用来输出一个字符格式符。用来输出一个字符 char ch=a;printf(”%c”,ch);输出字符输出字符:a2.基本的基本的格式字符格式字符uc格式符。用来输出一个字符格式符。用来输出一个字符例例3.3 用用printf函数输出字符数据。函数输出字符数据。#include vo
24、id main()char c=a;int i=97;printf(c=%c,c=%dn,c,c);printf(i=%c,i=%dn,i,i);c=a,c=97i=a,i=972.基本的基本的格式字符格式字符us格式符。用来输出一个字符串格式符。用来输出一个字符串 printf(”%s”,”CHINA”);输出字符串输出字符串:CHINA2.基本的基本的格式字符格式字符uf格式符。用来输出实数,以小数形式输出格式符。用来输出实数,以小数形式输出例例3.4 输出实数时的有效位数。输出实数时的有效位数。#include void main()float a,b;a=111111.111;b=22
25、2222.222;printf(%fn,a+b);333333.3281252.基本的基本的格式字符格式字符uf格式符。用来输出实数,以小数形式输出格式符。用来输出实数,以小数形式输出例例3.5 输出输出双精度数双精度数时的有效位数。时的有效位数。#include void main()double a,b;a=11111111.11111111;b=22222222.22222222;printf(%fn,a+b);33333333.3333332.基本的基本的格式字符格式字符uf格式符。用来输出实数,以小数形式输出格式符。用来输出实数,以小数形式输出lfloat型数据只能保证型数据只能保证
26、67位有效数字位有效数字ldouble型数据能保证型数据能保证1516位有效数字位有效数字l计算机输出的数字计算机输出的数字不都不都是绝对精确有效的是绝对精确有效的2.基本的基本的格式字符格式字符ue格式符。指定以指数形式输出实数格式符。指定以指数形式输出实数lVC+给出小数位数为位给出小数位数为位l指数部分占指数部分占5列列l小数点前必须有而且只有小数点前必须有而且只有1位非零数字位非零数字 printf(”%e”,123.456);输出:输出:1.234560 e+0021.scanf 函数的一般形式函数的一般形式 scanf(格式控制,地址表列)(格式控制,地址表列)含义同含义同prin
27、tf函数函数3.7.23.7.2用简单的用简单的用简单的用简单的scanfscanf函数输入数据函数输入数据函数输入数据函数输入数据P701.scanf 函数的一般形式函数的一般形式 scanf(格式控制,地址表列)(格式控制,地址表列)可以是变量的地址,或字可以是变量的地址,或字符串的首地址符串的首地址3.7.23.7.2用简单的用简单的用简单的用简单的scanfscanf函数输入数据函数输入数据函数输入数据函数输入数据P70例例3.6 用用scanf函数输入数据。函数输入数据。#include void main()int a,b,c;scanf(“%d%d%d”,&a,&
28、b,&c);printf(a=%d,b=%d,c=%dn,a,b,c);3.7.23.7.2用简单的用简单的用简单的用简单的scanfscanf函数输入数据函数输入数据函数输入数据函数输入数据P70345 a=3,b=4,c=52.scanf函数中的格式声明函数中的格式声明与与printf函数中的格式声明相似函数中的格式声明相似以开始以开始,以一个格式字符结束,中间可以以一个格式字符结束,中间可以插入附加的字符插入附加的字符scanf(a=%db=%dc=%d,&a,&b,&c);3.7.23.7.2用简单的用简单的用简单的用简单的scanfscanf函数输入数
29、据函数输入数据函数输入数据函数输入数据P70说明说明scanf(”%d,%d”,a,b);错错scanf(”%d,%d”,&a,&b);对对对于对于scanf(a=%d,b=%d,c=%d,&a,&b,&c);12 24 36 错错 a=12,b=24,c=36 对对 a=12 b=24 c=36 错错3.7.23.7.2用简单的用简单的用简单的用简单的scanfscanf函数输入数据函数输入数据函数输入数据函数输入数据P70说明说明对于对于scanf(”%c%c%c”,&c1,&c2,&c3);abc 对对 a b c 错错对于
30、对于scanf(”%d%c%f”,&a,&b,&c);若输入若输入 1234a123o.26 3.7.23.7.2用简单的用简单的用简单的用简单的scanfscanf函数输入数据函数输入数据函数输入数据函数输入数据P70说明说明对于对于scanf(”%c%c%c”,&c1,&c2,&c3);abc 对对 a b c 错错对于对于scanf(”%d%c%f”,&a,&b,&c);若输入若输入 1234a123o.26 3.7.23.7.2用简单的用简单的用简单的用简单的scanfscanf函数输入数据函数输入数据函数输入数据
31、函数输入数据P70说明说明对于对于scanf(”%c%c%c”,&c1,&c2,&c3);abc 对对 a b c 错错对于对于scanf(”%d%c%f”,&a,&b,&c);若输入若输入 1234a123o.26 3.7.23.7.2用简单的用简单的用简单的用简单的scanfscanf函数输入数据函数输入数据函数输入数据函数输入数据P703.83.8顺序结构程序设计举例顺序结构程序设计举例顺序结构程序设计举例顺序结构程序设计举例P73例例3.7输入三角形的三边长,求三输入三角形的三边长,求三角形面积。角形面积。解题思路:假设给定的三个边符合构
32、成解题思路:假设给定的三个边符合构成三角形的条件三角形的条件找到求三角形面积的公式:找到求三角形面积的公式:其中其中s=(a+b+c)/23.83.8顺序结构程序设计举例顺序结构程序设计举例顺序结构程序设计举例顺序结构程序设计举例P73#include#include void main()double a,b,c,s,area;scanf(%lf,%lf,%lf,&a,&b,&c);s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(a=%fnb=%fn%fn,a,b,c);printf(area=%fn,area);
33、计算计算s计算计算area输入输入a、b、c的值的值#include#include void main()double a,b,c,s,area;scanf(%lf,%lf,%lf,&a,&b,&c);s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(a=%fnb=%fn%fn,a,b,c);printf(area=%fn,area);数学函数,数学函数,计算计算平方根平方根调用数学函数调用数学函数加此行加此行9.89,12.65,8.76 a=9.890000b=12.65000c=8.760000area=43.
34、165683 例例3.8 从键盘输入一个大写字母,要求从键盘输入一个大写字母,要求改用小写字母输出。改用小写字母输出。解题思路:解题思路:u关键是关键是找到大找到大、小写字母间小写字母间的的内在联系内在联系u小写字小写字母母的的ASCII码码=大写字大写字母母的的ASCII码码+32#include void main()char c1,c2;c1=getchar();printf(%c,%dn,c1,c1);c2=c1+32;printf(%c,%dn,c2,c2);将将大写转小写大写转小写A A,65a,97#include void main()printf(“%c”,getchar()
35、+32);printf(“%c”,getchar()+32);printf(%cn,getchar()+32);例例:输入输入3个大写字母,输出相应的个大写字母,输出相应的3个小写字母。个小写字母。#include void main()putchar(getchar()+32);putchar(getchar()+32);putchar(getchar()+32);putchar(n);例例:输入输入3个大写字母,输出相应的个大写字母,输出相应的3个小写字母。个小写字母。例例3.9 求求 方程的根。方程的根。a、b、c由键盘输入由键盘输入 设设 解题思路:首先要知道求方程式的根解题思路:首先
36、要知道求方程式的根的方法。的方法。由数学知识已知:如果由数学知识已知:如果 0,则一元二次方程有两个实根,则一元二次方程有两个实根:若记若记#include#include void main()double a,b,c,disc,x1,x2,p,q;scanf(“a=%lf,b=%lf,c=%lf,&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf(x1=%.2fnx2=%.2fn,x1,x2);程序中程序中调用数学函数调用数学函数sqrt输入输入a,b,c的值的值#i
37、nclude#include void main()double a,b,c,disc,x1,x2,p,q;scanf(“a=%lf,b=%lf,c=%lf,&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf(x1=%.2fnx2=%.2fn,x1,x2);输入的是双输入的是双精度型实数精度型实数#include#include void main()double a,b,c,disc,x1,x2,p,q;scanf(“a=%lf,b=%lf,c=%lf,&a,&
38、amp;b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf(x1=%.2fnx2=%.2fn,x1,x2);a=1,b=3,c=2 x1=-1.00 x2=-2.00要求输入要求输入3个实数个实数自动自动转成实数转成实数后赋给后赋给a,b,c#include#include void main()double a,b,c,disc,x1,x2,p,q;scanf(“a=%lf,b=%lf,c=%lf,&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);
39、q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf(x1=%.2fnx2=%.2fn,x1,x2);小数小数点后输出点后输出2列列a=1,b=3,c=2 x1=-1.00 x2=-2.003.93.9提高部分提高部分提高部分提高部分3.9.1 无符号数据与有符号数据之间的赋值无符号数据与有符号数据之间的赋值3.9.2 较复杂的输入输出格式控制较复杂的输入输出格式控制3.9.3 简单易用的简单易用的C+的输入输出的输入输出3.9.4 C+用用“/”作为注释的标识作为注释的标识P763.9.13.9.1无符号数据与有符号无符号数据与有符号无符号数据与有符号无符号数据与有
40、符号数据之间的赋值数据之间的赋值数据之间的赋值数据之间的赋值将有符号整数赋值给长度相同的无符号将有符号整数赋值给长度相同的无符号整型变量整型变量:u按字节原样赋值(连原有的符号位也作为数按字节原样赋值(连原有的符号位也作为数值一起传送)值一起传送)P76例例3.10 有符号整数赋值给无符号整型变量,有符号整数赋值给无符号整型变量,数据会失真。数据会失真。#include void main()unsigned a;int b;b=-1;a=b;printf(%un,a);1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1ba1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
41、 1输出无符号整数输出无符号整数假设占假设占2字节字节65535将无符号整数赋值给长度相同的有符号将无符号整数赋值给长度相同的有符号整型变量整型变量:u不要超出有符号整型变量的数值范围,否则不要超出有符号整型变量的数值范围,否则会出错会出错例例3.11 无符号整数赋值给有符号整型变量,无符号整数赋值给有符号整型变量,注意数值范围。注意数值范围。#include void main()unsigned a;int b;a=65535;b=a;printf(%dn,b);1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1ba1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
42、补码形式补码形式假设占假设占2字节字节-13.9.23.9.2较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制1.输出数据时的格式控制输出数据时的格式控制umd。用来指定输出数据的宽度,。用来指定输出数据的宽度,m是指是指定的宽度,如果数据实际的位数小于,则定的宽度,如果数据实际的位数小于,则左端补以空格,若大于,按实际位数输出左端补以空格,若大于,按实际位数输出printf(%4d,%4d,123,12345);P78123,123453.9.23.9.2较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格
43、式控制1.输出数据时的格式控制输出数据时的格式控制u%ld。对于。对于int型数据占型数据占2字节的系统,在字节的系统,在输出长整型数据时要在格式字符输出长整型数据时要在格式字符d前面加一前面加一个英文字个英文字母母llong a=135790;printf(“%ld,a);printf(“%8ld,a);P781357901357903.9.23.9.2较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制1.输出数据时的格式控制输出数据时的格式控制u%o。以。以八八进制整数形式输出。由于是将内进制整数形式输出。由于是将内存单元中的各位的值(或)按八
44、进制形存单元中的各位的值(或)按八进制形式输出,因此输出的数值不带符号,即将符式输出,因此输出的数值不带符号,即将符号位也一起作为八进制数的一部分输出号位也一起作为八进制数的一部分输出int a=-1;printf(%d,%o,a,a);P78-1,1777771 1 1 1 1 1 1 1 1 1 1 1 1 1 1 13.9.23.9.2较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制1.输出数据时的格式控制输出数据时的格式控制u%x。以。以十六十六进制数形式输出整数。同样不进制数形式输出整数。同样不会出现负的十六进制数会出现负的十六进制数i
45、nt a=-1;printf(%d,%x,a,a);P78-1,ffff1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 13.9.23.9.2较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制1.输出数据时的格式控制输出数据时的格式控制u%u。用来输出无符号型数据,以十进制整。用来输出无符号型数据,以十进制整数形式输出数形式输出u一个有符号整数也可用一个有符号整数也可用u格式输出;反之,格式输出;反之,一个无符号型数据也可用一个无符号型数据也可用d格式输出格式输出u按相互赋值的规则处理按相互赋值的规则处理u无符号型数据也可用无符号型数据
46、也可用o或或x格式输出格式输出P78例例3.12 无符号数据的输出。无符号数据的输出。#include void main()unsigned a=65535;int b=-2;printf(a=%d,%o,%x,%un,a,a,a,a);printf(b=%d,%o,%x,%un,b,b,b,b);3.9.23.9.2较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制P78在在TC2.0下下(占占2字节字节)的运行结果为:的运行结果为:a=-1,177777,ffff,65535b=-2,177776,fffe,65534在在VC+6.0下下(占
47、占4字节字节)的运行结果为:的运行结果为:a=65535,177777,ffff,65535b=-2,37777777776,fffffffe,42949672943.9.23.9.2较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制mc。用来指定输出字符数据的宽度。用来指定输出字符数据的宽度char c=a;printf(“%3c”,c);P78a3.9.23.9.2较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制ms。指定输出的字符串占列指定输出的字符串占列u若若串长大于,则将串全部输出串长大于,
48、则将串全部输出u若串长小于,则若串长小于,则左补左补空格空格-ms。如果串长小于,则在列范如果串长小于,则在列范围内,字符串向左靠,右补空格。围内,字符串向左靠,右补空格。P78例例3.13 字符串的输出。字符串的输出。#include void main()printf(%3s,%7.2s,%.4s,%-5.3sn,CHINA,CHINA,CHINA,CHINA);3.9.23.9.2较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制P78CHINA,CH,CHIN,CHIm.nf。指定输出的实数共占列,其中指定输出的实数共占列,其中有有n位小数
49、位小数u如果数值长度小于,则左端补空格如果数值长度小于,则左端补空格m.nf与与m.nf基本相同,只是使输出基本相同,只是使输出的数值向左端靠,右端补空格的数值向左端靠,右端补空格3.9.23.9.2较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制P78例例3.14 输出实数时指定输出两位小数。输出实数时指定输出两位小数。#include void main()float f=123.456;printf(%f%10fn”,f,f);printf(”%10.2f%.2fn”,f,f);printf(”%-10.2fn,f);3.9.23.9.2较
50、复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制P78123.46123.456001123.456001123.46123.46例例3.15 求求3个圆的周长,输出结果时上下按个圆的周长,输出结果时上下按小数点对齐,取两位小数。小数点对齐,取两位小数。#include#define PI 3.1415926void main()double r1=1.53,r2=21.83,r3=123.71,s1,s2,s3;s1=2.0*PI*r1;s2=2.0*PI*r2;s3=2.0*PI*r3;printf(r1=%10.2fnr2=%10.2fnr3=%10.2fn,r1,r2,r3);r1=1.53r2=21.83r3=123.713.9.23.9.2较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制较复杂的输入输出格式控制P78m.ne和和-m.ne。m、n和和“”字字符的含义与前相同。此处指拟输出的数符的含义与前相同。此处指拟输出的数据的小数部分(又称尾数)的小数位数据的小数部分(又称尾数)