C语言程序设计教程(电子教案).ppt

上传人:牧羊曲112 文档编号:5426426 上传时间:2023-07-05 格式:PPT 页数:317 大小:1.17MB
返回 下载 相关 举报
C语言程序设计教程(电子教案).ppt_第1页
第1页 / 共317页
C语言程序设计教程(电子教案).ppt_第2页
第2页 / 共317页
C语言程序设计教程(电子教案).ppt_第3页
第3页 / 共317页
C语言程序设计教程(电子教案).ppt_第4页
第4页 / 共317页
C语言程序设计教程(电子教案).ppt_第5页
第5页 / 共317页
点击查看更多>>
资源描述

《C语言程序设计教程(电子教案).ppt》由会员分享,可在线阅读,更多相关《C语言程序设计教程(电子教案).ppt(317页珍藏版)》请在三一办公上搜索。

1、C 语言程序设计教程,目 录,第1章 C语言概述第2章 数据类型、运算符和表达式第3章 C程序中的输入、输出第4章 C程序的控制结构第5章 数 组第6章 函数第7章 编译预处理命令第8章 指 针第9章 结 构 体第10章 文 件,第 1 章 C语言概述,学习目标,对C语言有一个概括的了解,能够编写包含键盘输入、计算和显示输出等操作的简单C程序。,主要内容,C语言的产生与特点 简单C程序的组成C语言应用程序开发的基本步骤,1.1 C语言的产生及特点,C语言是为了编写系统程序而在1968年开始研发的计算机高级语言C语言表达能力强,使用灵活,程序结构清晰,紧凑,可移植性好C语言是进一步学习面向对象的

