《计算机C语言教程第3章顺序程序设计.ppt》由会员分享,可在线阅读,更多相关《计算机C语言教程第3章顺序程序设计.ppt(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C C语言语言第3章 顺序程序设计3.1 C语言的基本语句 C C语言数据操作语句语言数据操作语句 简单语句空语句(;)复合语句(一条或多条语句)表达式语句(表达式;)函数调用语句(函数名(参数表);)流程控制语句结构化语句条件语句(if语句,switch语句)循环语句 while语句do-while语句 for语句非结构化语句 break语句continue语句 return语句 非限定转向语句 3.1.1 简单语句1.表达式语句由表达式组成的语句称为表达式语句。一般形式为:表达式;表达式;注意:分号是C语言语句的结束标志。表达式语句可分为运算符表达式语句和赋值语句。(1)运算符表达式语句
2、运算符表达式语句由运算符表达式后跟一个分号组成。例如:i+;语句的功能是,变量i的值增l。-j;语句的功能是,变量j的值减l。(2)赋值语句 赋值浯句由赋值表达式后跟一个分号组成。例如:xl;*给x赋值为l*x=x*3*cos(x);*计算表达式的值,并赋给x*2函数调用语句函数调用语句由函数调用表达式后跟一个分号组成,其作用主要是完成特定的任务。例如:scanf(f,&x)*输入函数调用语句,输入变量x的值*printf(f,x);*输出函数调用语句,输出变量x的值*函数调用语句的一般形式是:函数名(参数列表);(1)要在程序中包含相应的头文件例如:#include#include(2)库函
3、数调用规则 库函数调用的一般形式为:函数名(参数表);调用函数有的是为了得到函数的返回值,如数学函数等。这类函数的调用出现在表达式中,不作为函数调用语句,而是作为表达式语句的一部分。例如,求sin(x)的函数的语句:y1sin(1.7);y23*sin(3.14159*x180);y32*sin(+x*3.14159180)+10;在表达式中调用函数,实际上是转去执行一段预先设计好的程序,求出结果后返回调用点。所以函数的值又称为函数的返回值。调用函数时,要特别注意函数的返回值、参数个数和类型以及参数的顺序。例如,将下列数学表达式写成C语言表达式。|3sinx+4 cosx|+ex 其对应的C语
4、言表达式如下:fabs(3*sin(x)+4*cos(x)+exp(x)在C语言中没有求绝对值的运算符,求绝对值必须调用函数fabs()。它的调用形式为fabs(参数)。上式中3*sin(x)+4*cos(x)作为函数fabs的参数。有时调用某些函数并不是为了得到返回值,而只是为了完成某项任务。调用这类函数时,可直接用函数调用语句。例如:scanf(f,&a);*输入变量a的值*printf(6.4f,b);*输出变量b的值*3.空语句空语句用一个分号表示,其一般形式为:;它在语法上占有一个简单语句的位置,而执行该语句不做任何操作。空语句常用于循环语句中,构成空循环。3.1.2 复合语句复合语
5、句是由花括号将多条语句组合在一起而构成的,在语法上相当于一条语句。复合语句的形式为:内部数据描述语句内部数据描述语句 数据操作语句数据操作语句1;数据操作语句数据操作语句n;使用复合语句应注意:(1)在复合语句的“内部数据描述语句”中定义的变量,是局部变量,仅在复合语句中有效。(2)复合语句结束的“”之后,不需要再加分号。例3.1 复合语句。#include main()int xl,y2;int x2;int x3;printf(x=%d,y%dn,x,y);/*x3 */printf(x=%d,y%dn,x,y);/*x=2*/printf(x=%d,y=%dn,x,y);/*x=1*/程
6、序运行结果为:x3,y2x2,y2xl,y23.2 数据输入与输出一般:一般:C语言提供了一些标准的输入语言提供了一些标准的输入/出函数出函数系统系统函数。函数。3.2.1 字符输入输出函数1.字符输出函数 形式:putchar(c);功能:向终端(一般为显示器)输出一个字符,其中c为 字符型或整型变量注意:用该函数时,须用预编译命令:#include stdio.h#include main()int i=97;char ch=a;putchar(i);*输出字符a*putchar(n);*换行,可以输出控制字符起控制作用*putchar(ch);*输出字符变量ch的值a*程序运行结果为:a
7、a2字符输入函数函数原型:int getchar(void);功能:从输入设备(一般为键盘)上输入一个字符,函数的返回值是该字符的ASCII编码值。例如:#include main()int ch;chgetchar();*从键盘输入字符,该字符的ASCII编码值赋给ch*putchar(ch);*输出ch对应的字符*运行该程序时,输入如下:a则变量ch的值为97。程序执行后输出的结果为:a注意:(1)执行getchar()输入字符时,键入字符后需要敲回车键,回车后,程序才会响应输入,继续执行后续语句。(2)getchar()函数也将回车键作为一个回车符读入。因此,在用getchar()函数连
8、续输入两个字符时要注意回车符。再举例:#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);输出Aputchar();输出putchar(015);输出*若将最后一行改为:3.2.2 格式输出函数printf1.一般形式函数原型:int printf(char*fo
9、rmat,argument,);功能:按规定格式向输出设备(一般为显示器)输出数据,并返回实际输出的字符数;若出错,则返回负数。使用的一般形式为:printf(格式控制字符串,输出项列表);语句中:输出项列表 用“,”号隔开的变量或表达式序列,其变量的值按对应的格式控制符所指定的格式输出。是C语言中使用得最多的一种输出函数,它可一次按格式输出多个不同类型的数据。格式控制字符串用双引号“.”括起来的格式符序列。格式控制字符串由格式说明符和普通字符组成。2.普通字符 原样输出1.格式说明符:由%接格式字符组成 如:%f,%d等例:a=3;b=4;printf(a=%d,b=%d,a,b);结果:a
10、=3,b=4无论 a,b中位数多少,均为上述形式:a=123 b=452.格式控制格式控制由格式控制字符串实现。格式控制字符串由三部分组成:普通字符、转义字符、输出项格式说明。(1)普通字符。普通字符在输出时,按原样输出,主要用于输出提示信息。(2)转义字符。转义字符指明特定的操作,如n表示换行,t表示水平制表等。(3)格式说明部分由“”和“格式字符串”组成:格式字符串。它表示按规定的格式输出数据。格式说明的形式为:flagswidth.precF|N|h|Ltype3.输出项列表(1)%d%d的含义是按十进制整型数据格式输出,数据长度为实际长度 如直接用%d,则将出错。(1)%d:按数据的实
11、际长度输出。(2)%md:m表示输出字段宽度。若实际位数m,则m自动取n值,即保证n个字符正常输出。(2)%ms,如果串长小于m,则在m列范围内,字符串向左靠,右补空格。(7)f:按小数形式输出十进制实数,有以下几种形式。%m.nf,指定输出的数据共占m列,其中有n位小数。如果值长度小于m,则左端补空格。%mn.f,与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。%f,不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出6位小数。%f%m.nf%m.nf(8)%e 以指数形式按标准宽度输出十进制实数。标准输出宽度共占13位,分别为:尾数的整数部分为非零数字占l位,小数点l
12、位,小数占6位,e占1位,指数正(负)号占l位,指数占3位。结果:1.23456共13列6例5例可有%m.ne和%m.ne的形式e+002例:printf(%e,123.456)3.2.3 格式输入函数scanf1.格式输入函数的一般形式函数原型:int scanf(char*format,argument,);函数功能:按规定格式从键盘输入若干任何类型的数据给argument所指的单元。返回读入并赋给argument的数据个数;遇文件结束返回;出错返回0。使用的一般形式为:scanf(格式控制字符串,地址列表);例:main()int a,b,c;scanf(%d%d%d,&a,&b,&c)
13、;prinft(%d,%d,%dn,a,b,c);运行,机器等待你输入:3 4 5 结果 3,4,52.格式控制格式控制 格式控制由格式控制字符串实现。格式控制由格式控制字符串实现。(1)格式字符格式字符格式字符串形式为:格式字符串形式为:*widthF|Nh|1type与与printf函数的格式符有相同之处,也有不同之处。函数的格式符有相同之处,也有不同之处。*为输入赋值抑制字符,表示该格式说明要求输入数据,为输入赋值抑制字符,表示该格式说明要求输入数据,但不赋值,也即在地址列表中没有对应的地址项。例但不赋值,也即在地址列表中没有对应的地址项。例如,语句:如,语句:scanf(%3d%*5d
14、%f,&a,&x);如果执行时输入:如果执行时输入:2001200 4.1 则则200传给传给a,4.1传给传给x,1200不赋给任何变量。不赋给任何变量。width为宽度指示符,表示该输入项最多可输入的字符为宽度指示符,表示该输入项最多可输入的字符个数。如遇空格或不可转换的字符,读入的字符将减个数。如遇空格或不可转换的字符,读入的字符将减少。例如:少。例如:scanf(%3d%5d%f,&a,&b,&x);如果执行时输入:如果执行时输入:2001200 4.1 则则200传给传给a,1200传给传给b,4.1传给传给x,3d控制第一个数据只控制第一个数据只取取3个字符,所以将前面个字符,所以
15、将前面3个字符转换成整型数个字符转换成整型数200;5d控控制第二个数据,但从输入流中截取了制第二个数据,但从输入流中截取了4个字符后,遇到空格,个字符后,遇到空格,因此第二个数据只得到了因此第二个数据只得到了4位数。位数。(2)普通字符普通字符 与与printf函数的普通字符不同,函数的普通字符不同,scanf的格式控制字符串的格式控制字符串中普通字符是不显示的,而是规定了输入时必须输入的字中普通字符是不显示的,而是规定了输入时必须输入的字符。例如:符。例如:scanf(i=%d,&i);执行该语句时,输入应按下列格式:执行该语句时,输入应按下列格式:i=30 运行时语句运行时语句 scan
16、f(%d,%f,&a,&x);输入格式应为:输入格式应为:10,0.3 d,%f说明输入一个整型数和一个浮点数之间要输入说明输入一个整型数和一个浮点数之间要输入一个逗号。一个逗号。3.地址列表地址列表是由若干个地址组成的列表,可以是变量的地址、字符串的首地址、指针变量等,各地址间以逗号(,)间隔。格式输入函数执行结果是将键盘输入的数据流按格式转换成数据,存入与格式相对应的地址指向的存储单元中。所以下列scanf函数的调用是错误的:scanf(%d%d,a,b);scanf(%d%d,a+b);a,b表示的是变量a和b的值,不是地址。这种错误是初学者最容易犯的,这也是scanf函数和printf
17、函数不同之处。printf(%d,i);/*将变量i的值输出;*/scanf(%d,&i);/*从键盘输入数据,存放变量i代表的内存空间。*/4.scanf运行时注意事项(1)输入数据分隔处理 输入时,数据之间需要用分隔符,例如语句 scanf(%d%d,&a,&b);可以用一个或多个空格分隔,也可以用回车键分隔:如:100 10 或 100 10 以上两种输入数据的方式都是正确的。scanf函数指定输入数据所占的宽度时,将自动按指定宽度来截取数据。例如:scanf(%2d%3d,&a,&b);若输入为:1223100函数截取二位数的整数12存入地址&a,截取231存入地址&b中。(2)用sc
18、anf函数输入实数,格式说明符为%f,但不允许规定精度。例如:%10.4f 是错误的。(3)如果输入时类型不匹配,scanf()将停止处理,其返回值为零。例如:int a,b;char ch;scanf(%d%c%3d,&a,&ch,&b);若输入为:12 a 23则函数将12存入地址&a,空格作为字符存入地址&ch,字符a作为整型数读入。因此,以上数据为非法输入数据,程序将被终止。从结构化程序设计角度出发,程序有三种结构:顺序结构选择结构循环结构3.3 程序举例这一章介绍顺序结构程序 在顺序结构程序中,一般包括以下几个部分:1.编译预处理命令2.函数:在函数体中,包含着顺序执行的各部分语句。
19、主要有以下几个部分:(1)变量类型的说明部分;(2)提供数据部分;(3)运算部分;(4)输出部分。表示ABAB先执行A,再执行B.例3.1 输入圆的半径,输出圆的周长和面积。分析:(1)定义实型变量r、l、s用于存放半径、周长、面积;(2)调用输入函数,输入r;(3)分别利用周长公式和面积公式求出l、s;(4)调用输出函数输出l、s。程序:#include void main()float r,l,s;scanf(%f,&r);/*输入一个浮点数据,存放地址&r*/l=2*3.14159*r;/*计算周长,赋值给1*/s=3.14159*r*r;/*计算面积,赋值给s*/printf(n l=
20、%8.4f,1);/*输出周长,数据共占8个字符宽,4位小数*/printf(n s=%8.4f,s);/*输出面积,数据共占8个字符宽,4位小数*/例3.2 输入三个字符,将它们反向输出。分析:(1)定义三个字符变量ch1,ch2,ch3;(2)调用字符输入函数,输入三个字符依次存于ch1,ch2,ch3;(3)按ch3,ch2,ch1顺序输出三个字符。程序:#include void main()char ch1,ch2,ch3;ch1=getchar();ch2=getchar();ch3=getchar();/*依次输入三个字符*/putchar(ch3);putchar(ch2);p
21、utchar(ch1)/*反向输出三个字符*/例3.3 用格式输入函数输入三个字符,并用输出函数反向输出三个字符和它们的ASCII码。分析:处理流程同例3.2。程序:#include void main()char ch1,ch2,ch3;scanf(%c%c%c,&ch1,&ch2,&ch3);/*输入三个字符*/printf(%c,%dn,ch3,ch3);/*输出字符和它的ASCII码*/printf(%c,%dn,ch2,ch2);printf(%c,%dn,ch1,ch1);例3.4 输入任意三个整数,求它们的和与平均值。分析:(1)输入三个整数存入变量num1,num2,num3;
22、(2)求三个整数的平均值,赋给变量average;(3)输出average。程序:void main()int num1,num2,num3,sum;float average;printf(Please input three numbers:);scanf(%d,%d,%d,&num1,&num2,&num3);/*输入三个用逗号分隔的整数*/sum=num1+num2+num3;/*求和*/average=(num1+num2+num3)/3.0/*求平均值*/printf(sum=%d,sum);/*输出和*/printf(average=%7.2fn,average);/*输出平均值
23、*/例3.5 求方程ax2+bx+c=0的实数根。分析:(1)输入实型数a,b,c,要求满足a0且b2-4ac0;(2)求判别式;(3)调用求平方根函数sqrt(),求方程的根;(4)输出。程序:#includemath.h/*为了使用求平方根函数sqrt()*/void main()float a,b,c,disc,x1,x2;printf(input a,b,c:);scanf(%f,%f,%f,&a,&b,&c);/*输入方程的三个系数的值*/disc=b*b-4*a*c;/*求判别式的值赋给disc*/x1=(-b+sqrt(disc)/(2*a);/*求方程的根*/x2=(-b-sqrt(disc)/(2*a);printf(nx1=%6.2fn,x2=%6.2fn,x1,x2);例3.6 从键盘输入一个小写字母,用大写形式输出该字母。分析:(1)输入小写字母存入变量a;(2)转换成大写a=a-32;(3)输出a。程序:#include stdio.h void main()char a;printf(input a lowercase letter:);a=getchar();a=a-32;/*将大写字母转换成对应的小写字母*/printf(%cn,a);
限制150内