If的用法
if(表达式):对真假的处理
注意:if后括号内的表达式结果只有两种,true或false,为布尔型,即成立或不成立。
if默认的只能控制一个语句的执行
如果想控制多个语句的执行或不执行,就必须用{}括起来
if (表达式)
{
语句A;
语句B;
}
注意else与if的对应,else与if的对应是从中向两头的对应。
即:
if ()
if()
if()
else
else
else
else只能对应上面离它最近的一个if语句
如:
if(1)
if(2)
3;
else //else对应的是if(2)语句。且此段代码整体上是一个语句,因为if...else...是一个语句。
4;
if(1)
{
if(2)
printf("哈哈!\n");
}
else
printf("呵呵!\n"); //要想else对应第一个if,则必须在本应与其对应的if语句上加大括号,使其单独成句。
if... else if... else语句即便有多个表达式成立,也只会执行第一个成立的表达式
if... else if... else语句必须相连在一起,中间不能用任何语句隔开。
float与double都不能保证可以精确地存储一个小数。
循环中的自增(自减)变量(更新变量)不能定义为浮点数,因为浮点数可能是一个近似值,不能被准确存储。
如:
floatx = 66.6;
printf("%f\n",x);
输出结果为:x = 66.599998
试题:看一个浮点数是否为零
float i =0;
/*if(0 == 0)
printf("是零!\n");
else
printf("不是零!\n"); //此方法错误!*/
if(|i-0.000001| <= 0.000001) //正确!
printf("是零!\n");
else
printf("不是零!\n");
# include <stdio.h>
int main(void)
{
floati = 5.321;
if(i == 5.321)
printf("是\n");
else
printf("不是\n");
return0;
}
/*
结果为不是,浮点数实质上存储的是一个近似值!
*/
循环
循环中的执行顺序一定要清楚
for (i=1;i<=100;++i) //for循环控制sum = sum + i;语句,执行顺序:1. i=1; 2. i<=100; 3. sum = sum+ i; 4. ++i;
sum = sum + i; (++i标志着一次循环结束) 5. i<=100
do...while不等价于 while...和for...其最大区别在于:do...while至少会执行一次。
do...while常用于人机交互。
while可以用于无限循环,用break来终止。
如: while(true)
{
printf("我爱你!\n"); //只能通过加入if语句,break,来终止此循环。
}
for (i=0, j=6; i<j; ++i, --j) //这样写也可以,分号为三段分隔,逗号为内部分隔,逗号运算符,不算作一个语句。但这样写有些麻烦,可以使用while写
i = 0;
j = 6
while (i < j)
{
...;
++i;
--j;
}
for循环与while循环可以相互转换:
但for循环的逻辑性更强,更不容易出错,推荐多使用for循环。
for(1;2;3)
A;
等价于:
1;
while(2)
{
A;
3;
}
break与continue
break:用于终止并跳出循环或switch语句,不能直接用于if语句,除非if语句是循环或switch语句中的一部分。
虽然break是if内部语句,但break用于终止for循环语句,而不是if语句。同理,continue也只会对离它最近的循环生效。
注意:1.for (1; 2; 3) //break与continue的区别。
{
if(表达式)
break;//执行break后会跳出for循环去执行printf语句。
if(表达式)
continue; //执行continue后会继续下次循环,执行语句3。
}
printf("");
2.
do
{
if(表达式)
{
continue;//当执行continue时,程序会跳到while (表达式),去执行下一次循环。
}
}while(表达式)
3.
int x = 1;
int y = 0;
int a = 0;
int b = 0;
switch (x) //第一个switch
{
case 1:
switch (y) //第二个switch
{
case 0:
a++;
break; //此处break终止的是离它最近的switch,即第二个switch,输出结果为a = 1 b =
case 1: 100;若终止的是第一个switch,则会输出a = 1 b = 0;
b++;
break;
}
b = 100;
break;
case 2:
a++;
b++;
break;
}
printf("a = %d b =%d\n", a, b);
例1: for(i=0;i<3;++i)
{
if(3>2)
break; //虽然break是if内部语句,但此处break用于终止for循环语句,而不是if语句。下
printf("哈哈!\n"); 面的printf语句不会再执行,输出为空。
}
例2: for(i=0; i<3; ++i) //多个for循环的嵌套。
{
for(j=1; j<4; ++j)
break; //输出结果为三个“呵呵!”,即在多重循环中,break只能终止它所在语句中离它最近的一个循环。
printf("呵呵!\n"); 同理,在多重switch语句中,break也只能终止它所在语句中离它最近的一个switch语句。
}
注意:break终止的是它所在的语句的循环或switch语句,而不可能终止与它并列的循环或switch语句。
如:
for(1; 2; 3)
{
while(4;)
5;
break;//break终止的是它所属于的for循环,而不是与它并列的while循环,虽然while离它近。
}
switch...case...default语句不同于if...else if...else语句。
在switch...case语句中,case只起标记作用,以确定程序在哪开始执行,不起条件判断选择作用。break用于终止switch语句。如果
不加break,将会继续执行下面的语句。
而在if语句中,即使有多个if语句同时成立,也只会执行第一个成立的语句,剩下的成立语句不会执行。
switch格式:
switch(形参或表达式) //后跟参数值或表达式,用于找到入口。
case参数值或表达式: //注意一定要加冒号“:” case只起标记作用,不起条件判断选择作用。
语句A;
break; //break用于终止switch语句。如果不加break,将会继续执行下面的语句。
case参数值或表达式:
语句B;
break;
default: //default相当于else,用于前面情况不符合时,执行此语句。
语句C; 注意:default一定要写上,虽不会出现语法错误,但会以为你忘掉了。
break;
注意:switch语句是选择,不是循环,不能出现continue,除非switch是for或while循环中的一部分。
printf("您想继续吗?(Y/N)\n");
scanf("%c", &ch); //ch前必须加一空格(空白符问题!)
}while('y' == ch || 'Y' == ch);
continue:用于终止本次循环余下的语句,转去判断是否需要执行下次循环,即跳过本次循环。
例: for(i=0; i<3; i++)
{
A;
B;
continue;//continue会将本次循环余下语句C;D;跳过,去执行i++,继续下次循环。
C;
D;
}
j= 0
while(j<3)
{
A;
B;
j++; //更新部分j++不会被跳过,否则将成为死循环。
continue;//continue会将本次循环余下语句C;D;跳过,去执行i++,继续下次循环。
C;
D;
}
应用: inti, j;
char ch;
printf("请输入i的值:");
scanf("%d", &i);
printf("i = %d\n", i);
while ((ch=getchar()) != '\n') //对i后的非法字符进行处理。 getchar()是取字符函数,'\n'即是回车。
continue;
printf("请输入j的值:");
scanf("%d", &j);
printf("j = %d\n", j);