在程序中程序运行的流程控制决定程序是如何执行的,是我们必须掌握的主要有三大流程控制语句
介绍:程序从上到下逐行执行中,中间没有任何判断和跳转
代码案例:
void main(){
int num=12;
int num2=num+2;
}
介绍:让程序有选择的执行,也分三种
if(条件表达式){
执行代码块;
}
说明:当条件表达式为真(非0)时,就会执行{}的代码,返回假(0)时,不会执行{}的代码
案例
#include
int main() {
printf("请输入一个整数:\n");
int age=0;
fflush(stdout);
scanf("%d",&age);
if(age>18){
printf("你的年龄大于18岁了,要对自己的行为负责!");
}
return 0;
}
if(条件表达式){
执行代码块1;
}else{
执行代码块2
}
说明:当条件表达式成立时(为真),执行代码块1,否则执行代码块2
案例:
#include
int main() {
printf("请输入一个整数:\n");
int age=0;
fflush(stdout);
scanf("%d",&age);
if(age>18){
printf("你的年龄大于18岁了,要对自己的行为负责!");
}else{
printf("你的年龄不大,这次放过你了!");
}
return 0;
}
案例练习:
#include
void main(){
/*
* 第一题
int a=24;
int b=34;
if(a+b>50){
printf("hello world");
}
第二题:
double a=12.0;
double b=13.0;
if(a>10.0 && a+b>20.0){
printf("a+b=%f",a+b);
}else{
printf("数太小了,没必要");
}
第二题
int a=16;
int b=15;
int c=a+b;
if(c%3==0&&c%5==0){
printf("sucess!");
}else{
printf("fail1");
}
*/
int age=2008;
if(age%4==0 && age %100!=0 ||age%400==0){
printf("是闰年");
}
}
基本语法:
if(条件表达式){
执行表达式1;
}else if(条件表达式2){
执行代码块2;
}
...else{
执行代码块;
}

1)当条件表达式1成立时,即执行代码块1
2)如果表达式1不成立时,才去判断表达式2是否成立。
3)如果表达式2成立,就执行代码块2,
以此类推,如果所有的表达式都不成立,则执行else代码块
注意:只能有一个执行入口
案例演示:
岳小鹏参加C语言2级考试,他和父亲岳不群达成协议
如果:
成绩为100分奖励一辆BMW;成绩为[60,80]时,奖励一台iphone7plus.
当成绩为[60,80]奖励一个ipad;
其他什么奖励也没有,请从键盘上输入他的期末考试并加以判断。
#include
void main(){
/*
* 岳小鹏参加C语言2级考试,他和父亲岳不群达成协议
如果:
成绩为100分奖励一辆BMW;成绩为[60,80]时,奖励一台iphone7plus.
当成绩为[60,80]奖励一个ipad;
其他什么奖励也没有,请从键盘上输入他的期末考试并加以判断。
分析:
1,定义一个double保存成绩
2.因为判断条件有多个,因此我们使用多分支处理
*/
double score=0;
printf("请输入成绩:");
fflush(stdout);
scanf("%lf",&score);
if(score==100){
printf("奖励宝马一台");
}else if(score>80 && score<=99){
printf("奖励一台iphone7plus");
}else if(score>=60 && score<=80){
printf("奖励一台ipad");
}else{
printf("没有奖励");
}
}
案例:
#include
#include
/*
* 求ax^2+bx+c=0的根。a,b,c分别为函数的参数,如果b^2-4ac>0,则有两个解;
* b^2-4ac=0,则有一个解。b^2-4ac<0则无解
* 提示
* x1=(-b+sqrt(b^2-4ac))/2a
* x2=(-b-sqrt(b^2-4ac))/2a
* 提示2:sqrt(num) 需要#include
* 分析:
* 1.定义三个double a,b,c
* 2.b^2-4ac出现了很多次(>3)。,因此我们可以使用一个变量来保存从而避免重复计算提高效率
* 3.sqrt(num),需要#include
* 使用到多分支
* 走代码
*/
void main(){
/**
double a=3,b=100,c=6,x1=0,x2=0;
double t=b*b-4*a*c;
if(t>0){
x1=(-b+sqrt(t))/(2*a);
x2=(-b-sqrt(t))/(2*a);
printf("\nx1=%.2f",x1);
printf("\nx2=%.2f",x2);
}else if(t==0){
x1=(-b+sqrt(t))/(2*a);
printf("\nx1=%.2f",x1);
}else{
printf("无解");
* */
int height=0;
int money=0;
int handsome=0;
printf("请输入值:");
fflush(stdout);
scanf("%d,%d,%d",&height,&money,&handsome);
if(height>180 && money>100000 && handsome==1){
printf("我一定要嫁给他");
}else if(height>180 || money>10000000 || handsome==1){
printf("嫁吧,比上不足,比下有余");
}else{
printf("不嫁");
}
}
基本介绍
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支结构称为内层分支外面的分支结构称为外层分支。嵌套分支不适合过多,最多不要超过3层
基本语法
if(){
if(){ //被包含的可以是各种分支类型
}else{
}
}
案例:
#include
/*
* 参加百米运动会,如果用时8秒以内就进入决赛,否则提示淘汰。并且根据性别提示进入
* 男子组或女子组 。输入成绩和性别
* double second;chr gender;
* 1.变量double second保存时间
* 2.变量 char gender 保存性别
* 3.使用嵌套分支
*/
void main(){
double time=0.0;
char gender= ' ';
printf("请输入跑步成绩(s)\n");
fflush(stdout);
scanf("%lf",&time);
//根据time判断是否进入决赛
if(time<=8){
//进入
printf("请输入性别(m/f)\n");
fflush(stdout);
scanf("%c",&gender);//接收到上次回车
fflush(stdout);
scanf("%c",&gender);//这次才接收到性别
if(gender=='m'){
printf("请进入男子组就决赛");
}else{
printf("请进入女子组就决赛");
}
}else{
printf("你被淘汰");
}
}
#include
/*
* 出票系统:根据淡旺季的月份和年龄打印票价
* 4-10旺季
* 成人:(18-60):60
* 儿童: (<18):半价
* 老人(>60):1/3
* 淡季:
* 成人: 40
* 其他:20
*/
void main (){
int month=0;
int age=0;
double price =60.0;
printf("month:");
fflush(stdout);
scanf("%d",&month);
printf("age:");
fflush(stdout);
scanf("%d",&age);
if(month>=4 && month <=10){//旺季
if(age>60){
printf("¥%.2f",price/3);
}else if(age>=18){
printf("¥%.2f",price);
}else{
printf("¥%.2f",price/2);
}
}else{//淡季
if(age>=18 && age<60){
printf("¥40");
}else{
printf("¥20");
}
}
}
流程图:

