6process contro-循环(1-while循环)
while循环
(1)while循环格式:
while(表达式)
语句;
(2)执行的顺序:表达式->语句
(3)与for的相互比较
for循环和while循环可以相互转化,for循环逻辑性更强,更不容易出错
#include <stdio.h>
int main(void)
{
//用for循环实现累加和
/*int i;
int sum = 0;
for (i = 1; i <= 100; ++i)
sum = sum + i;
printf("sum = %d\n", sum);*/
//用while循环实现累加和
int j;
int wsum = 0;
j = 1;
while (j <= 100)
{
wsum = wsum + j;
++j;
}
printf("wsum = %d\n", wsum);
return 0;
}
/*
在vc++6.0中的输出结果:wsum = 5050
*/
(4)举例
从键盘输入一个数字,如果该数是回文数,则返回是,否则返回不是
【回文数】正着写和倒着写都一样 如:121, 12321
#include <stdio.h>
int main(void)
{
int val;//存放被判断的数
int m;
int sum = 0;
printf("请输入你要判断的数字:");
scanf_s("%d", &val);
m = val;
while (m)
{
sum = sum * 10 + m % 10;
m /= 10;
}
if (val == sum)
printf("是回文数!\n");
else
printf("不是回文数!\n");
return 0;
}
执行过程:1234
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=1/10=0
5> m=0 不成立
最终sum=4321
注意:int类型4个字节,2^31-1=2147483648-1=2147483647
类型 字节
char 1
short int 2
int 2(TC)/4(VC)
long 4
float 4
double 8
long double 10
【斐波那契数列】从第3项开始,每项是前两项和。
#include <stdio.h>
int main(void)
{
int i;
int n;
int f1, f2, fn;
f1 = 1;
f2 = 2;
printf("请输入你需要求的数列: ");
scanf_s("%d", &n);
if (1 == n)
{
fn = 1;
}
else if (2 == n)
{
fn = 2;
}
else
{
for (i = 3; i <= n; ++i)
{
fn = f1 + f2;
f1 = f2;
f2 = fn;
}
}
printf("f%d=%d\n", n, fn);
return 0;
}
/*
在vc++6.0中的输出结果:
1> i=3 3<=6 成立
fn=1+2=3 f1=f2=2 f2=fn=3 ++i i=4
2> i=4 4<=6 成立
fn=2+3=5 f1=3 f2=5 ++i i=5
3> i=5 5<=6 成立
fn=3+5=8 f1=5 f2=8 ++i i=6
4> i=6 6<=6 成立
fn=5+8=13 f1=8 f2=13 ++i i=7
5> i=7 7<=6 不成立
*/
(5)什么时候用while循环,什么时候用for循环
do...while
1)使用情况:主要使用人机交互
2)格式:do{
语句;
}while(表达式)
while(表达式)
{
语句;
}
for(1,2, 3)
{
语句;
}
3)do{ }while() 并不等价于 while(){ }和for(){ }语句
#include <stdio.h>
#include<math.h>
int main(void)
{
double a, b, c;
double delta;
double x1, x2;
char ch;
//输入方程系数a,b,c
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=%lf, x2=%lf\n", x1, x2);
}
else
{
printf("没有解!");
}
printf("你想继续(Y/N):");
scanf(" %c", &ch);
} while ('y'== ch || 'Y'== ch);
return 0;
}

浙公网安备 33010602011771号