2、程序设计语言 C+和VC 的基础,主函数名,最简单的C程序的组成,对程序的注释,1.2 C语言程序的结构及书写格式,一.C程序的结构,main()int x,y,z,sum;scanf(%d,%d,%d,printf(sum=%dn,sum),定义变量x,y,z和sum,从键盘输入三个整数赋给变量x,y和z,显示变量sum的值,计算x+y+z,并将结果赋给变量sum,程序说明,一般C程序的组成,【例1-2】采用模块结构,改写例1-1的程序。add(int x,int y,int z)return(x+y+z);main()int x,y,z;printf(Please Input Three

3、Integers:n);scanf(%d,%d,%d,注意:每个C程序必定有一个、而且只能有一个主函数main()。,主函数可以调用其它子函数,而子函数不可以调用主函数,子函数彼此之间也可以相互调用。,C程序的组成,二.C程序的书写格式,1.C程序允许一行写一个或多个语句,当一个语句分几行书写时,在换行前应加上“”符,然后从下一行的开头继续。2.习惯上,书写C程序时均使用小写英文字母。3.C程序一般都采用缩进格式的书写方法,不同结构层次的语句,从不同的起始位置开始,同一结构层次中的语句,缩进同样个数的字符位置。4.应当在程序中适当地添加一些注释行。,1.3 C程序的编辑、调试和运行,编辑源程序

4、 生成目标程序 经编译 经连 接库 修改源程序 函数 生成exe文件 运行 运行时出错,第1章 结束,第 2 章 数据类型、运算符和表达式,学习目标,1.掌握基本数据类型的概念和常量表示方法,掌握变量的定义方法,能够根据实际情况选用适当的数据类型2.熟练掌握数值表达式的构造方法,能够利用表达式完成数值计算,主要内容,C数据类型概述常量和变量算术运算表达式赋值表达式自增、自减表达式,2.1 概 述,C语言支持的数据类型,基本数据类型说明符,整型:int long字符型:char实型:float double long double,2.2 常 量,常量在程序运行过程中,其值不能被改 变的量。,一

5、.不同数制整型常量的表示例如:12:十进制数 12 012:八进制数 12(等于十进制数10,用前导符0表示八进制数常量)0 x12:十六进制数 12(等于十进制数 18,用前导符0X或0 x表示十六进制数常量),二.字符常量的表示用括起来的可显示字符,如 A、$、3 等(转义字符除外)2.用八进制数表示其ASC代码的字符,如101表示西文字符 A、63表示数字字符 3。3.用十六进制数表示其ASC代码的字符,如:x41表示西文字符A、x2A表示字符*。4.用 表示字符,”表示字符”,表示字符。5.用双引号括起来的字符序列表示字符串常量,其中最后一个字符是字符串结束符0,不显式地表示出来。如:

6、“English”。,【例2-1】常量的例子 main()float r;printf(Please Input Radius:n);scanf(%f,定义浮点型变量r,人机对话,通知用户输入半径的值,从键盘输入半径的值,并将值赋给变量r,显示结果,常量2,常量3.1415926,三.符号常量,可以用#define命令定义符号常量,在程序的执行过程中不允许改变符号常量的值。,【例2-2】说明符号常量的例子,#define PRICE 30 main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);,通过#include定

7、义符号常量PRICE为30,定义二个整型变量num和total,使变量num的值为10,执行运算1030并把运算的结果赋予变量total,显示结果,2.3 变量的定义和初始化,变量:在程序运行时,其值可变的量被称为变量,分为整型变量、实型变量和字符型变量,一.C语言中的标识符,C语言把用户给常量、变量、函数、标号和其它对象所起的名字统称为标识符。用户定义的标识符须遵循如下规则:标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,标识符的长度不超过32个字符。同时,C语言的关键字和库函数名不能作为标识符。,例如,下面的字符序列均为合法的C语言标识符:a,b,word,_f

8、ile,file2,F_name,f_name注意:C编译程序字母区分大小写,所以上述F_name和 f_name是二个不同的标识符。下面的字符序列为不合法的C语言标识符:2L 违反了标识符第一个字符必须为字母 或下划线的规定。a*违反了标识符只能由字母、数字和下 划线三种字符组成的规定。int 违反了C语言的关键字和库函数名不 能作为标识符的规定。,二.变量分类 1.整型变量分类,整型变量的值域,2.浮点型变量的分类及其值域,Long double,取值(绝对值)范围 占字节数,3.字符型变量及其值域,在设计程序时,应当根据数据本身的特点和变化范围正确选择变量类型。,三.变量的定义和初始化,

9、变量的定义格式:类型说明符 变量名表;,int、unsigned、long、float、double、char等,变量名只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。,例如,语句:int a1,a2,age;float x,y,z;char ch;分别定义了整型变量a1,a2,age,浮点型变量x,y,z和字符型变量ch。,变量的初始化:在定义变量的同时对变量预 先设置初值。例如,执行语句:int num=20;float pi=3.14;char c1,c2=M;变量num、pi、c2的初值分别为20、3.14和 字符M。,四.各类数值型数据间的混合运算,高 doub

10、le float long unsigned 低 int char,当各种不同类型的数据混合运算时,其运算结果的类型由上图所示的类型转换原则确定。,【例2-3】设程序中定义变量:int i;float f;double d;,执行运算:i+(f*d)-(f+i)(这里的*表示乘法)下图给出了在运算过程中所发生的数据类型的转换 i+(f*d)-(f+i)double double double double double double double double double,2.4 算术运算符和算术运算表达式,一.算术运算符算术运算符包括:+(加)-(减)*(乘)/(除)%(求余),操作符%只

11、作用于整数x%y 的值就是 x除以 y 的余数。,操作符/的两种含义:整数除法(整除)当被除数和除数都是整型数据时,“”运算的结果为整型。例如:5/2的值为2(而不是2.5)实数除法 当被除数和除数中至少有一个是实数型数据时,“”运算的结果为实数型。例如:5.0/2的值为2.5,二.算术运算表达式,用算术运算符和括号将运算对象连接起来、并符合C语言语法规则的式子,称为算术运算表达式或算术表达式。例如:设r、x、y是已经定义的数值型变量,则:3.14*r*r、x+2*y-3/z、(x-y)*(x-y/2)均是合法的算术运算表达式,单独的r、x、y也是合法的算术运算表达式。实际上,单独的常量或变量

12、是最简单的算术运算表达式。,注意:算术运算表达式中的分数线须用/表示 例如:2+3i kj 表示为C语言表达式就是:(2+3*i)/(k*j)或(2+3*i)/k/j,C程序中,称表达式的运算结果为表达式的值。C语言规定,在表达式求值时,须按运算符优先级的高低次序执行。对算术运算而言,必须遵循先括号内后括号外,先乘、除及求余运算,后加减的运算优先级规则。,C语言规定了运算符二种不同的结合方向:左结合:当参于运算的数据两侧的运算符优先级 相同时,运算顺序为自左至右。C语言规定算术运算符遵循左结合的规则。例如,计算算术运算表达式 a+b-c 时,运算符“+”和“”具有相同的优先级,所以先执行 a+

13、b,其结果再和c相减。,右结合:当参于运算的数据两侧的运算符优先级 相同时,运算顺序为自右向左。C语言提供的运算符中有少量运算符遵循右结合的规则。教材的附录部分列出了C语言中所有运算符以及它 们的优先级和结合性。,2.5 赋值运算符与赋值运算表达式,一.赋值运算符 赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。例如:执行程序段 int a;a=3;a=a-5;当执行语句“a=3;”就完成一次赋值运算,把赋 值运算符右边的值3赋给赋值运算符左边的变量a,赋值后,a的值为3。再执行语句“a=a-5;”,赋值 运算符右边的表达式a-5的运算结果为-2,将-2赋 给a。最后,变量a的

14、值变为-2。,复合的赋值运算符复合的赋值运算符的格式:算术运算符=所以,+=、-=、*=、/=、%=都是复合的赋值运算符。,二.赋值运算表达式 将一个变量通过赋值运算符或复合的赋值运算符与一个表达式连接而成的式子称为赋值运算表达式。赋值运算表达式的格式为:变量名=表达式 或 变量名 复合的赋值运算符 表达式,例如:x=1.414,m1=E,s=3.14159*r*r 或 a+=5,x/=a+1 上述各例都是合法的赋值运算表达式。,赋值运算表达式的作用是把赋值运算符右边表达式的值赋给赋值运算符左边的变量。当算术运算符和赋值运算符同时出现在一个表达式中时,算术运算符的优先级高于赋值运算符。,C语言

15、允许赋值运算表达式中的表达式部分还是一个赋值表达式,这样就构成了多重赋值。多重赋值表达式中,赋值运算符遵循右结合的法则,即:自右向左的运算顺序。例如:多重赋值语句 a=b=c=x+8;在执行时等价于依次执行三个语句:c=x+8;b=c;a=b;,将一个变量通过复合的赋值运算符与一个表达式连接而成的式子同样称为赋值运算表达式。例如:a+=5,x/=a+1 下面的例子说明了复合的赋值运算符的运算规则。表达式 a+=5 等价于 a=a+5表达式 a*=4-b 等价于 a=a*(4-b)表达式 a%=b-1 等价于 a=a%(b-1)注意:复合的赋值运算符右边的表达式是作为一个整体参与其左边算术运算符

16、所规定的运算的。,【例2-4】赋值运算表达式举例1)y=3*(x-1);/*将3*(x-1)的结果 赋值给变量y。*/2)a=(b=4)+(c=6);/*这里的赋值运算表 达式(b=4)、(c=6)参于算术运算,C 言规定,将赋值运算符右边表达式的值 作为赋值运算表达式的值。所以,赋 值运算表达式(b=4)的值为4,(c=6)的值为6,最后将它们的和赋值给变量a,由于算术运算符的优先级高于赋值运 算符,所以表达式中的括号是必须的。*/,3)a+=a*=a+2;/*这里的语句等价于:a=a*(a+2);a=a+a;*/,三.字符型与整型的关系字符型数据的值在内存表现为它们的ASC代码值(0-25

17、5之间的一个整数)2.字符常量以其ASC代码值参与整数运算。如:A+2 的值为 67,字符A的ASC码值为65,【例2-5】字符型变量参与算术运算 main()int a;char i;a=B-1;i=a+10;printf(a:%d,a:%cn,a,a);printf(i:%d,i:%cn,i,i);,以字符格式输出变量a的值结果为字符A,以整型格式输出变量a的值结果为67,【例2-6】大小写字母的转换,main()char c1=a,c2=B;c1=c1-32;c2=c2+32;printf(c1:%c,c2%c,c1,c2);,大小写英文字母的ASC码值相差32,2.6 自增、自减运算符

