目录
http://t.csdn.cn/glAWwhttp://t.csdn.cn/glAWw一、分支语句
参考该笔记:
http://t.csdn.cn/glAWwhttp://t.csdn.cn/glAWw一、分支语句
1.1 if 语句
非0为真,0为假
1、 单分支
if(表达式)//表达式为真则执行
语句;
//举例:
int age=10;
if (age>=18)
printf("成年\n");//结果什么都不显示
2、 双分支
if(表达式)
语句1;//表达式为真则执行
else
语句2;//表达式为假则执行
//举例
int age=10;
if (age>=18)
printf("成年\n");
else
printf("未成年\n");
3、 多分支
//形式3:多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;//如果没用{ }则只能控制一条语句!!!如果下面还有语句则不受其控制!!!
else
{
语句3;
语句4;
}//用{ }可以执行多条语句;{}叫做代码块
//举例:
int age=60;
if (age<18)
printf("少年\n");
//else if (18<=age<26)//这种写法是错误的
//因为执行过程是这样的:age=60是大于18,所以为真,“18<=age”这一部分就变成了1,
//1<26,所以此语句为真
else if (age>=18 && age<26)//正确写法 并且:&&
printf("青年\n");
else if (age>=26 && age<40)
printf("中年\n");
else if (age>=40 && age<60)
printf("壮年\n");
else if (age>=60 && age<100)
printf("老年\n");
else
printf("神仙\n");
4、 悬空语句
int main()
{
int a=0,b=2;
if(a==1)
if(b==2)
printf("haha\n");
else
printf("xixi\n");
return 0;
}
结果是:什么都不打印
因为else和最近的一个if匹配
上述代码相当于:
int main()
{
int a=0,b=2;
if(a==1) //a为假了,if语句进不去,下面的内容也不执行
{
if(b==2)
printf("haha\n");
else
printf("xixi\n"); //else与其离的最近的、未匹配的if匹配,缩进在一块了
}
return 0;
}
5、if语句书写形式对比
//都是条件成立返回x,否则返回y;但是代码2比代码1可读性强,不会产生误解
//代码1
if (condition)
{
return x;
}
return y;
//代码2
if (condition)
{
return x;
}
else
{
return y;
}
赋值/等号:常量放在左边
//代码3
if (a==1)
printf("hehe");
//如果误写成if(a=1),输出结果是一样的,但是代码逻辑错误
//为了避免这种错误,采用代码4的写法
//代码4
if (1==a) //常量放在左边
printf("haha");
6、练习:
1.判断一个数是否为奇数
//判断一个数是否为奇数
int main()
{
int a ;
scanf("%d",&a); //&&&!!!! %d后面不用加\n
if (a % 2 == 1)
printf("%d是奇数", a);
else
printf("%d不是奇数", a);
return 0;
}
2.输出1-100之间的奇数
//输出1-100之间的奇数
int main()
{
int 1 = 0;
for (i = 1; i < 101; i++)
if (i % 2 == 1)
printf("%d\n",i);
return 0;
}
1.2 switch
1、对比if 和 switch
- 用if语句输出星期几
//用if语句
int main()
{
int day = 0;
scanf("%d", &day);
if (day == 1)
printf("星期1\n");
else if (day == 2)
printf("星期2\n");
else if (day == 3)
printf("星期3\n");
return 0;
}
- 用switch 语句输出星期几 ,要加break !! case决定入口,break决定出口
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期1\n");
break;//break!!!
case 2:
printf("星期2\n");
break;//break!!!
case 3:
printf("星期3\n");
break;//break!!!
}
return 0;
}
2、 switch 后表达式和case常量表达式的类型
- 可以是整型,字符型和枚举型,但不能是float等
case 0.0 //错的
3、 break的省略
- 并不是每个case都要用break,而是按项目需求来使用
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;//case也可以不加break!!!
case 6:
case 7:
printf("休息日\n");
break;//break!!!
}
return 0;
}
4、default语句
- case中可以放if
- 不在case范围内用default
int main()
{
int day = 0;
int n = 1;//看case1,case中可以放if
scanf("%d", &day);
switch (day)
{
case 1:
if (n = 1)
printf("hehe\n");
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;//并起来写,不用在每个case后面写printf,break
case 6:
case 7:
printf("休息日\n");
break;//break!!!
//不在case范围内用default
//可以放在case前,case和default并没有严格的控制,一般建议放在case后面
default:
printf("输入错误\n");
break;
}
return 0;
}
练习:
输出:m=5,n=3
二、循环语句
2.1 while
1、 死循环
while(1)
{
语句;
}
2、 基本写法
//实现打印1~10
int main()
{
int i=1;
while(i<=10)
{
printf("%d ",i);
i++;
}
return 0;
}
//输出结果:1 2 3 4 5 6 7 8 9 10
3、 break与continue
- break永久终止循环,停止后期的所有循环,直接终止循环
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;//如果i=5则跳出循环,注意是跳出while循环不是if语句!!!
printf("%d ", i);
i++;
}
return 0;
}
//输出结果:1 2 3 4
- continue终止循环中本次循环continue后面的代码(提前结束当前循环),直接跳到循环中的判断部分,判断是否要执行下一次循环
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;//跳过本次循环continue后面的代码,再次进入循环看是否需要继续循环
printf("%d ", i);
i++;
}
return 0;
}
//输出结果:1 2 3 4 死循环
- i++写在if前面
int main()
{
int i = 1;
while (i <= 10)
{
i++;//i++写在if前面
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
//输出结果:2 3 4 6 7 8 9 10 11
EOF - end of file
2.2 for
1、一些建议:
- 不可在for循环体内修改循环变量,防止for循环失去控制
- 建议for语句的循环控制变量的取值采用“[前闭后开区间)”写法
- 调整部分是可以放在循环体内的,但放入后,for循环应写成: for(初始化;条件判断;){循环体;调整部分;} 不可以两个地方同时写调整部分
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
i = 5;//在for循环体内修改循环变量,造成死循环
}
return 0;
}
运行结果:
- k=0是赋值语句不是判断语句
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++)//判断条件中k=0是赋值语句,判断结果为假,循环根本不进去
k++;
return 0;
}
2、 两个循环变量
#include<stdio.h>
int main() {
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
//输出结果:两个hehe
2.3 do while
do
{
循环语句;
}
while(表达式);
2.4 练习
1、计算n的阶乘
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
int ret = 1;
scanf("%d", &n);
for (i = 1; i < n + 1; i++)
ret *= i;
printf("%d", ret);
return 0;
}