c语言程序流程控制

  • 嵌套
    • switch分支结构
      • 语法
      • 例题
      • switch细节
      • 练习
    • switch与if语句的比较
    • 循环控制
      • for循环
      • 练习题
      • while循环控制
      • do while 循环
      • 多重循环控制
      • 跳转控制语句-break
      • 跳转控制语句-continue
      • 跳转控制语句-goto
      • 跳转控制语句-return

嵌套

switch分支结构

语法

//A到n必须是常量名switch(表达式){case 'A' :语句块;break;//switch匹配到A,执行这条语句case 'B' :语句块;break;//switch匹配到B,执行这条语句case 'C' :语句块;break;//switch匹配到C,执行这条语句......case 'n' :语句块;break;default :语句块;//switch没有匹配到上面任何一条语句,执行这条语句}

例题

请编写一个程序,该程序可以接收一个字符,比如: a,b,c,d,e,f,g。a表示星期一,b表示星期二…根据用户的输入显示相依的信息。要求使用switch语句完成

#include<stdio.h>
void main(){char c1;printf("请输入一个字符(a,b,c,d,e,f,g):");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("请输入正确的字符");break;} printf("\n程序结束!");
}

switch细节

switch应该注意以下5点
1.switch语句中的expression是一个常量表达式
2.case子句中的值必须是常量,而不能是变量
3.default子句是可选的,当没有匹配到case时,执行default
4.break语句用来在执行完一个case分支后使程序跳出switch语句块
5.如果没有写break,会执行下一个case 语句块,知道遇到break 或执行到switch结尾,这个现象称为穿透

练习

1.使用 switch 把小写类型的 char型转为大写(键盘输入)。只转换a, b, c, d, e.其它的输出“other”。

#include<stdio.h>
void main(){char c1;printf("请输入一个字符(a,b,c,d,e):");scanf("%c",&c1);switch(c1){case 'a':printf("A");break; case 'b':printf("B");break; case 'c':printf("C");break; case 'd':printf("D");break; case 'e':printf("E");break; default:printf("other");break;}
}


2.对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。(注:输入的成绩不能大于100)。

#include<stdio.h>void main(){  double score;printf("请输入你的成绩:");scanf("%lf",&score);switch((int)(score/60)){ //用除取整,大于60就取1,小于60就取0 case 0:printf("不合格");break; case 1:printf("合格");break; default:printf("输入的成绩有误");break;}
}


这里还有一个小小的问题就是当我们输入大于100,小于120的数,会输出合格。怎么办呢?在给一层判断,也就是嵌套。

#include<stdio.h>void main(){  double score;printf("请输入你的成绩:");scanf("%lf",&score);if(score>=0 && score<=100){switch((int)(score/60)){ //用除取整,大于60就取1,小于60就取0 case 0:printf("不合格");break; case 1:printf("合格");break; default:printf("输入的成绩有误");break;}
}else{printf("输入的成绩有误");}
}


3.根据用于指定月份,打印该月份所属的季节。(3,4,5春季,6,7,8夏季,9,10,11 秋季,12,1,2冬季)。

#include<stdio.h>
void main(){int month;printf("请输入一个月份(1~12):");scanf("%d",&month);switch(month){case 3: //后面不写break,会穿透执行下面的语句,所以输入3或者4或者5都会打印春季 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;default:printf("请输入月份1~12");break;}
}


4.根据用户输入显示对应的星期时间(char[ ]),如果“星期一”,显示“干偏豆角”如果“星期二”,显示“醋溜土豆”如果“星期三”,显示“红烧狮子头”如果“星期四”,显示“油炸花生米”如果“星期五”,显示“蒜蓉扇贝”如果“星期六”,显示“东北乱炖”如果“星期日”,显示“大盘鸡”。不是输入星期几就输出“请输出入确星期时间”

#include<stdio.h>
#include<stdlib.h> void main(){   int a;printf("请输入星期几(1~7):");scanf("%d",&a);switch(a){case 1 :printf("干煸豆角");break; case 2 :printf("醋溜土豆");break; case 3 :printf("红烧狮子头");break; case 4 :printf("油炸花生米");break; case 5 :printf("蒜蓉扇贝");break; case 6 :printf("东北乱炖");break; case 7 :printf("大盘鸡");break; default:printf("请输出入确星期时间");break;}
}

switch与if语句的比较

如果判断的具体数值不多,而符合整型、枚举类型。虽然两个语句都可以用,建议使用switch
其他情况:对区间判断,对结果为真假的判断,使用if,if的使用范围广

