1、第3章顺序结构及其应用第3章顺序结构及其应用学习目标掌握数据的输入输出操作,编写顺序结构程序,解决简单问题。学习内容scanf()函数,printf()函数,getchar()函数,putchar()函数,顺序结构程序的设计方法。下一页返回第3章顺序结构及其应用3.1一个顺序结构程序实例3.2数据的输入输出3.3顺序结构应用实例3.4本章小结3.5实训上一页返回3.1一个顺序结构程序实例【例3-1】编写程序,计算长方形的面积。【编程思路】(1)定义程序所需要的变量:a,b,area,float类型。(2)输入长方形的长和宽给变量a,b。(3)计算长方形的面积:area=a*b。(4)输出长方形
2、的面积area。【程序代码】#includestdio.hmain()floata,b,area;/*变量定义*/printf(n请输入长方形的长和宽:);/*输出提示信息*/scanf(%f,%f,&a,&b);/*输入数据*/area=a*b;/*计算面积*/下一页返回3.1一个顺序结构程序实例printf(长方形的面积为:%7.2fnnn,area);/*输出结果*/执行这个程序,可以看到当输入数据2.5和5时,程序的输出结果为:这个程序的结构非常简单。在main()函数中包含5条语句,第1条是变量定义语句,声明了3个变量,第2条是输出语句,提示用户要输入数据,第3条是输入语句,用于接收
3、用户从键盘敲入的数据并存放到变量a,b中,第4条是赋值语句,用于计算并保存结果到变量c中,第5条是输出语句,把计算结果输出到显示屏上。上一页下一页返回3.1一个顺序结构程序实例从程序结构来看,本例中所有的语句代码都是按照先后顺序执行下来的,所以是典型的顺序结构程序。顺序结构是三种基本结构中最简单的一种,其执行流程如图3-1所示。提示:C程序的三种基本结构是顺序结构、分支结构和循环结构。从总体走势来看,计算机程序通常可分成三个部分,即输入数据、处理数据和输出数据。计算机通过输入操作接收数据,然后对数据进行处理,再将处理完的数据以有效的方式提供给用户,即输出数据。本章主要介绍数据的输入输出操作。上
4、一页返回3.2数据的输入输出C语言中数据的输入和输出主要由标准库函数来完成,其中printf()和scanf()是编程时经常会用到的一对输入输出函数,这两个函数在前面的举例中已经多次用到,下面详细介绍它们的使用方法。3.2.1格式输出函数printf()是格式输出函数,其功能是把计算机中的数据输出到显示屏上,并且可以指定输出数据的格式。函数调用格式为:printf(格式控制字符串,输出项表);例如:printf(“a=%d,b=%dn”,a,b);函数说明:1.格式控制字符串可以包含3类字符:(1)格式字符:由%打头后跟格式符。其中格式符由C语言约定,作用是指定数据输出时的格式。表3-1列出了
5、一些常用格式符及其功能说明。下一页返回3.2数据的输入输出(2)转义字符:n是输出函数中最常用到的转义字符,起回车换行的作用。(3)普通字符:格式控制字符串中除了格式字符和转义字符以外,其余都是普通字符,普通字符的处理是照原样输出。2.输出项表。输出项表列出要输出的数据项,数据项可以是常量、变量或表达式,各输出项之间用逗号分隔。【例3-2】通过以下4个程序段,观察printf()的输出效果。(1)printf(“Iamastudent.”);输出结果:该语句中不含输出项以及控制输出项的格式字符,只有普通字符,所以原样显示输出。这种用法经常用在输出提示信息时采用。上一页下一页返回3.2数据的输入
6、输出(2)inta=2,b=5;printf(“%d,%dn”,a,b);printf(“a=%d,b=%dn”,a,b);输出结果:提示:格式字符与输出数据之间个数、类型及顺序必须一一对应。输出时,除了格式符位置上用对应输出数据代替外,其他字符被原样显示输出。(3)charch=A;printf(“%c,%dn”,ch,ch);输出结果:字符输出时,%c用于输出字符本身,%d则输出字符的ASCII码值。上一页下一页返回3.2数据的输入输出(4)floatfx=123.45;printf(“%f,%en”,fx,fx);输出结果:可以看到,实数输出时系统默认的小数位均为6位。为了更加符合用户的
7、需要,printf()允许用户指定输出数据的宽度以及对齐方式。方法是在%和格式符之间插入控制符,例如:%5d、%7.2f、%-5d等。数据宽度及对齐方式的说明具体见表3-2。上一页下一页返回3.2数据的输入输出【例3-3】通过下面程序,观察printf()的输出效果。#includestdio.hmain()inta=12;floatfx=12.58;printf(a=%5dta=%-5dn,a,a);printf(fx=%ftfx=%7.2ftfx=%-7.2fn,fx,fx,fx);printf(fx=%etfx=%12.2etfx=%-12.2ennn,fx,fx,fx);程序输出结果为
8、:上一页下一页返回3.2数据的输入输出3.2.2格式输入函数scanf()是格式输入函数,其功能是按指定格式输入各种类型的数据,输入的数据将存放到指定的变量中。函数调用格式为:scanf(格式控制字符串,输入项表);例如:scanf(“%d,%d”,&a,&b);函数说明:1.输入项必须是变量的地址。在C语言中用“&变量名”表示变量的地址,比如,&a表示变量a的地址。2.格式控制字符串可以包含2类字符:格式字符和普通字符。格式字符的用法见表3-1所示。使用scanf()函数时,应特别注意数据的键盘输入操作,其输入规则是除了格式符位置上输入具体的数据外,其他字符照原样输入一遍。下面根据具体的函数
9、格式加以介绍。上一页下一页返回3.2数据的输入输出举例1:scanf(“%d,%d”,&a,&b);假如给a输入12,给b输入36,则正确的输入操作为:12,36举例2:scanf(“%d%d”,&a,&b);假如给a输入12,给b输入36,则正确的输入操作为:1236或者:1236举例3:scanf(“a=%d,b=%d”,&a,&b);假如给a输入12,给b输入36,则正确的输入操作为:a=12,b=36可以看到,这里的“a=”和“b=”不仅没有起到提示作用,还给输入带来不便,因此要达到提示效果,有效的做法是用printf()输出提示信息,尽量减少scanf()函数中的普通字符。例如:pr
10、intf(“pleaseentera,b:”);scanf(“%d,%d”,&a,&b);上述方法在改善人机界面的同时还简化了键盘输入操作,推荐读者采用。上一页下一页返回3.2数据的输入输出举例4:scanf(“%c%c”,&c1,&c2);假如给c1输入A,给c2输入B,则正确的输入操作为:AB错误操作为:AB,错误原因是变量c1取值字符A,但变量c2取值是空格符而不是字符B。提示:(1)使用scanf()函数时,输入项为变量的地址。(2)输入数据时,一定注意键盘的输入操作要与设计的格式控制保持一致,否则变量得不到预期的赋值。小测验inta;floatb;charc;scanf(“%d%f%
11、c”,&a,&b,&c);假如给变量a输入2,给变量b输入12.5,给变量c输入字符a,应该如何进行输入操作?上一页下一页返回3.2数据的输入输出3.2.3字符输入输出函数在C程序中,经常需要对字符数据进行输入和输出操作。字符的输入输出除了可以使用scanf()和printf()函数外,还可以使用专门用于字符输入输出的函数getchar()和putchar()函数。getchar()是字符输入函数,作用是接受键盘输入的一个字符,它没有参数。putchar()是字符输出函数,作用是在屏幕上输出一个字符,它的参数是待输出的字符。【例3-4】getchar()和putchar()函数的使用。#inc
12、ludestdio.hmain()charch1,ch2,ch3;printf(1)Inputacharacter:);ch1=getchar();/*变量ch1接受第1次输入的字符*/上一页下一页返回3.2数据的输入输出getchar();/*第7行*/printf(2)Inputacharacter:);ch2=getchar();/*变量ch2接受第2次输入的字符*/getchar();/*第10行*/printf(3)Inputacharacter:);ch3=getchar();/*变量ch3接受第3次输入的字符*/putchar(ch1);/*输出ch1中的字符*/putchar(
13、ch2);/*输出ch2中的字符*/putchar(ch3);/*输出ch3中的字符*/putchar(n);/*换行*/上一页下一页返回3.2数据的输入输出执行程序时,根据屏幕提示,依次输入字符S、U、N,程序输出结果为:程序的第7行和第10行各有一个函数语句getchar();,其作用是接受上次输入时的回车符,以保证程序的正常执行。上一页返回3.3顺序结构应用实例【例3-5】设变量a=2、b=5,编写程序实现两个变量的值互换。【编程思路】变量是存放数据的容器,现在要交换两个容器中的内容,自然地要借助第3个容器进行周转。【程序代码】#includestdio.hmain()inta,b,t;
14、a=2;b=5;printf(1)a=%d,b=%dn,a,b);/*输出原始数据*/t=a;a=b;b=t;printf(2)a=%d,b=%dnnn,a,b);/*输出交换后的数据*/下一页返回3.3顺序结构应用实例程序输出结果为:小测验针对上面实例,思考下列问题:(1)把程序中的交换过程用语句a=b;b=a;代替,程序的运行结果会怎样?(2)如果是交换任意两个变量的值,程序该如何修改?【例3-6】已知三角形的三个边长,计算三角形的面积。【编程思路】本题按照输入数据、计算处理、输出结果的顺序进行,其中三角形面积可以利用如下数学公式进行计算。areas(sa)(sb)(sc)其中:s1(ab
15、c)2上一页下一页返回3.3顺序结构应用实例【程序代码】#includestdio.h#includemath.hmain()inta,b,c;floats,area;printf(请输入三角形的三边:);scanf(%d,%d,%d,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(三角形的面积=%8.3fn,area);上一页下一页返回3.3顺序结构应用实例程序输出结果为:小测验程序运行时如果输入的三个数据为:1,2,3,运行结果会怎样?【例3-7】加法练习程序。随机产生一道100以内的加法题,要求用户输入答案后,
16、系统再给出正确答案。【编程思路】本题按照以下顺序完成:生成2个随机整数,出题,用户回答,输出用户答案,给出正确答案。为了使程序每次运行生成的两个加数不同,需要使用函数srand()设置随机数种子,它所在的头文件为”time.h”。上一页下一页返回3.3顺序结构应用实例【程序代码】#includestdio.h#includestdlib.h#includetime.hmain()intnum1,num2,answer;srand(time(NULL);/*随机数种子*/num1=rand()%100;/*生成随机数*/num2=rand()%100;/*生成随机数*/printf(%d+%d=
17、?,num1,num2);/*出题*/scanf(%d,&answer);/*用户回答*/printf(用户答案:%d+%d=%dn,num1,num2,answer);printf(正确答案:%d+%d=%dn,num1,num2,num1+num2);上一页下一页返回3.3顺序结构应用实例执行程序,输出结果为:再次执行程序,输出结果为:程序说明:受所学内容的限制,本例采用顺序结构编写,因此不能判断用户答案的正确性。随着学习内容的增加,在以后章节中将逐步完善解决这个问题。上一页返回3.4本章小结通过本章的学习,读者应掌握以下内容:1.C程序通常可分为3大处理部分,即输入数据部分、处理数据部分
18、和输出数据部分。2.顺序结构是指程序中的语句都是按先后顺序执行的,不存在分支、循环和跳转。因此,顺序结构程序是最简单、最基本的一种程序结构。3.数据的输入和输出函数。C语言中数据的输入和输出函数有多种,其中scanf()和printf()是使用频率最高的一对函数。利用它们不仅可以完成各种数据的输入和输出操作,而且可以控制输入输出的格式,以保证输入数据整齐、规范,输出结果清晰而美观。下一页返回3.4本章小结4.使用printf()函数时,格式字符与输出数据之间个数、类型及顺序必须一一对应。输出时,除了格式符位置上用对应输出数据代替外,其他字符被原样显示输出。5.使用scanf()函数时,输入项为
19、变量的地址,输入数据时,特别应注意键盘的输入操作要与设计的格式控制保持一致,否则变量得不到预期的赋值。6.字符输入输出函数getchar()和putchar()只能用于单个字符的输入和输出。上一页返回3.5实训实训1【实训内容】printf()函数。【实训目的】灵活使用printf()函数输出各种数据。【实训题目】运行以下程序,输入指定的2组数据,记录程序输出结果。#includestdio.hmain()floatfx=0.0;printf(Inputafloatnumber:);scanf(%f,&fx);printf(fx=%ftfx=%etfx=%dn,fx,fx,fx);printf
20、(fx=%12.2ftfx=%10.2etn,fx,fx);(1)输入数据为123456。(2)输入数据为456.789下一页返回3.5实训实训2【实训内容】scanf()函数。【实训目的】灵活使用scanf()函数进行数据输入。【实训题目】#includestdio.hmain()inta,b,c;printf(Pleaseentera,b,c:);scanf(%d,%d,%d,&a,&b,&c);printf(a=%d,b=%d,c=%dn,a,b,c);(1)程序执行时,为了使a、b、c分别取值1、2、3,键盘如何操作?(2)将程序中的scanf()函数格式改为scanf(“%d%d%d
21、”,&a,&b,&c);,键盘又如何操作?上一页下一页返回3.5实训实训3【实训内容】顺序结构程序设计【实训目的】编写顺序结构程序,解决简单问题【实训题目】(1)上机调试例3-7,体验随机函数的功能,同时进一步理解顺序结构程序的执行流程。(2)编写程序,计算任意两点之间的距离。编程点拨本题目可以按照以下步骤进行:(1)进行变量定义:设置5个变量,变量名自拟,变量的类型应符合题目需要,例如:一个点的坐标可用x1、y1表示,另一个点的坐标可用x2、y2表示,距离用d表示,数据类型可定为实型;(2)输入两个点的坐标值:用scanf()函数输入;(3)利用数学公式计算距离:用赋值语句计算并保存结果;(
22、4)输出计算结果:用printf()函数输出。上一页返回图3-1顺序结构流程返回表3-1常用格式符格式符printf()scanf()d输出一个十进制整数(int型)输入一个十进制整数(int型)f输出一个单精度实数(float型)输入一个单精度实数(float型)c输出一个字符(char型)输入一个字符(char型)e输出一个指数形式的单精度实数输入一个指数形式的单精度实数ld输出一个十进制整数(long型)输入一个十进制整数(long型)lf输出一个双精度实数(double型)输入一个双精度实数(double型)le输出一个指数形式的双精度实数输入一个指数形式的双精度实数s输出字符串输入字符串提示:格式符必须小写,大写无效。返回表3-2输出数据时控制宽度及对齐方式说明控制宽度及对齐方式说明指定整数和字符数据的总宽度如:%5d、%4c、%8ld右对齐,数据不足总宽度时,前面补空格;数据超出总宽度时,按实际宽度输出指定实数的总宽度如:%10.2f、%12.3lf、%7.2e右对齐,总宽度包括整数位数、小数点、小数位数。数据不足总宽度时,前面补空格;数据超出总宽度时,按实际宽度输出指定左对齐如:%-5d、%-7.2f左对齐,数据不足总宽度时,后面补空格;数据超出总宽度时,按实际宽度输出返回