循环预览
- 循环:入口条件循环(while\for):就是判断条件在循环入口处。先判断,后执行。
退出条件循环(do while)就是判断条件在循环尾处。其首先会执行一次循环体,然后判断。 - 使用风格:在循环涉及到初期化和更新变量时,使用for恰当。其他条件下while较好。就如while(scanf("%d",&a)==1)这样的,就会使用while比较自然;而涉及到索引计数的循环,如for(a=1;a<=12;a++),使用for比较自然。
while循环
例子
例子
:
//计算多个鞋码对应的英寸尺长
#include<stdio.h>
#define ADJUST 7.64
#define SCALE 0.325
int main(void)
{
double shoe,foot;
printf(“Shoe size(men’s)
foot length\n”);
shoe = 3.0;
while(shoe<18.5) //while循环
{ //代码块
foot = SCALE*shoe+ADJUST;
printf("%10.1f %15.2f
inches\n",shoe,foot);
shoe = shoe +1;
}
printf(“If the shoe fits,wear it.\n”);
getchar();
return 0;
}
//对用户输入的整数求和
#include<stdio.h>
int main(void)
{
long num;
long sum=0L;//把sum初始化为0
/后面加L,表示这个零是long类型/
int status;
printf(“Please enter an integer to be summed.”);
printf(“q to quit):”);
status=scanf("%ld",&num);
/*注意:这里是把scanf()的返回值赋给status
scanf()的返回值是它成功读取项目的个数
这里的项目个数你可以看作是占位符的个数*/
while(status==1)//==是否等于
{
sum=sum+num;
printf(“Please enter next integer (q to quit):”);
status = scanf("%ld",&num);
/*如果你输入一个非数字(如q),
那么scanf()就不能读入一个整数
所以其返回值就是0*/
}
printf(“Those integers sum to %ld.\n”,sum);
getchar();
return 0;
}
注意点
-
如果循环语句是个简单语句,就不需要用花括号划分。
如:while(count++ < 20)
sum=sum+count;
在没有花括号的情况下,while循环范围就是从while到下一个语句。
-
while循环主要难点就是解决他的循环条件,在进入循环前,首先就会有一次判断,所以我们必须要在循环前得到一个值来进入循环,其次,为了使循环可以进行,必须在循环体里有一个可以得到下一个可以判断循环条件的东西,而且必须要有结束循环的条件,可以看例子中2,
-
每次循环称为一次迭代。
while中null statement
-
因为while语句在分号(一个循环语句)或花括号(复合语句)结束。
在C中,一个分号也是一个语句,被称为一个空语句。
所以,在一些特定的情况下,while或加一个分号,就代表while循环已经结束,就如
while(a++<3);
printf(“a is %d\n”,a);
它在第七行就已经结束了。
在有些情况下,使用空语句,就可以如下
while(scanf(%d",&num)==1)
;
while中注重的关系运算符
-
算数运算符>关系运算符>赋值运算符
-
关系表达式可以用于字符的比较,进行比较时使用的是机器的字符代码。
-
不能使用关系运算符来比较字符串。
-
//浮点数比较
#include<stdio.h>
#include<math.h>
int main(void)
{
const double ANSWER=3.14159;
double response;
printf(“What is the value of pi?\n”);
scanf("%lf",&response);
while(fabs(response-ANSWER)>0.0001)//fabs()是求参数绝对值
/*因为在浮点数比较的时候
由于舍入误差可能造成两个逻辑上应该相等的数不相等
所以浮点数比较只能用>和<,
在比较浮点数大小时,
可以使用fabs(response-ANSWER)>0.0001这种方法*/
{
printf(“Try again!\n”);
scanf("%lf",&response);
}
printf(“Close enough!\n”);
getchar();
return 0;
}
真与假
就是表达式成立为真,不成立为假,0为假,非0为真,而在返回值的时候,真一般返回1;
- while循环条件
循环条件,为真循环(非0),为假结束(0),所以while(a!=0)就可以用while(a)代替
计算机其判断条件是建立在数值(0和非0)的基础上,而不是真假基础
while判断条件中=和==
- 不要把赋值运算符=和关系等于运算符==混淆。
这俩个有很大的区别。
在判断语句中,区别更大:whill(a=1)这里是将1赋值给a,然后进行条件判断,就会变成while(1),导致死循环。而while(a==1),就是将a与1进行比较,进行判断。
- 为了让编译器能发现你在构建相等判断表达式时是否出现错误,我们可以这样写
因为前者语法错误,编译器就会很快发现错误。
_Bool类型表示真假
-
_Bool类型的变量就是来表示真假的变量,一个_Bool类型变量只会具有1(真)或0(假),如果把一个非0数值赋给_Bool变量,这个变量就会设置成1.(C把任何非0值都认为是真)
-
在C中,表示真/假的变量一直都是由int类型来表示的。
-
例子:
//使用_bool变量
#include<stdio.h>
int main(void)
{
long num;
long sum = 0L;
_Bool input_is _good;
printf(“Please enter an integer to be summed.”);
printf("(q to quit)😊;
input_is_good=(scanf("%ld",&num)==1);
//使用_bool类型变量来表示真假
//这里的第二个括号不是必须的,因为==比=的优先级高
while(input_is_good)
{
sum=sum+num;
printf(“Please enter next integer (q to quit):”);
input_is_good=(scanf("%ld",&num)==1);
}
getchar();
return 0;
}