《C语言程序设计》课程教案表
授课题目
第三章 程序的控制结构(2)——顺序结构
课时安排
2
授课时间
教学目的和要求
1.掌握:格式输入、输出函数的调用。
2.熟悉:顺序结构程序设计的方法及应用。
教学内容
1.基本内容:(1)数据的输入和输出——格式输入、输出(2)程序举例
2.重点及难点:格式输入、输出的调用
讲课进程和时间分配
1、格式输出函数printf( ) (30分钟)
(1)格式输出函数printf()
格式:printf(输出格式,输出表列);
功能:按用户指定的格式,把指定的任意类型的数据显示在屏幕上。
输出格式由格式说明、按原样输出的字符、转义符三部分组成。
①格式说明:由%和格式字符组成,如%c和%f等,作用是将要输出的数据转换为指定格式后输出。
②原样输出:即普通字符在输出时原样照印,在显示中起提示作用。
③转义符为:\n  换行、\f  换页 或 \t光标移到下一个制表位等。
1)不含有%的普通字符串。此时第二部分没有参数,其结果是将该字符串照原样输出。
其中可含有转义字符,如\n
例如:printf(hello,the worle!\n)
2)带有格式转换说明符的格式输出。
格式转换说明符:由%字符开始,到格式字符终止。 注意:格式转换说明符的个数应与后面的参数个数相等,且前后位置要一一对应
例如:printf(“%d%d%c”,a,b,c);
3)普通字符串和格式转换说明符混合使用
    例如: main()
        {
        printf(2+3=%d,2*3=%d\n,2+3,2*3);
        }
        输出结果为: 2+3=5,2*3=6
(2)printf中可用的格式字符及说明
1)d格式符。用来输出十进制带符号整数(正数不输出符号),该格式有以下用法:
① %d,按整型数据的实际长度输出。
②%md,m指出了要输出数据的宽度。若数据位数小于m,则左端补空格,若数据位数大于m,则按实际位数输出。
    例如: a=12;b=1234; printf(“%3d,%3d”,a,b); 则输出的结果为_12,1234
③%ld,输出长整型数据。
    例如:long x=123456;  printf(%ld,x); 此处若用%d就错了,因为整型的范围为-32768~32767。
2)o格式符。以八进制数无符号形式输出整数,即符号位作为数值部分输出。
例如:
int a=-1;
printf(“%d,%o”,a,a);
输出结果为:-1,177777
这是因为-1在内存中以补码形式存放(见图3-2)。八进制数为从低位开始,以三位一组划分为一个八进制数。
3)x格式符。以十六进制数无符号形式输出整数。
例如:
int a=-1;
printf(“%x,%o,%d”,a,a,a);
输出结果为:ffff,177777,-1
十六进制数为从低位开始,见图3-2,以四位一组划分为一个数。
4)u格式符。以十进制数无符号形式输出整数。一个有符号的(int)型数据可以用%d格式输出,也可以用%u格式输出。要注意两类数据的取值范围大小。
例如:无符号数据的输出。
main()
{
  unsigned int x=65535;
  int y=-1;
  printf(“x=%d,%o,%x,%u\n”,x,x,x,x);
  printf(“y=%d,%o,%x,%u\n”,y,y,y,y);
}
运行结果为:
x=-1,177777,ffff,65535
y=-1,177777,ffff,65535
    即-1的二进制形式以无符号形式输出时为整数65535。
