第八章 流程控制语句第八章 流程控制语句
C语言的语句可分为五类:表达式语句,函数调用语句,控制语句,复合语句,空语句。
1.表达式语句由一个表达式组成一个语句。其组成为:
表达式;
注意:位于尾部的分号,;,是语句中不可缺少的部分,任何表达式都可以加上分号构成语句。
8.1 C语言语句一、基本语句第八章 流程控制语句执行表达式语句就是计算表达式的值。
如,sum=0; /*赋值表达式加分号 */
i++; /*自增运算表达式加分号 */
a+ =b+ c; /* 复合赋值表达式加分号 */
8.1 C语言语句一、基本语句第八章 流程控制语句
2.函数调用语句由一个函数调用加上分号,;,组成。其组成为,函数名 (实参列表 );
如:
printf(“C Program\n”);
/*调用 C系统标准库函数,输出字符串 */
getchar( );
/*调用 C系统标准库函数,字符输入函数 */
max(a,b); /*调用自定义函数 */
8.1 C语言语句一、基本语句第八章 流程控制语句
3.控制语句控制语句用于控制程序的流程,以实现程序的各种结构。C语言有 9条控制语句。可分为以下三类:
(1) 条件判断语句条件语句,if ( )~else~ 语句多分支选择语句,switch 语句
(2) 循环执行语句
while语句,while ( )~ 语句
8.1 C语言语句一、基本语句第八章 流程控制语句
do while语句,do ~while ( )语句
for语句,for ( )~语句
(3) 转向语句无条件转向语句,goto语句结束本次循环语句,continue语句终止执行 switch或循环语句,break语句函数返回语句,return语句
8.1 C语言语句一、基本语句第八章 流程控制语句
4.复合语句把多条语句用大括号,{}”括起来组成的一条语句称复合语句。在语法上将复合语句看成是单条语句,而不是多条语句。
如以下程序段:
{ z=x- y ;
c=a*b ;
printf("%d%d\n",z,c) ;
}
8.1 C语言语句一、基本语句第八章 流程控制语句
5.空语句仅由一个分号,;,组成的语句称为空语句。空语句不执行的任何操作。空语句的作用,一是在循环语句中使用空语句提供一个不执行操作的空循环体;
二是为有关语句提供标号,用以说明程序执行的位置。
8.1 C语言语句一、基本语句第八章 流程控制语句
C语言本身无输入 / 出语句,由函数实现,如 printf等。
一般,C语言提供了一些标准的输入 /出函数 –––系统函数。
8.1 C语言语句二、数据输入与输出第八章 流程控制语句
1、字符输入输出函数形式,getchar( )
功能,从 终端 (键盘 )上输入一个字符要求,有 #include "stdio.h"预编译命令一般形式为,c=getchar();
输入字符时以回车确认,函数的返回值就是输入的字符。
8.1 C语言语句二、数据输入与输出
( 1) getchar( )函数第八章 流程控制语句
说明:
① getchar函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。
②通常把输入的字符赋予一个字符变量或整型变量,构成赋值语句。也可以不赋给任何变量,
作为表达式的一部分。
③在 Turbo C下运行含 getchar函数的程序时,
将退出 Turbo C 屏幕进入用户屏幕等待用户输入。输入完毕按“回车”后再返回 Turbo C屏幕。
8.1 C语言语句二、数据输入与输出第八章 流程控制语句例,#include "stdio.h"
main ( )
{ char c;
c=getchar ( );
putchar (c );
}
第八章 流程控制语句形式,putchar (c );
功能,向终端 (一般为显示器 )输出一个字符,其中 c为 字符型或整型变量注意,用该函数时,须用预编译命令,
#include "stdio.h "
(一) putchar 函数 —字符输出函数第八章 流程控制语句例,#include "stdio.h"
main( )
{ char a,b,c;
a='B' ; b='O' ; c='Y';
putchar(a); putchar(b); putchar ( c);
}
BOY结果,
第八章 流程控制语句
putchar(a); putchar(' \n '); putchar(b); putchar(' \n ');
putchar(c); putchar(' \n ');
*利用 putchar还可输出其它转义字符结果,B
O
Y
putchar(' \101 '); 输出 A
putchar(' \ ’ ' ); 输出’
putchar(' \015 '); 输出 ↙
*若将最后一行改为,
第八章 流程控制语句例,#include "stdio.h"
main()
{ char ch1='N',ch2='E',ch3='W';
putchar(ch1);putchar(ch2); putchar(ch3);
putchar('\n');
putchar(ch1); putchar('\n');
putchar('E'); putchar('\n');
putchar(ch3); putchar('\n');
} 结果,NEW
N
E
W
第八章 流程控制语句
(一) printf 函数 ––格式输出函数
1,printf的一般形式是 C语言中使用得最多的一种输出函数,它可一次按格式输出多个不同类型的数据。
printf(格式控制,输出表列 );
输出表列 ––– 用“,”号隔开的变量或表达式序列,
其变量的值按对应的格式控制符所指定的格式输出。
三、格式输入输出
printf(“%d%d”,x,y*3);
第八章 流程控制语句
main()
{ int a,b;
a=97; b=98;
printf(“%c,%c\n”,a,b);
printf(“%d,%d\n”,a,b);
}
格式控制 –––用双引号,”括起来的格式符序列。
格式控制由格式说明符和普通字符组成。
2,普通字符原样输出
1,格式说明符,
由 %接 –格式字符组成如,%f,%d等格式控制输出表列
a,b
97,98
第八章 流程控制语句例,a=3; b=4;
printf("a=%d,b=%d",a,b);
…
结果,a=3,b=4
输出项表是可选的。如果要输出的数据不止 1
个,相邻 2个之间用逗号分开。下面的 printf()
函数都是合法的:
( 1) printf("I am a student.\n");
( 2) printf("%d",3+2);
( 3) printf("a=%f b=%5d\n",a,a+3);
强调:,格式字符串,中的格式指示符,必须与
,输出表列,中输出项的数据类型一致,否则会引起输出错误。
第八章 流程控制语句
2、格式字符不同类型的数据输出,用不同格式字符,
1) d格式符 ––十进制整数输出。
(1) %d,按数据的实际长度输出。
(2) %md,m表示输出字段宽度。若实际位数
<m,左边补空格 (右对齐) 。
(3) %-md,m表示输出字段宽度。若实际位数
<m,右 边补空格 (左对齐) 。
(4) %ld,输出长整数,也可以指定宽度 %mld.
第八章 流程控制语句例:类型转换字符 d的使用。
main()
{ int num1=123;
long num2=123456;
printf("num1=%d,num1=%5d,num1=%-5d,
num1=%2d\n",num1,num1,num1,num1);
printf("num2=%ld,num2=%8ld,num2=%5ld\n",
num2,num2,num2);
printf("num1=%ld\n",num1);
}
num1=123,num1=□□ 123,num1=123□□,num1=123
num2=123456,num2=□□ 123456,num2=123456
num1=16908411
第八章 流程控制语句
2) o格式符 –––按八进制形式输出,
1 1 11 11 11 11 11 11 11
以 -1的补码形式
int a= –1;
printf(" %d,%o",a,a);
则输出结果,
–1,177777
注,将内存单元中的各位的值按八进制形式输出,包括符号位。
特例,–1存于 int单元第八章 流程控制语句
3) x格式符 –––以十六进制形式输出整数,
例,int a= –1;
printf("%x,%o,%d”,a,a,a);
输出结果,
ffff,177777,–1
第八章 流程控制语句例,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
11 11 11 11 11 11 11 11
11 11 11 11 11 11 11 10
a=65535
b= –2
4) u格式符 –––无符号格式输出整数,
b=–2,177776,fffe,65534
运行结果为:
第八章 流程控制语句
5) c格式符 –––输出一个字符,
注,?若有一整型变量,其值在 0~255之间,则可以字符形式输出,
一个字符型变量亦可以一个整型数据输出,
char c=' a';
printf("%c",c);
也可以指定输出字符宽度,如果有则输出,€€a,即 c变量输出占 3列,前 2列补空格,
print ("%3c",c)
第八章 流程控制语句例,main()
{ char c='A';
int i=65;
printf("c=%c,%5c,%d\n",c,c,c);
printf("i=%d,%c",i,i);
}
程序运行结果如下:
c=A,□□□□ A,65
i=65,A
第八章 流程控制语句
6) s格式符 –––用来输出一个字符串,
(1)%ms,输出的字符串占 m列,如字符串本身长度大于 m,则突破 m的限制,将字符串全部输出。若串长小于 m,则左补空格。
允许一定的编辑即允许 %ms,%–ms,%m.ns,
%–m.ns四种形式,每一形式的意义如下,
例,printf("%s","CHINA");
结果,CHINA
第八章 流程控制语句
(3) %m.ns,输出占 m列,但只取字符串中左端 n个字符。这 n个字符输出在 m列的右侧,左补空格。
(4) %–m.ns,其中 m,n含义同上,n个字符输出在 m
列范围的左侧,右补空格。如果 n>m,则 m自动取 n值,即保证 n个字符正常输出。
(2)%–ms,如果串长小于 m,则在 m列范围内,字符串向左靠,右补空格。
第八章 流程控制语句例,main()
{printf("%s,%5s,%-10s",
"Internet","Internet","Internet");
printf("%10.5s,%-10.5s,%4.5s\n",
"Internet","Internet","Internet");
}
程序运行结果如下:
Internet,Internet,Internet□□,□□□□□ Inter,Inter□□□□□,Inter
注意:系统输出字符和字符串时,不输出单引号和双引号。
第八章 流程控制语句
7) f格式符 –––以小数形式输出单、双精度实数,
有以下几种形式,
%m.nf,指定输出的数据共占 m列,其中有 n位小数。如果值长度小于 m,则左端补空格。
%–mn.f,与 %m.nf基本相同,只是使输出的数值向左端靠,右端补空格。
%f,不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出 6位小数。
%f %m.nf %–m.nf
第八章 流程控制语句例,
main( )
{ float f=123.456;
double d1,d2;
d1=1111111111111.111111111;
d2=2222222222222.222222222;
printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);
printf("d1+d2=%f\n",d1+d2);
}
程序运行结果如下:
123.456001,□□ 123.456001,□□□□□□ 123.46,123.46□□□□□□,123.46
d1+d2=3333333333333.333010
本程序的输出结果中,数据 123.456001和
3333333333333.333010中的 001和 010
都是无意义的,因为它们超出了有效数字的范围。
第八章 流程控制语句表 printf格式字符总结格式字符
d 以带 符号的十进制形式输出整数 (正数不输出符号 )
o
x
u
c
s
f
e
g
以 8进制无符号形式输出整数 (不输出前导符 0)。
以 16进制无符号形式输出整数 (不输出前导符 0x)。
以无符号 10进制形式输出整数。
以字符形式输出,只输出一个字符。
说明输出字符串。
以小数形式输出单、双精度数,隐含输出 6位小数。
以标准形式输出单,双精度数,数字部分小数位数为 6位。
选用% f或 %e格式中输出宽度较短的一种格式,不输出无意义的 0。
第八章 流程控制语句
2,scanf函数 -格式输出函数功能,从终端 (键盘 )上按指定格式输入各种类型的数据地址表列 –––变量的地址或字符串首地址。
变量首地址的表示方法,&变量名形式,scanf(格式控制,地址表列 )
格式控制 –––同 printf(…..)
第八章 流程控制语句例,main( )
{ int a,b,c;
scanf(" %d%d%d ",&a,&b,&c);
printf(" %d,%d,%d\n," a,b,c);
}
运行,机器等待你输入,
3 4 5↙
结果 3,4,5
第八章 流程控制语句注意,
( 1) scanf函数 使 用地址量接受数据。
( 2) 输入数据的间隔为 ↙,Tab,空格,不能为“,”,
( 3) 允许在格式符中插入附加字符。格式字符及附加字符的定义如下表 。
第八章 流程控制语句表 scanf格式字符格式字符
d 用来输入十进制整数。
o
x
c
s
f
e
用来输入八进制整数。
用来输入十六进制整数。
用来输入单个字符。
说明用来输入字符串,将字符串送到一个字符数组中,
在输入时以非空白字符开始,以第一个空白字符结束 。 字符串以串结束标志 ‘ \0’作为其最后一个字符 。
用来输入实数,可以用小数形式或指数形式输入。
以 f作用相同,e与 f可以互相替换。
第八章 流程控制语句表 scanf附加的格式说明字符字符 说明用于输入长整型数据 (可用% ld,%lo,
%lx),以及 double型数据 (用 %lf或 %le)。
用于输入短整型数据 (可用 %hd,%ho,
%hx)。
指定输入数据所占宽度 (列数 )。
表示本输入项在读入后不赋给相应的变量。
h
域宽 (为一正整数 )
*
l
第八章 流程控制语句
( 4) 对于输入 unsigned型数据,可 用 %u,%d、
%o,%x格式输入。
( 5) 指定数据长度时,系统自动截取。
则当输入 123456时,
scanf(" %3d%3d ",&a,&b);
a?123,b?456
第八章 流程控制语句
( 7) 输入数据不能规定精度,
( 6) 在 %后加,*”表示跳过相应的数据则当输入为 12 345 67↙
则 a?12 b?67
scanf("%2d %*3d %2d",&a,&b);
scanf (" %7.2f ",&a);是错误的第八章 流程控制语句
( 8) 在格式控制中除格式说明符外若还有其它字符,则应按顺序原样输入。
例,scanf(" %d,%d",&a,&b);
则必须输入 21,28↙
又如,scanf("a=%d,b=%d,c=%d",&a,&b,&c);
则输入,a=34,b=58,c=100
第八章 流程控制语句
( 9)输入数据时,遇到以下情况,系统认为该数据结束:
1)遇到空格,或者回车键,或者 Tab键。
2)遇到输入域宽度结束。例如,%3d”,只取 3列。
3)遇到非法输入。例如,在输入数值数据时,遇到字母等非数值符号 (数值符号仅由数字字符 0-9、小数点和正负号构成 )。
第八章 流程控制语句
4)使用格式说明符,%c” 输入单个字符时,
空格和转义字符均作为有效字符被输入。
例如,scanf("%c%c%c",&ch1,&ch2,&ch3);
printf("ch1=%c,ch2=%c,ch3=%c\n",
ch1,ch2,ch3);
假设输入,A□ B□ C↙,则系统将字母 'A'赋值给 ch1,空格 '□ '赋值给 ch2,字母 'B'赋值给
ch3。
第八章 流程控制语句例:改错
( 1) main()
{ float a1=123.456;
printf(“%d”,a1);
}
( 2) main()
{ x=213.82631;
printf(“%-4.2f”,x);
}
第八章 流程控制语句
(3) main()
{ int x1,x2,x3;
printf(“input x1,x2,x3:”);
scanf(“%d%d%d”,x1,x2,x3);
}
第八章 流程控制语句例:写出程序运行结果
(1) main
{ int a=4,b=7;
printf(“%d\n”,(a=a+1,a+b,b+1));
} 8
(2) int a=0,b=0,c=0;
c=(a-=a-5),(a=b,b+3);
printf(“%d,%d,%d”,a,b,c);
0,0,5
第八章 流程控制语句
(3) main()
{ int a=2,b=5;
printf(“a=%%d,b=%%d”,a,b);
} a=%d,b=%d
(4) main()
{ int x,y,z;
scanf(“%d%d%d”,&x,&y,&z);
printf(“x+y+z=%d\n”,x+y+z);
}
输入,25,13,10 不确定输入数据时遇到非法字符输入结束。
第八章 流程控制语句例:由终端输入两个整数给变量 x和 y,然后输出 x和 y,在交换 x和 y中的值后,再输出 x和
y,验证两个变量中的数是否正确地进行了交换。
5
x
8
y
分析:交换 x和 y的值:
第八章 流程控制语句例:由终端输入两个整数给变量 x和 y,然后输出 x和 y,在交换 x和 y中的值后,再输出 x和
y,验证两个变量中的数是否正确地进行了交换。
分析:交换 a和 b的值:
8
y
5
x
9
t
第八章 流程控制语句例:由终端输入两个整数给变量 x和 y,然后输出 x和 y,在交换 x和 y中的值后,再输出 x和
y,验证两个变量中的数是否正确地进行了交换。
分析:交换 a和 b的值:
x y
5 8
9
t
5
8 5
main()
{ int x,y,t;
printf(“input x,y”);
scanf(“%d%d”,&x,&y);
printf(“x=%d,y=%d\n”,x,y);
t=x; x=y; y=t;
printf(“x=%d,y=%d\n”,x,y);
}
第八章 流程控制语句四、顺序结构程序设计在顺序结构程序中,各语句(或命令)是按照位置的先后次序,顺序执行的,且每个语句都会被执行到。
main()
{int num1,num2,num3,sum;
float aver;
printf("Please input three numbers:");
scanf("%d%d%d",&num1,&num2,&num3);
sum=num1+num2+num3; aver=sum/3.0;
printf("num1=%d,num2=%d,num3=%d\n",
num1,num2,num3);
printf("sum=%d,aver=%7.2f\n",sum,aver);
}
例:输入任意三个整数,求它们的和及平均值。
第八章 流程控制语句
1、写出以下程序的运行结果:
#include,stdio.h”
main()
{ char
c1=?a?,c2=?b?,c3=?c?,c4=?\101?,c5=?\116?;
printf(“a%c b%c\t%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c %c\n”,c4,c5);
}
第八章 流程控制语句
2、写出下面程序的运行结果
#include,stdio.h”
main()
{ int i,j,m,n;
i=8; j=10; m=++i; n=j++;
printf(“%d,%d,%d,%d\n”,i,j,m,n);
}
第八章 流程控制语句
3、写出下面赋值表达式运算后 a的值,
设原来 a=12:
(1)a+=a (2)a-=a
(3)a*=2+3 (4)a/=a+a
(5)a%=(n%=2),n的值为 5
(6)a+=a-=a*=a
第八章 流程控制语句
#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);
}
例,从键盘输入一个小写字母,要求用大小写字母形式输出该字母及对应的 ASCII码值。
Input a lowercase letter,a↙
a,97
A,65
程序运行情况如下:
第八章 流程控制语句在顺序结构程序中,一般包括以下几个部分:
1.程序开头的编译预处理命令。
在程序中要使用标准函数(又称库函数),
除 printf()和 scanf()外,其它的都必须使用编译预处理命令,将相应的头文件包含进来。
2.顺序结构程序的函数体中,是完成具体功能的各个语句和运算,主要包括:
( 1)变量类型的说明。
( 2)提供数据语句。
( 3)运算部分。
( 4)输出部分。
第八章 流程控制语句书面作业:
4.8,4.9
上机作业:
4.4,4.5,4.6
第八章 流程控制语句
C语言的语句可分为五类:表达式语句,函数调用语句,控制语句,复合语句,空语句。
1.表达式语句由一个表达式组成一个语句。其组成为:
表达式;
注意:位于尾部的分号,;,是语句中不可缺少的部分,任何表达式都可以加上分号构成语句。
8.1 C语言语句一、基本语句第八章 流程控制语句执行表达式语句就是计算表达式的值。
如,sum=0; /*赋值表达式加分号 */
i++; /*自增运算表达式加分号 */
a+ =b+ c; /* 复合赋值表达式加分号 */
8.1 C语言语句一、基本语句第八章 流程控制语句
2.函数调用语句由一个函数调用加上分号,;,组成。其组成为,函数名 (实参列表 );
如:
printf(“C Program\n”);
/*调用 C系统标准库函数,输出字符串 */
getchar( );
/*调用 C系统标准库函数,字符输入函数 */
max(a,b); /*调用自定义函数 */
8.1 C语言语句一、基本语句第八章 流程控制语句
3.控制语句控制语句用于控制程序的流程,以实现程序的各种结构。C语言有 9条控制语句。可分为以下三类:
(1) 条件判断语句条件语句,if ( )~else~ 语句多分支选择语句,switch 语句
(2) 循环执行语句
while语句,while ( )~ 语句
8.1 C语言语句一、基本语句第八章 流程控制语句
do while语句,do ~while ( )语句
for语句,for ( )~语句
(3) 转向语句无条件转向语句,goto语句结束本次循环语句,continue语句终止执行 switch或循环语句,break语句函数返回语句,return语句
8.1 C语言语句一、基本语句第八章 流程控制语句
4.复合语句把多条语句用大括号,{}”括起来组成的一条语句称复合语句。在语法上将复合语句看成是单条语句,而不是多条语句。
如以下程序段:
{ z=x- y ;
c=a*b ;
printf("%d%d\n",z,c) ;
}
8.1 C语言语句一、基本语句第八章 流程控制语句
5.空语句仅由一个分号,;,组成的语句称为空语句。空语句不执行的任何操作。空语句的作用,一是在循环语句中使用空语句提供一个不执行操作的空循环体;
二是为有关语句提供标号,用以说明程序执行的位置。
8.1 C语言语句一、基本语句第八章 流程控制语句
C语言本身无输入 / 出语句,由函数实现,如 printf等。
一般,C语言提供了一些标准的输入 /出函数 –––系统函数。
8.1 C语言语句二、数据输入与输出第八章 流程控制语句
1、字符输入输出函数形式,getchar( )
功能,从 终端 (键盘 )上输入一个字符要求,有 #include "stdio.h"预编译命令一般形式为,c=getchar();
输入字符时以回车确认,函数的返回值就是输入的字符。
8.1 C语言语句二、数据输入与输出
( 1) getchar( )函数第八章 流程控制语句
说明:
① getchar函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。
②通常把输入的字符赋予一个字符变量或整型变量,构成赋值语句。也可以不赋给任何变量,
作为表达式的一部分。
③在 Turbo C下运行含 getchar函数的程序时,
将退出 Turbo C 屏幕进入用户屏幕等待用户输入。输入完毕按“回车”后再返回 Turbo C屏幕。
8.1 C语言语句二、数据输入与输出第八章 流程控制语句例,#include "stdio.h"
main ( )
{ char c;
c=getchar ( );
putchar (c );
}
第八章 流程控制语句形式,putchar (c );
功能,向终端 (一般为显示器 )输出一个字符,其中 c为 字符型或整型变量注意,用该函数时,须用预编译命令,
#include "stdio.h "
(一) putchar 函数 —字符输出函数第八章 流程控制语句例,#include "stdio.h"
main( )
{ char a,b,c;
a='B' ; b='O' ; c='Y';
putchar(a); putchar(b); putchar ( c);
}
BOY结果,
第八章 流程控制语句
putchar(a); putchar(' \n '); putchar(b); putchar(' \n ');
putchar(c); putchar(' \n ');
*利用 putchar还可输出其它转义字符结果,B
O
Y
putchar(' \101 '); 输出 A
putchar(' \ ’ ' ); 输出’
putchar(' \015 '); 输出 ↙
*若将最后一行改为,
第八章 流程控制语句例,#include "stdio.h"
main()
{ char ch1='N',ch2='E',ch3='W';
putchar(ch1);putchar(ch2); putchar(ch3);
putchar('\n');
putchar(ch1); putchar('\n');
putchar('E'); putchar('\n');
putchar(ch3); putchar('\n');
} 结果,NEW
N
E
W
第八章 流程控制语句
(一) printf 函数 ––格式输出函数
1,printf的一般形式是 C语言中使用得最多的一种输出函数,它可一次按格式输出多个不同类型的数据。
printf(格式控制,输出表列 );
输出表列 ––– 用“,”号隔开的变量或表达式序列,
其变量的值按对应的格式控制符所指定的格式输出。
三、格式输入输出
printf(“%d%d”,x,y*3);
第八章 流程控制语句
main()
{ int a,b;
a=97; b=98;
printf(“%c,%c\n”,a,b);
printf(“%d,%d\n”,a,b);
}
格式控制 –––用双引号,”括起来的格式符序列。
格式控制由格式说明符和普通字符组成。
2,普通字符原样输出
1,格式说明符,
由 %接 –格式字符组成如,%f,%d等格式控制输出表列
a,b
97,98
第八章 流程控制语句例,a=3; b=4;
printf("a=%d,b=%d",a,b);
…
结果,a=3,b=4
输出项表是可选的。如果要输出的数据不止 1
个,相邻 2个之间用逗号分开。下面的 printf()
函数都是合法的:
( 1) printf("I am a student.\n");
( 2) printf("%d",3+2);
( 3) printf("a=%f b=%5d\n",a,a+3);
强调:,格式字符串,中的格式指示符,必须与
,输出表列,中输出项的数据类型一致,否则会引起输出错误。
第八章 流程控制语句
2、格式字符不同类型的数据输出,用不同格式字符,
1) d格式符 ––十进制整数输出。
(1) %d,按数据的实际长度输出。
(2) %md,m表示输出字段宽度。若实际位数
<m,左边补空格 (右对齐) 。
(3) %-md,m表示输出字段宽度。若实际位数
<m,右 边补空格 (左对齐) 。
(4) %ld,输出长整数,也可以指定宽度 %mld.
第八章 流程控制语句例:类型转换字符 d的使用。
main()
{ int num1=123;
long num2=123456;
printf("num1=%d,num1=%5d,num1=%-5d,
num1=%2d\n",num1,num1,num1,num1);
printf("num2=%ld,num2=%8ld,num2=%5ld\n",
num2,num2,num2);
printf("num1=%ld\n",num1);
}
num1=123,num1=□□ 123,num1=123□□,num1=123
num2=123456,num2=□□ 123456,num2=123456
num1=16908411
第八章 流程控制语句
2) o格式符 –––按八进制形式输出,
1 1 11 11 11 11 11 11 11
以 -1的补码形式
int a= –1;
printf(" %d,%o",a,a);
则输出结果,
–1,177777
注,将内存单元中的各位的值按八进制形式输出,包括符号位。
特例,–1存于 int单元第八章 流程控制语句
3) x格式符 –––以十六进制形式输出整数,
例,int a= –1;
printf("%x,%o,%d”,a,a,a);
输出结果,
ffff,177777,–1
第八章 流程控制语句例,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
11 11 11 11 11 11 11 11
11 11 11 11 11 11 11 10
a=65535
b= –2
4) u格式符 –––无符号格式输出整数,
b=–2,177776,fffe,65534
运行结果为:
第八章 流程控制语句
5) c格式符 –––输出一个字符,
注,?若有一整型变量,其值在 0~255之间,则可以字符形式输出,
一个字符型变量亦可以一个整型数据输出,
char c=' a';
printf("%c",c);
也可以指定输出字符宽度,如果有则输出,€€a,即 c变量输出占 3列,前 2列补空格,
print ("%3c",c)
第八章 流程控制语句例,main()
{ char c='A';
int i=65;
printf("c=%c,%5c,%d\n",c,c,c);
printf("i=%d,%c",i,i);
}
程序运行结果如下:
c=A,□□□□ A,65
i=65,A
第八章 流程控制语句
6) s格式符 –––用来输出一个字符串,
(1)%ms,输出的字符串占 m列,如字符串本身长度大于 m,则突破 m的限制,将字符串全部输出。若串长小于 m,则左补空格。
允许一定的编辑即允许 %ms,%–ms,%m.ns,
%–m.ns四种形式,每一形式的意义如下,
例,printf("%s","CHINA");
结果,CHINA
第八章 流程控制语句
(3) %m.ns,输出占 m列,但只取字符串中左端 n个字符。这 n个字符输出在 m列的右侧,左补空格。
(4) %–m.ns,其中 m,n含义同上,n个字符输出在 m
列范围的左侧,右补空格。如果 n>m,则 m自动取 n值,即保证 n个字符正常输出。
(2)%–ms,如果串长小于 m,则在 m列范围内,字符串向左靠,右补空格。
第八章 流程控制语句例,main()
{printf("%s,%5s,%-10s",
"Internet","Internet","Internet");
printf("%10.5s,%-10.5s,%4.5s\n",
"Internet","Internet","Internet");
}
程序运行结果如下:
Internet,Internet,Internet□□,□□□□□ Inter,Inter□□□□□,Inter
注意:系统输出字符和字符串时,不输出单引号和双引号。
第八章 流程控制语句
7) f格式符 –––以小数形式输出单、双精度实数,
有以下几种形式,
%m.nf,指定输出的数据共占 m列,其中有 n位小数。如果值长度小于 m,则左端补空格。
%–mn.f,与 %m.nf基本相同,只是使输出的数值向左端靠,右端补空格。
%f,不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出 6位小数。
%f %m.nf %–m.nf
第八章 流程控制语句例,
main( )
{ float f=123.456;
double d1,d2;
d1=1111111111111.111111111;
d2=2222222222222.222222222;
printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);
printf("d1+d2=%f\n",d1+d2);
}
程序运行结果如下:
123.456001,□□ 123.456001,□□□□□□ 123.46,123.46□□□□□□,123.46
d1+d2=3333333333333.333010
本程序的输出结果中,数据 123.456001和
3333333333333.333010中的 001和 010
都是无意义的,因为它们超出了有效数字的范围。
第八章 流程控制语句表 printf格式字符总结格式字符
d 以带 符号的十进制形式输出整数 (正数不输出符号 )
o
x
u
c
s
f
e
g
以 8进制无符号形式输出整数 (不输出前导符 0)。
以 16进制无符号形式输出整数 (不输出前导符 0x)。
以无符号 10进制形式输出整数。
以字符形式输出,只输出一个字符。
说明输出字符串。
以小数形式输出单、双精度数,隐含输出 6位小数。
以标准形式输出单,双精度数,数字部分小数位数为 6位。
选用% f或 %e格式中输出宽度较短的一种格式,不输出无意义的 0。
第八章 流程控制语句
2,scanf函数 -格式输出函数功能,从终端 (键盘 )上按指定格式输入各种类型的数据地址表列 –––变量的地址或字符串首地址。
变量首地址的表示方法,&变量名形式,scanf(格式控制,地址表列 )
格式控制 –––同 printf(…..)
第八章 流程控制语句例,main( )
{ int a,b,c;
scanf(" %d%d%d ",&a,&b,&c);
printf(" %d,%d,%d\n," a,b,c);
}
运行,机器等待你输入,
3 4 5↙
结果 3,4,5
第八章 流程控制语句注意,
( 1) scanf函数 使 用地址量接受数据。
( 2) 输入数据的间隔为 ↙,Tab,空格,不能为“,”,
( 3) 允许在格式符中插入附加字符。格式字符及附加字符的定义如下表 。
第八章 流程控制语句表 scanf格式字符格式字符
d 用来输入十进制整数。
o
x
c
s
f
e
用来输入八进制整数。
用来输入十六进制整数。
用来输入单个字符。
说明用来输入字符串,将字符串送到一个字符数组中,
在输入时以非空白字符开始,以第一个空白字符结束 。 字符串以串结束标志 ‘ \0’作为其最后一个字符 。
用来输入实数,可以用小数形式或指数形式输入。
以 f作用相同,e与 f可以互相替换。
第八章 流程控制语句表 scanf附加的格式说明字符字符 说明用于输入长整型数据 (可用% ld,%lo,
%lx),以及 double型数据 (用 %lf或 %le)。
用于输入短整型数据 (可用 %hd,%ho,
%hx)。
指定输入数据所占宽度 (列数 )。
表示本输入项在读入后不赋给相应的变量。
h
域宽 (为一正整数 )
*
l
第八章 流程控制语句
( 4) 对于输入 unsigned型数据,可 用 %u,%d、
%o,%x格式输入。
( 5) 指定数据长度时,系统自动截取。
则当输入 123456时,
scanf(" %3d%3d ",&a,&b);
a?123,b?456
第八章 流程控制语句
( 7) 输入数据不能规定精度,
( 6) 在 %后加,*”表示跳过相应的数据则当输入为 12 345 67↙
则 a?12 b?67
scanf("%2d %*3d %2d",&a,&b);
scanf (" %7.2f ",&a);是错误的第八章 流程控制语句
( 8) 在格式控制中除格式说明符外若还有其它字符,则应按顺序原样输入。
例,scanf(" %d,%d",&a,&b);
则必须输入 21,28↙
又如,scanf("a=%d,b=%d,c=%d",&a,&b,&c);
则输入,a=34,b=58,c=100
第八章 流程控制语句
( 9)输入数据时,遇到以下情况,系统认为该数据结束:
1)遇到空格,或者回车键,或者 Tab键。
2)遇到输入域宽度结束。例如,%3d”,只取 3列。
3)遇到非法输入。例如,在输入数值数据时,遇到字母等非数值符号 (数值符号仅由数字字符 0-9、小数点和正负号构成 )。
第八章 流程控制语句
4)使用格式说明符,%c” 输入单个字符时,
空格和转义字符均作为有效字符被输入。
例如,scanf("%c%c%c",&ch1,&ch2,&ch3);
printf("ch1=%c,ch2=%c,ch3=%c\n",
ch1,ch2,ch3);
假设输入,A□ B□ C↙,则系统将字母 'A'赋值给 ch1,空格 '□ '赋值给 ch2,字母 'B'赋值给
ch3。
第八章 流程控制语句例:改错
( 1) main()
{ float a1=123.456;
printf(“%d”,a1);
}
( 2) main()
{ x=213.82631;
printf(“%-4.2f”,x);
}
第八章 流程控制语句
(3) main()
{ int x1,x2,x3;
printf(“input x1,x2,x3:”);
scanf(“%d%d%d”,x1,x2,x3);
}
第八章 流程控制语句例:写出程序运行结果
(1) main
{ int a=4,b=7;
printf(“%d\n”,(a=a+1,a+b,b+1));
} 8
(2) int a=0,b=0,c=0;
c=(a-=a-5),(a=b,b+3);
printf(“%d,%d,%d”,a,b,c);
0,0,5
第八章 流程控制语句
(3) main()
{ int a=2,b=5;
printf(“a=%%d,b=%%d”,a,b);
} a=%d,b=%d
(4) main()
{ int x,y,z;
scanf(“%d%d%d”,&x,&y,&z);
printf(“x+y+z=%d\n”,x+y+z);
}
输入,25,13,10 不确定输入数据时遇到非法字符输入结束。
第八章 流程控制语句例:由终端输入两个整数给变量 x和 y,然后输出 x和 y,在交换 x和 y中的值后,再输出 x和
y,验证两个变量中的数是否正确地进行了交换。
5
x
8
y
分析:交换 x和 y的值:
第八章 流程控制语句例:由终端输入两个整数给变量 x和 y,然后输出 x和 y,在交换 x和 y中的值后,再输出 x和
y,验证两个变量中的数是否正确地进行了交换。
分析:交换 a和 b的值:
8
y
5
x
9
t
第八章 流程控制语句例:由终端输入两个整数给变量 x和 y,然后输出 x和 y,在交换 x和 y中的值后,再输出 x和
y,验证两个变量中的数是否正确地进行了交换。
分析:交换 a和 b的值:
x y
5 8
9
t
5
8 5
main()
{ int x,y,t;
printf(“input x,y”);
scanf(“%d%d”,&x,&y);
printf(“x=%d,y=%d\n”,x,y);
t=x; x=y; y=t;
printf(“x=%d,y=%d\n”,x,y);
}
第八章 流程控制语句四、顺序结构程序设计在顺序结构程序中,各语句(或命令)是按照位置的先后次序,顺序执行的,且每个语句都会被执行到。
main()
{int num1,num2,num3,sum;
float aver;
printf("Please input three numbers:");
scanf("%d%d%d",&num1,&num2,&num3);
sum=num1+num2+num3; aver=sum/3.0;
printf("num1=%d,num2=%d,num3=%d\n",
num1,num2,num3);
printf("sum=%d,aver=%7.2f\n",sum,aver);
}
例:输入任意三个整数,求它们的和及平均值。
第八章 流程控制语句
1、写出以下程序的运行结果:
#include,stdio.h”
main()
{ char
c1=?a?,c2=?b?,c3=?c?,c4=?\101?,c5=?\116?;
printf(“a%c b%c\t%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c %c\n”,c4,c5);
}
第八章 流程控制语句
2、写出下面程序的运行结果
#include,stdio.h”
main()
{ int i,j,m,n;
i=8; j=10; m=++i; n=j++;
printf(“%d,%d,%d,%d\n”,i,j,m,n);
}
第八章 流程控制语句
3、写出下面赋值表达式运算后 a的值,
设原来 a=12:
(1)a+=a (2)a-=a
(3)a*=2+3 (4)a/=a+a
(5)a%=(n%=2),n的值为 5
(6)a+=a-=a*=a
第八章 流程控制语句
#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);
}
例,从键盘输入一个小写字母,要求用大小写字母形式输出该字母及对应的 ASCII码值。
Input a lowercase letter,a↙
a,97
A,65
程序运行情况如下:
第八章 流程控制语句在顺序结构程序中,一般包括以下几个部分:
1.程序开头的编译预处理命令。
在程序中要使用标准函数(又称库函数),
除 printf()和 scanf()外,其它的都必须使用编译预处理命令,将相应的头文件包含进来。
2.顺序结构程序的函数体中,是完成具体功能的各个语句和运算,主要包括:
( 1)变量类型的说明。
( 2)提供数据语句。
( 3)运算部分。
( 4)输出部分。
第八章 流程控制语句书面作业:
4.8,4.9
上机作业:
4.4,4.5,4.6
第八章 流程控制语句