4.1 分支结构之简单语句

判断语句如何表达?

  • 需用到C语言中的分支结构语句中的if条件语句

简单的if语句的基本结构

if(表达式)
{执行语句
}
如果表达式的值是真的,则执行其后的语句,否则不执行该语句
#include <stdio.h>int main()
{int height = 185;if (height >= 180){printf("恭喜小明可以参加校篮球队: \n");}return 0;
}

4.2 分支结构之简单的if-else语句
简单的if-else语句的基本结构

if(表达式)
{执行代码块1;
}
else
{执行代码块2;
}
如果表达式是真的就执行代码块1,否则就执行代码块2。
#include <stdio.h>
int main()
{int result ;if(result=100){printf("%s\n","买玩具");}else{printf("%s\n","没有奖励");}
#include <stdio.h>int main()
{int year =2014;if(year%4==0&&year%100!=0)||year%400==0){printf("%s\n","今年是闰年");}else{printf("%s\n","今年不是闰年");}

4.3 分支结构之多重的if-else语句
在C语言中就要用到多重if-else的基本结构是什么?

if()
{执行代码块;
}
else if()
{执行代码块;
}
。。。。
else
{执行代码块n;
}
依次判断表达式的值,当出现某个值为真时,则执行对应的代码块,否则则执行代码块n
#include <stdio.h>int main()
{int score = 95;if (score > 90){printf("%s\n","吃大餐");}else if (score = 100){printf("%s\n","买玩具");}else{printf("%s\n","没有奖励");}
}

4.4 分支结构之嵌套if-else语句

if (表达式)
{if (表达式){执行代码块;}else{执行代码块;}
}
else
{执行代码块;
}

任务
获奖条件为年销售业绩100万以上,并且入职满两年的员工。小明进入公司1年,销售业绩为120万。

#include <stdio.h>int main()
{int sale = 120;int year = 1;if (sale > 100){if (year >= 2){printf("%s\n","恭喜你获得优秀员工");}else{printf("%s\n","非常遗憾,期望你再接再厉!");}}else{printf("%s\n""非常遗憾,期望你再接再厉");}return 0;
}

4.6 循环结构之while循环

  • 反复不停的执行某个动作称之为循环
  • C语言有三种循环结构

while循环结构

while (表达式)
{执行代码块;
}
表达式表示循环条件,执行代码块为循环体。

while循环语句的语义是:计算表达式的值,当值为真时,执行循环体代码块。否则就结束循环

使用while语句应注意以下几点:

  1. while语句中的表达式一般是关系表达式或者是逻辑表达式,当表达式的值为假时不执行循环体,反之,则一直执行。
  2. 一定要记得在循环体中改变循环变量的值,否则会出现死循环
  3. 循环体如果包含有一个以上的语句,则必须用{}括起来,组合复合语句

    任务:
    用while循环实现100以内的所有整数之和

4.7 循环结构之do-while循环

C语言的do-while循环的基本结构

do
{执行代码块;
} while (表达式);//英文的分号,易忘记

do-while循环语句的语义:先执行循环中的执行代码块,然后再判断while循环中的表达式是否为真,如果为真则继续循环,如果为假则终止循环

注意:
使用do-while 结构的语句时,while括号后必须有分号

任务:
某公司2014年在职人数为200人,以每年20%增长速度不断扩大招工规模,请使用do-while循环计算从2014开始至哪一年招工规模能够突破1000人。

#include <stdio.h>int main()
{int number = 200;int year = 2014;do{year++;number *= 1.2;} while (number < 1000);printf("到%d年招工规模突破1000人\n",year);return 0;
}

4.8 循环结构之for循环(一)

for循环的基本结构

for (表达式1; 表达式2; 表达式3)
{执行代码块;
}

执行过程:
第一步:执行表达式1,对循环变量做初始化;
第二布:判断表达式2,若其值为真,则执行for循环体中执行代码块,继续执行,若其值为假,则结束循环。
第三步:执行表达式3
第四步:执行for循环中执行代码块后执行第二步;
第五步:循环结束,程序继续向下执行。

注意
for循环中的分号一定要写

任务:
体验一下for循环,实现一个10以内的数的小程序。

#include <stdio.h>int main()
{int num = 0;int sum = 0;for (num = 0; num <= 10; num++){sum += num;}printf("10以内数的和为: %d",sum);return 0;
}

4.9 循环结构之for循环(二)

使用for循环应注意的:

  • 省略表达式1(循环变量赋初值),表示不对循环变量赋初始值
int i =1;
for( ;i<=10;i++)
{printf("第%d遍书写:computer\n",i);
}
  • 省略表达式2(循环条件)不做其他的处理,循环一直执行;
int i;
for(i=0; ;i++)
{printf("第%d遍书写:computer\n",i);
}
  • 省略表达式3(循环变量增量),不做其他处理,循环一直执行
int i;
for(i=0;i<=10; )
{printf("第%d遍书写:computer\n",i);
}
  • 表达式1可以设置为循环变量的初值的赋值表达式,也可以是其他的表达式。
int sum,num;
num=0;
for(sum=0;num<=10;num++)
{sum+=num;
}
  • 表达式1和表达式3可以是一个简单表达式也可以是多个表达式以逗号分割。
int sum,num;
for(sum=0,num=0;num<=3;num++,sum++)
{sum +=num;printf("num=%d,sum=%d\n",num,sum);
}
  • 表达式2一般是关系表达式或者逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。
int num,sum;
for(sum=0,num=0;num<=3&&sum<=5&&1;num++,sum++)
{sum +=sum;printf("num=%d,sum=%d\n",num,sum);
}
  • 各表达式中的变量一定要在for循环之前定义
for(int sum=0,int num=0;num<=3&&sum<=5&&1;num++,sum++)
{sum +=num;printf("num=%d,sum=%d\n",num,sum);
}

任务:
输出所有水仙花数字

#include <stdio.h>int main()
{int num = 0;int sum = 0;for (num = 0; num <= 10; num++){sum += num;}printf("10以内数的和为: %d",sum);return 0;
}

4.10 循环结构之三种循环比较

在知道循环次数的情况下更适合for循环
不知道循环次数的情况下适合使用while或者do-while循环。
本质上,while、do-while、for循环之间是可以相互转化的

任务 使用循环计算1-2+3-4+5-6+….-100的值?

#include <stdio.h>int main()
{int sum = 0;int i = 1;int flag = -1;while (i <= 100){i++;sum += i*flag;flag *= -1;}printf("sum=%d\n",sum);return 0;
}
#include <stdio.h>int main()
{int sum = 0;int i = 1;int flag = 1;do{i++;sum += i*flag;flag *= -1;} while (i <= 100);printf("sum=%d\n",sum);return 0;
}
#include <stdio.h>int main()
{int sum = 0;int i = 1;int flag = 1;for (i = 1; i <= 100;i++){sum += i*flag;flag *= -1;}printf("sum=%d\n",sum);return 0;
}

4.12 循环结构之多重循环

多重循环就是在循环结构的循环体中又出现循环结构

多重循环在执行的过程中,外层循环为父循环,内层循环为子循环,父循环一次,子循环再进入下一次,子循环继续执行。。。

注意: 一个父循环可以有很多个子循环

#include <stdio.h>int main()
{int i, j;for (i = 1; i <= 5; i++){for (j = 1; j <= 5; j++){printf("*");}printf("\n");}return 0;}
*****
*****
*****
*****
#include <stdio.h>int main()
{for (int i = 1; i < 5; i++){for (int j = 1; j < 5 - i; j++){printf(" ");}for (int j = 0; j < 2 * i - 1; j++){printf("*");}printf("\n");}
}
     *
    ***************
#include <stdio.h>int main()
{int i, j, k;for (i = 1; i < 5; i++){//每行的空格数for (j = i; j < 5 ; j++){printf(" ");}//每行的数量for (k=0; k < 2 * i- 1; k++){printf("*");}printf("\n");//每次循环换行}
}

4.13 使用for循环打印9*9乘法表

请使用for循环,倒序打印9*9乘法表

#include <stdio.h>int main()
{int i, j;for (i = 9; i > 0; i--){for (j = 1; j <= i; j++){printf("%d*%d=%d\t", i, j, i*j);}printf("\n");}
}
#include <stdio.h>int main()
{int i, j;for (i = 9; i > 0; i--){for (j = 1; j <= i; j++){printf("%d*%d=%d\t", i, j, i*j);}printf("\n");}
}

4.14 结束语句之break语句

使用break语句时注意以下几点:
1、在没有循环结构的情况下,break不能用在单独的if-else语句中。
2、在多层嵌套中,一个break语句只跳出当前的循环。

需要中断不再继续训练

#include <stdio.h>int  main()
{int i;for (i = 1; i <= 10; i++){printf("运动%d次\n",i);if (i == 5){printf("哎呀!!坏了!肚子疼!");printf("停止训练....\n");break;}}printf("今天的训练到此结束。");return 0;}

任务:

找出0~50之间的所有素数,所谓的素数就是在只能被1和他本身整除的数字。

#include <stdio.h>int main()
{int m, n;for (m = 2; m <= 50; m++){for (n = 2; n < m; n++){if (m%n == 0)//什么条件下跳出当前循环break;//退出当前循环}if (m == n)printf("%d ",m);}
}

4.15 结束语句之continue语句

  • continue的作用是结束本次循环开始执行下一次循环。
  • break语句和continue语句的区别是:break是跳出当前的循环,continue是结束本次循环开始下一次循环。

任务:
计算1~20之间不能被3整除的数字之和

#include <stdio.h>int main()
{int m, n;for (m = 2; m <= 50; m++){for (n = 2; n < m; n++){if (m%n == 0)//什么条件下跳出当前循环break;//退出当前循环}if (m == n)printf("%d ",m);}
}
#include <stdio.h>int main()
{int i;for (i = 1; i <= 10; i++){printf("运球%d次\n",i);if (i == 5){printf("去接个电话\n");continue;}}printf("今天的训练到此为止。\n");return 0;
}

4.16 分支结构之switch语句

  • C语言提供了一种用于多分支选择的switch语句
  • 小明对自己每周的学习和生活制定了计划方案,每天应该干什么都详细规划。

switch语句的基本结构:

switch (表达式)
{case 常量表达式:执行代码块;break;case 常量表达式:执行代码块;break;case 常量表达式:执行代码块;break;default:执行代码块;
}
#include <stdio.h>int main()
{int day = 1;switch (day){case 1:printf("%s\n","学英语");break;case 2:printf("%s\n","学C语言");break;default:printf("%s\n","好好休息");break;}}

在使用switch语句时还应该注意以下几点:

  • 1、在 case后的各常量表达式的值不能相同,否则会出现错误.
  • 2、在case子句后面没有break;会一直往后执行一直遇到break,才会跳出switch语句。
  • 3、switch后面的表达式语句只能是整型或者字符类型。
  • 4、在case后,允许有多个语句,可以不用{}括起来
  • 5、各case和default子句的先后顺序可以变动,而不会影响程序执行结果。
  • 6、default子句可以省略不写。

任务:
小明参加期末考试,分数等级分为A-D,等级划分方式如下:
90<=分数<=100 ,等级为A。
80<=分数<90 ,等级为B。
60<=分数<80 ,等级为C。
分数<60 ,等级为D。
小明期末考试分数为87分,

没有弄懂的程序

#include <stdio.h>
int main()
{int score = 87; //考试分数为87分 switch (score){/*想想以下代码为什么用这种方式;这种方式的好处?*/case 10:case 9:printf("等级A");break;case 8:printf("等级B");//这里是不是缺点什么?            case 7:case 6:printf("等级C");//这里是不是缺点什么?  default:printf("等级D");break;}return 0;
}
#include <stdio.h>int main()
{int year, month, day,sum;printf("2008年8月8日");scanf("%d %d %d", &year, &month, &day);switch (month){case 1:  sum = 0;    break;case 2:  sum = 31;   break;case 3:  sum = 59;   break;case 4:  sum = 90;   break;case 5:  sum = 120;  break;case 6:  sum = 150;  break;case 7:  sum = 181;  break;case 8:  sum = 212;  break;case 9:  sum = 243;  break;case 10: sum = 273;  break;case 11: sum = 304;  break;case 12: sum = 334;  break;}if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){sum = sum + 1;}else{sum = sum;}sum = sum + day;printf("%d",sum);
}
#include <stdio.h>int main()
{int year = 2008;int month = 8;int day = 8;scanf("%d %d %d", &year, &month, &day);int sum ,flag;switch (month){case 1:  sum = 0;    break;case 2:  sum = 31;   break;case 3:  sum = 59;   break;case 4:  sum = 90;   break;case 5:  sum = 120;  break;case 6:  sum = 150;  break;case 7:  sum = 181;  break;case 8:  sum = 212;  break;case 9:  sum = 243;  break;case 10: sum = 273;  break;case 11: sum = 304;  break;case 12: sum = 334;  break;default:printf("一年当中只有12个月");break;}//计算天数sum += day;//当该年是闰年的时候,将状态位设置为1否则设置为0if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))flag = 1;elseflag = 0;//当需计算的日期是闰年并且需计算的月份大于2月份时,计算的天数自动加1if (flag == 1 && month > 2)sum++;printf("%d年%d月%d日是该年的第%d天,year,month,day,sum");return 0;
}

臭名远扬的goto语句

  • goto语句是一种无条件的分支语句,
goto语句的格式:
goto  语句标记

程序实现从控制台输出1-10,使用goto语句,实现当输出完3之后跳出循环体。

#include <stdio.h>int main()
{int sum = 0;int i;for (i = 1; i <= 100; i++){printf("%d\n",i);if (i == 3)goto LOOP;}LOOP:printf("结束for循环了...");
}

第4章 C程序结构语句相关推荐

  1. 第三章 C#程序结构 (3.3 循环结构)

    (1) while循环 当表达式为真,则执行下面的语句:语句执行完之后再判断表达式是否为真,如果为真,再次执行下面的语句:然后再判断表达式是否为真--就这样一直循环下去,直到表达式为假,跳出循环. [ ...

  2. 关于python中程序流程结构-Python语言程序设计(第4章:程序结构设计)

    4.1 算法 [1]计算机程序可视为数据结构和算法的集成,这种集成体现为以下两方面的内容:数据是程序实现的基础:算法要依靠程序来完成功能. [2]算法的特点:有穷性:确定性:零个或多个输入:一个或多个 ...

  3. 《Go语言圣经》学习笔记 第二章 程序结构

    Go语言圣经学习笔记 第二章 程序结构 目录 命名 声明 变量 赋值 类型 包和文件 作用域 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记,几乎是书上的内 ...

  4. c语言的程序结构语序,第3章 C语序结构.doc

    第3章 C语序结构 第三章 基本语句 本章要求: 1.表达式语句,空语句,复合语句 2.数据的输入与输出,输入,输出函数的调用 C语句概述 C程序的执行部分是由语句组成的. 程序的功能也是由执行语句实 ...

  5. 【JAVA SE】第三章 运算符、条件语句、switch结构、while循环、do…while循环、for循环、break关键字以及break和continue关键字

    第三章 运算符.条件语句.switch结构.for循环.break关键字以及break和continue关键字 文章目录 第三章 运算符.条件语句.switch结构.for循环.break关键字以及b ...

  6. itpt_TCPL 第四章:函数和程序结构

    2016.08.30 – 10.09 个人英文阅读练习笔记(极低水准). 08.30 第四章:函数和程序结构 函数能够将大型的计算任务分解为多个小型的计算任务,并且程序员还能够利用别人已经编写好的函数 ...

  7. python中pass语句的出现是为了保持程序结构的完整性_pass语句的出现是为了保持程序结构的完整性。( )_学小易找答案...

    [单选题]如果希望循环是无限的,我们可以通过设置条件表达式永远为( )来实现无限循环. [计算题]1.定理1.定理2的证明 2.课后习题2.3.2.4 [单选题]( )语句是else语句和if语句的组 ...

  8. 第一章 Java的基本程序结构

    Java 初探,本章先来了解一下 Java 里的基础知识. 一.一个简单的 Java 程序 我们先来看一个最简单的 Java 应用程序,它只发送一条消息到控制台窗口中: public class Fi ...

  9. c语言 判断一个图是否全连通_C语言:程序运行流程图与顺序结构语句

    程序运行流程图 流程图是描述问题处理步骤的一种常用图形工具,它是由一些图框和流程线组成的.流程图描述问题的处理步骤,形象直观,便于阅读.画流程图时必须按照功能选用相应的流程图符号,常用的流程图符号如下 ...

最新文章

  1. Mysql 日志系统 redo log 和 binlog
  2. 桌面时钟代码_iOS 14 制作自己的桌面 Widget
  3. 第四范式成为金融信创生态实验室首个AI合作伙伴
  4. c语言贪心算法背包问题_GGTalk 中的算法知识 01背包问题
  5. MySQL远程访问报错解决
  6. 充实你的素材库!10款免费的 PSD 素材下载
  7. 斐讯N1刷Armbian_5.62,无法自动获取到ip怎么办?
  8. centos php ssl,CentOS下在Nginx中添加SSL证书以支持HTTPS协议访问
  9. 端口镜像 流量过滤_在 AWS 云环境中滥用 VPC 流量镜像抓取网络流量
  10. 【LOJ10050】The XOR Largest Pair(字典树)
  11. Java数据类型占用内存最多的_java基础数据类型的内存占用
  12. 从狗屁不通文章生成器,到机器写作之路
  13. RK3566-LPDDR4-EVB EDP屏幕调试
  14. 数字麦克风PDM信号采集与STM32 I2S接口应用(三)
  15. elementui表格鼠标滑轮控制横向滚动
  16. 【实验技术笔记】Western Blotting 实验操作要点及数据分析
  17. 【JAVA】使用intellij IDEA将项目打包为jar包
  18. nfphosting注册教程,超低价VPS商家,年付4美元,支持支付宝
  19. Maven setting配置文件
  20. 关于什么都不会的阿里云服务器搭建及项目部署过程

热门文章

  1. java 多线程 并发实例_Java 多线程(并发)
  2. 转自JEP的@sun.misc.contended行为说明
  3. Android中opensl架构,Android OpenSL ES详解
  4. 入职百度QA测试岗,要个25K不过分吧?
  5. linux ipcs命令详解
  6. ubuntu更换内核版本
  7. Vuetify 框架
  8. 程序员老鸟的一篇文章
  9. 基于虹软(ArcSoft)实现人脸识别——Android版
  10. 虹软人脸识别使用教程