第三章 顺序结构程序设计
第3章 顺序结构程序设计

第三章顺序结构程序设计一、输出函数printf的使用使用的格式:printf(“输出格式串”,表达式表); /*printf要小写*/重点掌握输出格式符① 格式符:%d 以普通整型输出(不可以写成%D)%md 以普通整型输出,数据占m位,右对齐%+md 以普通整型输出,数据占m位,右对齐(正数的前面有+号)%-md 以普通整型输出,数据占m位,左对齐%hd 以短整型输出%ld(或%Ld) 以长整型输出%u 以无符号整型输出%o 以八进制形势输出%x(或%X) 以十六进制形势输出%f 以单精度小数形势输出,点后6位小数%lf(或%Lf或%f) 以双精度小数形势输出,%±m.nf 以单精度小数形势输出,点后n位小数,且进行四舍五入%.nf 以单精度小数形势输出,点后n位小数,且进行四舍五入%c 以字符形式输出%s 以字符串形式输出说明:以上的常用格式符必须和后面的变量一一对应,并且后面的变量是什么类型前面就必须用相应的格式符例:int a=-2;unsigned int b=30;float c=3.1456;printf(“%d%u%5.2f”,a,b,c); 问:输出结果是什么?(-230 3.15)②普通字符普通字符原样输出,它不控制变量的输出。
printf(“a=%d,b=%u,c=%5.2f”,a,b,c); 问:输出结果是什么?③转义字符\n 回车且换行\r 回车但不换行\b 退一个字符\t 走一个制表位(8个字符)\\ 转译成\\’转译成’\”转译成”%% 转译成%\ddd 转译成1~3位八进制所对应的ascii码值所代表的字符\xdd 转译成1~2位十六进制所对应的ascii码值所代表的字符二、输入函数scanf的使用格式:scanf(“格式串”,变量地址列表);重点掌握输入格式(有格式符和普通字符,没有转义字符)① 格式符:%d 以普通整型输入%ld(%Ld) 以长整型输入%hd 以短整形输入%md 取整型的m位%u 以无符号型输入%o 以八进制输入%x(%X) 以十六进制输入%f 以单精度小数输入%lf(%Lf) 以双精度小数输入%mf 以单精度小数输入(但是不能规定它的精度。
《C语言程序设计》第三章 顺序结构程序设计

第三章顺序结构程序设计3.1 基本要求z掌握C语言中使用最多的一种语句——赋值语句的使用方法。
z掌握各种类型数据的输入输出的方法,并能正确使用各种格式转换符。
z掌握文件包含预处理命令#include。
3.2 内容小结本章主要介绍了一些为编写简单程序所必须的语句及基本的输入输出方法。
它们是C语言中5类基本语句:控制语句、函数调用语句、表达式语句、空语句和复合语句。
格式输入输出函数scanf( )和printf( ):在C语言中没有专用的输入输出语句,但可通过调用输入输出函数及C系统提供的9种格式字符,进行各种类型数据、各种格式的输入输出。
单个字符的输入输出函数getchar( )和putchar( )。
文件的包含:函数是C程序的构成单元,C程序中的函数调用可分为两类,本源程序中函数的调用和非本源程序中函数的调用,如是后者需用#include 文件包含预处理命令把该函数所在的源文件包含到本源文件中来。
3.3 典型例题分析z例题1 printf( )函数的功能main( ){ int a , b;a=10;b=25;printf(“a=%d b=%d\n”,a,b);printf(“a+b=%d\na-b=%d\n”,a+b,a-b);}运行结果:a=10 b=2529a+b=35a-b=-15从上例中可以看出,转换说明符不仅规定了输出格式,而且也决定了输出项在整个输出信息中的位置。
此外,从上例也可以看出,输出项还可以是运算表达式,这时输出的是它的运算结果值。
z例题2 scanf( )函数的功能main( ){ int x, y;printf(“Enter integer x:”);scanf(“%d”,&x);printf(“Enter integer y:”);scanf(“%d”,&y);printf(“x+y=%d\n”,x+y);printf(“x-y=%d\n”,x-y);}该程序是以人机对话方式给变量x和y赋值,它的某次运行情况如下所示:Enter integer x:16〈CR〉Enter integer y:25〈CR〉x+y=41x- y=-9其中划有下横线的部分是从键盘打入的字符,其中〈CR〉表示回车键。
顺序结构的程序设计

(3)在用%c格式输入字符时,空格和转义字符 都作为有效字符输入;
(4)在输入数据时,遇以下情况时该数据认为 结束:
• 遇空格,或按TAB或回车键; • 按指定的宽度结束; • 遇非法输入。
§3.4 顺序结构程序设计
从键盘输入一个大写字母,要求改用小写字 母输出。
#include <stdio.h> void main() {
2.若变量已正确定义,要将a和b中的数进行交 换,下面不正确的语句组是:
A.a=a+b,b=a-b,a=a-b; B. t=a,a=b,b=t;
C.a=t;t=b;b=a;
D.t=b;b=a;a=t;
3.写出输出结果: x=5.16894; printf(“%f\n”,(int)(x*1000+0.5)/(float)1000);
注意: 在使用这两个函数时,必须包含头文件 stdio.h。
#include “stdio.h” void main() {
char c; c=getchar(); putchar(c); }
#include<stdio.h> void main() {
char ch1,ch2,ch3; ch1=getchar();ch2=getchar();ch3=getchar(); putchar(ch1);putchar(′′);putchar(ch2); putchar(′′);putchar(ch3); putchar(′\n′); utchar(′\101′);putchar(66);putchar(‘\″’); putchar(′\n′); }
• %-m.nf:同上,左对齐。 (8)e格式符:以指数形式输出实数。 • %e:输出位数13位(正数)或14位(负
第3章 顺序结构程序设计

3.2 实现顺序结构程序设计的基本语 句
• 赋值语句 语句
赋值语句由赋值表达式加上一个分号构成,一般形式为: 变量=表达式; 变量=表达式; 例如: radius=14.5; i++; x+=2; 赋值语句是将右边表达式的值赋给左边的变量中去。赋值 语句要先对表达式加以计算求得其值,而后再将求得的值赋给 左边的变量中去,因此可以说赋值语句兼有计算功能。
例3.1
例3.2
例3.3
• 输出项表 输出项表中可以有多个输出项,各项之间用逗号分隔。 • 注意事项: ①格式控制中的格式说明符必须按从左到右的顺序,与输出 项表中的每个数据一一对应。 ②除x,e,g外,其他类型转换字符必须用小写字母。 ③类型转换字符紧跟在“%”后面时作为类型转换字符,否则 上一页 将 作为普通字符处理。
• 标准输入输出
C语言本身并不提供输入输出语句,其输入输出操作是由标 准库函数来实现的,在使用标准库函数时,要用预编译命令: 首页 上一页 #include将“stdio.h”文件包括到用户源文件中。
– 格式输出函数—printf()
形式: printf(“格式控制”[,输出项表]); printf( 格式控制” 输出项表] • 格式控制 ①普通字符:即需要原样输出的的字符信息。 ②格式说明符:即用%开头后面跟有一个字母,它规定了输 出项的输出形式。常用格式说明符见表3.1和表3.2。 ③转义字符:以“\”开头的字符序列。常用转义字符见表3.3。
上一页
–单个字符的输入—getchar()函数
形式: c=getchar(); c=getchar(); 执行上面的调用时,变量c将得到用户从键盘输入的一 个字符值,这里的c可以是字符型或整型变量。
第3章 顺序结构程序设计

致命错误: main函数中,xxx行 语句丢分号 Warning xxx Possible use of „x‟ before definition in … 警告:xxx中xxx行 在定义前可能使用了‘x’ 运行错误要具体问题具体分析;一般较复杂。 简单跟踪:在程序中加入输出语句
[例4.2] 从键盘输入一个小写字母,要求用大小写 字母形式输出该字母及对应的ASCII码值。 #include "stdio.h" main() {char c1,c2; printf("Input a lowercase letter: "); c1=getchar(); putchar(c1);printf(",%d\n",c1); c2=c1-32;/*将大写字母转换成对应的小写字母*/ printf("%c,%d\n",c2,c2); } 程序运行情况如下: Input a lowercase letter: a↙ a,97 A,65 程序演示
在顺序结构程序中,各语句 (或命令)是按照位置的先后次序, 顺序执行的,且每个语句都会被执 行到。
顺序结构程序设计举例
[例子4.1]输入一个圆的半径,求它的面积。 #include <stdio.h> #define PI 3.1415 void main() {float r, area; scanf(“%f”,&r); area=PI*r*r; printf(“r=%7.2f, area=%7.2f\n”,r,area); } 程序演示
建议:为改善人机交互性,同时简化输入 操作,在设计输入操作时,一般先用 printf()函数输出一个提示信息,再用 scanf()函数进行数据输入。 如: printf(“please input data:\n”); scanf(“%d,%d”,&sum1,&sum2);
C3 顺序结构程序设计

第 3 章 顺 序 结 构 程 序 设 计
1234,1234 运行 结果: 结果: 123.456000,123.456000, 123.5,123.46,1.23e+02 a 例 static char a[]=“Hello,world!” printf(“%s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a); 运行结果: 运行结果:Hello,world! Hello,world! Hello Hello HelCopyright@ Henan Polytechnic University
本章主要内容
3.1
第 3 章 顺 序 结 构 程 序 设 计
C语言语句概述 语言语句概述 字符数据的输入输出 格式化输入输出函数 顺序结构程序设计举例
3.2 3.3 3.4
Copyright@ Henan Polytechnic University
C 语 言
3.3 格式化输入输出函数
格式输出函数
C 语 言
第 3 章 顺 序 结 构 程 序 设 计
C语言程序设计
第3章 顺序结构程序设计
Copyright@ Henan Polytechnic University
C 语 言
引子
问题:一年有春夏秋冬四季,按序执行, 问题:一年有春夏秋冬四季,按序执行,做事亦有先后 顺序,那么C 顺序,那么C语言在编写程序时可以采用这样的顺序结 构吗? 构吗?
Copyright@ Henan Polytechnic University
C 语 言
本章主要内容
3.1
第 3 章 顺 序 结 构 程 序 设 计
C语言语句概述 语言语句概述 字符数据的输入输出 格式化输入输出函数 顺序结构程序设计举例
3 顺序结构程序设计

对D框进一步细化如图3-10所示。求素数的
方法是:将xi用2到之间的整数去除,如能 被其中之一整除,则xi就不是素数,使xi=0。
对图3-7的C框可以细化如图所示
到此为止,已全部细化完毕。每一部分都
可以分别直ห้องสมุดไป่ตู้用C语言来表示。将以上各图 综合起来,可得到下图所示的N-S流程图。
3.4 字符的输入与输出函数
第3章 顺序结构程序设计
一个程序应包括以下两方面内容: (1) 对数据的描述。在程序中要指定数据的类 型和数据的组织形式,即数据结构(data structure)。 (2) 对操作的描述。即操作步骤,也就是算法 (algorithm)。 程序 = 算法 + 数据结构 + 程序 设计方法 + 语言工具和环境
3.1 算法概述
3.1.1 算法的概念
为解决某一个特定问题而采取的方法和 步骤,叫做”算法”。算法是问题求解过程 的精确描述,一个算法由有限条可完全机械 执行的、有确定结果的指令组成。
例3.1 交换两个变量的数据 已知变量x和y中分别存放了数据,现在要交 换其中的数据,为了达到交换的目的,需 要引进一个中间变量m,其算法如下: (1) 输入x、y的值; (2) 将x中的数据送给变量m,即x→m; (3) 将y中的数据送给变量x,即y→x; (4) 将m中的数据送给变量y,即m→y; (5) 输出x、y的值。
例3.2 #include "stdio.h" void main() { int a,b,c,min; scanf("%d,%d,%d",&a,&b,&c); if(a<b) min=a; else min=b; if(c<min) min=c; printf("min=%d",min); }
第3章 顺序结构程序设计

第3章 顺序结构程序设计
【例题3.1】阅读下列程序,认识格式输出函数的用法,写结果 #include<stdio.h> int main() { int i,j,m,n; 格式控制字符串 输出列表项 i=5; j=15; m=i++; n=++j; printf("i=%d, j=%d, m=%d, n=%d\n",i,j,m,n); return 0; }
※ %s:输出一个字符串。
※ %f:按实型数据输出且有6位的小数点。 ※ %e: 按实型数据输出且按指数形式
※ %g:按实型数据输出由系统自动选择f格式或e格式。
2016年12月12日星期一 8
第3章 顺序结构程序设计
3.3.2 格式输入函数scanf
阅读下列程序,认识scanf()函数的用法
#include<stdio.h> int main() 格式控制字符串(注意表示形式) { 输入地址列表 int a,b,c; float aver; printf("请输入三个数a,b,c:"); scanf("%d%d%d",&a,&b,&c); aver=(a+b+c)/3; printf("aver=%f\n",aver); return 0; }
第3章 顺序结构程序设计
3.4 字符输入/输出函数
【例题3.4.1】 通过键盘输入一个小写字母,输出该 字母的大写。 分析:输入可采用格式输入函数scanf()实现,输出可 采用格式输出函数printf()实现,使用格式符%c。小 写字母与大写字母的ASCII码值相差32。 思考:不用格式输入/输出函数能不能完成?能,用C 语言提供的另一类函数即字符输入/输出函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章顺序结构程序设计一、结构化程序设计:1.程序是命令的有序集合,命令执行的顺序即程序的结构。
2.在结构化程序设计中,把所有程序的逻辑结构归纳为三种:顺序结构、选择结构和循环结构。
3.结构化程序设计概述:结构化程序设计的原则:自顶向下→逐步细化→模块化设计(所谓模块化设计,就是按模块组装的方法编程。
把一个待开发的软件分解成若干个小的简单部分,称为模块。
)→结构化编码(编码俗称编程序)。
二、算法:1. 算法就是一种在有限的步骤内解决问题或完成任务的方法。
2. 计算机程序就是告诉计算机如何去解决问题或完成任务的一组详细的、逐步执行的指令集合。
3. 数据时操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。
4. 算法的流程成图表示法:起止框:输入/输出操作:判断框:流程线:5. 基本算法:累加,累乘,求最大或最小值。
穷举:穷举就是一种重复型算法。
它的基本思想是对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止。
迭代:是一个不断用新值取代变量的旧值,由旧值递推出变量的新值过程。
递归:算法自我调用的过程,一种算法是否称为递归,关键取决于该算法定义中是否有它本身。
排序:是在待排序记录中按照一定次序排列数据的过程。
查找:是在数据列表中确定目标所在位置的过程。
(顺序查找:可在任何列表中查找,对半查找:要求列表是有序的)三、C语句概述:1. 表达式语句:在各种表达式后加一个分号构成的语句。
2. 函数调用语句:在函数调用的一半形式后加一个分号构成的语句,其作用是完成特定的功能。
一般形式:函数名(实参表);3. 空语句:只有一个分号的语句称为空语句,其形式如:;空语句在语法上占据一个语句的位置,但是它不具备任何操作功能。
4. 复合语句:用一对花括号“{}”将多条语句括起来构成的语句体。
形式{语句组}5. 控制语句:C程序设计中用来构成分支结构和循环结构并完成一定控制功能的语句。
●条件语句:if …else。
●多分支选择语句:switch●当型循环语句:while,for●直到循环型循环语句:do…while●终止本次循环语句:continue●终止整个循环或跳出switch语句:break●无条件转移语句:goto●函数返回语句:return四、输入/输出语句:1. C语言不提供输入/输出语句,它的输入/输出操作是由输入/输出函数调用语句来实现的。
2. 常用的标准输入/输出函数有两种:●用于格式输入/输出的函数(scanf()/printf())。
●用于字符输入/输出的函数(getchar()/putchar())。
●这里所谓的标准输入/输出是指以系统隐含指定的输入/输出设备作为输入/输出设备的,例如:对于微型计算机,是指键盘和显示器。
3. 格式化输出函数printf()1) Printf()函数:①调用形式:printf(格式字符串,输出项表);②功能:按格式字符串中的格式依次输出输出项表中的各输出项表中的各输出项。
③说明:●字符串是用双引号括起来的一串字符。
●格式字符串用来说明输出项表中各输出项的输出格式。
●输出项表列出要输出的项,各输出项之间要用逗号分开。
●若没有输出项表,且格式字符串不含格式信息,则输出的是格式字符串本身。
2) 格式字符串:●非格式字符:非格式字符(或称普通字符)一律按原样输出。
●格式字符:格式字符的形式:%[附加格式说明符]格式符格式符功能d 输出带符号的十进制整数o 输出无符号的八进制整数x 输出无符号的十六进制整数u 输出无符号的十进制整数c 输出单个字符s 输出一串字符(若字符串长度超过指定的精度则自动突破,不会截断字符串)f 输出实数(默认6位小数)(单精度和双精度)e 以指数形式输出实数(尾数1位整数,默认6位小数,指数至多3位)g 选择f与e格式中输出宽度较小的格式输出,且不输出无意义的0p 输出变量的内存地址% 也就是%%形式,输出一个%附加格式说明符功能m(m为正整数) 数据输出宽度为m,如数据宽度超过m,按实际输出.n(n为正整数) 对实数,n是输出的小数位数,对字符串,n表示输出前n个字符l ld输出long型数据,If和le输出double型数据h用于格式符d、o、u、x或X,表示对应的输出项是短整型- 数据左对齐输出,无-是默认右对齐输出。
3) 每个格式说明都必须用“%”开头,以一个格式字符作为结束,在此之间可以根据需要插入“宽度说明”、左左对齐符号“—”、前导零符号“0”等。
4) 注意:●%o不带先导0,例如十进制数15用%o输出为17,%#o加先导0,例如十进制数15用%#o输出为017●同理:%#x或%#X输出带先导0x或0X的十六进制数。
E或e:以指数形式输出浮点数(单精度和双精度),格式是:[—]m.dddddde xx。
小数位数(d的个数)由输出精度决定,隐含的精度是6.若指定的精度为0,则包括小数点在内的小数部分都不输出。
Xxx为指数,保持3位,不足补0.若指数为0,输出指数是0005)长度修饰符:在%和格式字符之间,可以加入长度修饰符,以保证数据输出格式的正确和对齐。
对于长整形即%ld;对于短整型数可以加h,即%hd。
4、输出数据所占的宽度说明:当使用%d,%c,%f…的格式说明时,输出数据所占的宽度(域宽)由系统决定,通常按照数据本身的实际宽度输出,前后不加空格,并采用右对齐的形式。
也可以用以下三种方法人为控制:1) 在%和格式字符之间插入一个整数常数来指定输出的宽度n(%4d,n代表整数4)。
如果指定的宽度n不够,输出时将会自动突破,保证数据完整输出。
如果指定的宽度n超过输出数据的实际宽度,输出时将会右对齐,左边补以空格,达到指定的宽度。
2) 对于float和double类型的实数,可以用“n1,n2”的形式来指定输出宽度(n1和n2分别代表一个正常数),其中n1指定输出数据的宽度(包括小数点),n2指定小数点后小数位的位数,n2也称为精度。
(%12.4f,n1代表整数12,n2代表整数4)。
3) 对于f、e、E,当输出数据的小数位多于n2位时,截取右边多于的小数,并对截取部分的第一位小数做四舍五入处理;当输出数据的小数位少于n2时,在小数的最右边补0,使得输出数据的小数部分宽度为n2.若给出的总宽度n1小于n2加上整数位数和小数点(e或E格式还要加上指数的5位),则自动突破n1的限制;反之,数字右对齐,左边补空格。
4) 也可以用“.n2”格式(%.6f),不指定总宽度,仅指定小数部分的输出位数,由系统自动突破,按照实际宽度输出、如果指定“n1.0”或“.0”格式,则不输出小数点和小数部分。
5) 对于g或G,宽度用来指定输出的有效数字位数。
若宽度超过数字的有效数字位数,则左边自动补0;若宽度不足,则自动突破。
不指定宽度,将自动按照6位有效数字输出,截取右边多余的小数,并对截取部分的第一位小数做四舍五入处理。
6) 对于整型数,若输出格式是“0n1”或“.n2”格式,(%05d或%.5d),则如果指定的宽度超过输出数据的实际宽度,输出时将会右对齐,左边补0、7) 对于float和double类型的实数,若用“0n1.n2”格式输出(%012.4f),如果给出的总宽度n1大于n2加上整数位数和小数点(e或E格式还要加上指数的4位),则数字右对齐,左边补0。
8) 对于字符串,格式“n1”指定字符串的输出宽度,若n1小于字符串的实际长度,则自动突破,输出整个字符串;若n1大于字符串的实际长度,则右对齐,左边补空格。
若用“.n2”格式指定字符串的输出宽度,则若n2小于字符串的实际长度,将只输出字符串的前n2个字符。
9) 输出数据左对齐:由于输出数据都隐含右对齐,如果想左对齐,可以在格式控制中的“%”和宽度之间加一个“—”号来实现。
10) 使输出数据总带+号或—号:通常输出的数据如果是负数,前面有符号“—”,但正数前面的“+”一般都省略了。
如果要每一个数前面都带正负号,可以在“%”和格式字符间加一个“+”号来实现。
11) 符合语句:一个符合语句在语法上视为一条语句,在一对花括号内的语句数量不限。
5、使用printf函数时的注意事项:1) Printf的输出格式为自由格式,是否在两个数之间留逗号、空格或回车、完全取决于格式控制,如果不注意,很容易造成数字连在一起,使得输出结果没有意义。
例如:若K=1234,f=123.456,则printf("%d%d%f\n",k,k,f);语句的输出结果是:12341234123.456,无法分辨其中的数字含义。
而改用printf("%d %d %f\n",k,k,f);其输出结果是:1234 1234 123.456,看起来就一目了然了。
2) 若格式说明与输出项的类型不一一对应匹配,则不能正确输出,而且编译时不会报错。
若格式说明个数少于输出项个数,则多余的输出项不予输出;若格式说明个数多余输出项个数。
则将出现一些毫无意义的数字乱码。
3) Printf函数有返回值,返回值是本次调用输出字符的个数,包括回车等控制符。
4) 尽量不要在输出语句中改变输出变量的值,因为可能会造成输出结果的不确定性。
例如:int k=8,printf("%d,%d\n",k,++k);输出结果不是8,9而是9,9。
这是因为调用函数printf时,其参数是从右至左进行处理的,将先进行++k运算。
5) 输出数据时的域宽可以改变。
若变量m、n、i和f都已正确定义并赋值,则语句printf("%*d",m,i);将按照m指定的域宽输出i的值,并不输出m的值。
而语句printf("%*.*f",m,n,f);将按照m和n指定的域宽输出浮点型变量f的值,并不输出m、n的值。
6、数据输入:●scanf函数的一般调用形式如下:scanf(格式字符串,输入项地址表)●在scanf函数调用之后加上“;”,则构成输入语句。
●功能:按格式字符串中规定的格式,在键盘上输入各输入项的数据,并依次赋给各输入项。
●说明:格式字符串与printf()函数基本相同,但需要特别注意的是:输入项以其地址的形式出现,而不是输入项的名称。
如:scanf("%d,%f",&a,&b);其中&a、&b分别表示变量a,b的地址,&是取地址运算符(优先级及结合性与++相同)。
●格式控制的主要作用是指定输入时的数据转换格式,即格式转换说明。
输入项之间用逗号隔开。
●用于输入的格式字符及其功能:格式字说明符c 输入一个字符d 输入带符号的十进制整型数i 输入整型数,整型数可以是带先导0的八进制数,也可以是带先导0x(或0X)的十六进制数o 以八进制格式输入整型数,可以带先导0,也可以不带x 以十六进制格式输入整型数,可以带先导0X或0x,也可以不带u 以无符号是禁止行使输入整型数f(lf)以带小数点的数学形式或指数形式输入浮点数(单精度数用f,双精度数用lf)e(le) 同上s 输入一个字符串,直到遇到“\0”。