循环控制

for循环

基本介绍:让你的代码可以循环的执行

基本语法: for( 循环变量初始化 ; 循环条件 ; 循环变量迭代 ){ 循环操作(多条语句); }

案例:打印5遍“你好!”
原始方法就直接打印5遍,代码比较臃肿,而且如果要打印更多遍那代码量就太大了。我们可以用循环。

#include<stdio.h>void main(){printf("你好!\n");printf("你好!\n");printf("你好!\n");printf("你好!\n");printf("你好!\n");
}


用for循环

#include<stdio.h>void main(){int i;for(i=1;i<=5;i++){printf("\n你好!");}
}


注意事项和细节说明:
1.循环条件是返回一个表示真假的表达式。

2.for(;循环判断条件;)中的初始化和变量迭代可以不写(写到其他地方),但是两边的分号必须写。
案例

#include<stdio.h>void main(){int i=1;for(;i<=5;){printf("\n你好!");i++;}
}

3.循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。

#include<stdio.h>void main(){int i;int j;for(i=0,j=0;i<=3;i++,j+=2){printf("\n i=%d j=%d",i,j);}
}

练习题

打印 1~100之间所有是9的倍数的整数的个数及总和[使用for 完成]。

#include<stdio.h>void main(){int i;int j;int count=0;int sum=0;for(i=1;i<=100;i++){j =i%9;if(j==0){count=count+1;sum=sum+i;}}printf("count=%d sum=%d",count,sum);
}

while循环控制

基本语法

循环变量初始化;while(循环条件){ 循环体; 循环变量迭代; }
循环条件是返回一个表示真假的表达式
while循环是先判断再执行语句

案例:使用while循环完成输出5遍你好!

#include<stdio.h>void main(){int i=1;while(i<=5){printf("你好!\n");i++; }
}

do while 循环

基本语法

循环变量初始化; do { 循环体; 循环变量迭代;} while( 循环条件);
循环条件是返回一个表示真假的表达式

注意:do while 后面有一个分号,不能省略
do while 循环是先执行,后判断。
案例:使用do…while循环完成输出5遍你好!

#include<stdio.h>void main(){int i=1;int max=5;do{printf("你好!\n");i++; }while(i<=max);
}

多重循环控制

多重循环控制介绍:
1.将一个循环放在另一个循环体内,就形成了循环嵌套。其中,for ,while ,do…while均可以作为外层循环和内层循环。【建议一般使用两层,最多不要超过3层】,如果嵌套循环过多,会造成可读性降低。
2.实质上,循环嵌套就是把内层循环当成外层循环的循环体,当只有内层循环的循环条件为flase时,才会跳出内层循环,才可结束外层的当前循环,开始下一次循环。
3.假设外层循环次数为m次,内层为n次,则内层循环实际上需要执行m*n次

例题
(1)统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。

#include<stdio.h>void main(){double TotalScore=0.0;//每个班总分 double score=0.0;//学生成绩double all;//所有班级平均分 int i,j;for(i=1;i<=3;i++){//3个班,所以要 i 不能超过 3//每次一个班级平均分后要清0 TotalScore=0.0;for(j=1;j<=5;j++){//5个学生,所以要 j 不能超过 5printf("\n请输入第%d班级的第%d学生的成绩:",i,j);scanf("%lf",&score);TotalScore =TotalScore + score;//一个班级的总成绩 }all = all + TotalScore;//所有班级总成绩 double TL = TotalScore/5;//班级平均分 printf("\n第%d个班级的平均分=%.2f",i,TL); }//输出所有班级的成绩double all1 = all/3;printf("\n所有班级的 平均分=%.2f",all1);
}


(2)统计三个班及格人数,每个班有5名同学。

#include<stdio.h>void main(){double score=0.0;//学生成绩int count;//及格人数 int i,j;for(i=1;i<=3;i++){//3个班,所以要 i 不能超过 3for(j=1;j<=5;j++){//5个学生,所以要 j 不能超过 5printf("\n请输入第%d班级的第%d学生的成绩:",i,j);scanf("%lf",&score);if(score>60){count +=1;} }}printf("%d",count);
}

(3)打印出九九乘法表

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


(4)打印金字塔
打印实心金字塔

#include<stdio.h>void main(){int i,j,k,m;scanf("%d",&m);for(i=1;i<=m;i++){for(k=1;k<=m-i;k++){//打印空格,空格数=总层数-1 printf(" ");}for(j=1;j<=2*i-1;j++){printf("*");}printf("\n");}
}