5)c格式符。用来输出一个字符。
例如:char x=A;
printf(“%c,%d\n”,x,x);
运行结果为:A,65
可以看出,一个范围在0~255的整数,既可以用%d格式输出,也可以用%c格式输出。输出该整数或者整数对应ASCII的字符。
6)s格式符。用来输出一个字符串,该格式有以下用法:
① %s例如:printf(%s,HELLO);运行结果为:HELLO
② %±ms,如果%ms字符串的实际宽度小于m,右对齐,左端补空格,%-ms,字符串左对齐,右端补空格;否则,不受m限制,输出实际宽度。
③%±m.ns,若%m.ns取字符串左端n个字符,输出在m列的右端,左端补空格;%-m.ns,取字符串左端n个字符,输出在m列的左侧,右侧补空格;若m<n,则m自动取n 值输出n个字符。
说明:s个格式符在讲到字符数组的时候会涉及到,这里不做详细讲解。
【例3.2】字符串的输出。
main()
{
  printf(“%2s,%7.2s,%.3s,
  %-5.3s\n”,”start”, ”start”, ”start”, ”start”);
}
运行结果为:
start,└┘└┘└┘└┘└┘st,sta,sta└┘└┘
7)f格式符。以小数形式输出实数,有以下用法:
① %f,整数部分全部输出,并输出六位小数。
② %m.nf,输出数据共占m列,其中有n位小数。若数的总长度<m,则左端补空格。
③ %-m.nf,与%m.nf用法基本一样,只是数据输出时靠左端,右端补空格。
例如:输出实数时指定小数位数。
main()   
{
  float x=123.456;
  printf(“%f,%10f,%10.2f,%.2f,%-10.2f\n”,x,x,x,x,x);
}
运行结果为:
123.456001,123.456001,└┘└┘└┘└┘123.46,123.46,123.46└┘└┘└┘└┘
8)e格式符。以指数形式输出实数,有以下用法:
① %e,由系统自动指定给出6位小数,指数部分占5位(如e+001),其中e占1位,指数占3位。数值按规范化指数形式输出(即小数点前有且只有1位非零数字)。
例如: printf(“%e”,12.345);
输出结果为:1.234500e+001
② %m .ne和%-m .ne。其中m限定了输出宽度,n限定了输出小数位数,若没有-且宽度小于m,则数据靠右端,左端补空格。否则,数据靠左端,右端补空格。
例如:float x=123.456;
printf(“%e,%10e,%10.2e,%.2e,%-10.2e”,x,x,x,x,x);
输出结果为:1.234561e+002,1.234560e+002,└┘1.23e+002,1.23e+002,1.23e+002└┘
9)g格式符。自动选择f格式或e格式,输出时占宽度较小的一种,且不输出无意义的零。
例如:float x=123.456;
printf(“%f,%e,%g”,x,x,x);
输出如下:
123.456000,1.234560e+002,123.456
上例可以看出,数x用%f格式输出占10列,用%e格式输出占13列,用%g格式输出时选择了宽度较小的一种,并且无意义的零没有输出。
2、格式化输入函数scanf( )  (25分钟)
格式化输入函数的功能:按用户指定的格式从键盘上同时输入多个相同或不同类型的数据,并将键盘输入的数据转换为指定的格式存放到对应变量的内存地址中。
格式: scanf(格式字符,地址列表)
    例如: scanf(%d %d %d,&a,&b,&c);
(1)格式字符
  格式字符是由%和格式符组成的用双引号括起来的字符串,如%c、%d等。作用是将输入数据转换为指定格式后,存入到由地址表所指的相应变量中。scanf函数中使用的格式字符如表3-2所示。
格 式 字 符
说      明
d
输入十进制整数
o
输入八进制整数
x
输入十六进制整数
c
输入单个字符
s
输入字符串
f
输入浮点数(小数或指数形式)
e
输入浮点数(指数形式)
hd,ho,hx
输入短整型数据
ld,lo,lx
输入长整型数据
lf,le
输入长浮点型数据(双精度)
(2).地址表列
  scanf函数中的地址表列部分是由变量的地址组成的,如果有多个变量,则各变量之间用逗号隔开。地址列表中的地址,是由地址运算符&后跟变量名组成的,例如,&a、&b分别表示变量a和变量b的地址。这个地址是编译系统在内存中给a、b变量分配的存储空间,用户不必关心具体的地址是多少。
  scanf(%d%d%d,a,b,c)× 原因: scanf()只能采用地址表列,不能采用变量表列
【例3.4】从键盘上输入一个整型数、一个浮点数和一个字符,分别存入变量i、f和c中。
    main()
    int i;
    float f;
    char c;
    scanf(″%d,%f,%c″,&i,&f,&c);
    printf(″i=%d,f=%lf,c=%c″,i,f,c);
运行程序,输入10,2.1,a
显示:i=10f=2.100000c=a
说明:在使用scanf函数时,应该注意以下几个问题:
1)在scanf函数格式字符部分中的每个格式说明符都必须在地址表中有一个变量与之对应,例如:
int  i;  float f;  char c;
scanf(%d%f%c,&i,&f,&c);
上述程序中,格式说明符必须要与相应变量的类型一致,即:%d与&i对应;%f与&f对应;%c与&c对应。
(2)当格式说明符之间没有任何字符时,在输入数据时,两个数据之间要使用空格Tab回车键做间隔。
例如:Scanf(函数printf%d%d,&i,&j);    /*格式说明中没有其它字符*/
输入数据:3└┘4 ↙     
或:3Tab键4↙ 
或:3  ↙ 4 ↙
3 在格式输入中,不能有转义符‘\n’,否则语法错。如果格式说明符之间包含其他字符,则输入数据时,应输入与这些字符相同的字符做间隔,例如:
scanf“a=%db=%d”&a&b);
输入数据时应,a=3b=4    
4)当用%c格式输入时,空格、转义符都作为有效字符输入。例如:
Scanf“%c %c %c”&c1 &c2 &c3 );
若输入: a └┘b └┘c     c1的值为ac2的值为└┘,c3的值为b
正确的方法为:abc
5)输入实数时,不能规定精度。例如:
Scanf“%7.2f\n”&a);是错误的。
(6)如果在%后有一个*字符,表示读入的数据跳过,不赋给任何变量。
例scanf(“%2d %3d %*3d%2d ,&a,&b,&c);
  printf(a=%d,b=%d,c=%d \n,a,b,c);
  运行:输入12└┘345└┘678└┘92↙
  显示:a=12,b=345,c=92
