第03章程序结构(顺序、选择和循环)_第1页
第03章程序结构(顺序、选择和循环)_第2页
第03章程序结构(顺序、选择和循环)_第3页
第03章程序结构(顺序、选择和循环)_第4页
第03章程序结构(顺序、选择和循环)_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、西华大学电气信息学院 郑海春2 合法语句 非法语句 4; 3=a+2; a; 5=(7+a); a+1-7; a+6=7; a=1; a-a=0; ;/空语句 赋值运算符的左侧只能是变量,不能是常量或者表达式。C语言本身不提供输入输出语句,输入输出操作是由函数来实现的。在C标准函数库中提供了一些输入输出函数,如printf , scanf , putchar , getchar , puts,gets等。这些名字不是C语言的关键字,而只是函数名而已。在使用C语言库函数时,要用文件包含命令“#include”将有关的“头文件”包括到用户源文件中。头文件中包含了与用到的库函数有关的信息。例如使用输

2、入输出库函数时,要用到“stdio.h”文件。应在源文件开头添加以下命令: #include “stdio.h” 或 #include 向屏幕输出一个字符,格式putchar( c ),其中c可以是字符型或整型的变量、常量。/*3_1.c*/#include stdio.hvoid main()char a,b,c;int x; a=B;b=O;c=Y;x=67; putchar(); putchar(a); putchar(b); putchar(c); putchar(); putchar(n); putchar(101); /输出字符A putchar(66); /输出字符B putch

3、ar(x); /输出字符C putchar(D); /输出字符D putchar(015); /输出回车,不换行 putchar(012); /输出换行 putchar(n);从键盘输入一个字符,格式int getchar() ,函数的返回值就是从输入设备输入的字符的ASCII码值。注意:输入的字符只有按下回车键后才能输入。/*3_2.c*/#include void main()char c;c=getchar();putchar(c);putchar(n);a a例1:从终端输入一行任意字符,编程实现把其中所有的小写字母转换成大写字母,其它字符不变。#include stdio.hvoid

4、 main() char c;while(c=getchar()!=n)if(c=a & c=a& c=A & c=0&c=9) digit+;else other+;printf(%d %d %d %dn,letters,space,digit,other);例3:输入一行字符,编写程序统计其中空格符、换行符和Tab符的个数。#include stdio.h#include ctype.hvoid main() char c;int n=0;while(c=getchar()!=EOF)/EOF表示“CTRL+Z”组合键结束 if(isspace(c) n+;

5、printf(n=%dn,n);printf函数1.一般格式:printf(格式控制,输出项1,输出项2,)a=%d,b=%dn,a,b括号内包括两部分:“格式控制”是用双引号括起来的字符串,它包括两种信息:格式说明格式说明,由“%”和格式字符组成,如%d,%f,%c等。其作用是将输出的数据转换为指定的格式输出。普通字符普通字符,即需要原样输出的字符。“输出列表”是需要输出的一些数据,可以是表达式。2.格式字符d格式符,以十进制十进制形式输出整数整数, 用法如下:%d,按整型数据的实际长度输出。%md,m为指定的输出字段的宽度,若数据的位数小于m,则左补以空格,若大于m,则按实际位数输出。%l

6、d,输出长整型数据。/*3_3.c*/ #include stdio.hvoid main()int a=123,b=12345; long d=135790; printf(%4d,%4d,%8ldn,a,b,d);o格式符,以八进制八进制形式输出整数整数,同样可以指定字段宽度。x格式符,以十六进制十六进制形式输出整数整数,同样可以指定字段宽度。/*3_4.c*/#include stdio.hvoid main() int a=15;long b=19; printf(%d,%o,%xn,a,a,a); printf(%ld,%lo,%lxn,b,b,b);/*改进:3_4.c*/#inc

