《c语言程序设计第4章.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计第4章.ppt(54页珍藏版)》请在三一办公上搜索。
1、,1.赋值运算符 变量=表达式 赋值符号“”就是赋值运算符,它的作用是将一个表达式的值(常量和变量是表达式的特例)赋给一个变量。如:a=3;a=b;ave=(a+b)/102.类型转换 如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换 不同类型的数据间的赋值归根到底就是一条:按存储单元中的存储形式直接传送,3.复合运算符 在赋值符“”之前加上其他运算符,可以构成复合运算符。例如:4.赋值表达式一般形式:变量表达式 作用:将赋值运算符右侧的“表达式”的值赋给左侧的变量。结合顺序:“自右而左”,a+=3 x*=y+8 x%=3,a=a+3,x=x*(y+8),x=x%
2、3,例1:a=b=c=5 a=(b=5)a=5+(c=6),表达式值为5,a,b,c值为5,b=5;a=5,表达式值11,c6,a=5,若a,b和c均是int型变量,则计算表达式a=(b=4)+(c=2)后,a值为,b值为,c值为。,6,4,2,以下程序的输出结果是()。main()int a=3;printf(“%dn”,(a+=a-=a*a);A)-6B)12C)0D)12 1)首先遇到左侧的第一个“”运算符,根据“自右而左”,先计算a=a*a;它相当与a=aa*a 等于6;2)然后计算a=a+(6),注意这时a=-6,最后结果是-12。,D,3.10逗号运算符和逗号表达式,逗号表达式的一
3、般形式:表达式1,表达式2,表达式3,表达式n求解表达式的求解过程:先求解表达式1,再求解表达式2,一直到表达式n,整个逗号表达式的值就是表达式n的值。注意:逗号运算符是所有运算符中级别最低的。例:a=3*5,a*4 1)根据运算符优先级(赋值运算符优先级高于逗号运算符),先计算a=3*5,结果为a=15;2)第二步,计算a*4,结果为60;3)整个表达式的值为60。,有如下程序 main()int y=3,x=3,z=1;printf(“%d%dn”,(+x,y+),z+2);运行该程序的输出结果是()。A)3 4B)4 2C)4 3D)3 3,D,第四章顺序程序设计,4.1 C语句概述 C
4、程序结构如图所示:,C程序,源程序文件1,源程序文件2,源程序文件3,预处理命令,全局变量声明,函数1,函数n,函数首部,函数体,局部变量声明,执行语句,4.1 C语句概述,简单语句,空语句(;)复合语句(一条或多条语句),表达式语句(表达式;),函数调用语句(函数名(参数表);),流程控制语句,结构化语句,条件语句(if语句,switch语句),while语句,do-while语句,for语句,非结构化语句,break语句,continue语句,return语句,非限定转向语句(goto),C语言数据操作语句,循环语句,C语言可以分为以下5类:(1)控制语句,完成一定的控制功能。C只有9种控
5、制语句:1)if()else(条件语句)2)for()(循环语句)3)while()(循环语句)4)do while()(循环语句)5)continue(结束本次循环语句)6)break(中止执行switch或循环语句)7)switch(多分支选择语句)8)goto(转向语句)9)return(从函数返回语句)上述句子中()表示一个条件,表示内嵌的语句,例如:if(xy)z=x;else z=y;,(2)函数调用语句。由一次函数调用加一个分号构成一个语句。例如:printf(“This is a C statement.”);(3)表达式语句。由一个表达式构成一个语句。例如:a=a+3;注意:
6、a=a+3是表达式不是语句。(4)空语句。即只有一个分号的语句。;通常用来作转向点或循环语句中的循环体。(5)可以用 把一些语句括起来成为复合语句,又称分程序。例:z=x+y;t=z/100;printf(“%f”,t);,注意最后一句中最后的分号不能忽略不写。,4.2 赋值语句,赋值语句是由赋值表达式加上一个分号构成。例:a=100 赋值表达式 a=100;赋值语句 赋值表达式可以包含在其它表达式之中if(a=b)0)t=a;正确注意:表达式可以作为运算对象参与其他表达式的运算,而语句则不能。例:x=3*(a=4)是合法的表达式 而 x=3*(a=3;)不是合法的表达式,3数据输入输出的概念
7、及在C语言中的实现,所谓输入输出是以计算机主机为主体而言的输入:从外部设备(默认键盘)向内存输入数据.输出:从内存向外部输出设备(默认显示器)输出数据。,外设,内存,4.3数据输入输出的概念及在C语言中的实现,C语言本身不提供输入输出语句,输入输出是由函数来完成的。C语言函数库中有一批“标准输入输出函数”,它是以标准的输入输出设备为输入输出对象的。其中有:putchar(输出字符),getchar(输入字符),printf(格式输出),scanf(格式输入),puts(输出字符串),gets(输入字符串)。在使用C语言库函数时,要用预编译命令“#include”将有关“头文件”包括到用户源文件
8、中。在头文件中包含了与用到的函数有关的信息。例如:使用标准输入输出库函数,要用到“stdio.h”。例如:#include”stdio.h”或者#include,4.4字符数据的输入输出,4.4.1 putchar函数(字符输出函数)格式:putchar(c);作用:向终端输出一个字符(c)。c可以是字符型和整型的常量,变量,表达式。例4.1:输出单个字符#includevoid main()char c1,c2;c1=b;c2=98;p putchar(c1);putchar(c2);putchar(b);putchar(98);结果为:bbbb,4.4字符数据的输入输出,例:输出控制字符,
9、转义字符#includevoid main()putchar(101);putchar(n);putchar();结果为:A,4.4.2 getchar函数(字符输入函数)格式:getchar();作用:从终端输入一个字符。例4.2:输入单个字符#include void main()char c;c=gechar();putchar(c);,结果为输出一个字符,屏幕上马上看到输入的字符。,a,4.4.2 getchar函数(字符输入函数)注意:(1)当输入多个字符时,多余字符作废(2)用getchar()得到的字符可以赋给字符型变量、整型变量,或作为表达式的一部分 如:c=getchar()
10、+32;putchar(c);若输入是:A 则输出是:a(3)#include void main()putchar(getchar();,a,注意了!1)putchar和getchar都只能输入或输出一个字符;2)使用前一定要在函数前面加上#include,4.4字符数据的输入输出,4.5格式输入与输出,4.5.1 printf函数(格式输出函数)1.一般格式:printf(格式控制,输出表列)例如:printf(“a=%d,b=%c”,i,c)括弧内包括两部分:1)“格式控制”:用双引号括起来的字符串,它包括:#格式说明:由“%”和格式字符组成,如%d,%f 等,作用是将输出的数据转换为指
11、定 的格式输出。#普通字符:即需要原样输出的字符。如上式中的 a=,空格 b=。2)“输出表列”:是需要输出的一些数据,可以是表达式。,例#include void main()int i=5;float f=32.345;printf(“i=%3df=%5.1fn”,i,f);printf(“End.n”);i=%3df=%5.1f,%引导符,5.1宽度 小数位数 精度,f类型符,普通字符,原样输出,i=5f=32.3End.,注意:数据右对齐,格式控制符完整格式%m.n l/h 格式字符 指定输出数据的类型 输出长度的修正 指定输出域宽及精度 指定左对齐输出 格式说明的引导符号1.格式字符
12、:指定输出项的数据类型和格式d十进制整数 c输出一字符o无符号八进制数 s输出一字符串x无符号十六进制数 f以小数的形式输出实数u无符号十进制数 e以指数的形式输出实数,4.3数据输入输出的概念及在C语言中的实现,C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的标准输入输出函数函数来实现的例如:字符输入函数:getchar 字符输出函数:putchar格式输入函数:scanf 格式输出函数:printf字符串输入函数:gets 字符串输出函数:puts,在使用系统库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中.例如:在调用标准输入输出库函数时,文件
13、开头应该有:#include“stdio.h”或:#include,4.3数据输入输出的概念及在C语言中的实现,4.4字符数据的输入输出,(一).字符输出函数一般形式:putchar(c)c可以是字符型和整型的常量,变量,表达式 函数作用:向终端输出一个字符二).字符输入函数一般形式:getchar()函数作用:从终端输入一个字符。函数值:从输入设备得到的字符。,4.4 字符数据的输入输出,例4.1 输出单个字符。#includevoid main()char a,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);putchar(n);,运行结果
14、:BOY,putchar(a);putchar(n);putchar(b);putchar(n);putchar(c);putchar(n);,运行结果:B O Y,4.4 字符数据的输入输出,例4.2 输入单个字符。#includevoid main()char c;c=getchar();putchar(c);putchar(n);,4.5格式输入与输出,4.5.1 printf函数(格式输出函数)输出若干个任意类型的数据1.一般格式:printf(格式控制,输出表列)例如:printf(“a=%d,b=%c”,i,c)括弧内包括两部分:1)“格式控制”:用双引号括起来的字符串,它包括:#
15、格式说明:由“%”和格式字符组成,如%d,%f 等,作用是将输出的数据转换为指定 的格式输出。#普通字符:即需要原样输出的字符。如上式中的 a=,空格 b=。2)“输出表列”:是需要输出的一些数据,可以是表达式。,格式控制符完整格式%m.n l/h 格式字符 指定输出数据的类型 输出长度的修正 指定输出域宽及精度 指定左对齐输出 格式说明的引导符号1.格式字符:指定输出项的数据类型和格式d co sx fu e,printf(“f=%5.2fn”,f);,十进制整数,输出一字符,无符号八进制数,无符号十六进制数,无符号十进制数,输出一字符串,以小数的形式输出实数,以指数的形式输出实数,2.长度
16、修正符l:对整型指长整形long 例:%ld,%lx,%lo,%lu 对实型指双精度 double 例:%lfh:只用于整型的格式字符修正为short3.域宽及精度的描述m:域宽,即对应的输出项在输出设备上所占的字符数 若:实际数据宽度m,按实际数据宽度输出 实际数据宽度m,左边补空n:精度,说明输出的实型数的小数位数 取字符串左端n个字符,2.格式字符 常用的格式字符有:(1)d格式字符。用来输出十进制整数,常用方法有:1)%d 按整型数据的实际长度输出;2)%md m为指定的输出字段的宽度。如果数据的 位数小于m,则左端补以空格,若大于m,则按 实际位数输出;例:printf(“%4d,%
17、4d”,a,b);a=123,d=12345输出 123,12345,3)%ld,输出长整型数据。例:long a=135790;printf(“%ld”,a);如果用%d输出,就会发生错误,因为整型数据的 范围为-3276832767。Long型数据应采用%ld 格式输出。(2)O格式符:将内存单元中的各位的值按8进制形式输出,如果是有符号数,也将符号位也一起作为八进制数的一部分输出。(3)X格式符:以十六进制数形式输出整数。同样不会出 现负的十六进制数。(4)u格式符:用来输出unsigned型数据,以十进制形式输出。,例:int a=-1;printf(“%x,%O,%d%u”,a,a,
18、a,a);输出结果:ffff,177777,-1,65535(5)C格式符:用来输出一个字符。例:char c=a;printf(“%c”,c);输出结果:a。注意:第二句两个c,c不同。,一个整数,只要它的值在0127范围内,也可以用字符形式输出,在输出前,系统会将该整数作为ASCII码转换成相应的字符;反之,一个字符数据也可以用整数形式输出。*例4.4 字符数据的输出:main()char c=a;int i=97;printf(“%c,%dn”,c,c);printf(“%c,%dn”,i,i);运行结果:a,97 a,97,(6)s格式符:用来输出一个字符串。有几种用法:1)%s,例如
19、:printf(“%s”,”CHINA”);输出 CHINA 字符串(不包括双引号)2)%ms,输出的字符串占m列,如字符串本身长度 大于m,则突破m的限制,将字符串全部输出。若 串长小于m,则左补空格。3)%-ms,如果串长小于m,则在m列范围内,字符 串左靠,右补空格;4)%m.ns,输出占m列,但只取字符串左端n个字符。这n个字符输出在m列的右侧,左补空格;5)%-m.ns,输出占m列,但只取字符串左端n个字 符。这n个字符输出在m列的左侧,右补空格;如 果nm,则m自动取n值,保证n个字符正常输出。,*例4.5字符串的输出main()printf(“%3s,%7.2s,%.4s,%-5
20、.3sn”,”CHINA”,”CHINA”,”CHINA”,”CHINA”);输出的结果为:CHINA,CH,CHIN,CHI(7)f格式符,用来输出实数(包括单、双精度),以小数形式输出。1)%f,不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出6位小数。注意:单精度实数的有效位数一般为7位。,例4.6输出实数时的有效位数main()float x,y;x=111111.111;y=222222.222;printf(“%f”,x+y);运行结果:333333.328125 显然,前面7位数字为正确的有效的数字,而后面的5位为不准确的。双精度实数也可用%f格式输出,它的有效位数
21、一般为16位,小数为6位。,2)%m.nf指定输出的数据共占m列,其中有n位小数。如果数值长度小于m,则左端补空格。3)%-m.nf指定输出的数据共占m列,其中有n位小数。如果数值长度小于m,则右端补空格。例4.8:输出实数时指定位数。main()float f=123.456;printf(“%f%10f%10.2f%.2f%-10.2fn”,f,f,f,f,f);结果:123.456001 123.456001 123.46 123.46 123.46 注意:小数点也占一位。,(8)e格式符,以指数形式输出实数。1)%e不指定输出数据所占的宽度和数字部分小数位数,由系统自动指定给出6位小数
22、,指数部分5位(之中“e”占1位,指数符号占1位,指数占3位)。数值按规范化指数形式输出。(小数点前必须有而且只有一个非零数字)例:printf(“%e”,123.456);输出:1.234560e+0022)%m.ne和%-m.ne参见(7),此处n,指拟输出的数据的小数部分的小数位数。例:若f=123.456printf(“%10e%10.2e”)结果为:1.234560e+002 1.23e+002,突破10个字符的限定。,连同最右空格共10个字符,(9)g格式符 用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的零。printf函数使用
23、的注意事项:1)除了X、E、G外,其他格式字符必须用小写字母;2)一个格式说明以”%“开头,以d、o、x、u、c、s、f、e、g等字符之一为结束,中间可以插入附加格式字符。3)如果想输出字符“%”符号,则应该在“格式控制”字符串中用连续的两个%表示。如:printf(“%f%”,1.0/3);输出:0.333333%,4.5.2 scanf函数(格式输入函数)1.一般形式scanf(格式控制符,地址列表)作用:按格式控制符的要求将数据从终端传送到变量地址所指定 的内存空间说明:“格式控制”的含义同printf函数;“地址表列”是由若干个地址组成的表列,可以是 变量的地址,或字符串的首地址;1.
24、变量地址 变量的地址通过对变量名“求地址”运算得到。形式:&变量名,例4.9 用scanf函数输入数据main()int a,b,c;scanf(“%d%d%d”,&a得到两个字节空间的首地址,运行时按以下方式输入a、b、c的值:3 45(输入a、b、c的值)3,4,5(输出a、b、c的值)程序运行过程:1)按照a、b、c在内存的地址将a、b、c的值存进去;2)然后再按照a、b、c在内存的地址将a、b、c的值取出来;,scanf(“%d%d%d”,printf(“%d,%d,%dn”,a,b,c);,注意:本例中“%d%d%d”表示按十进制整数形式输入数据。输入数据时,在两个数据之间以一个或多
25、个空格间隔,也可以使用回车键、跳格键tab.但是不能使用逗号作为分隔符。合法输入有:1)3 4 52)3 4 53)3 4 54)3(按tab键)4 5 如果输入格式为“%d,%d,%d”,则用逗号作为分隔符。合法输入为:3,4,5,如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。如果输入格式为“%d;%d;%d”,则用分号作为分隔符。合法输入为:3;4;5如果输入格式为“%d:%d:%d”,则用冒号作为分隔符。合法输入为:3:4:5如果输入格式为“a=%d,b=%d,c=%d”,则用冒号作为分隔符。合法输入为:a=3,a=4,a=5,2.格式
26、说明 和printf函数中的格式说明相似,以%开始,以一个格式字符结束,中间可以插入附加的字符。%*m l/h 格式字符 说明:1)对unsigned型变量所需的数据,可以用%u,%d或%o,%x格式输入;2)可以指定输入数据所占列数,系统自动按它截取所需数据,如:scanf(“%3d%3d”,输入:123456则:a=123b=456,3)如果%后有一个“*”附加说明符,表示跳过它指定的列数。例如scanf(“%2d%*3d%2d”,是不合法的。这点与printf不同,需要注意。,3.使用scanf函数时应注意的问题 scanf函数中的“格式控制”后面应当是变量地址,而不是变量名。这点与其他
27、高级语言都有所不同,一定注意。错误例:scanf(“%d,%d”,a,b);,3)在用“%C”格式输入字符时,空格字符和“转义字符”都作为有效字符输入;scanf(“%c%c%c”,如果输入:a b c则:c1=a,c2=,c3=b4)在输入数据时,遇以下情况时该数据认为结束;1、遇空格,或按“回车”或“跳格”(Tab)键;2、按指定的宽度结束,如“%3d”,只取3列;3、遇到非法输入;例:scanf(“%d%c%f”,&a,&b,&c)输入:123 p123o.26结果为:a=123;b=p;c=123,4.6顺序结构程序设计举例,例4.10 输入三角形的三边长,求三角形的面积。设输入的三边
28、长a、b、c能构成三角形,根据三角形面积的公式:,输出area,S=(a+b+c)/2,输入a,b,c,#include#include void main()float a,b,c,s,area;scanf(“%f,%f,%f”,运行情况:3,4,6a=3.00,b=4.00,c=6.00,s=6.50area=5.33,例4.11 从键盘输入一个大写字母,要求改用小写字母输出。#include void main()char c1,c2;c1=getchar();printf(“%c,dn”,c1,c1;c2=c1+32;printf(“%c,%dn”,c2,c2;,运行情况:BB,66b
29、,98,输出x1,x2,disc=b2-4ac,输入a,b,c,分析:ax2+bx+c=0,p,q,x1=p+q,x2=p-q,例4.12 求 方程的根。a,b,c由键盘输入,设,#includemain()float a,b,c,disc,x1,x2,p,q;scanf(“a=%f,b=%f,c=%f”,运行情况:a=1,b=3,c=2x1=-1.00 x2=-2.00,例:鸡兔同笼,已知鸡兔总头数为h,总脚数为f,求鸡兔各多少只?分析:设鸡x只 兔y只则 解得,#include void main()int x,y,h,f;scanf(“%d%d”,运行情况:928head=9,foot=28chicken=4,rabbit=5,