18、+、-,功能:(设i为整型变量)+i:在使用i之前,先执行i+=1,使i的值加1。-i:在使用i之前,先执行i-=1,使i的值减1。i+:在使用i之后,执行i+=1,使i的值加1。i-:在使用i之后,执行i-=1,使i的值减1。上述“使用”指的是i加1或减1前后的其他操作,如赋值、运算、显示等。若不存在其它操作,则i+与+i一样,执行i+=1,使i的值加1;i-与-i一样,执行i-=1,使i的值减1。,【例2-7】自加、自减运算符的应用。main()int i=10,j;float pi=3.14,pa;j=i+;pa=+pi;printf(j=%d,pa=%fn,j,pa);printf(i

19、=%d,pi=%fn,i+,-pi);,先将i的值赋给变量j再执行i+=1;,先执行pi+=1;再将pi的值赋给变量pa,先将i的值输出再执行i+=1;,先执行pi-=1;再将pi的值输出,2.7 位运算符,位运算以字节(byte)中的每一个二进位(bit)为运算对象,最终的运算结果是整型数据。位运算分为按位逻辑运算和移位运算。一.按位逻辑运算符 按位逻辑运算符包括:按位逻辑与运算符:“&”按位逻辑或运算符:“|”按位逻辑非运算符:“”按位逻辑异或运算符:“”运算法则设用x、y表示字节中的二进位,取值为0或1。按位逻辑运算符的运算法则为:,按位逻辑与运算:x&y的结果为1,当且仅当x、y均为1