7、lude stdio.hvoid main() int a=15;long b=19; printf(%d,%#o,%#xn,a,a,a); /* %# 八进制输出先导0 %# 十六进制输出先导0 x */ printf(%ld,%#lo,%#lxn,b,b,b);u格式符, 用来以十进制十进制形式输出无符号型整数无符号型整数。c格式符,用来输出一个字符。/*3_5.c*/#include stdio.hvoid main() char c=a; int i=97; printf(%c,%dn,c,c); printf(%c,%dn,i,i);s格式符,用来输出一个字符串,对应的变量必须是地址

8、。例如: printf(%s, CHINA); f格式符,用来输出实数(包括单、双精度包括单、双精度),以小数形式小数形式输出,有以下几种用法:%f,不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并隐含输出6位小数位小数。应当注意,并非全部数字都是有效数字。单精度实数的有效位数一般为7位,双精度数的有效位数一般为16位。%m.nf,指定输出的数据共占m列,其中有n位小数,若数值长度小于m,则左端补空格。%-m.nf与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。/*3_6.c*/#include stdio.hvoid main()float x=111111.111f,

9、y=222222.222f; double a=1111111111111.111111111; double b=2222222222222.222222222; float f=123.456f; printf(%fn,x+y); printf(%fn,a+b); printf(%f %10f %10.2f %.2f %-10.2fn,f,f,f,f,f);(8)e或E格式符,以指数形式指数形式输出实数。 #include stdio.hvoid main() printf(%en,123.4567);(9)g或G格式符,采用最小的宽度输出实型数。且不输出无意义的0。 #include s

10、tdio.hvoid main()printf(%fn,123.4); printf(%En,123.4);printf(%Gn,123.4);注意:如果想输出字符%,则应该在“格式控制”字符串中用连续两个%表示,如:/*3_7.c*/#include stdio.hvoid main()printf(%f%n,1.0/3);思考:int a=20; printf(“%dn”,a); 的屏幕打印结果?%dscanf函数1.一般格式:scanf(格式控制,地址列表地址列表)“格式控制”的含义同printf函数。注意:输入double型实数时的格式符为%lf或%le。“地址列表”是由若干个地址组成

11、的变量的地址列表变量的地址列表。/*3_8.c*/#include stdio.hvoid main()int a,b,c;scanf(%d%d%d,&a,&b,&c);printf(%d,%d,%dn,a,b,c);说明:变量之前必须加“&”符号,“&”是“求地址运算符”,在此只需正确表示,不必深究。2.使用scanf函数应注意的问题 (1)scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名。地址列表项之间必须用逗号分隔。(2)如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时要求输入与这些字符完全相同的字符(包括字符

12、的大小写也必须完全一致)。(3)在用“%c”格式输入字符时,无须间隔符,空格、Tab、回车都将作为有效字符输入。以下例外:scanf(“%c %c %c”,&c1,&c2,&c3);此时,空格、Tab、回车都作为间隔符不能被读入。(4)当用scanf函数从键盘输入数据时,每行数据在未按下Enter键之前,可以任意修改。但按下Enter键后,scanf函数即接受了这一行数据,不能再回去修改。(5)在输入整数或实数这类数值型数据时,输入的数据之间必须用空格、Enter键、Tab键分隔,这些间隔符的个数可以是一个或多个。(6)在scanf函数中的格式字符前可用一个整数指定输入

13、数据所占的宽度。但不可对实型数指定小数的宽度。int a;scanf(“%3d”,&a); 正确float b;scanf(“%3f”,&b);正确float c;scanf(“%.2f”,&c);错误(7)可以在格式字符和%之间加上一个”*”号跳过对应的输入数据。#include stdio.hvoid main() int a,b,c; scanf(%d%d%*d%d,&a,&b,&c); printf(%dn%dn%dn,a,b,c);#include stdio.hvoid main() float x,y,z; int a,b,c; s

14、canf(Please input x,y,z:%f%f%f,&x,&y,&z); scanf(%d,%d,%d,&a,&b,&c); printf(%f,%f,%fn,x,y,z); printf(%d,%d,%dn,a,b,c);说明:为了减少不必要的麻烦,使用scanf函数时,在格式控制部分尽量不要使用其它字符。/*3_9.c*/#include stdio.h#include math.hvoid main()float a,b,c,s,area; scanf(%f,%f,%f,&a,&b,&c); s=1.0/2

15、*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c); printf(a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn,a,b,c,s); printf(area=%7.2fn,area);例题:输入三角形的三边长,求三角形面积。 分析:为简单起见,设输入的三边长a、b、c能构成三角形。根据求三角形面积的数学公式:)()(csbsassarea关系运算符:用于两个值的比较。关系表达式:用关系运算符将两个表达式连接起来的式子称为关系表达式。关系表达式的值是一个逻辑值,即“真”或“假”。C语言没有逻辑型数据类型,以1代表“真”,以0代表“假”。关系运算符含

16、义例子小于55.5 /得出1=小于等于5大于55.5 /得出0=大于等于6.3=5 /得出1= =等于5=5 /得出1!=不等于5!=5 /得出0注意:若x和y都是浮点数,应避免使用x= =y这样的关系表达式,因为通常存放在内存中的浮点数是有误差的,因此不可能精确相等,这将导致关系表达式x= =y的值总是为0。典型例题:a=3,b=2,c=1,则:关系表达式“(ab)=c”的值为?1优先级: = = != 同级同级 同级同级 高高 低低逻辑运算符:C语言提供三种逻辑运算符。逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式。逻辑表达式的值是一个逻辑值,即“真”或“假”。C

17、语言没有逻辑型数据类型,以1代表“真”,以0代表“假”。但在判断一个量是否但在判断一个量是否为为“真真”时,以时,以0代表代表“假假”,以,以非非0代表代表“真真”。即将一个非零的数值认作为“真”。逻辑运算符含义例子!逻辑非!(5= =5) /得出0&逻辑与3 & (66) /得出0|逻辑或(56) | (65) /得出1短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。例 a&b&c /只在a为真时,才判别b的值; /只在a、b都为真时,才判别 c的值例 a|b|c /只在a为假时,才

18、判别b的值; /只在a、b都为假时,才判别 c的值考题:考题:#includevoid main() int x=0,y=0,z=0;+x|+y|+z;printf(“%d%d%d”,x,y,z);输出:1 0 0例题: (注:参考书中93页表5-1的逻辑运算真值表)1)若a=4,则!a的值为?2)若a=4,b=5,则a&b的值为?3)a=4,b=5,a|b的值为?4)a=4,b=5,!a|b的值为?5)4&0|2的值为?6)53&2|84-!0算术运算符、关系运算符、逻辑运算符、赋值运算符、逗号运算符优先级顺序:(注:参见附录C)! 算术运算符 关系运算符 &

19、 | 赋值运算符 逗号运算符高低011111注意:在数学上关系式0 x10表示x的值应在大于0并且小于10的范围内,但在C语言中不能直接用0 x10这样一个关系表达式来表述上述逻辑关系。对于这种情况,只有采用C语言提供的逻辑表达式 0 x & xb); printf(“%d”,a);else总是与它上面的最近的未配对的if配对。例题:某商场优惠顾客:购买金额大于等于500元的8折,大于等于300元及500元以下的9折,300元以下的全部9.5折;编写计算实际应付金额的程序。/*3_10.c*/ #includestdio.h void main() float x; printf(请输

