2.1 分支与循环
语句语句
C中语句分以下五类:
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
控制语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言由九种控制语句。可以分为三类:
- 条件判断语句,也叫分支语句:if语句,switch语句;
- 循环执行语句:dowhile语句、while语句、for语句;
- 转向语句:break语句、goto语句、continue语句、return语句。
C语言是一种结构化的程序设计语言,生活中万事万物都可以分成三种结构:顺序、选择、循环
分支语句(选择结构)
- if
- switch
if语法结构
if(表达式)//括号中为真执行 语句; if(表达式) 语句1; else 语句2; 多分支 if(表达式) 语句1; else if 语句2; else 语句3
相关实例if
3==5为假
int main() { if(3==5) //条件为假,不执行 printf("hehe\n"); return 0; }
输出多条语句需{ }
int age =20 int main() { if(age<18) { printf("未成年\n");//若要输出多条语句,多条语句应该使用{ }括住 printf("禁止观看\n"); } else printf("已经成年"); return 0; }
年龄
int age = 10; if(age<18) { printf("未成年\n");//若要输出多条语句,多条语句应该使用{ }括住 printf("禁止观看\n"); //else if(18<= age <28)//此处有错误,age=10进入,先执行判断18<=age,结果为假-0,再判断0<28,结果为真,结果错误打印了下方内容 else if(age>=18 && age<28); printf("青年请入\n"); else if(age>=28 && age<58); printf("中年请入\n"); else printf("老年\n") return 0; }
if悬空
int a = 0; int b =2; { if (a==1) if(b==2) printf("hh\n"); else printf("jj\n"); return 0; } \\一个if对应一个else,上例首个if悬空,未有else对应,代码输出无结果 \\else与离它最近的if对应
良好书写习惯
int main() { int num = 3; if(5 == num)//if( num ==5)容易漏写等号 printf("hhe\n"); return 0; }
判断一个代码是否为奇数
int main() { int num=0; scanf("%d\n",&num) ; if ( (num%2) ==1) printf("是奇数\n"); else printf("是偶数\n"); return 0; }
输出零到一百内的奇数
int main() { int i = 1; while (i <= 100) { if (i % 2 == 1) printf("%d\n", i); i++; } return 0; }
swtich语法结构
switch(整型表达式) { 语句项目; } 语句项目: case 整型常量表达式 语句;
相关实例switch
星期几
int day = 0; scanf("%d",&day); switch(day) { case 1: printf("星期一\n"); 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; }
工作日or休息
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://若有人输入一到七以为的值 printf("请输入一到七以内的数字\n"); break; }
小计算
int main() { int n = 1; int m = 2; switch (n) { case 1: m++; case 2: n++; case 3: switch (n) { case 1: n++; case 2: m++;n++; break; } case 4: m++; break; default: break; } printf("m=%d,n=%d\n",m,m); return 0; }
循环语句
- while
- for
- do while
while语法结构
while(若为真执行) { 循环语句; }
相关实例while
括号中为1永远真,永循环
int main() { while(1) printf("hehe\n"); return 0; } 结果是不停打印hehe,以为括号中一直为真
遇break跳出循环
int main() { int i = 1; while ( i<=10 ) { if(5 == i) break; printf("%d\n",i); i++; } return 0; } //结果打印1 2 3 4 ,第五次循环时候遇到break 跳出循环 //while循环中,break用于永久地终止循环
遇continue跳本循环(没跳出)
int main() { int i = 1; while ( i<=10 ) { if(5 == i) continue; printf("%d\n",i); i++; } return 0; } //结果打印1 2 3 4 _ 下划线表示程序一直在运行,跳不出循环 //while循环中,continue的作用是直接跳过本次循环Continue后面的部分,直接去判断要不要进行下一次循环 //本程序中i=5时候,进入continue,后i等于5又进入if判断,再进行continue
遇continue跳本循环(跳出)
int main() { int i = 1; while ( i<=10 ) { i++; if(5 == i) continue; printf("%d\n",i); } return 0; } 输出2 3 4 6 7 8 9 10 11
for语法结构
for循环的语法是: for (初始化; 循环条件; 更新) { 代码块; }
相关实例for
for循环中break跳出循环
int main() { int i = 0; for(i=1;i<=10;i++) { if(i==5) { break; } printf("%d ",i); } return 0; } //结果为1 2 3 4
do...while...循环语法结构
do 循环语句; while(表达式); //循环体至少要执行一次
相关实例do while
int main() { int i=1; do { i++; if(i==5) continue; printf("%d\n",i); } while(i<=10); return 0; }
有关循环的一些项目跳转,从n!到猜数字小游戏,我觉得很有参考价值欸
go to 语句
C语言中提供了可以随意滥用的goto语句和标记跳转的标号。
从理论上说goto语句是没有必要的,实践中没有goto语句也可以写出代码。
但是某时候也是有用的,如常见程序在某些深度嵌套结构的处理过程。
例如:一次跳出多层循环。
多层循环这种情况使用break无法达成目标,break只可以从最内层循环退出到上一层循环。
int main() { again: printf("haha\n"); printf("hehe\n"); goto again; return 0; } //可以跳转,但是不可以跨函数跳转
真正适用场景:
for(...) { for(...) { for(...) { if(disaster) goto error; } } } error: if (disaster)
//1.电脑运行一分钟后关机 //2.若输入:我是猪,取消关机 #include <string.h> #include <stdio.h> int main() { char input[20]={0}; system("shutdown -s -t 60"); again: printf("请注意你的电脑,将会在六十秒内关机,输入:我是猪,取消关机\n"); scanf("%s",&input); if (strcmp(input,"我是猪") == 0) { system("shutdown -a"); } else { goto again; } return 0; } //上方选择Release版本而非debug版本,在文件Release目录下寻找exe文件即可,可当作恶作剧文件发送
//1.电脑运行一分钟后关机 //2.若输入:我是猪,取消关机 #include <string.h> #include <stdio.h> int main() { char input[20]={0}; system("shutdown -s -t 60"); while(1) { printf("请注意你的电脑,将会在六十秒内关机,输入:我是猪,取消关机\n"); scanf("%s",&input); if (strcmp(input,"我是猪") == 0) { system("shutdown -a"); break; } return 0; } //上方选择Release版本而非debug版本,在文件Release目录下寻找exe文件即可,可当作恶作剧文件发送