switch(表达式){
case常量1://当
语句块1;
break;
case常量2:
语句块2;
break;
...
case 常量n:
语句块n;
break;
default:
default 语句块;
break;
}
#include
/*
* 案例:
* 请编写一个程序,该程序可以接收一个字符,比如 :a,b,c,d,e.f,g
* a表示星期一。。。依次类推
* 根据用户输入的信息提示相应的信息
* switch语句完成
*/
void main(){
char c1=' ';
printf("请输入一个字符:\n");
fflush(stdout);
scanf("%c",&c1);
//任何有值的都可以看做表达式
switch (c1) {
case 'a':
printf("星期一");
break;
case 'b':
printf("星期二");
break;
case 'c':
printf("星期三");
break;
case 'd':
printf("星期四");
break;
case 'e':
printf("星期五");
break;
case 'f':
printf("星期六");
break;
case 'g':
printf("星期日");
break;
default:
printf("只能输入a~g");
}
}
1)switch语句中的expression是一个常量表达式,必须是一个整形(char\short,int long等)或枚举类型
2)case子句中的值必须是常量,而不是变量
3)default子句是可选的,当没有匹配的cse时,执行default
4)break语句用来执行完一个case分支后使程序跳出switch语句块;
5)如果没有写break,会执行下一个case语句块,直到遇到break或者执行到switch结尾,这个现象称为穿透
超级案例:
#include
void main(){
/*
//使用switch把小写类型的char型转为大写。只转换a,b,c.其他的输出出other
char c1=' ';
printf("please input a char:\n");
fflush(stdout);
scanf("%c",&c1);
switch (c1) {
case 'a':
printf("A");
break;
case 'b':
printf("B");
break;
case 'c':
printf("C");
break;
default:
printf("other");
}
*/
/*
//对学生成绩大于60分的,输出"合格",低于60分的,输出"不合格"。(输入的成绩不能大于100)
double d1=0.0;
printf("请输入成绩:");
fflush(stdout);
scanf("%lf",&d1);
switch ((int)(d1/60)) {//括号中可以是一个表达式
case 0:
printf("不合格");
break;
case 1:
printf("合格");
break;
default:
printf("你输入的成绩有误");
break;
}
*/
//根据用于指定月份,打印该月份所属的季节,3,4,5春季6,7,8夏季 9,10,11秋季 12,1,2冬季
int month=0;
printf("请输入月份;");
fflush(stdout);
scanf("%d",&month);
switch (month) {//会自动向下穿透
case 3:
case 4:
case 5:
printf("春季");
break;
case 6:
case 7:
case 8:
printf("夏季");
break;
case 9:
case 10:
case 11:
printf("秋季");
break;
case 12:
case 1:
case 2:
printf("冬季");
break;
}
}
1.如果判断的具体数值不多,而且符合整形、枚举类型。虽然两个语句都可以使用,建议使用switch语句
2.其他情况:对区间判断,对结果为真假的判断,使用if,if的范围更广
基本介绍:可以让代码循环执行
基本语法:
for(循环变量初始化,循环条件,循环变量迭代){
循环语句操作;
}
案例:
#include
void main(){
for(int i=0;i<5;i++){
printf("你好C语言\n");
}
}
注意 事项和细节说明
1)循环条件是返回一个表示真(非0)假(0)的表达式
2)for(;循环判断条件;)中的初始化变量迭代可以不写(写到其他地方)但是两边的分号不能省略
/*
* 第一种写法
for(int i=0;i<50;i++){
printf("你好C语言\n");
}
*/
//写法2:可以将变量的初始化和迭代放在其他地方
/*
int i=1;
for(;i<=5;){
printf("你好世家\n");
i++;
}
3)循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开
for(i=0,j=0;j for的练习案例: 第二道题: 基本语法: 使用while循环做题: 流程图:d while循环的细节注意事项 1)循环条件是返回一个表示真(非0)假(0)的表达式 2)while循环是先判断再执行语句 基本语法: 实战案例: 注意事项与细节说明: 1)循环条件是返回一个表示真(非0)假(0)的表达式 2)do…while循环是先执行,再判断 案例: 1.求出1~100的和: 2.统计1~200之间能被5整除但不能被3整除的个数 题2: 统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分【学生的成绩从键盘输入】 统计三个班级的及格人数,每个班有5名同学 打印出九九乘法表 打印金子塔; 需求: 随机生成一个数,直到生成97个数,看看你哟用了几次; 提示: rand()返回一个范围在0到RAND_MAX之间的随机数 rand()函数在stdlib.h头文件当中 通过该需求可以说明他流程控制数据的必要性,比如break 基本介绍: break语句用于终止某个语句块的执行,一般使用在switch或者循环中(三大循环) 基本语法: 基本介绍: continue语句可用于结束本次循环,继续执行下一次循环。 基本语法: 注意事项和细节说明: continue语句,只能配合循环语句使用,不能单独和switch语句使用。 案例练习: 介绍: 基本语法: 案例演示: 跳出所有函数,函数细说; 练习; 案例2: 案例3: } //while 循环 } //循环初始值可以有多条初始化语句,但要求类型一样,
// 并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开
int i=0;
int j=0;
for(i=0,j=0;i<=3;i++,j++){
printf("i=%d,j=%d\n",i,j);
}
printf("%d,%d",i,j);//i=4,j=4
#include int a=0;
printf("请输入一个整数:\n");
fflush(stdout);
scanf("%d",&a);
for(int i=0,j=a;i<=a,j>=0;i++,j--){
printf("%d+%d=%d\n",i,j,i+j);
}
-2.while循环
while(循环条件){
循环体(语句)
循环变量迭代
}
#include 
-3.do while循环
循环变量的初始化;
do {
循环语句;
循环变量迭代;
}while(循环条件);
//注意.do while后面的 ;不能省略
#include #include #include #include 4)多重循环控制
介绍:
案例
#include //在上一个代码的基础之上,定义一及格人数变量。符合条件的话就进行递增迭代
int stuNum=5;
int classNum =2;
double classTotalScore=0.0;
double score=0.0;
int jige=0;
int i,j;
for(i=1;i<=classNum;i++){//控制班级的循环次数
//每次给一个班级输入成绩时需要清零
classTotalScore=0.0;
jige=0;
for(j=1;j<=stuNum;j++){
printf("\n请输入第%d个班级的第%d个学生的成绩\n",i,j);
fflush(stdout);
scanf("%lf",&score);
classTotalScore +=score;//累计成绩
if(score>=60){
jige++;
}
}
//当内层的for循环结束后,就得到了该班级的总成绩
printf("\n第%d个班级的平均分=%.2f",i,classTotalScore/stuNum);
printf("\n第%d个班级的及格人数为:=%d",i,jige);
}
}
#include #include 跳转语句
跳转语句–break:
#include {
.....
break;
}
#include 跳转语句-continue
{
......
continue;
}
void main(){
int i=0;
switch(i){
case 1:
continue;//错误
}
if(i>1){
continue;//错误
}
}
#include #include 跳转语句-goto
gotolabel
....
label:statement
#include 跳转语句-return
#include #include #include //求出1-1/2+1/4.....1/100的和
/*
* 分析:
* 找到算术的规律
* 1-1/2+1/3
*/
#include
printf(“\nb1=%d,b2=%d”,b1,b2);int a=2;
while(a<2){
printf("\n执行while");
}
do{
printf("执行do while");//至少会执行一次
}while(a<2);
*/
//输出1000~9999的闰年使用 for while do while这三种循环进行操作
/*
* for循环
for(int i=1000;i<=9999;i++){
if(i%4==0&&i/100!=0||i%400==0){
printf("i=%d ",i);
}
*/
/*
int i=1000;
while(i<=9999){
if(i%40&&i/100!=0||i%4000){
printf("i=%d ",i);
}
i++;
}
*/
//do while 循环操作
int i=1000;
do{
if(i%40&&i/100!=0||i%4000){
printf("i=%d ",i);
}
i++;
}while(i<=9999);
案例3:
```c
#include //求出1-1/2+1/4.....1/100的和
/*
* 分析:
* 找到算术的规律
* 1-1/2+1/3
*/
#include