------ 知之博客 期待与您交流! -------

一 程序结构的分类

程序结构分为三类:
    1)顺序结构

顺序结构是最简单的程序结构,它是由若干个一次执行的处理步骤组成的。
    按照顺序依次执行A、B程序块。如图:
            
                          顺序结构

2)分支结构

根据给定的条件进行判断,由判断的结果决定执行两个分支中的一个分支。如图:当P为真时执行A程序块,否则执行B程序块。无论条件P是否成立,A和B程序块只能有一个被执行到,执行之后就离开了该选择结构。当B为空时,条件P为假时不执行任何操作。
         

分支结构

3)循环结构

又称为重复结构,给定条件成立时反复执行某一程序段。

C语言中主要的循环语句由三个:

(1)      while循环语句

(2)      do-while循环语句

(3)      for循环语句

流程图如下:

循环结构

二 分支结构

1.  if语句实现分支控制

一般形式(第一种形式):表达如果表达式为真,执行语句块1,否则不执行。

  If(表达式){语句块1;}后续语句;

原理:

先计算小括号中的表达式的值

真(1)

会执行大括号中的语句

假(0)

不会执行大括号中的语句

例一:猜数字游戏,输入一个数字,判断是不是5?如果是5打印“恭喜你”,如果不是5打印“很可惜”。

代码如下:

    #include <stdio.h><pre name="code" class="cpp">    int main(int argc, const char * argv[]) {//先定义变量int num=0;//提示用户输入一个数printf("请输入一个数字:\n");//接收用户输入的数scanf("%d",&num);//判断这个数是否等于5if (num == 5) {printf("恭喜你!\n");}//如果等于5    提示    恭喜你printf("num =%d\n",num);//如果不等于 5   提示很可惜if (num != 5) {printf("很可惜!\n");}return 0;}

2. if…else…语句及嵌套

