**
关于死循环的一些问题
**
(1)看似不是死循环,其实是死循环
例:
#include<stdio.h>
int main()
{
char c=1;
int s=0;
while(c<151)
{
s+=c++;
}
printf("%d",s);
return 0;
}
这个例题中因为c是char型数据,所以它的取值范围是-128~127;而c的初值为1,当执行while语句时c是加不到128的,c=128其实是c=-128,所以c是永远也到不了151的,s输出是0,所以这个while是死循环。
(2)看似是死循环,其实并不是,他是伪死循环
例:
#include<stdio.h>
int main()
{
int i=0;
while(i<100)
{
i--;
}
}
这个例题中i是int型数据,所以它的取值范围是-2147483648~2147483647;i的初值为1,1<100成立,所以执行i–,当i减到-2147483649时他其实是2147483647,所以i的值就大于100,循环结束。
**
a,b互换其值的几种方法
**
(1)
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d%d",&a,&b);
c=a;
a=b;
b=c;
}
(2)
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d%d",&a,&b);
a=a+b;
b=a-b;
a=a-b;
}
(3)
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d%d",&a,&b);
a=a^b;
b=a^b;
c=a^b;
}
需要注意的是第三种情况只能用于整数。
**
浮点数
**
因为浮点数在计算机中是存不准的,所以不能判断两个浮点数是否相等,要判断其是否相等可以让他们两个作差,若差值小到规定的精度以下时认为其相等即fabs(a-b)<=精度时认为其相等。
**
输入密码并且错误不能超过三次代码
**
#include<stdio.h>
int main()
{
char s[6] = { '1','2','3','4','5','6' }, b[6] = {};
int n, k;
k = 0;
while (1)
{
n = 0;
printf("请输入密码:\n");
for (int i = 0; i < 6; i++)
{
b[i] = getch();
printf("*");
}
for (int i = 0; i < 6; i++)
{
if (s[i] == b[i])
{
n++;
}
}
if (n == 6)
{
printf("密码正确!"); break;
}
else
{
printf("密码错误!");
}
k++;
if (k == 3)
{
printf("三次机会已完!"); break;
}
}
return 0;
}
这个代码中使用了while循环,并且他是一个死循环,如果密码正确则使用break跳出循环,如果密码错误就继续循环输入密码,在判断密码是否正确时定义了一个数用来计数,当判断密码次数为三次时break跳出循环。
**
关于break和continue
**
break是直接结束循环体执行循环之后的语句,而continue是跳过本次循环中还未执行的语句进行下一次循环判断,如果为真则继续执行循环体。
需要注意的是break只能跳出一层循环,并不可以从多次循环中直接跳出。