printf(“%d”,d+4);
else
printf(“%d”,d+8);
注意:
Ø承前启后的思想
Ø组合语句的使用t=a;a=b;b=t;三条语句
{t=a;a=b;b=t;}一条组合语句,语法认为是一条语句根据条件成立所执行的语句来确定是否是组合语句
Ø如果根据条件只执行一条语句,花括号可以省略
Øsele与if的配套关系:
从内层开始else总是与其向上最近的if配套,形成一条语句。
Ø在不确定的情况下建议用以下格式:
if(条件)
{}
else
{}
总结:
学习(好坏)自我鉴定:
Ø能否自我分析问题写出程序
Ø能否正确分析给定的程序
Ø能否正确判断层次关系
二、switch语句:
switch(测试表达式)
{
case值1:
语句1;[break;]
case值2:
语句2;[break;]
case值3:
语句3;[break;]
……
……
……
default:
语句n;
}
注意:
限制说明:
1)测试表达式的类型只能是整型或字符型,不能是实型。
例如:
floatx=2.3;
switch(x)
{
case2.1:
--------;
case2.3:
--------;
}
2)值1,值2,。
。
。
值n只能是常量,不能是变量,不能是实型常量,不能有重复值。
例如:
intx;
scanf(“%d”&x);
switch(x)
{
casex>=90:
---------;
casex>=80&&x<90:
-------;
casex>=60&&x<80:
----------;
}
3)break的作用:
有时:
结束语句,执行最后的结果
无时:
一直往下执行,直到break或者到语句结束。
4)default的位置无论default出现在什么位置,只有当所有case值都不匹配时,才与default匹配。
例如:
intm=2,x=4;
switch(m)
{
default:
x+=1;
case2:
x+=2;
case3:
x+=4;break;
case4:
x+=8;
}
printf(“%d”,x);
注意:
应用时有条件限制的:
1.测试类型必须是整型或字符型
2.只能按常量匹配分支,不能按条件分支
3.自己编写程序时不选用该结构,只是笔试读程序
总结:
条件:
测试类型,按常量值分
例如:
资料上5页上第五题
三.循环结构:
1、基本语句:
for(初始;条件;控制)
{
循环体
}
流程图N-S:
例如:
for(i=1;i<=5;i++)
{
------;
}
问:
循环体被执行了多少次?
循环结束后i的值是多少?
初始
while(条件)
{
循环体
控制
}
流程图N-S:
初始
do
{
循环体
控制
}while(条件);
流程图N-S:
例如:
i=1;
do
{
-------;
i++;
}while(i<=5);
问:
循环结束后循环体执行次数;
循环结束后i的值是否相同;
2、应用中常见的问题:
a)累加和
b)举搜索;
c)素数判断等
3、学习过程注意的方法:
a)注意解决各类问题的程序结构
b)理解例题
c)独立做练习
a)累加和结构:
s=0;
for(;;)项数
{
s=s+?
找规律:
?
和变量i有关,i的表达式/?
前后项有关
}
例如:
求1+2+3+……+1000
s=0;
for(i=1;i<=1000;i++)
{
s=s+i;
}
例如:
求1+4+9+25+……+10000
s=0;
for(i=1;i<=100;i++)
{
s=s+?
;i*i;
}
例如;
s=0;
for(i=1;i<=10;i++)
{
s=s+1.0/(i*(i+1));
}
例如:
s=0;f=1;
for(i=1;i<=20;i++)
{
s=s+1.0/i*f;
f=f*(-1);
}
例如:
s=0;k=0;
for(i=1;i<=10;i++)
{
k=k+i;
s=s+1.0/k;
}
例如:
求前1000次
s=0;t=1;
for(i=1;i<=1000;i++)
{
s=s+t;
t=t*i/(2*i+1);
}
例如a+aa+aaa+…..+aa…a求n=5a=2时的和.
s=0;t=a;
for(i=1;i<=n;i++)
{
s=s+t;
t=t*10+a;
}
例如
求前20项的和。
s=0;a=3,b=2
for(i=1;i<=20;i++)
{
s=s+a/b;
c=a;
a=a+b;
b=c;
}
练习:
1+
求n=10的和
总结自问:
for它能完成累加吗?
他们是这样的规律吗?
还有其他规律?
b)举搜索:
提出:
在指定范围内寻找满足条件的数。
结构:
for(i=范围初值;i<=范围的终值;i++)
{
if(i满足条件)
处理i;
}
例如:
寻找200~400之间所有能被7或11整除的数,并输出。
for(i=200;i<=400;i++)
{
if(i%7==0||i%11==0)
printf(“%d”,i);
}
例如:
给定整数n,求n的所有因子之和.
范围:
1~n
条件:
是因子
for(i=1;i<=n;i++)
{
if(n%i==0)
s=s+i;
}
例如寻找所有的,“水仙花数”是三位数,满足:
153=13+53+33
for(i=100;i<=999;i++)
{
a=i%10;
b=i/10%10;
c=i/100;
if(i==a*a*a+b*b*b+c*c*c)
printf(“%d”,i);
}
练习:
寻找满足下列条件的数:
三位数
是偶数
无重复的数字
分析:
范围:
100~999
条件:
偶数&&无重复
例如:
求:
1+(1+
)+(1+
)+….+(1+
)
s=0;t=1;
for(i=0;i<=20;i++)
{
s=s+t;
t=t+sqrt(i+1);
}
例如:
寻找1~1000之间所有的”完全数”
for(i=1;i<=1000;i++)
{
s=0;
for(j=1;j
{
if(i%j==0)
s=s+j;
}
if(i==s)
printf(“%d”,i);
}
c)素数判断:
break;终止循环语句,执行循环语句后面的语句;
continue;结束本次循环体后继语句,进行下一次循环体判定。
例如:
for(i=0;i<=10;i++)
{
if(i%3==0)
break;
printf(“%d”,i);
}
for(i=1;i<=10;i++)
{
if(i%3==0)
continue;
printf(“%d”,i);
}
例如:
寻找1~100之间,能被3整除且个位是6的数。
inti,j;
for(i=0;i<10;i++)
{
j=10*i+6;
if(j%3!
=0)
continue;
printf(“%d”,j);
}
素数:
除了1和本身之外,不能被其它任何数整除。
n
for(j=2;j{
if(n%j==0)break;
}
if(j==n)printf(“yes”);
elseprintf(“no”);
穷举搜索+素数判断
例如:
寻找200~400之间所有的素数
for(i=200;i<=400;i++)
{
for(j=2;j
{
if(i%j==0)break;
}
if(j==i)printf(“%d”,i);
}
例如:
给定两个整数m,k,求大于m且紧靠m的连续k个素数。
c=0;
for(i=m+1;c{
for(j=2;j
{
if(i%j==0)break;
}
if(j==i)
{printf(“%d”,i);c++;}
}
练习:
寻找800~500之间所有的素数,
第一个素数-第二个素数+第三个素数-第四个素数。
。
。
。
学习自我鉴定:
)机构懂了吗?
)例题懂了吗?
)相关的题做了吗?
多重循环:
A;
for(;;)
{
循环体
}
B;
for(i=1;i<=3;i++)
{
会被执行3次
}
for(i=1;i<=3;i++)
{
for(j=1;j<=4;j++)
{
printf(“%d,%d”,i,j);
}
}
例如:
取若干2分,若干5分,组成100分
for(i=0;i<=50;i++)
{
for(j=0;j<=20;j++)
{
if(i*2+j*5==100)
printf(“%d%d”,i,j);
}
}
例如:
取若干2分,若干5分,若干1分,组成100分
for(i=0;i<=50;i++)
{
for(j=0;j<=20;j++)
{
k=100-i*2-j*5;
if(k>=0&&k<=100)
printf(“%d%d%d”,i,j,k);
}
}
例如:
寻找所有的“水仙花数”
个位:
0~9
十:
0~9
百位:
1~9
for(a=0;a<=9;a++)
{
for(b=0;b<=9;b++)
{
for(c=1;c<=9;c++)
{
if(c*100+b*10+a==a*a*a+b*b*b+c*c*c)
printf(“%d”,c*100+b*10+a);
}
}
}