C语言第三章Word下载.docx
- 文档编号:16515150
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:30
- 大小:28.57KB
C语言第三章Word下载.docx
《C语言第三章Word下载.docx》由会员分享,可在线阅读,更多相关《C语言第三章Word下载.docx(30页珍藏版)》请在冰豆网上搜索。
如:
求sin30o+sin60o+cos30o+cos60o
math.h>
voidmain(void)
{
floats,a,b;
a=30*3.14159/180;
a=60*3.14159/180;
s=sin(a)+sin(b)+cos(a)+cos(b);
printf(“s=%f\n”,s);
问题
floata,b,c,x1,x2;
scanf(“%f,%f,%f”,&
b,&
c);
x1=(-b+sqrt(b*b-4.*a*c))/(2.0*a);
x2=(-b-sqrt(b*b-4.*a*c))/(2.0*a);
printf(“x1=%7.2f\nx2=%7.2f”,x1,x2);
b*b-4ac<
0?
一元二次方程根求解算法描述
问题:
如何构造条件?
如何根据条件实现不同算法?
no
yesno
yes
求复根
求等根
求实根
3.2关系运算和逻辑运算
⒈关系运算(RelationalOperator)
关系运算是比较两个表达式的数值相互关系的运算。
运算符
比较的关系
实例
>
大于
a>
b
=
大于等于
=b
<
小于
2<
1
小于等于
c<
=d
==
等于
1==c
!
不等于
1!
=3
关系运算规则:
参加运算的表达式的从左到右按关系运算符提供的关系进行比较,满足关系得到整型值1,不满足关系得到整型值0。
inta=1,b=3,c,d;
c=a>
b;
d=a+2<
=b+3;
⒉逻辑运算(LogicalOperator)
逻辑运算运算时判断对象真、假的运算。
C语言没有提供逻辑类型。
任何类型的值都可以表示逻辑状态,如下表:
表达式的值所对应的逻辑值
表达式的值
表示的逻辑关系
非0
真true
假false
运算对象非0代表逻辑真,是0代表逻辑假。
也就是说任何类型的量都有逻辑值。
逻辑运算的结果用整型值表示。
v运算结果为真时,得到整型值1;
v运算结果为假时,得到整型值0。
inta=2,b=0;
a
b
a+b
C语言的逻辑运算
逻辑关系
举例
&
逻辑与
2&
a<
3
||
逻辑或
s<
2||s>
6
逻辑非
a
其中,!
运算是单目运算。
⒊复杂逻辑关系的表示
在实际应用中,经常会遇到描述复杂的关系。
如:
判断x是否大于等于5或小于3。
此类关系的描述在程序设计中会大量使用。
表示数值关系的原则:
开放区间用或;
闭合区间用与。
x<
3||x>
=5
035
-2<
3?
x=4
x&
-203
思考题
sqrt(x),代表对x开平方。
⒈判断是否在一、三象限的表达式。
⒉判断是否在如图圆环内的表达式。
⒊ch为字符变量,判断ch是否为字母的表达式。
(ch>
=’a’&
ch<
=‘z’)||(ch>
=’A’&
=‘Z’)
不是字母的表达式?
⒋运算的优先级
C语言允许所有基本类型的量参加同一表达式的运算,也允许所有类型的运算符出现在一个表达式中。
因此,表达式值的类型如何确定,运算的先后顺序如何确定,必须通过一套规则解决。
⑴运算优先级
第一原则:
单目运算的优先级高于双目运算。
第二原则:
算术运算关系运算逻辑运算赋值运算
为了便于调整优先级,设置()为最高优先级。
相同优先级存在一个顺序称为结合顺序,结合顺序有从右向左或从左向右。
表达式优先级举例说明:
注意:
在无法确定优先级
时,加()区分。
简化表
达式。
++a-b>
c+d&
=b*34
①④②
③
⑤⑥c=b*=a+2
⑦c=(b*=(a+2))
优先级总表
级别
结合顺序
()[]->
.
从左向右
2
!
-++--(type)sizeof*&
从右向左
*/%
4
+-
5
>
<
=>
=
7
==!
8
9
^
10
|
11
12
13
?
:
14
=op=
15
优先级特例
⒈自加、自减运算优先级遵循原则:
前置:
先运算后引用;
后置:
先引用后运算。
inta=3,b;
b=a+++a++;
printf(“b=%d”,b);
b=++a+(++a);
⒉在逻辑运算中,如果逻辑值能够确定,则不再进行运算。
inta=0,b=0
++a||++b;
printf(“a=%d\nb=%d”,a,b);
a=0;
a&
++b;
/*b的值?
*/
3.3分支结构(选择结构Selection)
由标准的分支结构可以演化成单分支、多分支结构。
C语言的分支语句有if、if–else、switch三种。
⒈if及if-else的三种结构。
⑴if语句语句表达式,非0为yes,0为no。
格式:
if(expression)statement;
语句,可以是复合语句。
流程图:
yes
statement;
举例:
inta,b;
a=10;
b=50;
if(a<
b)
b=c;
c=a;
pintf(“%d,%d”,a,b);
charch;
ch=getchar();
if(ch>
=‘a’&
=‘z’)
ch-=32;
putchar(ch);
⑵if–else结构
if(expression)
语句或复合语句。
stat1;
stat2;
入口
truefalse
Stat2;
stat1;
出口
输出|x|。
main()
{
intx;
scanf(“%d”,&
x);
if(x>
=0)
printf(“%d”,x);
else
printf(“%d”,-x);
{inta;
a);
if(a++>
10)printf(“%d”,++a);
elseprintf(“%d”,a--);
⑶if–elseif结构(Muliline)
if(e1)
en-1?
elseif(e2)
stat2;
f
elseif(e3)
stat3;
tf
…
elseif(en-1)t
statn-1;
statn;
t
出口
n-1个条件,满足某个条件,执行对应的语句,然后到出口。
ifelseif结构举例:
2.输入一个分数,输出其等级。
90分以下打印A
80---90打印B
70---80打印C
60---70打印D
60以下打印E
1.征税问题:
1000以下税率为3%
1000~2000税率为4%
2000~3000税率为5%
3000以上税率6%
输入收入,求应缴税款。
floatx,rate;
scanf(“%f”,&
if(x<
1000)
rate=.03;
3/100?
elseif(x<
2000)
rate=.04;
3000)
rate=.05;
rate=.06;
printf(“%f”,x*rate);
inta;
scanf(“%d”,&
if(a>
=90)printf(“ThescoreisA”);
elseif(a>
=80)printf(“ThescoreisB”);
=70)printf(“ThescoreisC”);
=60)printf(“ThescoreisD”);
elseprintf(“ThescoreisE”);
3.判别键盘输入字符的类别:
控制字符、数字、大写字母、小写字母或其它字符。
{charc;
printf(“inputacharacter:
”);
c=getchar();
if(c<
32)
printf(“Thisisacontrolcharacter\n”);
elseif(c>
=‘0’&
=‘9’)
printf(“Thisisadigit\n”);
=‘A’&
printf(“Thisisacapitalletter\n”);
elseif(c<
printf(“Thisisasmallletter\n”);
printf(“Thisisanothercharacter\n”);
在stat1或stat2中又含有if结构:
if(e2)
else
stat4;
称为if结构的嵌套。
各种if结构都可以嵌套。
⑷if语句的嵌套
对于如下的结构:
stat1;
说明:
①书写采取缩进形式,便于区分。
②else与最近的if相匹配,从内到外。
如求符号函数:
y=-1;
if(x!
=0)
0)y=1;
elsey=0;
-1(x<
0)
y=0(x=0)
1(x>
0)
x==0结果?
voidmain(void)
intx,y;
scanf(“%d”,&
if(x<
0)y=-1;
外else
在外层else语句中,含有一个if结构。
if(x==0)
内y=0;
层层else
y=1;
printf(“x=%d,y=%d\n”,x,y);
内层缩进。
1.分析下列程序。
main()
{inta=2,b=0,c=-1;
if(a=b+c)
if(a>
0)b=c=a;
elseif(a==0)a=b=c=0;
elsea=b=c=2;
elsea=b=c=-2;
printf("
%d,%d,%d"
a,b,c);
2.求一元二次方程ax2+bx+c=0的根。
floata,b,c,d,e,x1,x2;
判断实型量相等或不等用误差的方法。
d=b*b-4.0*a*c;
if(fabs(d)<
1.0e-6)
flaota=1.0
/*a=1.000001或0.999999*/
a==1.0?
{x1=x2=-b/(2.0*a);
printf(“\nx1=x2=,%f”,x1);
}求相等实根。
else
{
外if(d>
0){
层内printf(“\nx1=%f”,(-b+sqrt(d))/(2.0*a));
printf(“\nx2=%f”,(-b-sqrt(d))/(2.0*a));
}求不等实根。
else{
层printf(“\nx1=%f+i%f”,-b/(2.0*a),sqrt(-d)/(2.0*a));
printf(“\nx2=%f-i%f”,-b/(2.0*a),sqrt(-d)/(2.0*a));
⒉switch语句(多分支结构)
只能是整型或字符型表达式。
switch(expression)
整型字符型常量表达式。
表达式的值要互不能相等!
case常量表达式1:
statement1;
case常量表达式2:
statement2;
…
case常量表达式n-1:
statementn-1;
default:
statementn;
流程:
①先求expression的值。
②依次比较expression和各常量表达式的值。
③如果和第i个常量表达式相等,则执行第i条以后的语句。
④如果不相等,则执行default以后的语句。
语句标号的概念:
break语句:
break;
作用:
中断switch流程。
chargrade;
grade=getchar();
switch(grade)
{语句标号。
case‘A’:
printf(“90—100\n”);
break;
case‘B’:
printf(“80—89\n’);
break;
case‘C’:
printf(“70—79\n”);
case‘D’:
printf(“60—69\n”);
case‘E’:
printf(“<
60\n”);
printf(“error\n”);
例1:
输出五分制对应的百分制范围。
charchGrad;
chGrad=getchar();
switch(chGrad)
{
case‘a’:
printf(“90—100\n”);
case‘b’:
printf(“80—89\n”);
case‘c’:
case‘C’:
printf(“70—79\n”);
case‘d’:
多个标号可以共用相同的语句。
printf(“60—69\n”);
case‘e’:
case‘E’:
printf(“<
break;
default:
printf(“DataError!
\n”);
}default语句可以省略。
例2:
分析程序运行结果
voidmain()
intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;
case1:
b++;
case2:
case3:
a++;
printf(“a=%d,b=%d\n”,a,b);
}
3.4
循环结构(Repetition)
程序经常会重复执行某些相同的操作,如:
求:
s=1+2+3+4+…+100
①s=0;
i=1;
初始化部分。
②s+=i;
循环体。
含有使条件趋假的语句。
i++;
③判断i是否小于等于100
如果i小于等于100,重复②;
循环的条件。
循环应在有限次完成。
否则,结束。
此类根据“条件”重复执行相同算法的结构,称为循环。
C语言提供了三类实现循环的语句:
while,dowhile,for
⒈while语句(当型循环)
表达式:
值非0,表示满足条件;
值为0代表不满足条件。
while(expression)
statement;
语句(复合语句),重复执行部分(循环体)。
求s=1+2+3+4+…+100
voidmain(void)false
{ints=0,i=1;
初始化部分
while(i<
=100)
{条件测试ture
s=s+i;
/*s+=i;
*/
循环体
printf(“s=%d\n”,s);
使条件趋假语句
例2.写出程序运行结果。
#include<
{charc;
while((c=getchar())!
=’\n’)
switch(c-‘1’)
putchar(c+2);
putchar(c+4);
default:
}printf(“\n”);
⒉do–while语句(直到型循环)
do{
statement;
}
while(expression);
流程:
30!
floats=1.0;
ture
inti=1;
初始化。
do{
s*=i;
}while(i<
=30);
测试条件。
false
printf(“30!
=%f”,s);
使条件趋假。
while循环与do-while循环的区别:
vwhile循环先判条件,后执行循环体;
vdo–while循环先执行循环体,后判条件。
思考题:
用do-while实现s=1+2+…+100。
用while实现30!
。
判断程序功能。
#include<
main()
{longn=1l,m=0l;
do
{m+=n++;
}while(n++<
50);
printf(“m=%ld\n"
m);
利用公式:
求的近似值,直到最后一项的绝对值小于10-6为止。
{floatn=1.0,t,pi=0.0,s=1.0;
do{t=s/n;
pi+=t;
s*=-1.0;
n+=2;
}while(fabs(t>
=1e-4));
pi=%f\n"
4*pi);
例3:
用辗转相除法(即欧几里德算法)求两个正整数的最大公约数。
分析:
设两个数m,n,假设n>
=m,用n除以m,求得余数为r,若r为0时,则m即为最大公约数;
若r不为0,则更新除数和被除数,再做除法,直到余数为0为止。
{intm,n,r,a,b;
m,&
n);
a=m;
b=n;
b){intz;
z=a;
a=b;
b=z;
do{r=b%a;
b=a;
a=r;
}while(r!
=0);
printf(“%d,%d,%d\n"
m,n,b);
⒊for语句
初值表达式。
测试表达式。
增值表达式。
for(e1;
e2;
e3)
使e2趋假。
s=1+2+3+…+100
voidmain(void)
ints,i;
s=0,i=1;
for(s=0,i=1;
i<
=100;
i++)
{ture
s=s+i;
i++;
printf(“s=%d”,s);
在for循环中,e1、e2、e3都可以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 第三