20、,否则x&y的结果为0。按位逻辑或运算:x|y的结果为0,当且仅当x、y均为0,否则x|y的结果为1。按位逻辑异或运算:xy的结果为1,当且仅当x、y的值不相同,否则xy的结果为0。按位逻辑非运算:当x=1时,x=0,而当x=0时,x=1。,位运算表达式的格式:整型变量名 运算符(&、|、)整型变量名或 整型变量名,【例2-8】位运算符的应用设有:int a=55,b=36;计算:a&b、a|b、ab及a的结果。假定每个整型变量占二个字节(16bit),则在内存中的二进 制数a、b为:a:00000000 00110111 b:00000000 00100100 按上述按位运算的法则,列出下述

21、算式:a&b:a|b:00000000 00110111 00000000 00110111&00000000 00100100|00000000 00100100 00000000 00100100 00000000 00110111 ab:00000000 00110111 00000000 00100100 a:00000000 00110111 00000000 00100100 a:11111111 11001000 00000000 00010011,结果:a&b=24,a|b=37 ab=13,a=ffc8(用十六进制表示),二.移位运算符,C语言提供的移位运算实现将整数数据按二

22、进位右移或左移的功能。向右移位运算符:“”,向左移位运算符:“”。移位运算表达式的格式:整型变量名 移位运算符 整型常量其中,整型常量指出右移或左移的位数。,【例2-9】移位运算符的应用设定义 int a=55,b=36;计算(a+b)2、(a-b)3的结果。a+b和a-b的结果91和19在内存中的二进制数分别为:a+b:00000000 01011011 和 a-b:00000000 00010011,2.8 其他运算符和表达式,一.强制类型转换运算符 C语言提供的强制类型转换运算符可以将一个表达式转换成指定的数据类型。格式:(类型说明符)(表达式)例如:(double)(x+y)/*将表达

23、式x+y的结果转换 成双精度型*/(int)a/*将变量a的值转换成int类型*/,【例2-10】强制类型转换运算符的使用 main()float x=3.6,y=6.6;printf(x+y=%fn,x+y);printf(x+y=%fn,(int)x+(int)y);,将x的值强制转换成整型值3,将y的值强制转换成整型值6,二.逗号运算符和逗号表达式 C语言通过逗号运算符“,”将两个以上的表达式连接起来,组成逗号表达式。逗号表达式的一般格式:表达式1,表达式2,表达式k,逗号表达式的运算:依次求表达式1、表达式2、表达式k 的值,并以最后一个表达式k的值作为整个 逗号表达式的值。,例如,语

24、句:x=(a=3,6*3);等价于:a=3;x=6*3;x=6*3;,将表达式6*3的结果作为整个逗号表达式的值,第2章 结束,第 3 章C程序中的输入、输出,学习目标,对C语言的输入、输出有一个初步的了解,学会使用scanf()、printf()函数实现整型、浮点型和字符型数据的输入、输出。,主要内容,C语言的输入、输出 printf()函数 scanf()函数 getchar()函数和putchar()函数,3.1 概述,C语言中没有输入、输出语句,通过调用库函数中的输入、输出函数 printf()、scanf()、getchar()和putchar()实现输入、输出。在使用输入、输出函数

