if语句概述
if(表达式)
语句块1
else
语句块2
常见形式
简化形式
if(表达式)语句块,例如:
if(x>y)printf("%d",x);
阶梯形式
if(表达式1)语句块1
else if (表达式2)语句块2
else if (表达式3)语句块3
else if (表达式4)语句块4
#include
#include
int main()
{
float score;
printf("please intput score: \n");
scanf("%f",&score);
if(score <0 || score >100)
{
printf("error");
return 0;
}
else
{
if(score >= 90)
{
printf("good");
}
else
{
if(score > 70 && score <90)
{
printf("B");
}
else
{
if(score > 60 && score < 70)
{
printf("C");
}
else
{
if(score < 60)
{
printf("D");
}
}
}
}
}
return 0;
}
嵌套形式
if ()
if ()语句1
else语句2
else
if()语句3
else语句4
注意:
1.语句块,当有若干条语句的时候,必须用{.......}括号起来
2.表达式
1.一般情况下为逻辑表达式或关系表达式
如:if(a == b && x == y)printf("%d",a);
2.也可以是任意类型(包括整型,实型,字符型,指针类型)
#include
#include
int main()
{
int a = -1;
if(a)
printf("aaaaa");
else
printf("bbbbb");
return 0;
}
//只要是非零,就输出是真
3.请区分if(x=1)和if(x==1)的不同——一个是赋值一个是判断
#include
#include
int main()
{
int a = -1;
if(1=a)//建议将数字写左边,如果少写个等号编译时可以报错
printf("aaaaa");
else
printf("bbbbb");
return 0;
}
#include
#include
int main()
{
int a = 5,b = 1,c =9;
int t;
if(a > b)
{
t = a;
a = b;
b = t;
}
if(a > c)
{
t = c;
c = a;
a = t;
}
if(b > c)
{
t = b;
b = c;
c = t;
}
printf("%d-%d-%d",a,b,c);
return 0;
}
//三个数从小到大排列
多分支选择结构
switch语句的基本形式
switch(表达式)
{
case常量表达式1;语句块1;break;
case常量表达式2;语句块2;break;//只能是常量表达式
case常量表达式n;语句块n;break;
defuault: 语句块n+1
}
switch语句的使用
每个常量表达式的值必须各不相同,否则将出现矛盾
当表达式的值与case后面的常量表达式的值相等时,就执行case后面的语句
switch中的表达式可以是整型,字符型表达式或枚举
case常量:只起语句标号的作用
break语句用于强行跳出switch语句,一般每个case后面应有一个break语句,defalut分支后面 的break可以省略
多个case可以执行一条语句
#include
int main()
{
int tmp = 1;
switch(tmp)
{
case 1:
printf("1\n");
break;
case 2:
printf("2\n");
break;
case 3:
printf("3\n");
break;
default:
printf("not 1 2 3");
}
return 0;
}
#include
int main()
{
int tmp = 1;
switch(tmp)
{
case 1:
printf("1\n");
case 2:
printf("2\n");
case 3:
printf("3\n");
default:
printf("not 1 2 3");
}
return 0;
}
//如果没有break,则输出结果为:
1
2
3
not 1 2 3
#include
int main()
{
int tmp = 3;
switch(tmp)
{
case 1:
printf("1\n");
case 2:
printf("2\n");
case 3:
printf("3\n");
default:
printf("not 1 2 3");
}
return 0;
}
//此时的输出结果为:
3
not 1 2 3
#include
#include
int main()
{
float score;
printf("please your scroe:");
scanf("%f",&score);
if(score < 0 || score > 100)
{
printf("input errore");
return 0;
}
else
{
switch((int)score/10)//(int)强制将float转为int
{
case 9:
printf("A");
break;
case 8:
printf("B");
break;
case 7:
printf("B");
break;
case 6:
printf("C");
break;
default:
printf("D");
}
}
return 0;
}
利用goto实现1-100求和
#include
int main()
{
int i = 1,sum =0;
loop:
if(i<=100)
{
sum = sum + i;
i ++;
goto loop;
}
printf("sum = %d",sum);
return 0;
}
当程序有多个出口,使用goto把这些出口集中到一处很方便,特别是函数中有很多重复的工作的时候。
理由是:
无条件跳转易于理解
可以减少嵌套
可以避免那些忘记更新某一个出口点的问题
算是帮助了编译器做优化
while语句构成循环
基本形式:
while(表达式)
{
statements;
}
//先判断在执行代码,也可能一次不执行
循环条件:
变量初值
终止条件
变量变化
#include
int main()
{
int i = 1,sum =0;
while(i<=100)
{
sum = sum + i;
i ++;
}
printf("sum = %d",sum);
return 0;
}
//使用while语句进行1-100求和
基本形式:
do{
statements;
}while(表达式);
//注意这里while后面跟分号
//do-while是先执行代码,然后再判断是否需要循环执行
一般形式
for(表达式1;表达式2;表达式3)
{
statements;
}
执行过程
1.先求解表达式1,初始值
2.求解表达式2,若为真,则执行循环体,然后执行步骤三,若为假,则执行步骤5
3.求解表达式3
4.转回执行步骤2
5.执行for下面的语句
#include
int main()
{
int i = 1,sum =0;
for(i=1;i<=100;i++)
{
sum = sum + i;
}
printf("sum = %d",sum);
return 0;
}
//使用for语句完成1-100求和
for语句构成循环
表达式1可以省略,但循环之前应要给循环变量赋值
表达式2可以省略,将陷入死循环
表达式3可以省略,但应该写到循环体里面
#include
int main()
{
int i,sum;
i = 1;
sum = 0;
for(;i<=100;)//注意:这里虽然省略了,但是仍然存在两个分号
{
sum = sum + i;
i++;
}
printf("sum = %d",sum);
return 0;
}
#include
#include
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf("%d*%d=%d \t",i,j,i*j);
puts("");//回车
}
return 0;
}
用于从循环体内跳出一层循环体,即提前结束循环
break只能用在循环语句和switch语句中
#include
#include
#define pi 3.14
int mian()
{
float r = 0,area = 0;
for(r=1;r<10;r++)
{
area = pi * r * r;
if(area>100)//当area大于100时才运行
break;
printf("r=%f area=%f \n",r,area);//每次都打印
}
return 0;
}
#include
#include
#define pi 3.14
int mian()
{
float r = 0,area = 0;
while(1)
{
for(r=1;r<10;r++)
{
area = pi * r * r;
if(area>100)//
break;//只能跳出一层循环
printf("r=%f area=%f \n",r,area);//
}
}
return 0;
}
结束本次循环,接着判定下一次是否执行循环
注意break和continue的区别
continue直接结束本次循环,而break终止本层循环
#include
int main()
{
int n;
for(n=100;n<=120;n++)
{
if(n %3 == 0)
continue;
printf("%d\n",n);
}
return 0;
}
return语句的一般形式:return(<表达式>)
主要用于终止包含它的函数的执行
若终止的为主函数,则主程序结束