1
第四章 顺序程序设计主讲 福州大学数学与计算机学院 韩晓芸
E-mail,hxy@fjtv.net
第四章 顺序程序设计
2
第四章 顺序程序设计第一节 C语句概述第二节 引例第三节 赋值语句第四节 字符数据的输入输出第五节 格式输入输出第六节 顺序程序设计举例第四章 顺序程序设计
3
第一节 C语句概述
控制语句:
if() ~ else ~,条件语句
for() ~,循环语句
while() ~,循环语句
do ~ while(),循环语句
continue,结束本次循环语句
return,从函数返回语句
switch,多分支选择语句
break,中止执行 switch或循环语句
goto 转向语句第四章 顺序程序设计
4
第一节 C语句概述
函数调用语句:
一次函数调用 加 一个分号 构成一个语句。
例:
printf(“hello”);
第四章 顺序程序设计
5
第一节 C语句概述
表达式语句:
由一个表达式构成的语句例:
a=3 是一个赋值表达式而 a=3; 是一个赋值语句注,一个语句必须在最后出现分号,分号是语句中不可缺少的一部分 。 任何表达式都可以加上分号而成为语句。
第四章 顺序程序设计
6
第一节 C语句概述
空语句:;
即只有一个分号的语句,它什么也不做。
注:
有时用来做被转向点;
有时用来做循环语句中的循环体。
第四章 顺序程序设计
7
第一节 C语句概述
复合语句:
可以用 {}把一些语句括起来成为复合语句,又称为分程序。 复合语句中最后一个语句末的分号不能忽略不写。 示例:
{z=x+y;
t=z/100;
printf(“%f”,t); }
第四章 顺序程序设计
8
第二节 引例
引例 计算任意两个整数的和并输出结果 。
求任意两个数和的算法的伪码:
输入 a,b
sum← a+b
输出 sum
第四章 顺序程序设计
9
main( )
{
int a,b,sum;
scanf("%d,%d",&a,&b);
sum=a+b;
printf("sum=%d",sum);
}
输入 a,b
求和 输出和 sum
例 1:
第四章 顺序程序设计
10
第三节 赋值语句
由 赋值表达式加上一个分号 构成,作用是将一个确定的值赋给一个变量。
格式变量名 =表达式 ;
说明
– 先计算,后赋值。
– 赋值语句中的,=”是赋值号而不是数学意义上的等号。
– 赋值号两侧的内容不能任意调换。
第四章 顺序程序设计
11
看下面程序的运行结果
?
main()
{int a=1,b=2;
b=a;
printf(“%d,%d",a,b);
}
如果把 b=a; 换成 a=b;,程序的结果如何?
例 2:
第四章 顺序程序设计
12
第四节 字符数据的输入输出
字符输出函数
– 格式,putchar(c)
– 功能,将 c值所对应的字符输出到标准输出设备上 (一般为显示器 )。 c可以是整型或字符型
。一次只能输出 一个字符,也可以输出控制符,如 putchar(?\n?) 输出一个换行符,即光标 移到下一行 。
第四章 顺序程序设计
13
例 3:
#include "stdio.h"
main( )
{char ch1,ch2;
ch1=?A?; ch2=?B?;
putchar(ch1);
putchar(ch2); }
运行程序,运行结果为
AB
putchar()函数也可以输出 转义字符,如:
putchar(‘ \101’) 即输出字符 ‘ A’
第四章 顺序程序设计
14
第四节 字符数据的输入输出
字符输入函数
– 格式,getchar( ),getch()或 getche()
– 功能,从标准设备 (一般是键盘 )输入 一个字符 。 字符输入 函数 没有参数,函数值就是从设备输入的字符。
三个函数有一些差别:
– getchar()函数 在由键盘键入一个字符后,
必须按回车键,而 getch()和 getche()函数不需要。
– getche()函数和 getchar()会显示出所输入的字符,而 getch()函数不响应输入的字符。
第四章 顺序程序设计
16
第四节 字符数据的输入输出例 6,从键盘输入三个大写字母,将其转换成小写字母输出 。
#include "stdio.h"
main( )
{char c1,c2,c3;
c1=getchar( ); c2=getchar( );c3=getchar( );
c1=c1+32;c2=c2+32;c3=c3+32;
putchar(c1);putchar(c2);putchar(c3); }
运行程序时,若输入 CPU
运行结果为输出,
cpu
第四章 顺序程序设计
17
第五节 格式输入输出
1、格式输出函数
– 格式,printf( 格式控制,输出表列)
– 功能,printf函数可以将 任意类型的多个数据 输出到标准输出设备上 (一般为显示器 )。
第四章 顺序程序设计
18
普通字符 格式说明 转义字符格式控制由双引号括起来的字符串由,%”和 格式字符 组成,
它的作用是将输出的数据按照指定的格式输出。
需要原样输出的字符。
用于控制输出。
第四章 顺序程序设计
19
格式字符 含 义
d 十进制 形式输出 带符号整数(正数输出不带符号 )
o 八进制 形式输出 无符号整数(不输出前导 0)
x 十六进制 形式输出 无符号整数(不输出前导 0x)
u 十进制形式输出 无符号整数
c 输出 一个字符
s 输出 一个字符串
f 小数 形式输出单、双精度实数 (隐含输出 6位小数)
e 指数 形式输出单、双精度实数 (数字部分有 6位小数)
g 当指数小于 -4或大于给定的精度时用 %e格式,否则用
%f格式。
第四章 顺序程序设计
20
附加格式说明符字母 l 用于长整型,可加在格式符
d,o,x,u之前
m(整数 ) 数据最小宽度
.n(整数 ) 对实数,表示输出 n位小数 ;对字符串,表示截取的字符个数
- 输出的数字或字符在域内向左靠格式字符 说明第四章 顺序程序设计
21
第五节 格式输入输出
1,d格式字符 有以下几种格式字符:
( 1) %d 按整型数据的 实际 长度输出。
( 2) %md m为要指定输出字段宽度,若 m
小于实际长度,则按实际长度输出。
例 a=5; b=1234;
printf(,a=%4d,b=%2d”,a,b);
输出结果 a= 5,b=1234
第四章 顺序程序设计
22
第五节 格式输入输出
( 3) %ld 输出 长整型 数据。
如 long int a=□ 123456789;
因为 整型数据范围是,-32768~32767
所以要写为,printf(,%ld”,a);
或 printf(,%10ld”,a);
第四章 顺序程序设计
23
第五节 格式输入输出
2,(字母 ) o 格式符 以 8进制形式输出整数。
如,a=123; b=-1;
printf(,a=%o,b=%o”,a,b);
printf (“%8o”,b) ;
输出结果 a= 173,b= 177777
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-1在内存单元中存放 形式 (以补码形式存放)如下:
177777
第四章 顺序程序设计
24
第五节 格式输入输出
3,x 格式符 以 16进制形式输出整数。
如 a=123; b=-1;
printf(,a=%x,b=%x”,a,b);
输出结果 a= 7b,b= ffff
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-1在内存单元中的存放形式(以补码形式存放)如下:
第四章 顺序程序设计
25
第五节 格式输入输出
4,u 格式符用来输出 unsigned型数据,即无符号数,以 10进制输出。 int 型可用 %u输出,而
unsigned型,也可用 %d输出。 见下面的例子 。
第四章 顺序程序设计
26
第五节 格式输入输出例子 7,
#include“stdio.h”
void main()
{ unsigned int a=65535; int b=-2;
printf(,a=%d,%o,%x,%u\n”,a,a,a,a) ;
printf(,b=%d,%o,%x,%u\n”,b,b,b,b) ;}
输出结果
a=-1,177777,ffff,65535 1111111111111111
b=-2,177776,fffe,65534 1111111111111110
第四章 顺序程序设计
27
第五节 格式输入输出
5,c 格式符 用来输出一个字符
如 char c=?A?;
printf(,%c”,c);
输出结果 A
printf(,%3c”,c);
输出结果□□ A
第四章 顺序程序设计
28
第五节 格式输入输出
6,s 格式符用来输出一个字符串,有几种用法:
( 1) %s 如 printf(,%s”,,CHINA”);
输出结果 CHINA (注意:不包括双引号)
( 2) %ms m<串长,突破;否则按右对齐,左补空格 。
( 3) %-ms m<串长,突破;否则按左对齐,右补空格 。
( 4) %m.ns 输出占 m个字符,取自左起 n个字符,且向右对齐,左补空格。
第四章 顺序程序设计
29
第五节 格式输入输出
6,s 格式符用来输出一个字符串,有几种用法:
( 5) %-m.ns m,n含义同上,不过是左对齐,右补空格例 8,printf(,%3s,%7.2s,%.3s,%-5.2s\n”,
,CHINA”,“CHINA”,
“CHINA”,,CHINA”);
输出结果
CHINA,□□□□□ CH,CHI,CH□□□
第四章 顺序程序设计
30
第五节 格式输入输出
7,f 格式符用来输出实数,以小数形式输出,有以下几种:
( 1) %f
系统指定输出整数部分,小数部分输出 6位 ;
单精度实数有效位数一般为 7位。 ( 见例 9)
双精度数也可用 %f格式输出,有效位数一般为 16位。( 见例 10)
第四章 顺序程序设计
31
第五节 格式输入输出
7,f 格式符用来输出实数,以小数形式输出,有以下几种:
( 2) %m.nf
指定输出占 m个字符,小数位占 n位,右对齐。
( 3) %-m.nf
指定输出占 m个字符,小数位占 n位,左对齐。
( 见例 11)
第四章 顺序程序设计
32
第五节 格式输入输出
7,f 格式符例 9:
main()
{float x,y;
x=111111.111;
y=222222.222;
printf(“%f”,x+y);}
运行结果为,333333.328125
第四章 顺序程序设计
33
第五节 格式输入输出
7,f 格式符例 10:
main()
{double x,y;
x=1111111111111.111111111;
y=2222222222222.222222222;
printf(“%f\n”,x+y);}
运行结果为,3333333333333.333010
第四章 顺序程序设计
34
第五节 格式输入输出
7,f 格式符例 11:
main()
{ float f=123.456
printf(“%f %10f %10.2f %.2f %-
10.2f\n”,f,f,f,f,f); }
运行结果为:
123.456001--123.456001------123.46--123.46--123.46----
第四章 顺序程序设计
35
第五节 格式输入输出
8,e 格式符
( 1) %e
不指定输出数据所占的宽度和数字部分小数的位数,由系统自动指定 给出 5位小数,指数部分占 4位 (如 e+02 ),其中,e占 1位,指数符号占 1位,指数占 2位 。数值按规范化指数形式输出(即 小数点前必须有且只有 1位非零数字 )。
例如,printf(,%e”,123.456);
输出结果 1.23456e+02
第四章 顺序程序设计
36
第五节 格式输入输出
8,e 格式符
( 2) %m.ne 和 %-m.ne
例 12:
假如 f=123.456;
printf(,%e,%10e,%10.2e,%.2e,
%-10.2e”,f,f,f,f,f);
输出结果
1.23456e+02,1.23456e+02,
□□□ 1.2e+02,1.2e+02,1.2e+02□□□
第四章 顺序程序设计
37
第五节 格式输入输出
9,g 格式符根据数值输出 自动选 f格式或 e格式 (选输出时所占字符长度少的一种。)
例 13,f=123.468;
printf(,%f,%e,%g”,f,f,f);
输出结果:
123.468002,1.23468e+02,123.468□□□
第四章 顺序程序设计
38
第五节 格式输入输出
在使用 printf函数时,有以下几点要说明:
( 1) 除 X,E,G外,其他格式字符必须用小写,如不能把 %d写成 %D。
( 2)可在格式控制串中用 ‘转义字符’ \n,\b,
\f,
\377等。
( 3) 连续用两个 %,可输出 % 字符,
如,printf(,%f%%”,1.0/3);
输出结果为,0.333333%
再如,printf(,\?D,\\cps.wps\?”);
输出结果为,‘ D,\cps.wps?
第四章 顺序程序设计
39
综合示例,
main( )
{int a,b; float x; char c;
a=123; b=-1; x=3.14; c ='A';
printf("%d,%4d\n",a,a);
printf("%d,%x,%o,%u\n",b,b,b,b);
printf("%c,%d\n",c,c);
printf("%f,%6.1f\n",x,x);}
1111 1111 1111 1111
-1在内存中的存放
(补码形式 )
123,123
运行结果写出运行结果
3.140000,3.1
-1,ffff,177777,65535
A,65
第四章 顺序程序设计
40
第五节 格式输入输出
2、格式输入函数
– 格式,scanf( 格式控制,地址表列)
– 功能,scanf函数可以从标准输入设备输入任意类型的多个数据 (一般为显示器 )。
– 注意,输入数不能规定精度。
格式控制与 printf
函数中的含义相同。
第四章 顺序程序设计
41
当输入一串数据时,系统如何区分每个数据呢?
(1)根据 格式字符的含义 分隔字符
scanf("%d%c%f",&a,&b,&c);
若输入数据,
120a45.6
则,a=120,b='a',c=45.6
第四章 顺序程序设计
42
当输入一串数据时,系统如何区分每个数据呢?
(2) 系统 按格式串指定的长度 截取所需的数据
scanf("%3d%2d",&a,&b);
输入数据:
12345
则,a=123,b=45
第四章 顺序程序设计
43
当输入一串数据时,系统如何区分每个数据呢?
(3) 用隐含的分隔符在输入数据中用 空格或换行符 分隔数据。
scanf("%d%d%d",&a,&b,&c);
输入数据,3 4 5
或输入,3 4(回车)
5(回车)
则,a=3,b=4,c=5
第四章 顺序程序设计
44
当输入一串数据时,系统如何区分每个数据呢?
(4)用 %后的,*” 附加说明符来表示跳过它相应的数据
scanf("%d,%*d,%d",&a,&b);
如果输入:
3,4,5
则:
a=3,b=5,第二个数据跳过 不赋给任何变量。
第四章 顺序程序设计
45
(5) 使用显示分隔符在格式说明符中若还可以有其它字符,在输入字符时应输入与这些字符相同的字符。
scanf("%d,%d,%d",&a,&b,&c);
应输入数据:
3,4,5
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
应输入数据:
a=3,b=4,c=5
第四章 顺序程序设计
46
(6)用,%c”格式输入字符时空格字符 和 转义字符 都作为有效字符输入:
scanf("%c%c%c",&c1,&c2,&c3);
如果输入,a b c
则:
字符‘ a?送给 c1,空格送给 c2,字符’ b?送给
c3
第四章 顺序程序设计
47
注意,
( 1) 输入时不能规定精度如 scanf(,%6.1f”,&a)
是不合法的。
( 2)格式控制之后是 地址表列 而不是变量表列
scanf(“%d,%d”,&a,&b);是正确的,而
scanf(“%d,%*d,%d”,a,b);是错误的。
第四章 顺序程序设计
48
第六节 顺序程序设计举例例 14:
给出一个大写字母,要求按字母顺序打印出 3个字母,指定的字母是三个字母中间的一个字母。
输入的字母不能为 A或 Z 。
#include "stdio.h"
main( )
{char c1,c2,c;
printf("Please enter a
character:\n");
c=getchar();
c1=c-1;c2=c+1;
putchar(c1); putchar(c);
putchar(c2); }
第四章 顺序程序设计
49
第六节 顺序程序设计举例例 15
从键盘 输入一个大写字母,要求改用小写字母输出(用前面介绍过的大小写字母间转换的方法)
#include " stdio.h"
main( )
{char c1,c2;
c1=getchar();
printf("%c,%d\n",c1,c1);
c2=c1+32;
printf("%c,%d\n",c2,c2);
}
第四章 顺序程序设计
50
第六节 顺序程序设计举例例 16
输入三角形的三边长,要求用下述公式计算三角形的面积:
sqrt(s(s-a)(s-
b)(s-c)),其中
s=(a+b+c)/2
#include "math.h"
main( )
{float a,b,c,s,area;
printf("enter a,b,c:\n");
scanf("%f,%f,%f",&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%7.2f,b=%7.2f,c=%7.
2f\n",a,b,c);
printf("area=%7.2f\n",area);}
第四章 顺序程序设计
51
作业
1、输入一个小写字母,把该字母转换成大写,并输出。
2、输入一个大写字母,把该字母转换成小写,并输出。
3、设圆半径 r=1.5,圆柱高 h=3,求圆周长、圆面积、圆柱体积。用 scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后两位。请编程序。
第四章 顺序程序设计
52
休息一会儿。。。
第四章 顺序程序设计主讲 福州大学数学与计算机学院 韩晓芸
E-mail,hxy@fjtv.net
第四章 顺序程序设计
2
第四章 顺序程序设计第一节 C语句概述第二节 引例第三节 赋值语句第四节 字符数据的输入输出第五节 格式输入输出第六节 顺序程序设计举例第四章 顺序程序设计
3
第一节 C语句概述
控制语句:
if() ~ else ~,条件语句
for() ~,循环语句
while() ~,循环语句
do ~ while(),循环语句
continue,结束本次循环语句
return,从函数返回语句
switch,多分支选择语句
break,中止执行 switch或循环语句
goto 转向语句第四章 顺序程序设计
4
第一节 C语句概述
函数调用语句:
一次函数调用 加 一个分号 构成一个语句。
例:
printf(“hello”);
第四章 顺序程序设计
5
第一节 C语句概述
表达式语句:
由一个表达式构成的语句例:
a=3 是一个赋值表达式而 a=3; 是一个赋值语句注,一个语句必须在最后出现分号,分号是语句中不可缺少的一部分 。 任何表达式都可以加上分号而成为语句。
第四章 顺序程序设计
6
第一节 C语句概述
空语句:;
即只有一个分号的语句,它什么也不做。
注:
有时用来做被转向点;
有时用来做循环语句中的循环体。
第四章 顺序程序设计
7
第一节 C语句概述
复合语句:
可以用 {}把一些语句括起来成为复合语句,又称为分程序。 复合语句中最后一个语句末的分号不能忽略不写。 示例:
{z=x+y;
t=z/100;
printf(“%f”,t); }
第四章 顺序程序设计
8
第二节 引例
引例 计算任意两个整数的和并输出结果 。
求任意两个数和的算法的伪码:
输入 a,b
sum← a+b
输出 sum
第四章 顺序程序设计
9
main( )
{
int a,b,sum;
scanf("%d,%d",&a,&b);
sum=a+b;
printf("sum=%d",sum);
}
输入 a,b
求和 输出和 sum
例 1:
第四章 顺序程序设计
10
第三节 赋值语句
由 赋值表达式加上一个分号 构成,作用是将一个确定的值赋给一个变量。
格式变量名 =表达式 ;
说明
– 先计算,后赋值。
– 赋值语句中的,=”是赋值号而不是数学意义上的等号。
– 赋值号两侧的内容不能任意调换。
第四章 顺序程序设计
11
看下面程序的运行结果
?
main()
{int a=1,b=2;
b=a;
printf(“%d,%d",a,b);
}
如果把 b=a; 换成 a=b;,程序的结果如何?
例 2:
第四章 顺序程序设计
12
第四节 字符数据的输入输出
字符输出函数
– 格式,putchar(c)
– 功能,将 c值所对应的字符输出到标准输出设备上 (一般为显示器 )。 c可以是整型或字符型
。一次只能输出 一个字符,也可以输出控制符,如 putchar(?\n?) 输出一个换行符,即光标 移到下一行 。
第四章 顺序程序设计
13
例 3:
#include "stdio.h"
main( )
{char ch1,ch2;
ch1=?A?; ch2=?B?;
putchar(ch1);
putchar(ch2); }
运行程序,运行结果为
AB
putchar()函数也可以输出 转义字符,如:
putchar(‘ \101’) 即输出字符 ‘ A’
第四章 顺序程序设计
14
第四节 字符数据的输入输出
字符输入函数
– 格式,getchar( ),getch()或 getche()
– 功能,从标准设备 (一般是键盘 )输入 一个字符 。 字符输入 函数 没有参数,函数值就是从设备输入的字符。
三个函数有一些差别:
– getchar()函数 在由键盘键入一个字符后,
必须按回车键,而 getch()和 getche()函数不需要。
– getche()函数和 getchar()会显示出所输入的字符,而 getch()函数不响应输入的字符。
第四章 顺序程序设计
16
第四节 字符数据的输入输出例 6,从键盘输入三个大写字母,将其转换成小写字母输出 。
#include "stdio.h"
main( )
{char c1,c2,c3;
c1=getchar( ); c2=getchar( );c3=getchar( );
c1=c1+32;c2=c2+32;c3=c3+32;
putchar(c1);putchar(c2);putchar(c3); }
运行程序时,若输入 CPU
运行结果为输出,
cpu
第四章 顺序程序设计
17
第五节 格式输入输出
1、格式输出函数
– 格式,printf( 格式控制,输出表列)
– 功能,printf函数可以将 任意类型的多个数据 输出到标准输出设备上 (一般为显示器 )。
第四章 顺序程序设计
18
普通字符 格式说明 转义字符格式控制由双引号括起来的字符串由,%”和 格式字符 组成,
它的作用是将输出的数据按照指定的格式输出。
需要原样输出的字符。
用于控制输出。
第四章 顺序程序设计
19
格式字符 含 义
d 十进制 形式输出 带符号整数(正数输出不带符号 )
o 八进制 形式输出 无符号整数(不输出前导 0)
x 十六进制 形式输出 无符号整数(不输出前导 0x)
u 十进制形式输出 无符号整数
c 输出 一个字符
s 输出 一个字符串
f 小数 形式输出单、双精度实数 (隐含输出 6位小数)
e 指数 形式输出单、双精度实数 (数字部分有 6位小数)
g 当指数小于 -4或大于给定的精度时用 %e格式,否则用
%f格式。
第四章 顺序程序设计
20
附加格式说明符字母 l 用于长整型,可加在格式符
d,o,x,u之前
m(整数 ) 数据最小宽度
.n(整数 ) 对实数,表示输出 n位小数 ;对字符串,表示截取的字符个数
- 输出的数字或字符在域内向左靠格式字符 说明第四章 顺序程序设计
21
第五节 格式输入输出
1,d格式字符 有以下几种格式字符:
( 1) %d 按整型数据的 实际 长度输出。
( 2) %md m为要指定输出字段宽度,若 m
小于实际长度,则按实际长度输出。
例 a=5; b=1234;
printf(,a=%4d,b=%2d”,a,b);
输出结果 a= 5,b=1234
第四章 顺序程序设计
22
第五节 格式输入输出
( 3) %ld 输出 长整型 数据。
如 long int a=□ 123456789;
因为 整型数据范围是,-32768~32767
所以要写为,printf(,%ld”,a);
或 printf(,%10ld”,a);
第四章 顺序程序设计
23
第五节 格式输入输出
2,(字母 ) o 格式符 以 8进制形式输出整数。
如,a=123; b=-1;
printf(,a=%o,b=%o”,a,b);
printf (“%8o”,b) ;
输出结果 a= 173,b= 177777
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-1在内存单元中存放 形式 (以补码形式存放)如下:
177777
第四章 顺序程序设计
24
第五节 格式输入输出
3,x 格式符 以 16进制形式输出整数。
如 a=123; b=-1;
printf(,a=%x,b=%x”,a,b);
输出结果 a= 7b,b= ffff
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-1在内存单元中的存放形式(以补码形式存放)如下:
第四章 顺序程序设计
25
第五节 格式输入输出
4,u 格式符用来输出 unsigned型数据,即无符号数,以 10进制输出。 int 型可用 %u输出,而
unsigned型,也可用 %d输出。 见下面的例子 。
第四章 顺序程序设计
26
第五节 格式输入输出例子 7,
#include“stdio.h”
void main()
{ unsigned int a=65535; int b=-2;
printf(,a=%d,%o,%x,%u\n”,a,a,a,a) ;
printf(,b=%d,%o,%x,%u\n”,b,b,b,b) ;}
输出结果
a=-1,177777,ffff,65535 1111111111111111
b=-2,177776,fffe,65534 1111111111111110
第四章 顺序程序设计
27
第五节 格式输入输出
5,c 格式符 用来输出一个字符
如 char c=?A?;
printf(,%c”,c);
输出结果 A
printf(,%3c”,c);
输出结果□□ A
第四章 顺序程序设计
28
第五节 格式输入输出
6,s 格式符用来输出一个字符串,有几种用法:
( 1) %s 如 printf(,%s”,,CHINA”);
输出结果 CHINA (注意:不包括双引号)
( 2) %ms m<串长,突破;否则按右对齐,左补空格 。
( 3) %-ms m<串长,突破;否则按左对齐,右补空格 。
( 4) %m.ns 输出占 m个字符,取自左起 n个字符,且向右对齐,左补空格。
第四章 顺序程序设计
29
第五节 格式输入输出
6,s 格式符用来输出一个字符串,有几种用法:
( 5) %-m.ns m,n含义同上,不过是左对齐,右补空格例 8,printf(,%3s,%7.2s,%.3s,%-5.2s\n”,
,CHINA”,“CHINA”,
“CHINA”,,CHINA”);
输出结果
CHINA,□□□□□ CH,CHI,CH□□□
第四章 顺序程序设计
30
第五节 格式输入输出
7,f 格式符用来输出实数,以小数形式输出,有以下几种:
( 1) %f
系统指定输出整数部分,小数部分输出 6位 ;
单精度实数有效位数一般为 7位。 ( 见例 9)
双精度数也可用 %f格式输出,有效位数一般为 16位。( 见例 10)
第四章 顺序程序设计
31
第五节 格式输入输出
7,f 格式符用来输出实数,以小数形式输出,有以下几种:
( 2) %m.nf
指定输出占 m个字符,小数位占 n位,右对齐。
( 3) %-m.nf
指定输出占 m个字符,小数位占 n位,左对齐。
( 见例 11)
第四章 顺序程序设计
32
第五节 格式输入输出
7,f 格式符例 9:
main()
{float x,y;
x=111111.111;
y=222222.222;
printf(“%f”,x+y);}
运行结果为,333333.328125
第四章 顺序程序设计
33
第五节 格式输入输出
7,f 格式符例 10:
main()
{double x,y;
x=1111111111111.111111111;
y=2222222222222.222222222;
printf(“%f\n”,x+y);}
运行结果为,3333333333333.333010
第四章 顺序程序设计
34
第五节 格式输入输出
7,f 格式符例 11:
main()
{ float f=123.456
printf(“%f %10f %10.2f %.2f %-
10.2f\n”,f,f,f,f,f); }
运行结果为:
123.456001--123.456001------123.46--123.46--123.46----
第四章 顺序程序设计
35
第五节 格式输入输出
8,e 格式符
( 1) %e
不指定输出数据所占的宽度和数字部分小数的位数,由系统自动指定 给出 5位小数,指数部分占 4位 (如 e+02 ),其中,e占 1位,指数符号占 1位,指数占 2位 。数值按规范化指数形式输出(即 小数点前必须有且只有 1位非零数字 )。
例如,printf(,%e”,123.456);
输出结果 1.23456e+02
第四章 顺序程序设计
36
第五节 格式输入输出
8,e 格式符
( 2) %m.ne 和 %-m.ne
例 12:
假如 f=123.456;
printf(,%e,%10e,%10.2e,%.2e,
%-10.2e”,f,f,f,f,f);
输出结果
1.23456e+02,1.23456e+02,
□□□ 1.2e+02,1.2e+02,1.2e+02□□□
第四章 顺序程序设计
37
第五节 格式输入输出
9,g 格式符根据数值输出 自动选 f格式或 e格式 (选输出时所占字符长度少的一种。)
例 13,f=123.468;
printf(,%f,%e,%g”,f,f,f);
输出结果:
123.468002,1.23468e+02,123.468□□□
第四章 顺序程序设计
38
第五节 格式输入输出
在使用 printf函数时,有以下几点要说明:
( 1) 除 X,E,G外,其他格式字符必须用小写,如不能把 %d写成 %D。
( 2)可在格式控制串中用 ‘转义字符’ \n,\b,
\f,
\377等。
( 3) 连续用两个 %,可输出 % 字符,
如,printf(,%f%%”,1.0/3);
输出结果为,0.333333%
再如,printf(,\?D,\\cps.wps\?”);
输出结果为,‘ D,\cps.wps?
第四章 顺序程序设计
39
综合示例,
main( )
{int a,b; float x; char c;
a=123; b=-1; x=3.14; c ='A';
printf("%d,%4d\n",a,a);
printf("%d,%x,%o,%u\n",b,b,b,b);
printf("%c,%d\n",c,c);
printf("%f,%6.1f\n",x,x);}
1111 1111 1111 1111
-1在内存中的存放
(补码形式 )
123,123
运行结果写出运行结果
3.140000,3.1
-1,ffff,177777,65535
A,65
第四章 顺序程序设计
40
第五节 格式输入输出
2、格式输入函数
– 格式,scanf( 格式控制,地址表列)
– 功能,scanf函数可以从标准输入设备输入任意类型的多个数据 (一般为显示器 )。
– 注意,输入数不能规定精度。
格式控制与 printf
函数中的含义相同。
第四章 顺序程序设计
41
当输入一串数据时,系统如何区分每个数据呢?
(1)根据 格式字符的含义 分隔字符
scanf("%d%c%f",&a,&b,&c);
若输入数据,
120a45.6
则,a=120,b='a',c=45.6
第四章 顺序程序设计
42
当输入一串数据时,系统如何区分每个数据呢?
(2) 系统 按格式串指定的长度 截取所需的数据
scanf("%3d%2d",&a,&b);
输入数据:
12345
则,a=123,b=45
第四章 顺序程序设计
43
当输入一串数据时,系统如何区分每个数据呢?
(3) 用隐含的分隔符在输入数据中用 空格或换行符 分隔数据。
scanf("%d%d%d",&a,&b,&c);
输入数据,3 4 5
或输入,3 4(回车)
5(回车)
则,a=3,b=4,c=5
第四章 顺序程序设计
44
当输入一串数据时,系统如何区分每个数据呢?
(4)用 %后的,*” 附加说明符来表示跳过它相应的数据
scanf("%d,%*d,%d",&a,&b);
如果输入:
3,4,5
则:
a=3,b=5,第二个数据跳过 不赋给任何变量。
第四章 顺序程序设计
45
(5) 使用显示分隔符在格式说明符中若还可以有其它字符,在输入字符时应输入与这些字符相同的字符。
scanf("%d,%d,%d",&a,&b,&c);
应输入数据:
3,4,5
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
应输入数据:
a=3,b=4,c=5
第四章 顺序程序设计
46
(6)用,%c”格式输入字符时空格字符 和 转义字符 都作为有效字符输入:
scanf("%c%c%c",&c1,&c2,&c3);
如果输入,a b c
则:
字符‘ a?送给 c1,空格送给 c2,字符’ b?送给
c3
第四章 顺序程序设计
47
注意,
( 1) 输入时不能规定精度如 scanf(,%6.1f”,&a)
是不合法的。
( 2)格式控制之后是 地址表列 而不是变量表列
scanf(“%d,%d”,&a,&b);是正确的,而
scanf(“%d,%*d,%d”,a,b);是错误的。
第四章 顺序程序设计
48
第六节 顺序程序设计举例例 14:
给出一个大写字母,要求按字母顺序打印出 3个字母,指定的字母是三个字母中间的一个字母。
输入的字母不能为 A或 Z 。
#include "stdio.h"
main( )
{char c1,c2,c;
printf("Please enter a
character:\n");
c=getchar();
c1=c-1;c2=c+1;
putchar(c1); putchar(c);
putchar(c2); }
第四章 顺序程序设计
49
第六节 顺序程序设计举例例 15
从键盘 输入一个大写字母,要求改用小写字母输出(用前面介绍过的大小写字母间转换的方法)
#include " stdio.h"
main( )
{char c1,c2;
c1=getchar();
printf("%c,%d\n",c1,c1);
c2=c1+32;
printf("%c,%d\n",c2,c2);
}
第四章 顺序程序设计
50
第六节 顺序程序设计举例例 16
输入三角形的三边长,要求用下述公式计算三角形的面积:
sqrt(s(s-a)(s-
b)(s-c)),其中
s=(a+b+c)/2
#include "math.h"
main( )
{float a,b,c,s,area;
printf("enter a,b,c:\n");
scanf("%f,%f,%f",&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%7.2f,b=%7.2f,c=%7.
2f\n",a,b,c);
printf("area=%7.2f\n",area);}
第四章 顺序程序设计
51
作业
1、输入一个小写字母,把该字母转换成大写,并输出。
2、输入一个大写字母,把该字母转换成小写,并输出。
3、设圆半径 r=1.5,圆柱高 h=3,求圆周长、圆面积、圆柱体积。用 scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后两位。请编程序。
第四章 顺序程序设计
52
休息一会儿。。。