给学生着重强调:若有多个scanf输入函数,需要从第2个scanf函数起,每个均需要在双引号内最前面加一个空格字符,以吸收上一个数据的回车键。
运用scanf()时应注意的一些问题
1)如果在格式控制字符串中除了格式转换说明符以外还有其它字符,则在输入数据时在对应位置应当输入与这些字符相同的字符。
例1:scanf(%d,%d,%d,&a,&b,&c); 应当输入3,4,5 <CR>不能输入3 4 5。
百度文库 - 让每个人平等地提升自我百度文库 - 让每个人平等地提升自我2)在输入一个或多个数据时,以回车键作为结束数据输入。
3)在输入多个数值型数据时,则在输入的数据间至少用一个空格或TAB键或回车键分隔。
例如:
int a,b,c;
scanf(%d%d%d,&a,&b,&c);
输入:12  34 (tab)567<CR>后
结果:a=12,b=34,c=567
float a,c;  char b;
scanf(%d%c%f,&a,&b,&c);
输入:1234a123o.26<CR>后,
a=1234.0,b=a,c=123.0(而不是希望的1230.26)
3、程序设计举例(30分钟)
(1)程序设计的一般方法
程序=算法+数据结构
算法:为解决一个实际问题所采取的方法和步骤.
数据结构即程序中程序中用到哪些数据,如何定义和表示这些数据.
  C语言编程前,应针对具体的问题,分析出解决问题的算法与解题思路。
一般先构思出程序思路,对于复杂的程序,可以再依据思路写出流程图,最后根据流程图写出程序代码。
起止框
  输入输出框
  判断框
处理框
编写程序应分三步:①定义变量;②输入数据;③计算并输出结果。
编好程序后,静态检查程序,即按计算机运行的过程,用数据进行检验运行结果,以此来判断程序的正确与否。
【例3.5】输入三角形三条边,求其面积。
设计思路:三角形的面积计算公式用海伦公式:
area=
其中:a,b,c为三角形的边长,s是三角形的半周长,area为三角形的面积.
分析:1.定义需要使用的变量a,b,c,s和area。
          2.输入变量a,b,c的值。
          3.计算三角形的半周长s的值。
          4.计算三角形的面积area的值。
          5.输出变量area的值。
程序代码:
#include <math .h>
main( )
{
float  a,b,c,s,area;
    scanf(%f ,%f ,%f,&a,&b,&c );
    s=1.0/2*(a+b+c);
    area=sqrt(s*(s-a)*(s-b)*(s-c));
    printf(a=%7.2f,b=%7.2f,c=%7.2f,S=%7.2f \n, a,b,c,s);
    printf(area =%7.2f \n ,area);
  }
运行:输入3,4,6↙
显示:a= └┘└┘└┘3.00, b=└┘└┘└┘4.00,    c=└┘└┘└┘6.00, S= └┘└┘└┘6.50
    area = └┘└┘└┘5.33
注意:①程序中的sqrt()是求平方根函数,需要调用数学库函数,所以,必须在程序的开始加上:#include <math .h>命令。
    ②若把公式S=1.0/2*(a+b+c);写为S=1/2*(a+b+c);则最后的结果=0,因为1/2=0。
    ③*不能省略
练习:编程序:交换两数的值,并显示交换后的结果。
(假设两数存放在变量a,b中)
【例3.6】输入三个小写字母,输出其ASCII码和对应的大写字母。
思路:当用格式%c来输入字符时,接收的是输入字符所对应的ASCII值。大小写字母间相差32,如:大写字母A的ASCII值为65,小写字母a的ASCII值为97。所以大写字母转换为小写字母应加上32。程序代码:
main()
{
  char a,b,c;
  printf("input character a,b,c:\n");
  scanf("%c%c%c",&a,&b,&c);
  printf("%d,%d,%d\n%c,%c,%c\n",a,b,c,a-32,b-32,c-32);
}
运行:input character a,b,c:
输入:abc↙
显示:97,98,99
      A,B,C
4、总结(5分钟)
讨论、思考题、作业:
实验指导书习题
参考资料(含参考书、文献等):
叶斌 陈世强. C语言程序设计. 北京:科学出版社
授课类型:理论课  讨论课□  实验课□  练习课□  其他□
教学方式:传统授课 双语□  讨论□  示教□  指导□  其他□
教学资源:多媒体  模型□  实物□  挂图□  音像□  其他□