c语言程序流程控制(下)
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语言程序流程控制(下)相关推荐
- c 语言程序流程控制应用实验报告,程序流程控制实验报告.doc
.net程序设计实验报告 2011年 11 月 19日 学 号1008114082姓 名左雪敬时 间下午7-8节专 业计算机科学与技术班 级10级2班实验题目: 程序流程控制实验目的: 1:掌握常量和 ...
- c 语言程序流程控制应用实验报告,PLC可编程序控制器及应用课程实验报告
可编程序控制器及应用课程实验报告 可编程序控制器及应用课程实验报告 <可编程序控制器及应用>实验报告一 实验名称:PLC基本指令实验 1.实验目的与要求 开关量信号的边沿检测. 用PLS ...
- smali语言程序流程控制语法
选择结构(if-else) smali条件跳转分支语法 if-<条件> v0 v1,:cond_** // 如果v0<条件>v1成立,则跳转到:cond_**处的代码. if- ...
- 学习 尚硅谷_宋红康_第2章_Java基本语法(下):程序流程控制超详细课件
文章目录 程序流程控制 练习题 笔试题 彩票 结婚判断 switch-case结构的基本使用 练习题 程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组 合成能完成一定功能的 ...
- 第2章_Java基本语法(下):程序流程控制
文章目录 程序流程控制 练习题 笔试题 程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组 合成能完成一定功能的小逻辑模块. • 其流程控制方式采用结构化程序设计中规定的三种 ...
- C#面向对象程序设计课程实验一:实验名称:C#语言基础、程序流程控制
C#面向对象程序设计课程实验一:实验名称:C#语言基础.程序流程控制 实验内容:C#语言基础.程序流程控制 一. 实验目的 二.实验环境 三.实验内容 四.实验总结 实验内容:C#语言基础.程序流程控 ...
- c语言程序设计教程 许勇,C语言程序设计应用教程 教学课件 许勇 第3章 程序流程控制.pdf...
第3章 程序流程控制 3.1 结构化程序设计的概念 3.2 顺序程序设计 3.3 选择程序设计 3.4 循环程序设计 3.1 结构化程序设计的概念 C程序结构 C程序 源程序文件1 源程序文件 ...
- 一文带你深入理解【Java基础】· Java基本语法:程序流程控制
写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...
- Java笔记2.3——Java基本语法之程序流程控制
Java基础 Java基本语法(下):程序流程控制 目录 目录 Java基础 Java基本语法(下):程序流程控制 一.程序流程控制 1.理论 2.分支语句1: if-else结构 2.1.if-el ...
最新文章
- redisTemplate分布式锁演变、redission分布式锁实现!
- 简单的Windows资源管理器——Java版本
- 第四次Scrum编码冲刺!!!!
- react --- 搭建环境
- 《Java编程思想》10.6 匿名内部类奇怪的代码
- 全球IPv4地址正式耗尽,你知道吗?
- 一个毕设的建成——记录下我毕设途中的《SOP》
- Laravel 在Centos上的安装
- 台式机装mac系统_苹果电脑装双系统mac+win7图文教程
- 安卓虚拟键盘_微软双屏Surface Duo上的安卓应用体验:可瞬间变身笔记本电脑
- 计算机大学英语值最高的3项,计算机应用基础试卷
- 2060. 奶牛选美
- WCF编程系列(七)信道及信道工厂
- 高级商务办公软件应用【4】
- 网页视频播放器代码大全 + 21个为您的网站和博客提供的免费视频播放器
- 登陆豆瓣显示服务器开小差,豆瓣打不开
- hdu 5211 Mutiple
- 微信小程序 渲染层网络错误_渲染层网络层错误 微信小程序开发 - 云计算资讯 - 服务器之家...
- 四、s3c2440 裸机开发 通用异步收发器UARN
- JavaScript DOM加强(佟刚)