20、入总金额:); scanf(%f,&x); if(x=500) x=x*0.8f; if(x=300)&(x500) x=x*0.9f; if(xb)?a:b; 相当于 max=ab?a:b; (2)如果a=1,b=2,c=3,d=4,求 ab?a:cd?c:d的值? (3) 用条件运算符求出m,n,p三个整数的最小值?4 (mn)?(mp?m:p):(np?n:p);思考:思考:如何用条件运算符求三个数的最大值?如何用条件运算符求三个数的最大值?例题:用switch语句实现从键盘输入成绩,转换成相应的等级后输出(90100为A, 8089为B, 7079为C, 6069为D,

21、59以下为E)。#include stdio.h void main() int score; printf(请输入一个成绩:); scanf(%d,&score); switch(score/10) case 10: case 9: printf(“An”);break; /*执行break后结束switch语句*/ case 8: printf(Bn);break; case 7: printf(Cn);break; case 6: printf(Dn);break; default: printf(En); 思考:思考:用用ifelse怎么做?怎么做?举例:举例:计算n!#inc

22、lude stdio.hvoid main()int i,n;double s=1;scanf(%d,&n);for(i=1;i5000) break; printf(s=%d,i=%dn,s,i);例题:输出1到10之间不能被3整除的数。#include stdio.hvoid main() int n; for(n=1;n=10;n+) if(n%3=0) continue; printf(n=%dn,n); 思考:思考:如何求小于如何求小于m的最大的的最大的k的素数的素数? int #include stdio.hvoid main()long int f1,f2;int i;

23、f1=f2=1;for(i=1;i=20;i+)printf(%12ld %12ld ,f1,f2);if(i%2=0) printf(n);f1=f1+f2;f2=f2+f1;扩展的斐波那契数列。(方法(方法2)#include stdio.hvoid main() long int f1,f2,f3; int i; f1=0;f2=1;f3=2; for(i=1;i=10;i+) printf(%ld %ld %ld ,f1,f2,f3); if(i%2=0) printf(n); f1=f1+f2+f3; f2=f2+f3+f1; f3=f3+f1+f2; 图形问题:分析:凡是图形问题都

24、是变相考数学。例题:例1:正直角三角形。#include stdio.hvoid main()int i,j;for(i=1;i=3;i+)for(j=1;j=i;j+) /当前行列数=当前行数printf(*);printf(n);思考:如何用*输出倒直角三角形?#include stdio.hvoid main()int i,j;for(i=1;i=3;i+) for(j=1;j=3+1-i;j+)/当前行列数当前行列数=总行数总行数+1-当前行数当前行数printf(*); printf(n);#include stdio.hvoid main()int i,j;for(i=1;i=4;

25、i+) /空格组成的倒直角三角形输出 for(j=1;j=4+1-i;j+)/当前行列数=总行数+1-当前行数printf( ); /正等腰三角形 for(j=1;j=2*i-1;j+)/当前行列数=2*当前行数-1printf(*); printf(n);例2:正等腰三角形。思考:如何用*输出倒等腰三角形?#include stdio.hvoid main()int i,j;for(i=1;i=4;i+) /空格组成的正直角三角形输出 for(j=1;j=i;j+)/当前行列数=当前行数printf( ); /倒等腰三角形 for(j=1;j=2*4-(2*i-1);j+) /当前行列数=2

26、*总行数-(2*当前行数-1)printf(*); printf(n);图形输出总结:正直角三角形:当前行列数=当前行数倒直角三角形:当前行列数=总行数+1-当前行数正等腰三角形:当前行列数=2*当前行数-1倒等腰三角形:当前行列数=2*总行数-(2*当前行数-1)例3:如何输出菱形。书上P130页习题6.14。#include stdio.hvoid main() int i,j;for(i=1;i=4;i+)for(j=1;j=4+1-i;j+)printf( ); for(j=1;j=2*i-1;j+)printf(*);printf(n);for(i=1;i=3;i+)for(j=1;j=i+1;j+) printf( );for(j=1;j=1e-5);printf(%fn,x1);%d,%3a是是22 b是是6 c是是0 10a=b|a4|-x-4t=x;x=y;x=t;/两数交换方法两数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论