格式一(无嵌套):

  if ... else .... 的分支结构if(表达式){语句块1;//如果表达式为真,会执行此处的代码}else{//如果表达式为假了,会执行此处的代码语句块2;}

格式二(嵌套):

  if ... else .... 的分支结构if(表达式){语句块1;//如果表达式为真,会执行此处的代码}else{//如果表达式为假了,会执行此处的代码语句块2;}

例一的改进:

  void test(){int num=0;    //先定义变量printf("请输入一个数字:\n");   //提示用户输入一个数scanf("%d",&num);         //接收用户输入的数//判断这个数是否等于5// num == 5 为假可能是大于5,也可能是小于5if (num == 5) {printf("恭喜你!\n");  //如果等于了5,提示恭喜你}else{printf("很可惜!\n");   //否则提示很可惜}}int main(int argc, const char * argv[]) {//先定义变量int num=0;//提示用户输入一个数printf("请输入一个数字:\n");//接收用户输入的数scanf("%d",&num);//判断这个数是否等于5// num == 5 为假可能是大于5,也可能是小于5if (num == 5) {printf("恭喜你\n");}else{//再判断,如果这个数大于5 提示大于5if (num > 5) {printf("大于5了\n");}else{//否则提示  小于5printf("小于5了\n");}}return 0;}

例二:输入一个属于0-100的成绩,按0-59(E),60-69(D),70-79(C),80-89(B),90-100(A) 分成几等。

条件:

分数>=0&&分数<=59   E

分数>=60&&分数<=69  D

分数>=70&&分数<=79    C

分数>=80&&分数<=89    B

分数>=90&&分数<=100   A

分数<0||分数>100      不合法

代码如下:

  #include <stdio.h>int main(int argc, const char * argv[]) {//定义变量,保存用户输入的分数int score=0;//提示用户输入一个分数printf("请输入一个分数:\n");//接收分数scanf("%d",&score);//校验分数是否合法(score<0||score>100)if (score<0 || score > 100) {printf("分数不合法!\n");}else{//当分数合法以后,再判断等级if (score<=59) {  //0-59 想反 60-100printf("E\n");}elseif(score<=69){  //60-69     70-100printf("D\n");}else if (score<=79){//70-79     80-100//Cprintf("C\n");}else if(score<=89){//80-89      90-100//Bprintf("B\n");}else{                          //90-100printf("A\n");}}return 0;}

3. Switch语句

格式:

   switch(表达式){case 常量表达式1: 语句1;case 常量表达式2: 语句2;case 常量表达式3: 语句3;case 常量表达式4: 语句4;case 常量表达式5: 语句5;case 常量表达式6: 语句6;default:printf("其他");}

例三:接受用户输入,控制台打印菜名

代码如下:

  #include <stdio.h>int main(int argc, const char * argv[]) {//提示用户点菜,1-7printf("本店开张,请点菜,请输入序号1-7\n");//定义变量,接收用户输入的内容int no;//接收用户输入的内容scanf("%d",&no);if (no<1 || no > 7) {printf("本店厨师还在写代码,还没时间更新菜谱\n");return 0;}//判断(switch)// 1 2 3 4 5switch(no){case 1: printf("玉米炒葡萄\n");case 2: printf("月饼炒辣椒\n");case 3: printf("爆炒妙脆角\n");case 4: printf("番茄炒卤蛋\n");case 5: printf("南瓜炒猪肝\n");case 6: printf("苹果炒西瓜\n");case 7: printf("天地无极\n");}return 0;}

当输入结果4的时候,结果如下:

  本店开张,请点菜,请输入序号1-74番茄炒卤蛋南瓜炒猪肝苹果炒西瓜天地无极

很明显不是我们想要的结果,那么问题出在哪里呢?首先我们了解一个概念:case穿透

某个case语句执行完成后,并没有结束,而直接向下执行其他的case语句这种现象就称之为case穿透

如何防止case穿透?

我们需要在每一个case语句结束之后,加上一句话:break; break  作用是结束switch语句。

例四:switch语句与if语句混合使用案例:实现简单的计算器

代码如下:

  #include <stdio.h>int main(int argc, const char * argv[]) {//定义变量保存用户输入的两个值  运算结果  输入的符号int num1,num2,op;float result=0.0f;//提示用户输入一个数printf("请输入第一个数:\n");//接收用户输入的第一个数scanf("%d",&num1);//提示输入运算符,然后在接收printf("请选择运算符:0.+  1.- 2.*  3./\n");//提示输入运算符,然后在接收scanf("%d",&op);if (op<0 || op >3) {printf("运算符不合法\n");return 0;}//提示输入另外一个数,然后再接收printf("请输入另外一个数:\n");//接收用户输入的第一个数scanf("%d",&num2);//开始计算//判断符号,进行计算switch (op) {case 0:result = num1+num2;break;case 1:result = num1-num2;break;case 2:result = num1*num2;break;case 3:result =num1/(float)num2;}printf("%d 和 %d运算的结果%.2f\n",num1,num2,result);return 0;}

三 循环结构

循环结构是程序中一种很重要的结构,其特点是,在给定条件成立是,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序称为循环体。循环结构简单来说就是:循环一次又一次的执行相同的代码块。

1. While循环

格式:

  while(表达式) {语句块;}

例五 计算1+2+3+.....+100 的和

代码如下:

  void test2(){//计算1+2+3+.....+100 的和//定义一个变量,存储当期执行的次数int i=1,sum=0;int n=0;//假设从键盘上输入一个数,计算1+2+3+....+n 的和printf("请输入一个数字:\n");//从键盘上接受一个数scanf("%d",&n);while (i<=n) {//用sum的值+i的值sum = sum+i;   //i = 1 sum = 1//0+1,   (0+1)+2//让循环条件为假的控制//        i=i+1;i++;}printf("1+2+3+....+%d=%d\n",n,sum);}int main(int argc, const char * argv[]) {test2();return 0;}

使用循环的过程中一定要注意防止死循环的出现。

2. do-while循环

语法格式:

  do{//循环体}while(条件);

注意点: do-while语句之后要有分号结束

例六   //1+2+3+....+100

代码如下:

  #include <stdio.h>int main(int argc, const char * argv[]) {int i=1,sum=0;do{//累加: 在上一次结果之上再加上某一个值sum+=i;i++;}while (i<=100);printf("sum =%d\n",sum);return 0;}

关于while和do while对比

1)当循环控制条件第一次判断不为假的时候while和 dowhile循环体执行的次数相同;

2)当循环控制条件第一次判断为假的时候while循环的循环体执行 0次,do while执行1次;

3. For循环

for循环使用的频率是比较高的,接下来我们就用一个实际例子来对for循环做详细介绍。

用for循环实现打印 1000次我爱你

构成循环有三个条件

1)控制条件 i<1000

2)循环体   printf("第%d次说:我爱你!\n",i+1);

3) 能够让控制条件为假的操作  i++

注意:

1、初始化语句只会被执行1次

2、当条件不满足的时候,循环就结束

代码如下:

  for(int i=0;i<1000;i++){printf("第%d次说:我爱你!\n",i+1);}

如果控制条件没有定义的话,就有可能构成死循环,部分代码块如下:

//for语句的死循环

  for(;;){printf("班长喜欢凤姐!\n");}printf("\n");

例七  for循环的嵌套使用。打印以下图形

*

***

*****

*******

*********

***********

代码如下:

  #include <stdio.h>int main(int argc, const char *argv[]) {//控制行数for (int i=1; i<=6; i++) {//控制空白for (int j=0; j<=6-i; j++) {printf(" ");}//控制 *for (int k=0; k<2*i-1; k++) {printf("*");}//打印回车printf("\n");}return 0;}

4. break和continue的区别

首先来看一个例子,根据这个例子找出break和continue的区别所在。

