循环for、while、do...while的用法
先了解基本语法知识,然后再把程序看懂(试数是个很好的选择),用的多了自然就会了
循环执行
某些代码被重复执行
for
1、格式:
for(1; 2; 3)
语句A;
2、执行的流程【重点】
执行顺序1-2(1和2成立后)-A-3(一次循环结束)-2-A-3
单个for循环的使用
多个for循环的使用
1、
for(1; 2; 3) //1行
for(4; 5; 6) //2行
语句A; //3行
语句B; //4行
整体是两个语句,1 2 3 是一个语句 ,4 是第二个语句
2、
for(1; 2; 3) //1行
for(4; 5; 6) //2行
{
语句A; //3行
语句B; //4行
}
整体是一个语句
3、
for(7; 8; 9)
for(1; 2; 3)
{
语句A;
语句B;
for(4; 5; 6)
语句C;
}
整体是一个语句
3、范围问题
默认控制一句
4、举例
1+2+3+…+100
{
int sum = 0;
int i;
for (i=1; i<=100; ++i)
sum = sum + i;
printf("sum = %d\n",sum);
return 0;
}
1+1/2+1/3+…+1/100
{
int i;
float sum=0;
for (i=1; i<=100; ++i)
{
sum = sum + 1.0/i; // 推荐使用 强制数据类型转换
// sum = sum + (float)(1/i); 这样写是不对的 1/i=0,转换过后也是0;
// sum = sum + 1/(float)(i); 也是 OK的 不推荐使用
}
printf("sum = %f\n",sum); // float必须用 %f 输出
return 0;
}
while
1、执行顺序
格式:
while (表达式)
语句;
2、与for的相互比较
for和while可以互换,但for的逻辑性更强,更不容易出错,推荐使用for
for (1; 2; 3)
A;
等价于
1;
while (2)
{
A;
3;
}
3、举例
1、从键盘输入一个数字,如果该数字是回文数,则返回yes,否则返回no
回文数:正着写和倒着写一样
比如: 121 12321 都是回文数
# include <stdio.h>
int main (void)
{
int val; //存放待判断的数字
int m;
int sum = 0;
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;
}
/*
试数:
1> m=1234成立
sum=0*10+1234%10=4
m=m/10=123
2> m=123成立
sum=4*10+123%10=43
m=m/10=12
3> m=12成立
sum=43*10+12%10=432
m=m/10=1
4> m=1成立
sum=432*10+1%10=4321
m=m/10=0
5> m=0不成立
最终 sum = 4321
*/
2、如何看懂一个斐波拉契序列
# 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 = 1;
}
else
{
for(i=3; i<=n; ++i)
{
f3 = f1+f2;
f1 = f2;
f2 = f3;
}
}
printf("%d\n",f3);
return 0;
}
/*
试数:
1> i=3 3<=6
f3=1+2=3 f1=f2=2 f2=f3=3 i=4
2> i=4 4<=6
f3=2+3=5 f1=f2=3 f2=f3=5 i=5
3> i=5 5<=6
f3=3+5=8 f1=f2=5 f2=f3=8 i=6
4> i=6 6<=6
f3=5+8=13 f1=f2=8 f2=f3=13 i=7
5> i=7 不成立 输出13
*/
4、什么时候使用while,什么时候使用for
没法说,用多了自然而然就知道了
do…while…
主要是用于人机交互,和while不能相互转换
格式:
do
{
…
} while (表达式);
内部一定执行一次
举例:一元二次方程
# 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 = -b / 2*a;
x2 = x1;
printf("有一个实数解! x1 = x2 = %lf\n",x1);
}
else
{
printf("无实数解!\n");
}
printf("您想继续吗(Y/N):");
scanf(" %c", &ch); // %c 前面必须加一个空格,原因略
}while ('y'==ch || 'Y'==ch);
return 0;
}