1、4.1 语句综述 4.2 赋值表达式和赋值语句 4.3 数据输入输出的概念 4.4 字符数据的输入输出 4.5 简单的格式输入与输出 4.6 顺序结构程序设计举例 4.7 提高部分,第4章 最简单的程序设计 顺序程序设计,4.1 语句综述,4.1 语句综述,语句分为以下5类: (1) 控制语句: if、switch、for、while、dowhile、continue、break、return、goto等 (2) 函数调用语句 (3) 表达式语句 (4) 空语句 (5) 复合语句,4.2 赋值表达式和赋值语句,4.2.1 赋值表达式 4. 2.2 赋值过程中的类型转换 4. 2.3 赋值语句
2、4. 2.4 变量赋初值,4.2.1 赋值表达式,赋值运算符 “”是赋值运算符 作用是将一个数据赋给一个变量 也可以将一个表达式的值赋给一个变量,即变量=变量=表达式成立,如a=b=c=d=3+2;,4.2.1 赋值表达式,复合的赋值运算符 在赋值符“”之前加上其他运算符,可以构成复合的运算符 等价于 ,4.2.1 赋值表达式,赋值表达式 一般形式为:变量 赋值运算符 表达式 对赋值表达式求解的过程: 求赋值运算符右侧的“表达式”的值 赋给赋值运算符左侧的变量,4.2.1 赋值表达式,赋值表达式 赋值表达式“a=3*5”的值为15,对表达式求解后,变量a的值和表达式的值都是15 “a=(b=5
3、)”和“a=b=5”等价 “a=b”和“b=a”含义不同,4.2.2 赋值过程中的类型转换,赋值过程中的注意点: 两侧类型一致时,直接赋值 两侧类型不一致,但都是数值型或字符型,自动将右侧的类型转换为左侧类型后赋值 定义变量时要防止数据溢出,4.2.3 赋值语句,赋值语句是由赋值表达式加上一个分号构成 赋值语句与赋值表达式区别 赋值表达式的末尾没有分号,而赋值语句有分号 一个表达式可以包含赋值表达式,但决不能包含赋值语句:例P55,4.2.4变量赋初值,程序中常需要对一些变量预先设置一个初值 设置初值既可以用赋值语句去实现,也可以在定义变量的同时使变量初始化,后者更为方便int a,b,c=5
4、; 相当于: int a,b,c; c5;int a=b=c=5; int a,b,c;a=b=c; ,4.3 数据输入输出的概念,几乎每一个C程序都包含输入输出 输入输出是程序中最基本的操作之一 从计算机向输出设备输出数据称为输出,从输入设备向计算机输入数据称为输入,4.3 数据输入输出的概念,语言本身不提供输入输出语句 输入和输出操作是由C函数库中的函数来实现的 printf、scanf、putchar、getchar、puts、gets不是关键字 在使用系统库函数时,要在程序中使用预编译命令“#include”,4.4 字符数据的输入输出,4.4.1 用putchar函数输出一个字符 4
5、.4.2 用getchar函数输入一个字符,4.4.1 用putchar函数输出一个字符,putchar函数是字符输出函数,其功能是在显示器上输出单个字符; putchar函数的一般形式为:putchar(字符常量或变量) 例4.1: 先后输出几个字符。,#include void main ( ) char a,b,c; a=B,b=O,c=Y; putchar(a); putchar(b); putchar(c); putchar (n); ,向显示器输出字符B,向显示器输出换行符,BOY,#include void main ( ) char a,b,c;a=B,b=O,c=Y; put
6、char(a); putchar(b); putchar(c); putchar (n); ,改为int a=66,b=79,c=89;,BOY,putchar(101) (输出字符) putchar() (输出单撇号字符),只能输出单个字符,4.4.2 用getchar函数输入一个字符,getchar的功能向计算机输入一个字符 getchar函数的一般形式为:getchar( )通常把输入的字符赋予一个字符变量,构成赋值语句,如:char c; 例4.2 输入多个字符。c=grtchar();,#include void main ( ) char a,b,c; a=getchar(); b
7、=getchar(); c=getchar(); putchar(a); putchar(b); putchar(c); putchar(n); ,输入一个字符,送给变量a,BOY,BOY,B O,B O,#include void main ( ) char a,b,c; a=getchar(); b=getchar(); c=getchar(); putchar(a); putchar(b); putchar(c); putchar(n); ,putchar(getchar();,#include void main ( ) char a,b,c; a=getchar(); b=getch
8、ar(); c=getchar(); putchar(a); putchar(b); putchar(c); putchar(n); ,putchar(getchar();,putchar(getchar();,#include void main ( ) char a,b,c; a=getchar(); b=getchar(); c=getchar(); putchar(a); putchar(b); putchar(c); putchar(n); ,putchar(getchar();,putchar(getchar();,putchar(getchar();,#include void
9、main ( ) char a,b,c; a=getchar(); b=getchar(); c=getchar(); putchar(a); putchar(b); putchar(c); putchar(n); ,putchar(getchar();,putchar(getchar();,putchar(getchar();,4.5 简单的格式输入与输出,4.5.1 用简单的printf函数输出数据 4.5.2 用简单的scanf函数输入数据,格式:printf(“格式控制串”,输出列表) 功能:按指定格式向显示器输出数据 返值:正常,返回输出字节数;出错,返回EOF(-1),格式输出函数
10、printf,输出列表:要输出的数据(可以没有,多个时以“,“分隔) 格式控制串:包含两种信息 格式说明: %修饰符格式字符 ,用于指定输出格式 普通字符或转义序列:原样输出 格式字符,int a=567;printf ( “%d“,a);,int a=255;printf(“%x“,a);,int a=65;printf(“%o“,a);,int a=567;printf(“%u“,a);,char a=65;printf(“%c“,a);,printf(“%s“,“ABC“);,float a=567.789;printf(“%e“,a);,float a=567.789;printf(“
11、%f“,a);,float a=567.789;printf(“%g“,a);,printf(“%“);,567,ff,101,567,A,ABC,5.677890e+02,567.789000,567.789,%,说明 格式字符除X和E之外要用小写 格式字符与输出项个数应相同,按先后顺序一一对应 输出转换:格式字符与输出项类型不一致,自动按指定格式输出,例 main() unsigned int u=65535;printf(“u=%dn“,u);输出结果:u=-1,例 int a=3,b=4;printf(“%d %dn“,a,b); printf(“a=%d , b=%dn“,a,b);
12、,例 int a=3,b=4;printf(“%d %dn“,a,b); printf(“a=%d , b=%dn“,a,b); 输出结果: 3 4a=3, b=4,附加格式说明符(修饰符),例 int a=1234;float f=123.456;char ch=a;printf(“%8d,%2dn“,a,a);printf(“%f,%8f,%8.1f,%.2f,%.2en“,f,f,f,f,f);printf(“%3cn“,ch);,运行 1234,1234 结果: 123.456000,123.456000, 123.5,123.46,1.23e+02a,例 static char a=
13、“Hello,world!“printf(“%sn%15sn%10.5sn%2.5sn%.3sn“,a,a,a,a,a);,运行结果:Hello,world!Hello,world!HelloHelloHel,例 m.n,例 int a=1234;float f=123.456;static char c=“Hello,world!“;printf(“%8d,%-8dn“,a,a);printf(“%10.2f,%-10.1fn“,f,f);printf(“%10.5s,%-10.3sn“,c,c);,运行结果:1234,1234123.46,123.5Hello,Hel,例 -,例 int
14、a=1234;float f=123.456;printf(“%08dn“,a); printf(“%010.2fn“,f); printf(“%0+8dn“,a); printf(“0+10.2fn“,f);,例 0 、+,例 int a=123;printf(“%o,%#o,%X,%#Xn“,a,a,a,a);,例 #,例 long a=65536;printf(“%d,%8ldn“,a, a);,例 l,/00001234,/0000123.46,/000+1234,/000+123.56,/173,0173,7B,0X7B,/0, 65536,格式输入函数,格式: scanf(“格式控
15、制串“,地址表) 功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束 返值:正常,返回输入数据个数,地址表: 变量的地址,常用取地址运算符& 格式字符: d,i,o,x,u,c,s,f,e,例 scanf(“%d“,输入:10 则 a=10,例 scanf(“%x“,输入:11 则 a=17,附加格式说明符(修饰符),例 scanf(“%4d%2d%2d“,输入 19991015 则1999yy, 10 mm, 15 dd,例 scanf(“%3d%*4d%f“,输入 12345678765.43则123k, 8765.43f,例 scanf(“%2d%*3d%2d“,
16、输入 1234567 则12a, 67b,例 scanf(“%3c%2c“,输入 abcde 则ac1, d c2,输入分隔符的指定 格式无间隔,则输入一般以空格、TAB或回车键作为两数据的分隔符 格式串有其它字符做分隔符,则输入按格式串中的字符输入作为两个格式符间字符(容易出错),例 scanf(“%d%o%x“,输入 123 123 123 输出 a=123,b=83,c=291,例 scanf(“%d:%d:%d“,输入 12:30:45 则12 h, 30 m, 45 s,例 scanf(“%d,%d“,&a,&b)输入 3,4 则3a, 4 b,例 scanf(“a=%d,b=%d,
17、c=%d“,输入 a=12,b=24,c=36 ,说明: 用“%c“格式符时,空格和转义字符作为有效字符输入,如 scanf(“%c%c%c“,若输入abc 则ac1, 空格 c2, b c3,输入数据时,遇以下情况认为该数据结束: 遇空格、TAB、或回车 遇宽度结束 遇非法输入,如 scanf(“%d%c%f“,若输入1234a123o.26 则 1234 a, a b, 123 c,输入函数留下的“垃圾“:,例 int x;char ch;scanf(“%d“, 执行:123 输出:x=123,ch=10,例 int x;char ch;scanf(“%d“, 执行:123 输出:x=12
18、3,ch=10,解决方法: (1)用getchar()清除 (2)用函数fflush(stdin)清除全部剩余内容(3) 用格式串中空格或“%*c“来“吃掉“,例 int x;char ch;scanf(“%d“,4.6 顺序结构程序设计举例,例3.7 输入三角形的三边长,求三角形面积。,4.6 顺序结构程序设计举例,解题思路:假设给定的三个边符合构成三角形的条件 找到求三角形面积的公式:其中s=(a+b+c)/2,#include #include void main ( ) double a,b,c,s,area; scanf(“%lf,%lf,%lf“, ,计算s,计算area,输入a、
19、b、c的值,#include #include void main ( ) double a,b,c,s,area; scanf(“%lf,%lf,%lf“, ,数学函数,计算平方根,调用数学函数加此行,9.89,12.65,8.76 a=9.890000 b=12.650000 c=8.760000 area=43.165683,例3.8 从键盘输入一个大写字母,要求改用小写字母输出。,解题思路: 关键是找到大、小写字母间的内在联系 小写字母的ASCII码=大写字母的ASCII码+32,#include void main ( ) char c1,c2;c1=getchar();printf
20、(“%c,%dn“,c1,c1);c2=c1+32; printf(“%c,%dn“,c2,c2); ,将大写转小写,A A,65 a,97,#include void main ( ) printf(“%c”,getchar()+32); printf(“%c”,getchar()+32); printf(“%cn“,getchar()+32); ,例:输入3个大写字母,输出相应的3个小写字母。,#include void main ( ) putchar(getchar()+32); putchar(getchar()+32); putchar(getchar()+32); putchar
21、(n); ,例:输入3个大写字母,输出相应的3个小写字母。,例3.9 求 方程的根。a、b、c由键盘输入设 ,解题思路:首先要知道求方程式的根的方法。 由数学知识已知:如果 0,则一元二次方程有两个实根:,若记,#include #include void main ( ) double a,b,c,disc,x1,x2,p,q;scanf(“a=%lf,b=%lf,c=%lf“, ,程序中调用数学函数sqrt,输入a,b,c的值,#include #include void main ( ) double a,b,c,disc,x1,x2,p,q;scanf(“a=%lf,b=%lf,c=%
22、lf“, ,输入的是双精度型实数,#include #include void main ( ) double a,b,c,disc,x1,x2,p,q;scanf(“a=%lf,b=%lf,c=%lf“, ,a=1,b=3,c=2 x1=-1.00 x2=-2.00,要求输入3个实数,自动转成实数后赋给a,b,c,#include #include void main ( ) double a,b,c,disc,x1,x2,p,q;scanf(“a=%lf,b=%lf,c=%lf“, ,小数点后输出2列,a=1,b=3,c=2 x1=-1.00 x2=-2.00,习题: 1、以下c程序正确的
23、运行结果是 main() int y=2456; printf(“y=%3on”,y); printf(“y=%8on”,y);A) y= 2456 B) y= 4630 y= 2456 y= 4630 C) y=2456 D) y=4630y= 2456 y= 4630,D,2、阅读以下程序,当输入数据形式为:25,13,10,正确的输出结果是: main() int x,y,z; scanf(“%d%d%d”, A)x+y+z=48 B)x+y+z=35 C)x+y=35 D)不确定值,D,3、有输入语句:scanf(“a=%d,b=%d,c=%d”,为 使变量a的值为1,b为3,c为2,
24、从键盘输入数据的正确形式应 当是 A)132 B)1,3,2 C)a=1 b=3 c=2 D)a=1,b=3,c=2,D,4、根据定义和数据的输入方式,输入语句的正确形式为 已有定义:float f1,f2; 数据的输入方式:4.523.5 A)scanf(“%f,%f”,B,5、若x ,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是: A) scanf(“ %d%lx,%le“,D,6、阅读 下程序,若运行结果为如下形式 ,输入输出语句的正确内容是: main() int x; float y;printf(“enter x,y :“) 输入语句 输出语句
25、输入形式 enter x,y: 2 3.4 输出形式 x+y=5.40 A)scanf(“%d,%f“,B,7、根据下面的程序及数据的输入方式和输出形式,程序中输入语句的正确形式应该为:main() char ch1 ,ch2 ,ch3;输入语句 printf(“%c%c%c“,ch1,ch2,ch3);输入形式: A B C输出形式: A BA) scanf(“%c%c%c“,A,8、有输入语句: scanf(“a= %d,b= %d,c=%d“, 为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形 式应当是 A)132(回车) B)1,3,2(回车) C)a=1b=3c=2(回车) D)a=1,b =3,c =2(回车),D,