分支和循环(1)
正文
一.分支语句和循环语句
分支语句
if switch
循环语句
while for do while go to语句
什么是语句?
c语言中由一个分号(;)隔开的是一条语句。
;//是语句,空语句
1.分支语句(选择结构)
1).if语句
if语句的语法结构:
if(表达式) 或 if(表达式)
语句; 者 语句1;
else
语句2;
多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
如果表达式的结果为真,则语句执行(0表示假,非零表示真)
int main()
{
int age = 111;
if (age < 18)
printf("未成年\n");
else if (age >= 18 && age < 20) //&&表示逻辑与,如果表达式的结果为真,则语句执行(0表示假,非零表示真)
printf("青少年\n");
else if (age >= 20 && age < 50)
printf("壮年\n");
else if (age >= 50 && age < 90)
printf("老年人\n");
else
printf("老不死\n");
return 0;
}
如果条件成立,要执行多条语句,应该使用代码块
#include <stdio.h>
int main()
{
if(表达式)
{
语句列表1;
}
else
{
语句列表2
}
return 0;
}
int main()
{
int age = 111;
if (age < 18)
{
printf("未成年\n"); //语句列表1
printf("不能谈恋爱\n"); //可以打印多个printf
}
else
{
if (age >= 18 && age < 20)
printf("青少年\n");
else if (age >= 20 && age < 50) //语句列表2
printf("壮年\n");
else if (age >= 50 && age < 90)
printf("老年人\n");
else
printf("老不死\n");
}
return 0;
}
这里的{}就是一代码块
悬空else
int main()
{
int n = 2;
int m = 2;
if (1 == n)
if(2==m) //尽量与else对其
printf("你好\n");
else //else和离的最近的未匹配的if匹配
printf("你真不好\n");
return 0;
}
输出的结果为空,能运行
//适当的使用{}可以使代码的逻辑更加清楚
//代码风格很重要
练习:输出1~100之间的奇数
int main()
{
int n=1;
while(n<100)
{
if(1==n%2)
printf("%d\n",n);
n++;
}
return 0;
}
2).switch语句
switch语句的语法结构:
switch(整型表达式)
{
语句项;
}
语句项是什么?
//是一些case语句
//如下:
case整型常量表达式:
语句;
//switch语句里面可以有if语句
int main()
{
int day = 0;
scanf("%d",&day); //&取地址符,取出变量day
if (1 == day) //判断变量day是否等于1,是的话输出星期一
printf("星期一\n");
else if(2 == day)
printf("星期二\n");
else if (3 == day)
printf("星期三\n");
else if (4 == day)
printf("星期四\n");
else if (5 == day)
printf("星期五\n");
else if (6 == day)
printf("星期六\n");
else if (7 == day)
printf("星期日\n");
return 0;
}
//用else if...else if 比较复杂,用switch多分支语句比较简单
更改后
int main()
{
int day = 0; //day为整型变量
scanf("%d", &day);
switch (day) //day为整型表达式
{
case 1: //case 1(1为常变量表达式):
printf("星期一\n");
break; //break是结束循环的意思
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
}
return 0;
}
//总结:通俗易懂
在switch语句中的break:
在switch语句中,我们没法实现分支,搭配了break就可以实现真正的分支了。
练习:输入1~5,输出“weekday”;输出6~7,输入“weekend”
int main()
{
int day=0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
default: //default可以放在switch的任何地方,当switch表达式的值不等于case标签的值时,这个时候default后面的语句就会执行。
printf("输入错误\n");
break;
}
return 0;
}
break语句的实际效果是把语句列表划分为不同的部分。
default子句(default和case没有顺序可言,放在那里都可以用)
如果表达的值与所有case标签的值不一样该怎么样?
其实也没什么,结果就是所有语句都被跳过而已;程序不会终止,也不会报错,因为这种情况在c中并不认为适合报错。
如果你并不想忽略不匹配所有标签的表达式的值时该怎么办?
你可以在语句列表中增加一条default子句,把下面的标签default:写在任何一个case标签可以出现的位置(当switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会被执行。所有,每个switch语句中只能出现一条default子句,但是它可以出现在语句列表中的任意位置,而且语句流会向贯穿case标签一样贯穿default子句。)
练习:
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:m++;
case 2:n++;
case 3:
switch (n)
{//switch允许嵌套使用
case 1:n++;
case 2:m++; n++; break;
}
case 4:m++;
break;
default:
break;
}
printf("m=%d,n=%d\n", m, n);
return 0;
}
1.循环语句
while for do while
1).while语句
while语法结构:(while语句,可实现循环)
while(表达式)
循环语句;
练习:在屏幕上打印1~10
int main()
{
int a=1;
while(a<=10)
{
printf("%d\n",a);
a++;
}
return 0;
}
break停止
int main()
{
int i=1;
while(i<=10)
{
if(5==i)
break;
printf("%d\n",i);
i++;
}
return 0; //打印为1,2,3,4
}
continue跳过,进行下一次循环的入口判断
int main()
{
int i = 1;
while (i <= 10)
{
if (5 == i)
continue;
printf("%d\n", i); //打印1,2,3,4,光标还在闪烁(程序没结束)
i++;
}
return 0;
}
结论:continue表示死循环(循环没结束)
总结:(1)break在while循环中的作用:在循环中只要遇到break,就停止后期的所有循环,直接终止循环。所有,while中的break是用来永远终止循环的。(2)continue在while循环中的作用(continue介绍):continue是用来终止本次循环的,也就是continue后边的代码不会被执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。
getchar和put char的用法
int main()
{
int a = getchar();//获取一个字符放入a
putchar(a); //输出一个w
printf("%c\n", a);//打印ww
return 0;
}
int main()
{
int a=0;
while((a=getchar())!=EOF)//end of file (结束标志文件) 值为 -1
{
putchar(a); //输入什么就会输出什么,按ctrl +z结束
}
return 0;
}