25、时,应当在源程序的开始处使用#include 命令将输入、输出函数的头文件包含进来,以便在编译时实现连接。,一.格式输出函数 printf()函数,功能从指定的输出设备输出数据,默认的输出设备为显示器。,使用格式 printf(格式控制,输出表列),由格式控制符%和格式字符实现,表达式,3.2 格式输入、输出函数scanf()和printf(),格式控制的内容,这部分是用双引号括起来的字符串,其中包含两种信息:格式说明:由%和格式字符组成。如%d、%f、%f等,它们的作用是将待输出的 数据按指定的格式输出。普通字符:即需要按原样输出的字符。例如,语句:printf(Total Number i

26、s%d,Price is%fn,total,price);中的 Total Number is、Price is,输出表列部分:这部分是需要输出的数据值,通常是 表达式,如上例中的total、price。,常用的printf()格式字符,格式字符 说 明 c(*)以字符形式输出,只输出一个字符d(*)以带符号的十进制形式输出整数(正数不输出符号)e或,E 以指数形式输出实数,数字部分小数位数为6位 f(*)以小数形式输出单、双精度数,隐含输出6位小数 l 用于长整型数据,可加在格式符d,o,x,u前面,如2.5E-3相当于2.510-3,如%ld,%lo,%lx等,接上页格式字符 说 明 o

27、以八进制无符号形式输出整数(不输出前导符0)s(*)输出字符串 u 以无符号十进制形式输出整数 x或X 以十六进制无符号形式输出整数(不输出前导符0 x),用x则输出十六进制数的af以小数形式,用X时,则用 大写字母输出,【例3-1】输出格式控制符的应用 main()int x=35;float y=123.456;char ch=A;printf(x=%dn,x);printf(y=%fn,y);printf(y=%10.2fn,y);printf(y=%-10.2fn,y);printf(ch=%c n,ch);printf(String:%sn,Shanghai);,以整数格式输出表达式

28、x的值,n为转义字符,输出时将光标移到下一行的开始处,按原样输出字符串String,%-m.nf与%m.n相似,只是在其右边以空格补足不足部分。,%m.nf 表示以小数形式输出,输出结果共占m位,其中小数部分占n位。如果输出结果不足m个 字符,则在其左边以空格补足。,格式转义字符,字符形式 功 能n(*)换行t(*)横向跳格(即跳到下一个输出区)v 竖向跳格b 退格 r 回车”(*)双引号字符(*)反斜杠字符“”(*)单引号字符ddd 1到3位8进制数所代表的字符xhh 1到2位16进制数所代表的字符,【例3-2】转义字符的应用main()printf(ChinesetEnglishn);pr

29、intf(Welcome,friends!n);printf(101,x41n);,转义字符t使字符串English“输出到第2个输出区,转义字符”用以输出双引号字符。,101以八进制形式给出大写字母A的ASC码值65。,x41以十六进制形式给出大写字母A的ASC码值65。,二.格式输入函数scanf(),功能从键盘输入数据,并存入相应变量 的存储单元。,使用格式 scanf(格式控制,地址表),与printf()函数的格式控制类似,以%d%f,%c,%s为最常用,由取地址运算符“&”取出变量的存储单元的起始地址,格式字符 说 明 c 用以输入单个字符 d 用以输入有符号的十进制整数 f 用以