打印空心金字塔

#include<stdio.h>void main(){int i,j,k,m;scanf("%d",&m);for(i=1;i<=m;i++){for(k=1;k<=m-i;k++){//打印空格,空格数=总层数-1 printf(" ");}for(j=1;j<=2*i-1;j++){//进行判断是该输出*还是该输出空格 //第一层和最后一层全打,中间的只打首尾 if(j==1 || j==2*i-1 || i==m){printf("*");}else{printf(" ");}}printf("\n");}
}


(5)打印菱形

#include<stdio.h>void main(){int i,j,k,m;scanf("%d",&m);for(i=1;i<=m;i++){for(k=1;k<=m-i;k++){//打印空格,空格数=总层数-1 printf(" ");}for(j=1;j<=2*i-1;j++){//进行判断是该输出*还是该输出空格 //第一层和最后一层全打,中间的只打首尾 if(j==1 || j==2*i-1){printf("*");}else{printf(" ");}}printf("\n");}for(i=m-1;i>=0;i--){for(k=m-i;k>=1;k--){//打印空格,空格数=总层数-1 printf(" ");}for(j=2*i-1;j>=1;j--){//进行判断是该输出*还是该输出空格 //第一层和最后一层全打,中间的只打首尾 if(j==1 || j==2*i-1){printf("*");}else{printf(" ");}}printf("\n");}
}

跳转控制语句-break

break语句用于终止某个语句块的执行,一般使用在switch或循环中。

基本语法: {.... break ; ..... }

例题:实现登录验证,有三次机会,如果用户名为"张无忌”,密码"888”提示登录成功,l否则提示还有几次机会,请使用for循环完成I。

#include<stdio.h>
#include<string.h>void main(){int change=3;int loginCount=change; char name[10] = "";char pwd[10] = "";int i;for(i=1;i<=loginCount;i++){printf("\n请输入用户名:");scanf("%s",name);//字符组不要&printf("\n请输入密码:");scanf("%s",pwd);//判断字符串相同使用strcmpif(strcmp("云云豆酱",name)==0 && strcmp("123",pwd)==0){printf("登入成功");break; }else{change--;printf("你还有%d登入机会",change);}
}
}

跳转控制语句-continue

continue语句用于结束本次循环,继续执行下一次循环
基本语法: {.... continue ; ..... }

注意事项和细节说明:continue语句,只能配合循环语句使用,不能单独和switch/if使用
案例
(1)打印0到30以内不是3的倍数的数

#include<stdio.h>void main(){int i;for(i=1;i<=30;++i){int a=i%3; if(a==0){continue;//这里是返回到for循环进行i+1操作在做下面操作}else{printf("i=%d\n",i);}}
}


(2)从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序【使用for 循环﹐break,continue完成】【positive正数,negative 】。

#include<stdio.h>void main(){int positive=0;//保存正数个数 int negative=0;//保存负数个数 int num=0;for(;;){printf("请输入数:");scanf("%d",&num);if(num==0){break;} if(num>0){positive++;continue; }else{negative++;}}printf("正数个数=%d,负数个数=%d",positive,negative);
}


(3)某人有100,000元,每经过一次路口,需要交费,规则如下:
当现金>50000时,每次交5%
当现金<=50000时,每次交1000
编程计算该人可以经过多少次路口,使用while break方式完成。

#include<stdio.h>void main(){int count=0;//路口数量int money=100000;//现有的钱 while(1){//钱小于1000,直接退出 if(money<1000){break;}if(money>50000){money = money*0.95;}else if(money<=50000){money = money - 1000;}count++;} printf("100000元 可以经过%d 个路口 剩余%d 元",count,money);
}

跳转控制语句-goto

C语言的goto语句可以无条件地转移到程序中的指定行
goto语句通常与条件语句配合使用
在C语言中一般不主张使用共同语句,以免造成程序流程的混乱,使理解和调试程序都产生困难

基本语法: goto label ...... label :statement

案例

#include<stdio.h>void main(){printf( "start\n");goto lablel; //lable1称为标签printf("ok1\n");printf("ok2\n");lablel:printf("ok3\n");printf("ok4\n");
}//l输出ok3 和ok4

跳转控制语句-return

return是返回值语句。