例八  把100~200之间的不能被3整除的数输出

  #include <stdio.h>int main(int argc, constchar * argv[]) {//把100~200之间的不能被3整除的数输出// i%3!=0// i%3==0 continue;for (int i=100; i<=200; i++) {if (i%3==0) continue;printf("%d\t",i);}printf("\n");return 0;}

运行结果为:

  100    101 103 104 106 107 109 110 112 113 115 116 118 119 121 122 124 125 127 128130  131 133 134 136 137 139 140 142 143145  146 148 149 151 152 154 155 157 158160  161 163 164 166 167 169 170 172 173 175 176 178 179 181 182 184 185 187 188 190 191 193 194 196 197 199 200

如果将例题中的continue换成break,那么运行结果为:

  100    101

由此可见break和continue的区别是:break用于跳出当前的循环(结束当前的循环),continue 作用,结束本次循环的剩余的语句,继续下一次循环。

iOS基础(c)—程序结构的分类相关推荐

  1. js笔记(一)js基础、程序结构、函数

    大标题 小节 一.js 基础 1. javascript的组成: 2. 运行js: 3. 打印信息: 4. 关键字var: 5. js中的数据类型: 6. NaN(not a number): 7. ...

  2. Go语言基础进阶—程序结构—包和文件

    基于Go语言圣经总结,适合有一定基础的同学,对于提升Go语言的掌握有很大的帮助 建议放大观看

  3. Go语言基础进阶—程序结构—类型

    基于Go语言圣经总结,适合有一定基础的同学,对于提升Go语言的掌握有很大的帮助 建议放大观看

  4. Go语言基础进阶—程序结构—赋值

    基于Go语言圣经总结,适合有一定基础的同学,对于提升Go语言的掌握有很大的帮助 建议放大观看

  5. Go语言基础进阶—程序结构—变量

    基于Go语言圣经总结,适合有一定基础的同学,对于提升Go语言的掌握有很大的帮助 建议放大观看

  6. Go语言基础进阶—程序结构—声明

    基于Go语言圣经总结,适合有一定基础的同学,对于提升Go语言的掌握有很大的帮助 建议放大观看

  7. Go语言基础进阶—程序结构—命名

    基于Go语言圣经总结,适合有一定基础的同学,对于提升Go语言的掌握有很大的帮助 建议放大观看

  8. GTK+编程入门(2)—GTK+程序结构

    GTK+编程入门(2)-GTK+程序结构(2015-7-23) 分类:GTK+   现在是晚上,快到睡觉时间了.把这小节完整看完是不可能了,索性就先开个头.这节的内容是通过一个最简单的GTK+程序的分 ...

  9. IOS基础知识-ARC,分类,Block

    IOS基础知识-ARC,分类,Block ARC快速入门 本小节知识点: 1.ARC机制判断 2.ARC快速使用 ARC基本概念 本小节知识点: 1.什么是ARC 2.ARC的注意点和优点 3.ARC ...

最新文章

  1. 【NOIP模拟赛】藏宝图 最小生成树
  2. 基础知识收藏(ASP.NET的OnClientClick与OnClick事件)-2013.07.10
  3. C++开发中的预处理器
  4. java爬虫-简单爬取网页图片
  5. CF1156D 0-1-Tree(换根DP)
  6. P4338-[ZJOI2018]历史【LCT】
  7. Netty工作笔记0034---Netty架构设计--线程模型
  8. linux mysql 端口 查看进程_Linux如何查看端口状态
  9. Python入门--集合元素的判断(in,not in集合元素的增加(add()update())集合元素的删除(remove(),discard(),pop(),clear())遍历(for in)
  10. Flask入门 表单Flask-wtf form原生 Bootstrap渲染(七)
  11. IDEA配置JDK版本
  12. html5 放风筝,北京最全的放风筝5大最佳地点,地广人稀,不用花钱
  13. linux cpu 降频,archlinux 给cpu降频
  14. awk 不一样的分隔符 - 空格分隔符
  15. Java从键盘上输入一个正整数n,然后计算1+2+...+n的结果并输出
  16. 郭为重读麦肯锡报告:神州数码转型七年之痒
  17. 判断键盘输入的数是几位数且是否是回文数
  18. 【转】一文读懂PCIe的进化史
  19. python除数为0报错_浅谈pandas dataframe对除数是零的处理
  20. WIFI驱动移植--udhcpc获取IP

热门文章

  1. const 修饰变量
  2. 怎么编辑pdf图片的大小以及透明度等
  3. 卷径计算详解(通过卷绕的膜长和膜厚进行计算)
  4. 面对互联网期权,互联网人的正确成长姿势
  5. 极客学院的前端课程(十三)
  6. 给你讲一个只有程序员才能听懂的笑话
  7. LCA(最近公共祖先)求解方法
  8. 博雅笔试记录:输入最小的数
  9. 电动汽车会是新的智能手机吗?
  10. 风高放火非官方的身法