30、输入实数,可以用小数形式或指数形式输入 L 用以输入长整型数据以及double型数据 o 用以输入无符号的八进制整数 s 用以输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符 结束。字符串以串结束标志0作为其最后一个字符 u 用以输入无符号的十进制整数 x或X 用来输入无符号的十六进制整数(大小写作用相同)*表示本输入项在读入后不赋给相应的变量 域宽 指定输入数据所占宽度(列数),域宽应为正整数,常用的scanf()格式字符表,【例3-3】输入格式控制符的应用 main()int a,b;float c,d;char e;scanf(%d%d,当二个%d之间没

31、有分隔符时,相应的二个输入数据之间也必须用空格分隔,当二个%f之间用逗号分隔时,相应的二个输入数据之间也必须用逗号分隔,3.3 字符输入、输出函数getchar()和putchar(),一.字符输出函数putchar()putchar()函数用以输出字符变量的值。调用putchar()函数的一般格式:putchar(整型表达式);其中,“整型表达式”的值应当在字符ASC码值的范围内。通常,putchar()的参数是字符型变量、字符常量,也可以是整型变量、整型常量。,【例3-4】字符输出函数 putchar()的应用#include main()char a=C;int i=97;putchar

32、(a);putchar(b);putchar(t);,将变量或表达式的值以字符格式输出,使用putchar()函数,必须用命令“#include”将标准输入输出函数的头文件“stdio.h”包含到用户的源文件中,二.getchar()函数 功能:getchar()函数用以从键盘上输 入一个字符。调用getchar()函数的一般格式:getchar()【例3-5】字符输入函数 getchar()的使用#include main()char ch;ch=getchar();putchar(ch);putchar(getchar();,由getchar()函数从键盘输入一个字符,并立即由putcha

33、r()函数将其输出,使用getchar()函数,必须用命令“#include”将标准输入输出函数的头文件“stdio.h”包含到用户的源文件中,第3章 结束,第4章 C程序的控制结构,学习目标,熟练掌握 if 语句,掌握 switch 语句,会利用这两种语句进行条件分支结构的程序设计。熟练掌握 for 语句、while 语句和 dowhile 语句,会利用这三种语句进行循环结构的程序设计。掌握 break 语句和 continue 语句与上述语句配合使用的方法。,主要内容,程序算法的概念顺序结构分支结构循环结构,4.1 程序算法简介计算机科学家沃思提出公式:数据结构+算法=程序 数据结构对数据

34、的描述。如前面所介绍的各 种数据类型就是最简单的数据结构。算法对操作的描述,是为解决一个问题而采取 的方法和步骤。通常用流程图表示算法。一.算法的概念,计算1+2+3+4+100可以二种不同的算法:算法一:先作1+2,再加3,再加4,一直加到100,最后得到 结果:5050。算法二:利用等差数列求和公式:n(n+1)2,比较算法一和算法二:算法二不具有普遍性,许多级数求和问题是不能简单地用公 式表示的,如:cos1+cos2+cos3+cosn 算法一所反复实施的是二个数的加法运算:1、12、(1+2)+3、(1+2+3)+4、(1+2+3+99)+100这种看似枯燥、单一,反复实施的运算利用

35、C语言提供的选择结构和循环结构却是很容易实现的,而且这一算法适用于不同的级数求和问题。由于计算机具有极高的运算速度,这样的程序结构恰好发挥了计算机的特长。结论:对计算机而言,算法一优于算法二。选择一个好的算法是设计出高质量程序的前提。,【例4-1】为计算1+2+3+n设计一个算法,其中 n的值由键盘输入步骤1:从键盘输入n的值步骤2:0 sum(使变量sum具有初值0)步骤3:1 i(使变量i具有初值1)步骤4:sum+i sum(用sum+i的值取代sum原 来的值)步骤5:i+1 i(使变量i的值增1)步骤6:若in,再返回到步骤4,否则结束。说明:算法中,步骤4到步骤6组成一个循环,最后

36、的计算结果存放在变量sum中。上述算法中的每一个步骤都可以用C语言来描述,并最终成为一个完整的C程序。,二.算法的表示 算法用流程图来表示。所谓流程图就是用一些图框表示各种操作,形象直观,易于理解。常用的流程图符号:,开始、结束框,输入、输出框,处理框,判断框,流程线,按算法一计算123.n 的流程图,其中n的值由键盘输入。,开始,输入n,0 sum1 i,sumi faci+1 i,in?,y,输出sum,n,结束,返回,三.算法的特性,有穷性:一个算法所包含的操作步骤必须是有限的。2.确定性:指算法中的每一个步骤的含义必须是明确 的,不能有二义性。3.由零个或多个输入:如果算法中的n是已知

37、的数据,而不是来自外部,可以没有输入。4.有一个或多个输出:通过输出了解算法的结果。5.有效性:算法中的每一个步骤都应当是可以被执行 的,并能得到确定的结果。,4.2 顺序结构,顺序结构:顺序结构是最简单的程序结构,在执行时,按语句的先后次序依次执行,直至结束。,【例4-2】编写程序,要求从键盘输入圆的半径r,计算圆的面积s和周长l,#define PI 3.1415926 main()float s,l,r;printf(Please Input r);scanf(%f,将r2表示为r*r或用函数表示为pow(r,2),定义符号常量,【例4-3】从键盘上输入一个三位正整数,然后逆序 输出,m

38、ain()int a,b;scanf(%d,取出个位数,得到由百位数数字和个位数数字组成的二位数,4.3 关系运算符和关系运算表达式,一.关系运算符关系运算符用于表达式之间的比较:大于比较运算符:小于比较运算符:=小于等于比较运算符:、=、=具有相同的运算优先级,=和!=具有相同的运算优先级。后一组的运算优先级又低于前一组。同优先级的关系运算符遵循左结合 自左至右的结合方向。,二.关系运算表达式 二个表达式通过关系运算符连接而成为关系运算表达式。关系运算表达式的一般形式为:例如:ca+b、a!=2、-5=b-c 都是合法的关系 运算表达式。关系运算表达式的结果为逻辑值。,1(表示“真”)当关系

39、运算表达式 成立时(True)。逻辑值=0(表示“假”)当关系运算表达式 不成立时(False)。,关系运算符的优先级高 算术运算符:+-*/%关系运算符:=关系运算符:=!=低 赋值运算符:=+=-=*=/=%=,【例4-4】设:a=3,b=4,c=5,判断下列各关系运算表达式的结果。x=b a 由于关系运算符优先于赋值运算符,所以 原式等价于 x=(b a),由题设可知 ba 成立,结果为1,故最后执行赋值运算 x=1。(2)a!=b=c 由于关系运算符!=的运算优先级低于关系运算符=,所以原式等价于 a!=(b=c),由题设可知 b=c 不成立,结果为0,原式可化为 a!=0,由题设可知

40、a!=0成立,结果为1。,(3)(a b)(b b 不成立,结果为0,b 1,其结果为0。(4)f=a b c由于同优先级的关系运算符遵循自左至右的结合方向,故原式等价于:f=(a b)c),由题设可知,a b的结果为1,(a b)c的结果为1,最后执行赋值运算:f=1。,4.4 逻辑运算符和逻辑运算表达式,逻辑运算符包括!(逻辑非运算)&(逻辑与运算)|(逻辑或运算)逻辑表达式 用逻辑运算符连接而成的表达式。逻辑 运算的结果为逻辑值,以1表示“真”(true),以0表示“假”(false)。,高 逻辑运算符:!算术运算符:+、-、*、/、%关系运算符:、=、=关系运算符:=、!=逻辑运算符:

41、&、|低 赋值运算符:=、+=、-=、*=、/=、n%=,运算符的优先级:,注意:C允许算术运算表达式参与逻辑运算,在参与逻辑运算时,一切非零值均作为逻辑值1,而将零值作为逻辑值0。,逻辑运算法则:(设A,B是参与逻辑运算的二个量),逻辑“与”运算法则:(运算符:&)A&B 的结果为1,当且仅当A,B的值均为 非0,否则,A&B 的结果为0。例如:1&0 的结果为0-5&3.14 的结果为1 0&0的结果为0,逻辑“或”运算法则:(运算符:|)A|B 的结果为0,当且仅当A、B的值均为0,否则,A|B 的结果为1。例如:1|0 的结果为1-5|3.14 的结果为1 0|0的结果为0 逻辑“非”

42、运算法则:(运算符:!)!A 的结果为0,当且仅当A的值为非0,否则,!A的结果为1。例如:!0 的结果为1!3.14 的结果为0,【例4-5】设 int a=3,b=4,c=5;判断下列表达式的值:说明:由于逻辑与、或运算的优先级低于关系运算符,故将下列各式中的括号去除后对结果没有影响。(1)(ab)|(ca)由题设可知,原式等于 0|1,结果为1。(2)(!ca)|(b3)|(43)|(43)也即是:1&1|0,按自左向右的结合方向,最后结果为1。,【例4-6】设 int a=3,b=4,c=5;判断表达式a=(b=!a)&(c=b)的值。原表达式等价于a=(b=!a)&(c=b)。C语言

43、规定:在执行“&”运算时,如果“&”运算符左边表达式的值为0,则已经可以确定“&”运算的结果一定为0,故不再执行“&”运算符右边表达式规定的运算。类似地,在执行“|”运算时,如果“|”运算符左边表达式的值为1,则已经可以确定“|”运算的结果一定为1,故不再执行“|”运算符右边表达式规定的运算。由题设可知,!a的值为0,故赋值运算表达式b=!a的值为0,按C语言规定,赋值运算表达式(c=b)将不被执行,c的值还是5,b的值为0,由于逻辑运算表达式(b=!a)&(c=b)的值为0,故a的值为0,整个赋值运算表达式为0。,逻辑表达式的应用举例,1.数学中的 1x5,并且 x3可用逻辑表达式表示为:x

44、=1&x5&x!=3;2.x是3的倍数或5的倍数,可用逻辑表达式表示为:x%3=0|x%5=0;,4.5 选择结构,在许多场合,需要根据不同的情况执行不同的语句。称这种程序结构为选择结构。C语言提供的条件语句和开关语句可用于实现选择结构程序设计。,一.if语句和ifelse语句,if语句if语句的格式:if(表达式)语句,值为0,执行时,首先计算表达式的值,若其值不为0(表示真),则执行语句部分,否则,跳过语句部分,执行其后面的语句,【例4-7】从键盘输入实数a,输出a的绝对值 main()float a;printf(Enter a floatn);scanf(%f,若a0成立,执行a=-a

45、否则直接执行printf语句,【例4-8】从键盘输入一个正整数n,如果n是一个三位数,将其逆序输出,否则,直接结束。main()int a,b;scanf(%d,b=a%10;a/=10;printf(%d,b);b=a%10;printf(%d,b),a/=10;printf(%dn,a);,复合语句,取出个位数字,取出由百位数字和十位数字构成的二位数,ifelse语句 ifelse语句的格式:if(表达式)语句1 else 语句2,执行时,首先计算表达式的值,若其值不为0,则执行语句1,否则,执行语句2。语句1和语句2必定有一个、而且只能有一个被执行。之后,执行其后续语句。,【例4-9】从

46、键盘上输入两个整数a和b,按先大后 小的顺序输出。main()int a,b;printf(Please enter two integersn);scanf(%d,%d,ab成立,执行这一语句,ab不成立,执行这一语句,例4.10 输入a,b,c,利用求根公式求一元二次方程 ax2+bx+c=0 的根。流程图:,#includemain()float a,b,c;float x1,x2,delta;printf(Please Input a,b,c:);scanf(%f,%f,%f,printf(x1=%f,(-b+delta)/(2*a);printf(x2=%fn,(-b-delta)/

47、(2*a);else delta=sqrt(-delta);printf(x1=%f+%fin,-b/(2*a),delta/(2*a);printf(x1=%f-%fin,-b/(2*a),delta/(2*a);,程序:,if与else配对,用以找出a、b中的大者,【例4-11】编程求整数a、b、c中的最大者,a、b、c由键盘 输入。main()int a,b,c,max;print(Please enter three integers:n);scanf(%d,%d,%d,条件运算符 C语言提供了条件运算符“?:”。由条件运算符构成的表达式称为条件运算表达式。在某些情况下,条件语句ife

48、lse可以用条件运算表达式来代替。条件运算表达式的格式:表达式1?表达式2:表达式3 执行时,先判断表达式1的值,如果其不为0,则以表达式2 的值作为条件运算表达式的值,否则,以表达式3的值作为 条件运算表达式的值。,只有在if语句内嵌的语句为赋值语句、且两个分支都给同一个变量赋值时,才能用条件表达式代替if语句,【例4-12】从键盘输入二个整数,输出其中的较大者。main()int a,b;printf(Please input two integers:n);scanf(%d,%d,使用条件运算符使程序变得简洁,二.条件语句的嵌套 C语言允许在条件语句中又包含另一个条件语 句,称之为条件语

49、句的嵌套。,在if语句中又嵌套了另一个if语句,【例4-13】从键盘上输入一个字符,判断它是英文字母、数字或其它字符。,流程简图:,程序:#includemain()char ch;printf(Enter a character:);chgetchar();if(ch=0,【例4-14】修改例4-10的程序,要求在求解方程之前,先判 断输入的二次项系数a是否为0,若为0,则输出出错信息。,“if”和“else”的正确配对 复合语句和条件语句的嵌套结构为解决一些较为复杂的编程问题提供了必要的条件。但同时也使程序的结构变得复杂,不易读懂。特别是在程序中有多个 和ifelse的情况。在阅读程序之前

50、,必须能正确地将“”和“”配对、将“if”和“else”配对,使程序的结构变得清晰和有条理。“if”和“else”配对应遵循下述规律:自上而下,“else”总是和上面离它最近的“if”配对。而且,每一个“else”只能和一个“if”配对。由于单独的“if”也是条件语句,所以,允许无“else”配对的“if”单独存在。同理,“”和“”配对应遵循下述规律:自上而下,“”总是和上面离它最近的“”配对。,【例4-15】如果变量x的值是-15,变量y的值是-10,则执 行下面的程序段后,屏幕上显示的内容是什么?if(x0)if(x10)printf(A);elseprintf(B);elseif(y-2

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号