第3章顺序结构及其应用
学习目标:掌握数据的输入输出操作,编写顺序结构程序,解决简单问题。
学习内容scanf()函数printf()函数,getchar()函数putchar()函数。
3.1 一个顺序结构程序实例
【例3-1编写程序,计算长方形的面积。
【编程思路】
(1) 定义程序所需要的变量:a,b,area,float类型。
(2) 输入长方形的和宽给变量a,b。
(3) 计算长方形的面积:area=a*b
(4) 输出长方形的面积area。
【程序代码】
#include <stdio.h>
main()
{
  float a,b,area;
  printf("请输入长方形的长和宽:");
  scanf("%f,%f",&a,&b);
  area = a*b;
  printf("长方形的面积为:%7.2f\n\n\n",area);
}
执行这个程序,可以看到当输入数据2.5和5时,程序的输出结果为:
程序结构来看,本例中所有的语句代码都是按照先后顺序执行下来的,所以是典型的顺序结构程序。
提示:C程序的三种基本结构是顺序结构、分支(选择)结构和循环结构,它们是结构化程序所具有的通用结构。
从总体走势来看,计算机程序通常可分成三个部分,即输入数据、处理数据和输出数据。计算机通过输入操作接收数据,然后对数据进行处理,再将处理完的数据以有效的方式提供给用户,即输出数据。
本章主要介绍数据的输入输出操作。

3.2 数据的输入和输出
C语言中数据的输入和输出主要是由标准库函数来完成,其中printf()和scanf()是编程时经常会用到的一对输入输出函数,这两个函数在前面的举例中已经多次用到,下面详细介绍它们的使用方法。
3.2.1 格式输出函数
printf()是格式输出函数,其功能是把计算机中的数据输出到显示屏上,并且可以指定输出数据的格式。
函数调用格式为:
printf(格式控制字符串,输出项表);
例如:printf(a=%d,b=%d\n,a,b);
函数功能:按指定的格式将一个或多个任意类型的数据输出到显示屏上。

函数说明:
1、格式控制字符串可以包含三类字符:
(1)格式字符:由%打头后跟格式符。其中格式符由C语言约定,作用是指定数据输出时的格式。表3-1列出了一些常用格式符及其功能说明。
表3-1 常用格式符
格式符
printf()
scanf()
d
输出一个十进制整数(int型)
输入一个十进制整数(int型)
f
输出一个单精度实数(float型)
输入一个单精度实数(float型)
c
输出一个字符(char型)
输入一个字符(char型)
e
输出一个指数形式的单精度实数
输入一个指数形式的单精度实数
ld
输出一个十进制整数(long型)
输入一个十进制整数(long型)
lf
输出一个双精度实数(double型)
输入一个双精度实数(double型)
le
输出一个指数形式的双精度实数
输入一个指数形式的双精度实数
s
输出字符串
输入字符串
o
输出一个八进制整数
输入一个八进制整数
x
输出一个十六进制整数
输入一个十六进制整数
#函数printf作用
放在%和o或x之间,表示输出八进制或十六进制数时带前缀。
(2)转义字符:\n是输出函数中最常用到的转义字符,起回车换行的作用。
(3)普通字符:格式控制字符串中除了格式字符和转义字符以外,其余都是普通字符,普通字符的处理是照原样输出。
2、输出项表:
输出项表列出要输出的数据项,数据项可以是常量、变量或表达式,各输出项之间用逗号分隔。
【例32】通过以下4 个程序段,观察printf()的输出效果:
(1)printf("I am a student. ");输出结果为:
(2)int a=2,b=5;
printf("%d,%d\n",a,b);
printf("a=%d,b=%d\n",a,b);
输出结果为:
提示:格式字符与输出数据之间个数、类型及顺序必须一一对应。输出时,除了格式符位置上用对应输出数据代替外,其他字符被原样显示输出。
(3)char ch='A';
printf("%c,%d\n",ch,ch);
输出结果为:
字符输出时,%c 用于输出字符本身,%d 则输出字符的ASCII 码值。反之一样。
(4)float fx=123.45;
      printf("%f,%e\n",fx,fx);
