版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计请大家边动手边观看
1精选课件第一章计算机语言与C语言概述
1.1计算机语言概念
■计算机语言定义计算机能够识别和接受的语言。要使计算机按自己的意图工作,必须使用计算机所能接受、理解和执行的指令指挥计算机工作。2精选课件
■计算机语言的种类
机器语言
低级语言
汇编语言
(面向计算机)
BASIC
入门语言
F77
科学计算
高级语言
Foxpro
数据库管理
(面向问题)
C
多用途
计算机语言…………3精选课件•机器语言
最早问世,用二进制代码构成指令。如:100000(+)110000(-)
用机器语言编程的缺点:
─繁琐、不直观、不易调试。
如计算y=2x2+3x-1需要七八条指令。
─移植性差。依赖于计算机。
4精选课件•汇编语言
用符号构成指令,如:MOV、ADD
用汇编语言编程:
相对直观,但仍繁琐,仍是面向计算机的语言。
汇编语言是计算机间接接受的语言5精选课件•高级语言与低级语言相比,有根本性的区别:
是面向问题的语言。高级语言的一条指令(语句):
y=2*x*x+3*x-1;对应于:y=2x2+3x-1y=sin(x);对应于:y=sinx用高级语言编程:直观、易懂、移植性好(不依赖于具体计算机)6精选课件上机运行高级语言程序需经过编译:
编译
执行
要上机完成一个计算问题,主要的任务就是用高级语言编写出相应的源程序。即至少要学会一种计算机语言。
高级语言源程序
机器指令目的程序结果编译程序7精选课件1.2C语言的特点
集高级语言和低级语言的优点于一身:
●能实现低级语言的大部分功能(如直接访问内存物理地址、进行位操作等)。
●图形功能强。
●运算符和数据结构丰富。
●语法限制不太严格,程序设计自由度大。
●生成目标代码质量高,程序执行效率高。8精选课件1.3简单的C程序介绍
例1:
main()
主函数说明
{
程序框架
printf(“abcdef”);
函数体
}
语句
程序的功能是输出字符串:abcdef
9精选课件例2:求两数之和。main(){inta,b,c;
a
a=100;b=50;
bc=a+b;
cprintf(“\nc=%d”,c);}程序运行结果:c=150
10精选课件例3:求两数中的最大值。
函数类型函数名形参main()
intmax(intx,inty){
inta,b,c;
{intz;
scanf(“%d,%d”,&a,&b);if(x>y)z=x;
c=max(a,b);elsez=y;
printf(“\nmaxis:%d”,c);return(z);}
}
a
x
b
y
c
z
(两个函数组成)35355511精选课件
总结上例可知:(1)C程序由函数构成。(2)函数由两部分组成:
函数说明部分:函数名、函数类型、形参名、形参类型。
函数体:实现函数的具体操作;由语句构成。(3)程序总是从main函数开始执行。(4)书写格式自由。(5)语句必须有分号。:
12精选课件
第二章算法
2.1算法的概念
要利用计算机处理问题,光学习语言的语法规则还不够,最重要的是要学会针对各类型的问题,拟定出有效的解题方法和步骤。解题方法和步骤就是算法。13精选课件算法:
为了解决一个问题而采取的有限步骤。
计算机算法:
如何使计算机一步一步地工作的具体过程。14精选课件
利用计算机处理问题的步骤:
1)设计好算法——算法设计;
2)用计算机语言实现算法——程序设计。算法必须是“有效”的。算法设计还要充分考虑算法的好坏。衡量算法好坏的主要标准:
①程序简练。②执行速度快。③占空间少。
15精选课件例:考虑的算法。算法①:直接表达。直接用语句s=1+2+3+4+5+6+7+8+9+10当项数较多时该算法不适用s=∑i11016精选课件算法②:迭代法(累加求和法)
s=1+2+3+4+5+6+7+8+9+10
算法步骤:si
①使s=0+②使i=1
累加器记数器③s+i→s④i+1→i⑤若i≤10转③,否则转⑥⑥输出s01123364105该算法通用,是好算法17精选课件2.2算法的表示
算法需要有统一的表示方法
常用的表示方法有:
自然语言流程图结构化流程图N-S流程图.
18精选课件1、自然语言
对于计算
s=1+2+3+4+5+6+7+8+9+10
用自然语言表示为:
①
使s=0
(s为累加器)
②
使i=1
(i为计数器)
③
s+i→s
(累加求和公式)
④
i+1→i
(计数器加1)
⑤
若i≤10转③,否则转⑥
⑥
输出s的值
特点:通俗易懂、文字冗长、含义不大严格。
19精选课件2、流程图
用流程图符号表示算法。常用的流程图符号
起止框
输入输出框
处理框
流程线
判断框
20精选课件
对于计算s=1+2+3+4+5+6+7+8+9+10
用流程图表示为:s+i→s
i+1→i
S+i→s
S+i→s
i≤10
输出s
0→s
1→i
直观形象,易于理解,次序清楚YN21精选课件3、结构化流程图
传统的流程图有一个弊端:对流程线没有严格的限制,对于较复杂的算法可能会变成乱麻一般(BS型算法)。为克服这一弊端,提出了由三个基本结构组成算法流程图的思想:
结构化流程图
22精选课件
三个基本结构:①
顺序结构
按固定顺序(从上到下或从左到右)执行的结构。
ABab23精选课件
②
选择结构
根据条件P选择执行哪一个分支。
成立
不成立
pABab成立不成立24精选课件例:计算
y=1/x当x≠0时y=10000当x=0时的算法流程图图:
选择结构
输入x
X=0?
10000→y
1/x→y
输出y
YN25精选课件
③
循环结构
重复执行某些操作的结构。分为两种:当型循环和直到型循环。
当型循环
直到型循环
P1AAP2aabbYYNN26精选课件
可以看出,每个基本结构都只有一个入口和一个出口,因此,用三个基本结构构成的流程图不会象乱麻一般,用三个基本结构构成的流程图就成为结构化流程图,用结构化流程图描述的算法称为结构化算法,相应的程序设计就称为结构化程序设计。
27精选课件观察前例:
0→s
1→i
S+i→s
i+1→i
i≤10
输出s顺序结构循环结构yn28精选课件4
N-S流程图N-S流程图的三个基本结构:
ABP成立不成立ABAB当P1直到P2顺序结构选择结构循环结构29精选课件例:计算
y=1/x当x≠0时y=10000当x=0时的N-S流程图:输入x
X=0?是否10000→y1/x→y
输出y
30精选课件
例:计算s=1+2+3+4+5+6+7+8+9+10的N-S流程图:
i≤10
直到i>10
直到型
当型
0→s
1→i
输出s1→i
0→ss+i→s
i+1→i
s+i→s
i+1→i
输出s31精选课件
第三章数据类型、运算符
与表达式
3.1C的数据类型
●基本类型(整型、实型、字符型、枚举型)
●构造类型(略)
●指针类型(略)
●空类型各类型包含常量与变量32精选课件3.2常量与变量■常量与符号常量
常量在程序运行过程中其值保持不变的量。符号常量用来代表一个常量的标识符。
#definePI3.141592633精选课件
例:#definePI3.1415926main(){floatr=2,c;
c=2*PI*r;printf(“%f”,c);}34精选课件■变量
其值可以改变的量。
变量的三要素:
①
变量名每个变量有一个名字,作为识别该变量的标识符。②变量的值每个变量有一个值,变量的值是随时可以改变的。
35精选课件
③变量的存储单元
每个变量占据一个内存单元,用于存放变量的值。
变量名
a
变量值
存储单元
336精选课件
变量的命名规则:由字母、数字和下划线组成以字母或下划线开头
a、x1、y_2、_b1、_1c合法
1x、a+2、Ф、Ω不合法
变量必须先定义后使用。程序中何时使用常量?何时使用变量?37精选课件
3.3整型数据
■整型常量
即整常数,c的整常数有三种形式:
①十进制整数与数学中的整数一致,如:100,123,15等。
②八进制整数以0开头的整数,如:010,07,020等。
③十六进制整数以0x开头的整数,如:0x10,0xff,0x2a等。38精选课件
■整型变量
用于存放整数的变量。分4种类型:
①基本型:inta16位,可表示的数值范围:-32768—32767
②短整型:shortintb16位,可表示的数值范围:-32768—32767
③长整型:longintc32位,数值范围:-2147483648—214748364739精选课件
④无符号型:加上unsigned
只存放正数。如:unsignedintx变量x为无符号整数,16位全表示数码,数值范围:0—65535在程序设计中,如果要使用整型变量,必须首先选择以上类型符来定义变量,然后才能使用;40精选课件
例:
main()定义
{inta,b,c;a=100;b=50;使用
c=a+b;printf(“%d”,c);}一般根据什么原则选择变量的类型?41精选课件3.4实型数据
■实型常量
可使用两种形式表示:①小数形式:如1.23,3.141592615.48②指数形式:如1e-201.23e5
42精选课件■实型变量
用于存放实数的变量分单精度和双精度两种:
floata,b
定义a和b为单精度型变量32位,7位有效数字,10-38—1038
doublex,y
定义x和y为双精度型变量64位,15位有效数字,10-308—1030843精选课件
例:
main(){floatr,c;doubler,c;r=5;c=2*3.1415926*r;printf(“%f”,c);}
44精选课件
3.5字符型数据
■字符常量
用单引号括起来的一个字符。
’a’,’x’,’*’,’1’等除此外,以’\’开头的字符如’\n’,’\t’等称为转义字符,祥见书表3.345精选课件
■字符型变量
用于存放字符的变量。
charc1,c2定义c1和c2为字符型变量c1=’a’;c2=’b’;字符赋值字符型变量存放一个字符,占据一个字节46精选课件
■字符型数据的存储形式
存放ASCII码不是而是
如字符’a’在内存中存放97,’b’存放98。与整数的存储形式一致,它们之间可以通用一个字符数据既可以作字符用,也可以作整数用(取其ASCII代码)。如:32+’a’相当于32+97若intx;charc;则x=’a’;c=97;x=97;c=’a’;都允许
a9747精选课件
■字符串常量
用双引号括起来的字符序列。
如:”abcde”,”china”
”a”也属字符串。注意”a”与’a’的区别。对于:
charc;c=”a”;用法错误48精选课件
字符串中每个字符各占一个字节,并且在字符串结尾加上一个结束标记’\0’如:”china”在内存中占6个字节。
china\0
C语言中专门的字符串变量,可用字符数组存放(以后介绍)。49精选课件3.6变量赋初值
在定义变量的同时给相应的变量赋初值。如:
inta=3;
a
floatb=5.2;charc=’a’;intx=y=z=6;效果:在给变量分配内存单元的同时在相应的单元中存放初值。
350精选课件3.7各数值型数据间的混合运算
整型、实型、字符型数据间可以进行混合运算,如:
10-‘a’*1.5运算时,参加运算的两个数据如果类型不同,则首先将其类型转换成一致再运算,转换规则是:
将优先级低的类型转换到优先级高的类型51精选课件
数据类型的优先级:高doublefloatlongunsignde低intchar52精选课件3.8算术运算符与算术表达式
■基本的算术运算符
+-*/%
■算术表达式
用算术运算符将运算对象连接起来的式子
用于表达数学公式的式子如:2*x+y-1/a表达式经过运算最终得到一个值:
算术表达式的值53精选课件■运算符的优先级与结合性
优先级:在对表达式求值时,如果存在多个运算符,则运算的先后次序按运算符的优先级别从高到底进行。
运算符的优先级关系为:高:*/%低:+-如:a-2*x先算*2*(a+2)有括号的情况?
54精选课件
结合性:
如果在一个运算对象两边的运算符的优先级相同,则按规定的“结合方向”处理。如:a-b+cb与-结合是从左到右,称“左结合性”。
b与+结合是从右到左,称“右结合性”。每个运算符都有相应的优先级和结合性。基本算术运算符都是左结合性。
55精选课件计算表达式例:
2+’A’-1/2.01+3/2-1构造表达式例
2x2+3x-1
a+ba-b
a+ba-b
x+yx-ya+b/a-b?(a+b)/(a-b)2*x*x+3*x-1(*不能省)(a+b)/(a-b)/(x+y)/(x-y)(a+b)/(a-b)/((x+y)/(x-y))(a+b)/(a-b)/(x+y)*(x-y)56精选课件■强制类型转换可以用强制类型转换运算符将一个表达式的值转换成所需类型:如:
(int)(x+y)(float)(7%3)57精选课件
应用举例:
inta=200,b=300,c;c=a*b/100;?
可知,有自动转换和强制转换,当自动转换达不到目的时,可用强制转换。c=(long)a*b/100;c=(long)(a*b)/100;58精选课件■自增、自减运算符
自增运算符:++
使变量值加1自减运算符:--
使变量值减1
两种用法:
++i,--i先加(减)后用i++,i--先用后加(减)两种用法对i效果一样,但表达式的值不同。例:假设i的原值为5:
j=++i;j=?
j=i++;j=?59精选课件
注意:●++和--只能用于变量。
如:3++和(a+1)++
不合法●++和--为右结合性。
(-i)++
-i++
-(i++)
若i的原值是5,则该表达式的值是多少?60精选课件
例:分析执行下列语句后的结果:
a=5;abcd
b=a++;c=--a-b++;d=(a++)-(++b)+c--;
5565067-26-161精选课件
两种特殊情况:①k=(i++)+(i++)+(i++)
②i+++j是i+(++j)还是(i++)+j?
i++虽然与i=i+1等效,但使用自增自减运算符的代码优化程度好,因而经常使用;但用时需特别小心。62精选课件3.9赋值运算符和赋值表达式■赋值运算符
“=”称赋值运算符,其作用是将一个数据赋给一个变量。如:a=5不要理解为“等号”。执行赋值运算的结果,是将右边的数据存入左边变量所对应的内存单元中。63精选课件
■赋值规则
如果赋值运算符两侧的类型不一致,则在赋值时要进行类型转换,转换规则为:●实型→整变量舍去小数部分。inta=5.5;a中为5。●整型→实变量数值不变,以浮点形式存储。●字符型→整变量放在整形变量低8位。保持原值不变原则。inta=‘A’;64精选课件■复合赋值运算符
在赋值运算符前加上其它运算符,可以构成复合赋值运算符。
a+=3——a=a+3b-=x+5——b=b-(x+5)x*=c-6——x=x*(c-6)y/=a*4——y=y/(a*4)k%=b-2——k=k%(b-2)
属于高效率运算符。65精选课件■赋值表达式
主要实现赋值运算的表达式。
一般形式:
<变量>=<表达式>如:a=5y=2*x+3a=a+1
不是衡等作用:将右边表达式的值赋给左边的变量。赋值表达式的值取左边变量的值。66精选课件
赋值表达式右边的<表达式>可以是任何表达式,如:
a=(b=5)赋值表达式中包含赋值表达式赋值运算符的优先级低于所有算术运算符,且是右结合性。
a=(b=5)与a=b=5等效。
67精选课件
例:计算以下表达式的值:a=b=c=5a=5+(c=6)a=(b=4)+(c=6)a=(b=4.5)+(c=6.5)(a、b、c为整型变量)a+=a-=a*a(设a的原值为3)68精选课件
赋值表达式是C语言中的一个重要成分,在赋值表达式后加一分号就成为常用的赋值语句。如y=2*x+1;赋值表达式作为表达式的一种,可以出现在任何表达式中,如:x+2-(b/3-(a=k-5)+’b’69精选课件
3.10逗号表达式
逗号也是一种运算符,用它对两个表达式实现连接运算。
3+5,6+8称逗号表达式。逗号表达式的一般形式:
表达式1,表达式2取表达式2的值作为整个逗号表达式的值。如:a=3*5,a*4逗号表达式的值为:6070精选课件
一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如:
(a=3*5,a*4),a+5因此,逗号表达式的一般形式可以扩展为:
表达式1,表达式2,表达式3,……,表达式n取表达式n的值作为整个逗号表达式的值。
逗号运算符的优先级最低,且是左结合性。
逗号运算符只起到连接作用,没有实际操作。
71精选课件
第四章最简单的C程序设计
C程序最基本的成分是语句目前我们已掌握的语句:
变量说明语句:
inta,b,c;
表达式语句:
x+y;
特别地:
a=5;
赋值语句72精选课件可以编写简单程序如:
main(){intx,y;x=5;y=2*x*x+3*x-1;}
该程序语法上完整,但还缺少输出。
73精选课件
■数据的输出
用输出函数实现,其中的两种输出函数:
1.putchar函数(字符输出函数)用于输出一个字符。
如:
putchar(‘a’);putchar(100);charc=’b’;putchar(c);74精选课件
例:输出单词Boy的完整程序:
#include“stdio.h”注意该语句的作用main(){chara,b,c;a=’B’;b=’o’;c=’y’;putchar(a);putchar(b);putchar(c);}75精选课件
2.printf函数(格式输出函数)
任意类型、任意格式、任意个数。例如:
inta=100,b=56;
printf(“a=%d,b=%d”,a,b);
普通字符格式说明格式控制
输出表列
输出结果:a=100,b=56“%”后的字符称格式字符,不同格式字符对应不同的数据类型。76精选课件
d格式符:按整数格式输出
几种用法:
%d不指定宽度,按实际宽度输出
%md按指定宽度输出,m为宽度
%ld用于输出长整型数77精选课件
例:inta=125,b=453;longc=65535;printf(“a=%d,b=%5d,c=%ld”,a,b,c);输出结果:
a=125,b=453,c=6553578精选课件
%ld也可以按指定宽度输出:
printf(“c=%8ld”,c);
输出结果:c=65535注意:格式字符的类型要与对应的输出对象的类型一致。
79精选课件c格式符:用于输出字符
charc=’A’;printf(“c=%c,%c”,c,’B’);
输出结果:c=A,B
输出对象既可以是字符变量、字符常量,还可以是整型表达式。
80精选课件
如:
inta=100;charb=’A’;printf(“\n%d,%c”,a,a);printf(“\n%c,%d”,b,b);
输出结果:
100,dA,6581精选课件s格式符:用于输出字符串
%s不指定宽度
%-ms指定宽度,左靠齐
%ms指定宽度,右靠齐
%m.ns指定宽度m,只取左端n个字符,右靠齐
%-m.ns指定宽度m,只取左端n个字符,左靠齐82精选课件例:
printf(“1:%s”,”abcd”);
printf(“2:%8s”,”abcd”);printf(“3:%-8s”,”abcd”);
printf(“4:%8.3s”,”abcd”);printf(“5:%-8.3s”,”abcd”);1:abcd2:abcd3:abcd4:abc5:abc83精选课件f格式符:按小数形式输出实数
%f由系统指定宽度(6位小数)%m.nf指定宽度m,小数位数n,右靠齐%-m.nf指定宽度m,小数位数n,左靠齐
注意:宽度包括符号和小数点。
84精选课件例:
floata=3.141592654,b=14.326795,c=-125.2468;
printf(“\na=%f,b=%8.3f,c=%-10.2f”,a,b,c);
输出结果:
a=3.141592,b=14.326,c=-125.24
85精选课件完整前面的程序:main(){intx,y;x=5;y=2*x*x+3*x-1;
printf(“\ny=%d”,y);}86精选课件程序设计例:
编写程序计算如图中的电流I.
假设U=220,R1=30,R2=60,R3=45UIR1R2R387精选课件算法设计:
I=U/R1+U/R2+U/R3程序设计:
main(){
}I=U/R1+U/R2+U/R3;intU=220,R1=30,R2=60,R3=45;floatI;printf(“\nI=%f”,I);88精选课件
正确的程序:main(){intU=220,R1=30,R2=60,R3=45;floatI;I=(float)U/R1+(float)U/R2+(float)U/R3;printf(“\nI=%f”,I);}89精选课件
考虑通用:
main(){intU,R1,R2,R3;floatI;
输入U,R1,R2,R3I=(float)U/R1+(float)U/R2+(float)U/R3;printf(“\nI=%f”,I);}90精选课件
■数据的输入
getchar函数(字符输入)
#include“stdio.h”main(){charc;c=getchar();等待键盘输入putchar(c);}
91精选课件scanf函数(格式输入)
与printf函数相反。用于输入若干任意类型的数据。
scanf(“%d%d%d”,&a,&b,&c);格式控制地址列表
92精选课件
scanf(“%d%d%d”,&a,&b,&c);
执行此函数时,等待从键盘输入三个整数给a,b,c
若从键盘输入358则系统即从键盘缓冲区取出这三个数分别赋给a,b,c
注意与printf的区别,注意格式的匹配93精选课件如:
scanf(“%3d%2d%4d”,&a,&b,&c);若从键盘输入123456789a=123,b=45,c=6789若想使a=12,b=5,c=100则键盘输入应为:125100
方便的输入格式一般不指定宽度,如:
scanf(“%d%d%d”,&a,&b,&c);94精选课件
在键盘输入时,用分隔符把每个数据隔开,标准的分隔符是空格。如:12315023若想用逗号作分隔符,则:
scanf(“%d,%d,%d”,&a,&b,&c);不要随便使用普通字符,如使用:scanf(“a=%d,b=%dc=%d”,&a,&b,&c)对应数据输入:
a=123,b=150,c=2395精选课件
前面的欧姆定律:main(){intU,R1,R2,R3;floatI;
scanf(“%d%d%d%d”,&U,&R1,&R2,&R3);I=(float)U/R1+(float)U/R2+(float)U/R3;printf(“\nI=%f”,I);}96精选课件求三角形面积#include“math.h”main(){floata,b,c,area,s;scanf(“%f,%f,%f”,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“\narea=%f”,area);}使用数学函数97精选课件使用三角函数#include“math.h”main(){floatx,y;scanf(“%f”,&x);y=sin(x*3.1415926/180);以弧度为单位printf(“\ny=%f”,y);}98精选课件第五章
选择结构程序设计
对于如下的函数计算,算法上属于一个选择结构。
y=用于实现选择结构的主要是if语句。1/x当x≠0时
10000当x=0时99精选课件if语句的最常见形式为:if(关系表达式)语句1;else语句2;如:
if(x!=0)y=1/x;elsey=10000;其中
x!=0就是一个关系表达式
!=就是一个关系运算符100精选课件5.1关系运算符和关系表达式1、关系运算符用于进行比较运算的运算符。共有六种:
<<=>>===!=■优先级与结合性:①前4种大于后两种。②低于算术运算符而高于赋值运算符。③左结合性。101精选课件2、关系表达式一般形式:〈表达式〉〈关系运算符〉〈表达式〉如:a>ba+b>b+c经过关系运算后最终有一个值--关系表达式的值。关系表达式的值只有0(假)或1(真)102精选课件例:设a=2,b=4,c=1计算以下关系表达式的值:
a>ba+b>b+c‘a’>’b’
可以是字符表达式(x=2)>(y=5)可以是赋值表达式(a<b)>(b<c)甚至可以是关系表达式a<b==b<c103精选课件例:假设x=3,y=5,z=1,计算以下关系表达式的值:x+z>yx<y==y<zy>z==x>zy>x>z(x==y-2)<z+1==x+ya=x+y==x+z<y+x!=z+1>x+1104精选课件5.2逻辑运算符和逻辑表达式有时,只用一个简单的关系表达式无法完整地表达一个条件,如:y=
其中的条件需要用逻辑表达式来表达:
x!=0&&a!=0
&&就是一种逻辑运算符。1/x+1/a当x≠0,a≠0时
10000其它105精选课件1、逻辑运算符&&逻辑与
两个操作数都为真时&&运算结果为真。||
逻辑或
两个操作数之一为真时即为真。!
逻辑非(单目运算)操作数为真(假)时为假(真)。
如:若a=2,b=3,c=0则:a<b&&b<c0a<b||b<c1!(a<b)0106精选课件■优先级(由高到低):!逻辑非算术运算符关系运算符&&逻辑与||逻辑或赋值运算符■结合性:左结合性107精选课件2、逻辑表达式实际上,前面所举例子即为逻辑表达式:
a<b&&b<ca<b||b<c!(a<b)
逻辑表达式的值同样只有1和0,但参加逻辑运算的操作数可以是任意类型的数据,可以是任意大小。例:
a+b&&b+c是合法的逻辑表达式。此时以0代表假,非0代表真。108精选课件例:设a=2,b=3,c=0,计算以下表达式的值:
a&&bb&&ca||c
!a+c&&b+c
!c+a==b||b<a
a+c||a+b>c+10
109精选课件对于逻辑表达式的两种基本技能:①逻辑表达式的计算。②逻辑表达式的构造。110精选课件逻辑表达式的构造举例:a≥b≥c
a和b之一为0,但不同时为0a>=b>=c5>=4>=3a>=b&&b>=ca==0&&b!=0||a!=0&&b==0a*b==0a*b==0&&a+b!=0111精选课件对于a==0&&b!=0||a!=0&&b==0
a==0可以用!a代替a!=0可以直接用a
!a&&b||a&&!b但必须是运算结果作为逻辑量的情况下。y=(a!=0)与
y=a不等效112精选课件5.3if语句1、if语句的三种形式①
if(表达式)语句;
有一分支为空。
scanf(“%d”,&score);if(score>=60)printf(“pass”);
113精选课件
②
if(表达式)语句1;else语句2;if(x!=0)y=1/x;elsey=10000;114精选课件
③
if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;┇else语句n;
if(score==100)printf(“A”);elseif(score>=90)printf(“B”);elseif(score>=80)printf(“C”);elseif(score>=70)printf(“D”);elseif(score>=60)printf(“E”);elseprintf(“F”);115精选课件
对于:
1/x当x≠0时10000当x=0时一般用:if(x!=0)y=1/x;elsey=10000;也可用:y=10000;if(x!=0)y=1/x;y=?y=1/x;if(x==0)y=10000116精选课件
例:(习题5.5):x(x<1)2x-1(1≤x<10)
3x-11(x≥10)y=117精选课件
main(){floatx,y;scanf(“%f”,&x);
if(x<1)y=x;elseif(x<10)y=2*x-1;elsey=3*x-11;printf(“\ny=%f”,y);}118精选课件说明:①
语句中的表达式可以是任意表达式:
if(x)y=1/x;elsey=10000;②一个if结构不可分割:
if(x)y=1/x;
z=10;elsey=10000;③一个分支中包含多个语句时,要用{}:
if(a<0){x=1;y=2;}else{x=10;y=20;}119精选课件分支程序设计举例(基本技巧和算法)例:从键盘输入三个整数到变量a,b,c,输出其中最大的数。两种典型算法:①枚举法(将各种可能性枚举出来)。②选择法(先假设后判断更新)。
120精选课件选择法main(){inta,b,c,max;scanf(“%d,%d,%d”,&a,&b,&c);
max=a;if(b>max)max=b;if(c>max)max=c;
printf(“\nmax=%d”,max);}}121精选课件
例:从键盘输入三个整数到变量a,b,c,要求按从大到小的顺序输出。
两种典型算法:①枚举法(将各种可能的排列枚举出来)。②换位法(将a,b,c中的数据换位)。122精选课件换位法main(){inta,b,c,t;scanf(“%d,%d,%d”,&a,&b,&c);
if(a<b){t=a;a=b;b=t;}if(a<c){t=a;a=c;c=t;}if(b<c){t=b;b=c;c=t;}printf(“\n%d,%d,%d”,a,b,c);}}358538553abc123精选课件2、if语句的嵌套在if语句中,又包含一个或多个if语句:if(score>=80)
if(score>=90)printf(“A”);elseprintf(“B”);else
if(score>=60)printf(“C”);elseprintf(“D”);注意else与if的匹配124精选课件3、条件运算符如果两个分支的内容都是给同一个变量赋值,则可用简单的条件运算符处理:
if(a>b)max=a;elsemax=b;可用:max=a>b?a:b;赋值运算符右边为一条件表达式。条件表达式的一般形式:
表达式1?表达式2:表达式3125精选课件条件表达式的执行过程:a>b?a:b
优先级:低于关系运算符,高于赋值运算符。结合性:右结合性。
表达式1条件表达式取表达式3的值条件表达式取表达式2的值
非00126精选课件
例:求a,b,c中的最大值:max=a>b?(a>c?a:c):(b>c?b:c);127精选课件5.4switch语句(多分支)适用于根据一个表达式的值就可确定走哪个分支的情况。
switch(表达式)
{
常量表达式1:语句1常量表达式2:语句2┋常量表达式n:语句ndefault:语句n+1
}128精选课件例:成绩分档:switch(score/10){case10:printf(“A”);case9:printf(“B”);case8:printf(“C”);case7:printf(“E”);case6:printf(“F”);default:printf(“G”);}
注:应使用break.129精选课件switch(score/10){case10:printf(“A”);break;case9:printf(“B”);break;case8:printf(“C”);break;case7:printf(“E”);break;case6:printf(“F”);break;default:printf(“G”);}130精选课件5.5程序举例
(习题5.10)有4个圆塔,圆心分别为:(2,2),(-2,2),(-2,-2),(2,-2),圆半径为1。这4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为0)。131精选课件
算法设计:
条件“在某一圆内”:
“在圆1内或在圆2内或在圆3内或在圆4内”若设变量c1、c2、c3、c4分别代表是否在相应的圆内,则以上条件为:c1||c2||c3||c4
10在某一圆内0在圆外
(x,y)
h=132精选课件c1=(x-2)2+(y-2)2≤1c2=(x+2)2+(y-2)2≤1c3=(x+2)2+(y+2)2≤1c4=(x-2)2+(y+2)2≤1133精选课件main(){inth,c1,c2,c3,c4;floatx,y;scanf(“%f%f”,&x,&y);c1=(x-2)*(x-2)+(y-2)*(y-2)<=1;c2=(x+2)*(x+2)+(y-2)*(y-2)<=1;c3=(x+2)*(x+2)+(y+2)*(y+2)<=1;c4=(x-2)*(x-2)+(y+2)*(y+2)<=1;
if(c1||c2||c3||c4)h=10;elseh=0;printf(“\nh=%d”,h);}
134精选课件第六章循环控制
6.1概述
所谓循环控制,就是如何实现循环结构的控制问题。有4种方法:①
用goto语句和if构成循环。
②
用while语句。
③
用do-while语句。
④
用for语句。135精选课件6.2用goto语句和if语句构成循环例:对于计算
s=1+2+3+4+5+6+7+8+9+100s1is+i→s
i+1→ii≤10
输出syn136精选课件
s=0;i=1;
lable:s+=i;i++;if(i<=10)gotolable;
printf(“%d”,s);语句标号
无条件转向语句goto语句可以构造循环,但不主张用,因为它容易破坏结构化程序设计。
goto语句可以构造循环,但不主张用,因为它容易破坏结构化程序设计。137精选课件6.3while语句
while语句是专门用于实现循环控制的语句之一。其一般形式为:
while(表达式)语句
含义:当表达式的值为非0时,执行循环体,否则执行后续语句。语句关键
表达循环条件的表达式循环体
语句关键字138精选课件
执行过程:
while(表达式)语句
表达式循环体0非0139精选课件i≤10?
s=0i=1s=s+ii=i+1例:用while语句实现前面算法:main(){inti=1,s=0;
while(i<=10){s=s+i;i++;
}printf(“\n%d”,s);}
注意与if语句的区别。循环体中要有使循环条件趋于成立的条件yn140精选课件
while(i<=10){s=s+i;i++;
}
可简写为:
while(i<=10)s+=i++;141精选课件非0(真)0(假)表达式循环体6.4do-while语句
do-while语句主要用于实现直到型循环。
其一般形式为:do循环体while(表达式);执行过程:142精选课件真s=0i=1i≤10?s=s+ii=i+1假例:用do-while语句实现前面算法:main(){inti=1,s=0;
dos+=i++;
while(i<=10);printf(“\n%d”,s);}注意与while语句的区别。
143精选课件假表达式2求解表达式1循环体求解表达式3真6.5for语句
for语句是一种使用最为灵活,并且是用得最多的循环控制语句,其一般形式为:for(表达式1;表达式2;表达式3)循环体大体含义:
对于()的情况执行循环体内容。144精选课件例:用for语句实现前面的算法:s=0;for(i=1;i<=10;i++)s+=i;标准形式表达式1
表达式2表达式3循环体可以理解:循环变量i从初值1开始到终值10,步长为1,重复执行循环体。145精选课件for语句的常见变化:s=0;i=1;for(;i<=10;i++)s+=i;
s=0;
for(i=1;i<=10;)s+=i++;
s=0;i=1;
for(;i<=10;)s+=i++;
省略表达式1省略表达式3省略表达式1和3146精选课件
s=0;i=1;for(;;){s+=i++;if(i>10)break;}s=10;i=10;for(;--i;)s+=i;省略表达式2表达式2是任意表达式147精选课件
s=0;for(i=1,j=10;i<j;i++,j--)s+=i+j;
12345678910在程序设计中不要过分追求它的多变性ij用逗号表达式148精选课件例:求n!n!=1*2*3…(n-1)*n
参照累加求和main(){inti,n=5,s=1;for(i=1;i<=n;i++)s*=i;printf(“\ns=%d”,s);}注意s的初值。注意当n较大时的情况。求和与连乘都是最常用的算法,要熟练掌握。
149精选课件例:求自然数1-100中能被3整除的数之和。
main(){inti,s=0;
printf(“\n%d”,s);}
求能被3整除但不被7整除的数之和?for(i=1;i<=100;i++)s+=i;for(i=1;i<=100;i++)if(i%3==0)s+=i;for(i=3;i<=100;i+=3)s+=i;for(i=3;i<=100;i+=3)if(i%7)s+=i;150精选课件例:求任意100个数中的最大值。main(){inti,a,max;
max=?for(i=1;i<=100;i++){scanf(“%d”,&a);
if(a>max)max=a;}printf(“\nmax=%d”,max);}
循环体中没有引用循环变量。i的作用?求任意个数中的最大值?for(i=1;;i++)
if(a==-9999)break;max=-32768;151精选课件外重循环内重循环执行200次要掌握多重循环执行的全过程6.6循环的嵌套循环体内又包含另一个完整的循环结构(多重循环)。
for(i=1;i<=10;i++){for(j=1;j<=20;j++){s+=i+j;}
}152精选课件以上多重循环结构可以简写为:
for(i=1;i<=10;i++)for(j=1;j<=20;j++)s+=i+j;153精选课件例:找出行号乘以列号等于100的座位。
main(){inti,j;for(i=1;i<=30;i++)for(j=1;j<=20;j++)if(i*j==100)printf(“\n%d,%d”,i,j);}注意循环的关系154精选课件例:百钱买百鸡问题。给定100块钱,要求正好买100只鸡,已知公鸡5元/只,母鸡3元/只,小鸡1元/3只,问公鸡、母鸡和小鸡应各买多少只?若考虑用方程组:x+y+z=1005x+3y+z/3=100
是一多解问题。155精选课件用测试法求解的程序:main(){intx,y,z;for(x=1;x<=100;x++)for(y=1;y<=100;y++)for(z=1;z<=100;z++)if(x+y+z==100&&5*x+3*y+z/3.0==100)printf(“\n%d,%d,%d”,x,y,z);}156精选课件程序可进一步简化为:main(){intx,y,z;for(x=1;x<=20;x++)for(y=1;y<=33;y++){z=100-x-y;if(5*x+3*y+z/3.0==100)printf(“\n%d,%d,%d”,x,y,z);}}用测试法求解问题的典型例子157精选课件测试法求解的程序设计有两个要点:
⑴通过循环列出所有可能的解。
⑵对所有列出的可能的解进行条件测试。158精选课件例:判断一个数m是否为素数。main(){inti,m;scanf(“%d”,&m);
for(i=2;i<m;i++)if(m%i==0)break;if(i==m)printf(“\n%disaprime”,m);elseprintf(“\n%disnotaprime”,m);}用测试法求解159精选课件例:(习题6.6)打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。如:153是一水仙花数,因为
153=13+53+33。160精选课件main(){inti,j,k,n;for(n=100;n<=999;n++){i=?j=?k=?if(i*i*i+j*j*j+k*k*k==n)printf(“\n%d”,n);}}
通过循环列出n的所有可能的范围
i=n/100;k=n%10;j=n/10%10;161精选课件main(){inti,j,k,n;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++){
n=i*100+j*10+k;if(i*i*i+j*j*j+k*k*k==n)printf(“\n%d”,n);}}通过循环列出i,j,k的所有可能的范围162精选课件例:(习题6.4)
求S=∑i!=1!+2!+3!+4!+…+19!+20!20i=1163精选课件main(){inti,j;floatt,s=0;for(i=1;i<=20;i++){
s+=?;}printf(“\ns=%f”,s);}用两重循环实现s+=t;t=1;for(j=1;j<=i;j++)t*=j;164精选课件用递推法:
递推公式:ti=ti-1.i求S=∑i!=1!+2!+3!+4!+…+19!+20!20i=1=1+∑(i-1)!.i=1+∑ti-1.i
20i=220i=2165精选课件main(){inti,j;floatt=1,s=t;for(i=2;i<=20;i++){
t=t*i;s+=t;}printf(“\ns=%f”,s);}166精选课件例:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京银行河池市罗城县2026届毕业生招聘容器化工程师岗笔试题
- 2026年高二(公益项目策划)方案设计题
- 文化宫社区参与互动方案
- 从女性主义叙事学角度解读盛可以小说-以《北妹》和《道德颂》为例
- 深基坑支护施工记录及档案管理
- 混凝土构件运输安全管理方案
- 焊工焊接作业指导书编制方案
- 康养中心健康评估服务流程优化方案
- 钢筋定位与放样工艺方案
- 地下基坑地质勘查技术方案
- 外墙金属压型板施工方案
- 烟草专卖管理师二级专业能力试卷及答案
- 2025年中考历届数学真题及答案
- 印刷厂客户服务标准办法
- 绿色高端定制农产品市场消费者满意度调查报告
- 汽轮机和水轮机检修工国家职业标准(征求意见稿)
- 贵州应急工程管理办法
- 光伏电站应急救援培训课件
- 人体动静脉课件
- 2025年广东省初中学业水平考试语文试卷(含答案详解)
- 2025年江苏护理职业学院单招《数学》考前冲刺练习试题附参考答案详解(培优A卷)
评论
0/150
提交评论