复习多个for循环嵌套
举例1
# include <stdio.h>
int main(void)
{
int i, j;
for(i = 0; i < 3; ++i)
for(j = 2; j < 5; ++j)
printf("hh\n");
printf("aa\n");
return 0;
}
/*
推测输出结果:
i=0——i<3成立——j=2——j<5成立
——输出hh——++j,j=3——j<5成立
——输出hh——++j,j=4——j<5成立
——输出hh——++j,j=5——j<5不成立
——++i,i=1——i<3成立——j=2
——j<5成立——输出hh——++j,j=3
——j<5成立——输出hh——++j,j=4
——j<5成立——输出hh——++j,j=5
——j<5不成立——++i,i=2——i<3成立
——j=2——j<5成立——输出hh——++j,j=3
——j<5成立——输出hh——++j,j=4
——j<5成立——输出hh——++j,j=5
——j<5不成立——++i,i=3——i<3不成立
——输出aa
故最终输出结果为:
hh
hh
hh
hh
hh
hh
hh
hh
hh
aa
*/
推测输出结果与实际输出结果一致!
举例2
# include <stdio.h>
int main(void)
{
int i, j;
for(i = 0; i < 3; ++i)
printf("bb\n");
for(j = 2; j < 5; ++j)
printf("hh\n");
printf("aa\n");
return 0;
}
/*
推测输出结果:
i=0——i<3成立——bb——++i,i=1
——i<3成立——bb——++i,i=2
——i<3成立——bb——++i,i=3
i<3不成立——j=2——j<5成立——
hh——++j,j=3——j<5成立——
hh——++j,j=4——j<5成立——
hh——++j,j=5——j<5不成立——
aa
故最终输出结果为:
bb
bb
bb
hh
hh
hh
aa
*/
推测输出结果与实际输出结果一致!
举例3
# include <stdio.h>
int main(void)
{
int i, j;
for(i = 0; i < 3; ++i)
{
printf("aa\n");
for(j = 2; j < 5; ++j)
{
printf("bb\n");
printf("cc\n");
}
printf("dd\n");
}
return 0;
}
/*
推测输出结果:
aa bb cc bb cc bb cc dd
aa bb cc bb cc bb cc dd
aa bb cc bb cc bb cc dd
*/
推测输出结果与实际输出结果一致!
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
while循环
1.执行流程
格式:
while(表达式)
语句
2.与for的相互比较
用for循环求1+2+3+....+100的值
# include<stdio.h>
int main(void)
{
int i;
int sum = 0;
for(i = 1; i <= 100; i++)
sum += i;
printf("sum = %d\n",sum);
return 0;
}
用while循环求1+2+3+....+100的值
# include<stdio.h>
int main(void)
{
int i = 1;
int sum = 0;
while(i <= 100)
{
sum += i;
i++;
}
printf("sum = %d\n",sum);
return 0;
}
注意:for和while可以相互转化,在逻辑上等价,但是建议使用for
for(1;2;3)
A;
等价于:
1;
while(2)
{
A;
3;
}
3.while举例
举例1:从键盘输入一个数字,如果该数字是回文数,则返回yes,否则返回no(回文数:正着写和倒着写都一样,如:121,12321)
/*
从键盘输入一个数字,如果该数字是回文数,则返回yes,
否则返回no(回文数:正着写和倒着写都一样,
如:121,12321)
*/
# include<stdio.h>
int main(void)
{
int val; //存放待判断的数字
int sum = 0;
int m;
printf("请输入您需要判断的数字:");
scanf("%d",&val);
m = val;
while (m)
{
sum = sum * 10 + m % 10;
m /= 10;
}
if(sum == val)
printf("yes!\n");
else
printf("No!\n");
return 0;
}
举例2: 从键盘输入一个数字,判断是否属于菲波拉契序列(1 2 3 5 8 13 21 34)
/*
菲波拉契序列
1 2 3 5 8 13 21 34
*/
# include<stdio.h>
int main(void)
{
int n;
int f1, f2, f3;
int i;
f1 = 1;
f2 = 2;
printf("请输入您需要的序列");
scanf("%d",&n);
if(1 == n)
{
f3 = 1;
}
else if(2 == n)
{
f3 = 2;
}
else
{
for(i = 3; i <= n; ++i)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
}
printf("%d\n",f3);
return 0;
}
4.什么时候使用while,什么时候使用for
没法说,用多了自然而然就知道了。只可意会不可言传
---------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------
do ... while
1. 格式:
do
{
......
} while(表达式)
主要用于人机交互,do...while不等价于for,也不等价于while
2.举例:一元二次方程
#include<stdio.h>
#include<math.h>
int main(void)
{
double a,b,c;
double delta;
double x1,x2;
char ch;
do
{
printf("请输入一元二次方程的三个系数:\n");
printf("a= ");
scanf("%lf",&a);
printf("b= ");
scanf("%lf",&b);
printf("c= ");
scanf("%lf",&c);
delta = b * b - 4 * a * c;
if(delta > 0)
{
x1 = (-b + sqrt(delta)) / (2 * a);
x2 = (-b - sqrt(delta)) / (2 * a);
printf("有两个解,x1 = %lf,x2 = %lf\n",x1,x2);
}
else if(delta == 0)
{
x1 = x2 = (-b) / (2 * a);
printf("有唯一解,x1 = x2 = %lf\n",x1,x2);
}
else
{
printf("无实数解\n");
}
printf("您想继续吗(Y/N)?");
scanf(" %c",&ch); //%c前面必须加一个空格,原因略
} while('y' == ch || 'Y' == ch);
return 0;
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
switch
用途:多个分支的选择
#include <stdio.h>
int main(void)
{
int val;
printf("请输入您要进入的楼层");
scanf("%d",&val);
switch(val)
{
case 1:
printf("1层开!\n");
break;
case 2:
printf("2层开!\n");
break;
case 3:
printf("3层开!\n");
break;
default:
printf("没有盖到这一层");
}
return 0;
}
注意:switch内部执行:case1/2/3是程序的入口,val来找到程序入口,进入之后从上往下顺序执行每个语句,见到break才会停止跳出整个程序。break终止switch
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
break和continue
break:
break如果用于循环是用来终止循环;
break如果用于switch,则是用于终止switch
break不能直接用于 if,除非 if属于循环内部的一个字句
例子:
for(i = 0; i < 3; ++i)
{
if (3 > 2)
break; //break虽然是if内部的语句,但break终止的确是外部的循环
printf(“嘿嘿!\n”)
}
在多层循环中break只能终止距离最近的for循环
# include<stdio.h>
int main(void)
{
int i,j;
for(i = 0; i <3; ++i)
{
for(j = 1; j < 4; ++j)
break; //终止当前的距离最近的for循环
printf("同志们好!\n");
}
return 0;
}