c语言程序流程控制(下)相关推荐

  1. c 语言程序流程控制应用实验报告,程序流程控制实验报告.doc

    .net程序设计实验报告 2011年 11 月 19日 学 号1008114082姓 名左雪敬时 间下午7-8节专 业计算机科学与技术班 级10级2班实验题目: 程序流程控制实验目的: 1:掌握常量和 ...

  2. c 语言程序流程控制应用实验报告,PLC可编程序控制器及应用课程实验报告

    可编程序控制器及应用课程实验报告 可编程序控制器及应用课程实验报告 <可编程序控制器及应用>实验报告一 实验名称:PLC基本指令实验 1.实验目的与要求 开关量信号的边沿检测. 用PLS ...

  3. smali语言程序流程控制语法

    选择结构(if-else) smali条件跳转分支语法 if-<条件> v0 v1,:cond_** // 如果v0<条件>v1成立,则跳转到:cond_**处的代码. if- ...

  4. 学习 尚硅谷_宋红康_第2章_Java基本语法(下):程序流程控制超详细课件

    文章目录 程序流程控制 练习题 笔试题 彩票 结婚判断 switch-case结构的基本使用 练习题 程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组 合成能完成一定功能的 ...

  5. 第2章_Java基本语法(下):程序流程控制

    文章目录 程序流程控制 练习题 笔试题 程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组 合成能完成一定功能的小逻辑模块. • 其流程控制方式采用结构化程序设计中规定的三种 ...

  6. C#面向对象程序设计课程实验一:实验名称:C#语言基础、程序流程控制

    C#面向对象程序设计课程实验一:实验名称:C#语言基础.程序流程控制 实验内容:C#语言基础.程序流程控制 一. 实验目的 二.实验环境 三.实验内容 四.实验总结 实验内容:C#语言基础.程序流程控 ...

  7. c语言程序设计教程 许勇,C语言程序设计应用教程 教学课件 许勇 第3章 程序流程控制.pdf...

    第3章 程序流程控制 3.1 结构化程序设计的概念 3.2 顺序程序设计 3.3 选择程序设计 3.4 循环程序设计 3.1 结构化程序设计的概念 C程序结构 C程序 源程序文件1 源程序文件 ...

  8. 一文带你深入理解【Java基础】· Java基本语法:程序流程控制

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  9. Java笔记2.3——Java基本语法之程序流程控制

    Java基础 Java基本语法(下):程序流程控制 目录 目录 Java基础 Java基本语法(下):程序流程控制 一.程序流程控制 1.理论 2.分支语句1: if-else结构 2.1.if-el ...

最新文章

  1. redisTemplate分布式锁演变、redission分布式锁实现!
  2. 简单的Windows资源管理器——Java版本
  3. 第四次Scrum编码冲刺!!!!
  4. react --- 搭建环境
  5. 《Java编程思想》10.6 匿名内部类奇怪的代码
  6. 全球IPv4地址正式耗尽,你知道吗?
  7. 一个毕设的建成——记录下我毕设途中的《SOP》
  8. Laravel 在Centos上的安装
  9. 台式机装mac系统_苹果电脑装双系统mac+win7图文教程
  10. 安卓虚拟键盘_微软双屏Surface Duo上的安卓应用体验:可瞬间变身笔记本电脑
  11. 计算机大学英语值最高的3项,计算机应用基础试卷
  12. 2060. 奶牛选美
  13. WCF编程系列(七)信道及信道工厂
  14. 高级商务办公软件应用【4】
  15. 网页视频播放器代码大全 + 21个为您的网站和博客提供的免费视频播放器
  16. 登陆豆瓣显示服务器开小差,豆瓣打不开
  17. hdu 5211 Mutiple
  18. 微信小程序 渲染层网络错误_渲染层网络层错误 微信小程序开发 - 云计算资讯 - 服务器之家...
  19. 四、s3c2440 裸机开发 通用异步收发器UARN
  20. JavaScript DOM加强(佟刚)

热门文章

  1. 关于热是什么与人体怎么感受到热的笔记
  2. E4手环获取数据步骤
  3. AutoML与NAS
  4. SpringBoot整合腾讯云COS对象存储实现文件上传
  5. 正本清源!!!!!!:HWDB1.1数据集.gnt转换成.png
  6. 廖雪峰python教程笔记:装饰器
  7. 大学极域电子教室控屏100%脱离控屏
  8. 三部曲简史mobi_尤瓦尔.赫拉利简史三部曲(电子书)
  9. 阿里天蝎计划 服务器部署效率提升10倍
  10. LDO(低压差线性稳压器)选型小结