可以看到,实数输出时系统默认的小数位均为6位。为了更加符合用户的需要,printf()允许用户指定输出数据的宽度以及对齐方式。方法是在%和格式符之间插入控制符,例如:%5d
%7.2f%−5d 等。数据宽度及对齐方式的说明具体(见表3−2)。
表3-2 输出数据时控制宽度及对齐方式说明
控制宽度及对齐方式
说明
指定整数和字符数据的总宽度如:%5d,%4c,%8ld
右对齐,数据不足总宽度时,前面补空格;数据超出总宽度时,按实际宽度输出
指定实数的总宽度如:%10.2f,%12.3lf,%7.2e
右对齐,总宽度包括整数位数,小数点,小数位数;数据不足总宽度时,前面补空格;数据超出总宽度时,按实际宽度输出。
指定左对齐如:%-5d,%-7.2f
左对齐,数据不足总宽度时,后面补空格;数据超出总宽度时,按实际宽度输出
【例3−3】通过下面程序,观察printf()的输出效果。
#include "stdio.h"
main()
{
    int a=12;
    float fx=12.58;
    printf("a=%5d\ta=%-5d\n",a,a);
    printf("fx=%f\tfx=%7.2f\tfx=%-7.2f\n",fx,fx,fx);
printf("fx=%e\tfx=%12.2e\tfx=%-12.2e\n\n\n",fx,fx,fx);
}
程序输出结果为:

3.2.2 格式输入函数
scanf()函数是格式输入函数,其功能是按指定格式输入各种类型的数据,输入的数据将存放到指定的变量中。
函数调用格式为:
scanf(格式控制字符串,输入项表);
例如:scanf("%d,%d",&a,&b);
函数说明:
(1)输入项必须是变量的地址。在C语言中用“&变量名”表示变量的地址,比如,&a表示变量a的地址。
(2)格式控制字符串可以包含两类字符:格式字符和普通字符。格式字符的用法见表3-1所示。
使用scanf()函数时,应特别注意数据的键盘输入操作,其输入规则是除了格式符位置上输入具体的数据外,其他字符照原样输入一遍。

下面根据具体的函数格式加以介绍。
举例1:scanf("%d,%d",&a,&b);
假如给a输入12,给b输入36,则正确的输入操作为:12,36<回车>
举例2:scanf("%d%d",&a,&b);
假如给a输入12,给b输入36,则正确的输入操作为: 12<空格> 36<回车>或者:12<回车>36<回车>
举例3:scanf("a=%d,b=%d",&a,&b);
假如给a输入12,给b输入36,则正确的输入操作为:
a=12,b=36<回车>
可以看到,这里的"a="和"b="不仅没有起到提示作用,还给输入带来不便,因此要达到提示效果,有效的做法是用printf()输出提示信息,尽量减少scanf()函数中的普通字符。例如:
printf("please enter a,b:");
scanf("%d,%d",&a,&b);
上述方法在改善人机界面的同时还简化了键盘输入操作。
举例4:scanf("%c%c",&c1,&c2);
假如给c1输入'A',给c2输入'B',则正确的输入操作为:AB<回车>
错误的操作为:A<空格>B<回车>,错误的原因是变量c1取值字符'A',但变量c2取值是空格符而不是字符'B'.
提示:(1)使用scanf()函数时,输入项为变量的地址。
(2)输入数据时,一定注意键盘的输入操作要与设计的格式控制保持一致,否则变量得不到预期的赋值。
小测验:
int a;  float b;  char c;
scanf("%d%f%c",&a,&b,&c);
假如给变量a输入2,给变量b输入12.5,给变量c输入字符'a',应该如何进行输入操作?

3.2.3  字符输入输出函数
在C程序中,经常需要对字符数据进行输入和输出操作。字符的输入输出除了可以使用scanf()和printf()函数外,还可以使用专门用于字符输入输出的函数getchar()函数和putchar()函数。
getchar()函数是字符输入函数,作用是接受键盘输入的一个字符,它没有参数。
putchar()是字符输出函数,作用是在屏幕上输出一个字符,它的参数是待输出的字符。
【例3-4】getchar()和putchar()函数的使用。
#include <stdio.h>
main()
{
    char ch1,ch2,ch3;
    printf("(1)Input a character:");
    ch1=getchar();
    getchar();
    printf("(2)Input a character:");
    ch2=getchar();
    getchar();
    printf("(3)Input a character:");
    ch3=getchar();
    putchar(ch1);
    putchar(ch2);
    putchar(ch3);
    putchar('\n');
}
执行程序时,根据屏幕提示,依次输入字符S、U、N,程序输出结果为:
程序的第7行和第10行各有一个函数语句getchar();,其作用是接受上次输入时的回车符,以保证程序的正常执行。
1、讲实验书习题;
2、课堂小练习,学生练习输入并编译运行给定的程序(要求:尽量详细地给出每一步语句的注释,且在程序末尾给出程序完成的功能).
例如:
【课后作业1】《C语言程序设计实验教程》p98:2,4,5,7。
注意:将作业放在一个文件名为“[1]学号+姓名”的word文档中后上交。(数字1表示第1次大作业
作业上交方式:
在机房的电脑上打开“计算机”,在地址栏输入:ftp://10.120.87.100后回车,将word文档复制-粘贴到打开的窗口即可。