实验3 分支语句和循环语句(1)
实验三
PART 1 验证性内容
§¹ 从键盘上输入3个数,让它们代表3条线段的长度,编写一个c程序判断这3条线段组成的三角形属于什么类型
(一般三角形、等腰三角形、等边三角形或不构成三角形)。程序源码(demo1)如下↓
#include <stdio.h> int main() {double a,b,c;scanf("%lf %lf %lf", &a, &b, &c);if(a+b>c && a+c>b && b+c>a) {if(a==b && a==c)printf("构成等边三角形\n");else if(a==b || a==c || b==c)printf("构成等腰三角形\n");elseprintf("构成一般三角形\n");}elseprintf("不能构成三角形\n");return 0; }
运行结果↓
◊ 思考: 把嵌套使用的if语句部分在软件环境中,替换demo1中的if部分,然后运行程序,输入不同边长数据进行测试验证,目前运行正常。
嵌套使用if语句时注意:C语言对if语句的规定是else总是与最近的一个没有被else匹配的if相配对,这里就要关注{}的准确使用,以免混乱逻辑顺序。
程序源码(demo1.1)如下↓
#include <stdio.h> int main() {double a,b,c;scanf("%lf %lf %lf", &a, &b, &c);if(a+b>c && a+c>b && b+c>a){if(a==b || a==c || b==c){if (a==b && a==c)printf("构成等边三角形\n");elseprintf("构成等腰三角形\n");}elseprintf("构成一般三角形\n");}elseprintf("不能构成三角形\n");return 0;}
运行结果↓
◊ 拓展 :把 demo 1中输入三边长并且判断三角形类型的代码放到while循环里,运行程序,观察结果,程序源码(demo 2)如下↓
/*这是在demo1.cpp的基础上行,增加了一小部分代码,可以循环判断多组数据 要终止输入和判断:按组合键Ctrl+D(同时按下Ctrl和D键),然后按回车键结束 */ #include <stdio.h> int main() {double a,b,c;printf("输入三角形三边:\n");while(scanf("%lf%lf%lf",&a,&b,&c)) {if(a+b>c && a+c>b && b+c>a) {if(a==b && a==c)printf("构成等边三角形\n");else if(a==b || a==c || b==c)printf("构成等腰三角形\n");elseprintf("构成一般三角形\n");}elseprintf("不能构成三角形\n");printf("\n输入三角形三边:\n");}return 0; }
运行结果↓ 右图是我在“按组合键Ctrl+D(同时按下Ctrl和D键),然后按回车键结束”之后出现的结果,
这样的结果会无限重复循环,只能强制结束程序,不是很明白要怎么终止程序¯\_(ツ)_/¯
右图是我在“0+回车键”或者“按组合键Ctrl+D(同时按下Ctrl和D键),然后按回车键结束”之后出现的结果,无限重复循环,只能强制结束程序,就不是很明白要怎么终止程序。
组合使用while和if结构可以连续输出这样真的很便捷,可以不断输入不断判断运行结果,可是不知道如何终止程序,甚至让它无限循环下去这样的结果真的不是很好_(:_」∠)_...
(我还是需要再多了解一些结束程序这一块的内容,继续摸索一下这个软件)
之后参照以下程序进行更改后还是没有结束程序,这里就很叫人困惑,求助(编程软件Xcode)
int x; while(scanf("%d",&x) != 0) { // 等价于while( scanf("%d",&x) != EOF )// 也等价于while( scanf("%d", &x) ) //... }
对于以下的更改,我认为是限定输入,如果输入不足三个数字那么在这里既可判定其不可构成三角形,简化程序运行。
while(scanf("%ld", &a) && scanf("%ld", &b) && scanf("%ld", &c) ){// ... }
§² 用scanf()函数输入一个百分制成绩(整型量),要求输出成绩等级A,B,C,D,E。
其中,90~100分为A,80~89分为B, 70~79分为C, 60~69分为D,60分以下为E。程序源码( demo3 )如下↓
/*《C语言程序设计教程学习指导》p122实验内容(2):输入百分制分数,测算并输出等级制分数这是一个综合使用while语句、多分支if语句和continue、break实现分数段判断的示例 运行程序,输入不同分数值进行测试,理解和巩固这些控制语句的用法 按下组合键Ctrl+D(同时按下Ctrl和D)结束判断*/ #include <stdio.h> int main() {int score; // 用于存放百分制分数char grade; // 用于存放等级制分数(取值'A', 'B','C','D', 'E')while(1) {printf("输入学生成绩: ");if(scanf("%d",&score) == 0) // 如果检测到没有成绩输入,则结束整个循环break;if(score<0 || score > 100) {printf("输入成绩有误!\n\n");continue; // 结束本次循环,开始下一次循环 }else if(score>=90 && score<=100)grade = 'A';else if(score>=80 && score<=89)grade = 'B';else if(score>=70 && score<=79)grade = 'C';else if(score>=60 && score <=69)grade = 'D';elsegrade = 'E';printf("等级为: %c\n\n", grade);}return 0; }
运行结果↓
在此次运行中很偶然的发现了退出运行的方法,只要输入的不是数字就可以退出运行¯\_(ツ)_/¯ 这样的退出方法不确定是程序还是软件设定,求助
回答问题:
1.结合程序demo5_1.cpp和demo5_2.cpp运行结果对比,总结在循环中使用控制语句continue和break, 其功能区别是什么?
答:“break” 不管是 for 循环,还是 while 循环,或者是 do…while 循环,都可以用 break 跳出来,但是 break 只能跳出一层循环。
当有多层循环嵌套的时候,break只能跳出“包裹”它的最里面的那一层循环,无法一次跳出所有循环。同样,在多层 switch 嵌套的程序中,
break 也只能跳出其所在的距离它最近的 switch。
“continue” 作用为结束本次循环,即跳过循环体中下面尚未执行的语句,然后进行下一次是否执行循环的判定。continue 不能在 switch 中使用,
除非 switch 在循环体中。此时 continue 表示的也是结束循环体的本次循环,跟 switch 也没有关系。
continue 语句和 break 语句的区别是:
continue 语句只结束本次循环,而不是终止整个循环。break 语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
而且,continue 只能在循环语句中使用,即只能在 for、while 和 do…while 中使用,除此之外 continue 不能在任何语句中使用。
2.结合程序demo6_1.cpp和demo6_2.cpp运行结果对比,回答:
在两层嵌套循环中,内层循环中如果出现continue,是否影响外层循环?
答:不影响
在两层嵌套循环中,内层循环中如果出现break,是否影响外层循环?
答:不影响
PART 2 补足程序,使得程序运行
编程找出5个整数中的最大数和最小数,并输出找出的最大数和最小数。
/*编程找出5个整数的最大数和最小数 《C语言程序设计教程学习指导》p122实验内容(3) */ #include <stdio.h> int main() {int number, max, min, n;n=1;printf("输入第%d个数: ", n);scanf("%d", &number);max = number;min = number;while(n < 5 ) { n++;printf("输入第%d个数: ", n);scanf("%d", &number);if(number > max )max = number;else if(number < min )min = number;}printf("最大数为: %d\n", max);printf("最小数为: %d\n", min);return 0; }
运行结果↓
改写for语句,程序源码如下↓
/*用for语句实现编程*/ #include<stdio.h> int main() {int number, max, min, n ; n = 1 ;printf ("输入第%d个数: ", n );scanf ("%d", &number );max = number;min = number;for ( n = 1; n < 5;){n++;printf ("输入第%d个数: ",n );scanf ("%d", &number);if (number > max )max = number;else if (number < min )min = number;}printf ("最大数为: %d\n", max);printf ("最小数为: %d\n", min);return 0; }
运行结果↓
以下是用do...whlie语句实现编程,程序源码如下↓
/*用do...while语句实现编程*/ #include<stdio.h> int main() {int number, max, min, n;n = 1;printf ("输入第%d个数: ", n );scanf ("%d", &number );max = number;min = number;do{n++;printf ("输入第%d个数: ",n );scanf ("%d", &number );if ( number > max )max = number;else if ( number < min )min = number;}while ( n < 5 );printf ("最大数为: %d\n", max );printf ("最小数为: %d\n", min );return 0; }
运行结果↓
这里是一个讲解while和do while的网页http://c.biancheng.net/c/while/
这里是一个讲解for循环的网页http://c.biancheng.net/view/308.html
总的网页还是在C语言中文网(好像我在每一篇实验里都推荐了这个网页(///▽///)真的有很多干货)
PART 3 编程练习
θ 编程输出101~200之间所有素数,并输出这一区间内素数个数,程序源码如下↓
#include <stdio.h> #include <math.h> int main() {int i , n , x ;x = 0 ;for(i = 101 ; i < 201 ; i++){for(n = 2 ; n < sqrt(i) ; n+=1){if(i%n == 0 )break;}if(n > sqrt(i)){printf("%4d",i);x+=1;}}printf("\n101~200之间共有%d个素数",x) ;return 0; }
运行结果↓
附错误的运行结果:
是在条件判断这里不同而造成结果的不同(¬_¬)
θ 编程打印输出如下图案,程序源码如下↓
#include<stdio.h> int main(){int line , star , blank , a , b ;for(line = 1 ; line <= 5 ; line+=1 ){star = 5 - line ;blank = 2 * line - 1 ;for (a = 1 ; a <= star ; a++ )printf (" ");for (b = 1 ; b <= blank ; b++ )printf("*");printf("\n");}return 0; }
运行结果如下↓
这里是一个倒置金字塔的程序源码↓
#include<stdio.h> int main () {int i ,j ;for ( i = 0 ; i < 5 ; i++ ){for ( j = 0;j < i ; j++ )printf(" ");for ( j = 0;j < (4-i) * 2 + 1 ; j++ )printf("*");printf("\n");}return 0 ; }
运行结果如下↓
附几个奇奇怪怪的星星:
(就是在for语句的不同位置加了个“;”(●°u°●) 」)
实验总结与体会
这次试验最后两个程序是完全需要自己编写的,每次上课听老师讲流程都感觉很简单,但到自己分析的时候就感觉怎么也顺不下来,
自己的流程图总是不可以很顺利的用C语言语句实现,需要找很多程序实例参考有关程序写法,不断运行之后从运行结果里面分析自己是哪里写出了问题 T^T...
然后渐渐纠正最终做出一个程序,过程中也暴露出自己对do while语句还不熟很熟悉,对循环的判断条件分析还欠妥,日后多多练习,不断纠正。
在这次实验的输入过程中我误关“我的随笔”这个页面好多次...真的十分感谢网页自动保存的功能,不用担心一下的手滑让辛辛苦苦的实验内容全丢掉了。
(每手滑关掉一次就会恢复一次,所以最后的我文末就出现了这么多次记录(⊙_⊙)真的恢复了好多好多次...)
最后感谢舍友耐心讲解才写出来素数的程序,感谢ʕ •ᴥ•ʔ ♥~
(之后的一周内我将进行互评环节,链接会以评论的形式附在这篇实验后,如果我在后期可以顺利的更新本篇实验的话就会直接加链接在最后面的(。・ω・。)
转载于:https://www.cnblogs.com/Anna0708/p/10720688.html
实验3 分支语句和循环语句(1)相关推荐
- Matlab变量、分支语句和循环语句
Matlab变量.分支语句和循环语句 一.Matlab的变量 1.变量的命名 Matlab的变量名由数字.字母和下划线组成,可是仅仅能由字母开头.大写和小写敏感,最大长度为63个字符.不能使用Matl ...
- python分支语句_Python中的分支语句和循环语句及案例
今天是清明假期的最后一天,依旧学习着 Python,老样子来写一篇博客.本篇博文介绍一下 Python 中的 if 条件语句.while 循环语句.for in 循环语句以及 break 和 cont ...
- C语言分支语句与循环语句较为全面的总结,快来看呀!!
分支语句和循环语句: 写在开篇:C语言其实算比较熟悉了,这里都是一些基础的总结,但感觉每次看都会有一些收获,也许这就是意义所在,冲冲冲!! 本章重点学习分支语句和循环语句的使用. 分支语句: if s ...
- python分支语句_Python语言基础分支语句、循环语句.ppt
* * 循环结构回顾 for循环 for 循环作为编程语言中最强力的特征之一 Python可以使用for语句循环遍历整个序列的值 for循环所做的概括为一句话: 于- 其中的每一个元素,做-事情 * ...
- C语言——分支语句和循环语句
目录 1.什么是语句 2.分支语句(选择结构) 2.1 if语句 2.2switch语句 3.循环语句 3.1while语句 3.1.1 语法 3.1.2 while中break和continue 3 ...
- 盘复分支语句和循环语句的那些知识
目录 1.分支语句 一.if语句 if语句的语法结构 多分支 悬空else 二.switch switch的语法结构 小结: 2.3种循环语句 1.while() 小结 2.for循环 for循环中的 ...
- python多分支语句实例_Python分支语句与循环语句应用实例分析
Python分支语句与循环语句应用实例分析 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: Python分支语句与循环语句应用实例分析.txt ] (友情提示:右 ...
- 【分支语句与循环语句】
分支语句与循环语句 一.分支语句 1.多分支语句 2.悬空else 3.switch语句 2.循环语句 2.1 while循环 2.2 getchar()和putchar() 2.3 for循环 2. ...
- C语言学习 2.分支语句与循环语句
文章目录 分支语句与循环语句 1. 什么是语句 2. 分支语句(选择结构) 1. if语句 1.1 if的书写形式 1.2 练习 2. switch语句 2.1 在switch语句中的break 2. ...
- 【C语言】分支语句和循环语句
大家好!我是保护小周ღ,本期为大家带来的是C语言的分支语句和循环语句,详细的介绍了 if(). switch() 这两种分支语句,以及while().do while ().for(),三种循环语句, ...
最新文章
- 慢SQL,压垮团队的最后一根稻草No.92
- Access denied for user 'root'@'localhost' 解决流程
- jQuery validate 如何清除remote验证的缓存 (在select验证时这个bug尤为明显)
- Java中用ClassLoader载入各种资源(类、文件、web资源)的方法
- python读取pdf表格_【Python 库】解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比...
- Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.
- 上传图片-服务端-创建文件系统服务工程
- CentOS 7.X 升级 Python 3.8.X
- Java注解研究之@Required
- [书籍推荐]《软件设计精要与模式(第2版)》-张逸——提高设计模式及软件设计的方法...
- commonJS — 数字操作(for Number)
- centos7下Jenkins管理员admin密码忘记后处理方法
- 【转】网页制作中的CSS+DIV:dl,dt,dd分别表示什么意思啊?请说明啊,谢谢有什么功能?...
- 机器学习基础(十六)—— bootstrap
- ASP.NET 2.0之HtmlInputFile控件使用小结
- linux ssh知识
- php 心愿墙系统源码,php开发|源码|微信留言板|微信表白墙|吐槽墙|心愿墙|2017V2.1版...
- 写文献综述的28个要点
- C语言实现创建游戏角色(包含文件写入)
- python function terminated_〔求助〕一份12.3M的txt文档用calibre转换格式失败