付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3.7 switch语句及其典型应用,公历历法的来龙去脉switch :开关,电闸,转换;使用 switch语句时涉及到以下几个单词:case:事情,案例,情形,场合;平时我们聊天说“小事一桩时偶尔也说成是“小case;break:暂停,打破,违犯,中断,超过,突变;default:默认值,缺省值,食言,不履行责任,律缺席switch语句在程序中的使用语法格式如下:switchncase n1:语句 1;语句 2;.语句 m1; break;case n2:语句1;语句 2;语句 m2; break;casenm :语句1;语句2;语句 m3; break;default:语句1;语句 2;语
2、句 mm; break;switch语句可根据语句中n的不同值执行其后大括号内的相应语句.局部执行流程如下所示.switch(n)如果口等于门2,nli 语句 L> case n2; 语句L语句售.语句ml q break t -5 语句2;语句m2i breakj,如果门等于吗case陋:语句1,堂g加近七语句L<语句2:语句break;->语句2 5语句nun. break i-5switch语句中的n值仅限于整数或字符两者根本等效而不能是实数;例3.7_1:从键盘输入一个简单的数学表达式,如 35+52;计算并显示该表达式的值.例如输入 35+52/,那么输出:35+5
3、2=87;输入 35-52/,那么输出:35-52=-17 ;输入 35*52/,贝U 输出:35*52=1820;分析:我们首先建立一个名称为switch.c的C程序文件.用一个字符变量c来存放运算符(' + '、'、*'、'/、',再定义三个整型变量分别用来存放两个操作数及运算结果;用switch语句实现,程序代码如下开始为粗代码,后面为细代码,输入时先粗后细#include<stdio.h> main()int a1,a2,a3;char c1;scanf("%d%c%d",&a1,&c1,&
4、amp;a2); switch()#include<stdio.h> main() ( int a1,a2,a3;/1 char c1;/2 scanf("%d%c%d,&a1,&c1,&a2);3 switch( c1 )/4 /5 case '+' : a3=a1+a2; printf("%d+%d=%dn",a1,a2,a3); break;/6 case '-' : a3=a1-a2; printf("%d-%d=%dn",a1,a2,a3); break;/7 cas
5、e '*' : a3=a1*a2; printf("%d*%d=%dn",a1,a2,a3); break;/8 case '/' : a3=a1/a2; printf("%d/%d=%dn",a1,a2,a3); break;/9 case '%' : a3=a1%a2; printf("%d%d=%dn",a1,a2,a3); break;/10 default: printf("Error n");/11 /12 ) 程序第六行(/6)中的case与其后的字符(
6、加号)之间要用空格隔开;一定要写成如下所 示正确形式: case 1'+': printf("%d+%d=%dn",a1,a2,a3); break;/6(空格不能漏掉)注意程序第十行(/10)中打印函数printf双引号内的表达式是:d%d=%d ;而不是:d%d=%d ;读者可以试一下两者输出的区别(符号在C语言中单独使用时有特殊含义,为了在字符串中输出一个符号,C语言中只能用%来表示,其它特殊字符的特殊输出方式可参考本书结尾处附录中相应内容);运行程序,输入相应的表达式(如35+45/);即可计算并显示表达式的值(注意输入时不能夹杂空格,如不能错误的输
7、入为35匚十 - 45/,由于空格也是字符,结合程序第三行(/3 )的扫描语句知道,如果 35和加号(+ )之间有空格那么字符变量c1被赋予了空格字符而不再是加号字符了).当输入错误运算符(不属前五种情况之一者)时, switch语句 就执行default缺省分支. 程序执行流程如下所示.Sine ludB<Etdi c. h>第六行代码T第七行代码?W 第八行代码1/%i,f第十行代码“第九行代碣"I电*13结束第11行代玛L1DVchar cl:/2wwcgf 口将也dftal,也c 1也2); ffZswitch(cl)/4C=-f +'以上情况都不是C语言
8、中有的字符输出格式比拟特殊,如符号'的printf函数输出格式为:%;双引号"对应的printf函数输出格式为:;单引号'对应的printf函数输出格式为:;反 斜杠对应的printf函数输出格式为:;这些特殊符号不经常用,读者作为一般性了解即可参考本书末尾的附表2.运行程序,分别输入以下数据:35+45/ , 那么结果为 35+45= 80 ; 35 45/,那么结果为 35-45=- 10 ;35*45 / ,那么结果为35*45 = 1575 ; 1 LJ /2/,那么结果为 Error 想一想为什么;1/2/ ,那么结果为 1/2=0 ; 1%2/ ,那么结果
9、为 1%2=1 ; 35/45/ ,那么结果为 35/45 = 0 ; 35%45/ ,那么结果为35%45= 35 如图3_21所示;注意百分号在 C语言中表示整数之间 的整除取余运算,而两个整数之间直接相除时小数局部被硬性舍弃;图3_21 :注意整数之间直接相除时的结果本程序可以方便的验证前面第二章中的首同尾合十整数之间相乘时的速算法那么,为此,分别输入以下表达式:12*18/; 23*27/; 36*34/; 45*45/; 56*54/; 67*63/; 78*72/;89*81 /;那么结果分别如图 3_22所示,结果首同尾合十心算法那么可见两者十分吻合.13*18=216陛
10、3;$3 口/y k图3_22:用本程序验证首同尾合十整数相乘时的心算法那么本程序运行后输入数据时,数据之间不能夹杂空格,如1/2/不能错误的输入为1 一 / 一 2/;否那么就会发生错误;这一点可以通过程序调试的方法来验证,下面两个图说明了单步执行程序时不同输入数据方法带来的变量不同赋值结果.图3_23:输入数据1/2/时的情况从图3_23可以看出,变量al赋值正确,变量cl被错误的赋值了空格字符,而变量 a2由于 数据的扫描格式 d与数据类型字符/不符而没有被赋值;图3_24:输入数据1/2/时的情况从图3_24可以看出,变量 al、cl和a2都被赋予了正确的数据;对于整数和实数型数据,用
11、scanf函数扫描数据时它们的输入格式都是:数据之间用空格隔开,但是如果有字符型数据,那么一定要意识到空格也是字符,因此数据之间可能是紧密相连而不能再以空格隔开了.例3.7_2:从键盘输入年份和月份,输出该月对应的天数.分析:一年有12个月,大月31天,共7个大月:1、3、5、7、8、10、12;小月30天,共 4个小月:4、6、9、11; 2月份很特殊,闰年 29天,平年28天;为什么2月份只有28 天或29天,而其它月份不是 30天就是31天哪原来公历的前身是公元前46年古罗马皇帝儒略恺撒创始的,恺撒当皇帝时,当时的历法与天象气候等相差三个月之多冬天变成了春天,春天变成了夏天,夏天变成了秋
12、天, 秋天成立冬天,于是他采纳了一位埃及天文学家的建议,废除旧历,公布一种完全的太阳 历,即儒略历.规定一年 365.25天,每年12个月,单月31天,双月30天,全年共366天6 X 31+6X 30=366,二月是双月当然也是 30天.由于平年每年只有 365天,因此平年需要去 掉一天,当时罗马判处死刑犯都是在每年的二月份执行的,为了使这个不吉利的月份时间短一些,恺撒就决定平年里在二月份去掉一天.恺撒认为自己伟大,就把他出生的月份 7月改成自己的名字,七月的英文JULY,即儒略.后来,恺撒的儿子奥古斯都作了皇帝,他发现恺撒出生在7月,是大月,而自己出生在 8月,却是小月.为了和恺撒保持同等
13、尊严,奥古 斯都就决定从不吉利的二月份抽出一天补在8月份,使8月份也变成了大月,并把8月份也改为自己的名字,八月的英文AUGUST,即奥古斯都.从此二月份又少了一天,即平年为28天,闰年为29天.同时,由于8月由小月改为大月,8月后面的月份也要随之改变,改为单 月为小月,双月为大月.这样一来,一年中大月是 1 3、5 7、8、10 12月,小月是4、6、 9、11月,2月份平年为28天,闰年为29天.这种设置方法一直延续到现在.而现在的国际通行历法公历是罗马教皇格里高利十三世在1582年公布施行的,是根据古罗马的儒略历修订而成的,最早称格里历,在中国叫阳历.儒略历的平均年长是365.25日,与
14、实际年长长度 365.2422日相差0.0078日.从儒略历公布执行公元前46年至U 16世纪末,累计误差已有1伏.为彻底消除这一差值,罗马教皇格里高利十三世决定对儒略历时间进行调整,并新增了一条置闰法那么:公元年数被4整除的仍为闰年,但逢百之年只能被400整除者才是闰年.这样在 400年中比原儒略历少 3个闰年少3天,每年的平均长度为 365.2425日这与我国元朝时郭守敬在“授时历里提出的年长刚好相等!,与地球绕太阳转一周的实际年长长度 365.2422日十分接近,理论上 1万年的累计误差不超过 3天.公历先 在天主教国家使用,后推行到新教国家,20世纪初全世界普遍采用.我国辛亥革命以前使
15、用的一直是阴历郭守敬的授时历没被采用,真是可悲!,又叫农历或夏历,它是以月亮圆缺变化的周期为依据,一个月约29.5天,12个月为354天或355天,为了协调农历与天象气候等的关系,古人采用了一种“十九年置七闰的方法,即每19年中设7个闰年,闰年比平年多一个月,即农历的闰年有13个月,共384天或383天.我国于辛亥革命后的191在孙中山下令采用公历,同时兼用中华民国纪年,194W中华人民共和国建立后采用公历纪年,终止中华民国纪年.其实日历是非常复杂的,有人建议取消大小月份的说法,重新规定每月为30天,那么12个月就是30X 12= 360天,外加5天的共休假类似于我国的春节,并把闰年多出的一天
16、也 加在年终的休假里.这样我们买的日历年年都可以重复使用了,全世界将节省很多重复印刷日历的纸张.只可惜这个合理化建议在联合国大会上投票公决时失败了 !我国阴历虽然被废除了,但由于其源远流长, 特别是很多节气如春节,端午节,中秋节等,都是按阴历确定的,因此阴历至今在民间还广为流传.官方采用阳历,民间的阴历还在起作用,这给整个社会造成了很大的不便,例如有时间阳历元月十几号过春节,有时间阳历二月十几号过春节,早晚相差1个月之多,致使学校的春季和秋季两个学期不但不等长阳历9月份开学是法定的,春节时间飘摇不定放寒假也是法定的,而且有时差距1个月之多,其影响可想而知;再例如工业生产,元月份和二月份的产量统
17、计数字与去年同期相比 失去意义,由于去年春节假期在元月份,而今年有可能在二月份里中途停产过春季.下面我们编写一个 C程序,要求通过键盘输入年份和月份,计算并输出该月对应的天数. 建立一个名称为 year.c的C程序,在标准框架里面填写如下代码: #include<stdio.h>main(int year,month,days; /1scanf("%d%d",&year,&month); /2switch(month) /3/4case 1: /5case 3: /6case 5: /7case 7: /8case 8: /9case 10: /
18、10case 12:days=31; break;/11case 4: /12case 6: /13case 9: /14case 11:days=30 ;break;/15 case 2: /16ifyear%4=0 && year%100!=0|year%400=0/ 17days=29;/18 else days=28; break; /19 default: days=0; /20 /21 ifdays!=0 /22 printf"days=%dn",days; /23 else /24printf"Data Error'n" /25 注意第五行/5中case与整数1之间要用空格隔开:case J 1 :而不能连着写:case1 : 解释如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 砖瓦装出窑工班组管理测试考核试卷含答案
- 聚酰胺装置操作工操作评优考核试卷含答案
- 2026年新科教版初中七年级历史下册第一单元隋唐繁荣与开放卷含答案
- 废金属加工处理工诚信品质测试考核试卷含答案
- 海水淡化工安全防护能力考核试卷含答案
- 管涵顶进工岗前生产标准化考核试卷含答案
- 筑路及道路养护机械装配调试工岗前安全防护考核试卷含答案
- 婚介师安全宣传能力考核试卷含答案
- 水生动物饲养工岗前技术创新考核试卷含答案
- 数据安全共享:多学科协作加密机制
- 筋膜刀的临床应用
- 高中数学必修 选修全部知识点归纳总结(新课标人教A版)
- 人力资源外包投标方案
- 医院培训课件:《身份识别管理查房》
- MOOC 材料成形技术基础-西安交通大学 中国大学慕课答案
- 翻译服务劳务合同范本
- 成人癌性疼痛护理-中华护理学会团体标准2019
- 马原第七章共产主义崇高理想及其最终实现
- 培训testlab中文手册modal impact1 Test Lab模态锤击法软件布局
- 安徽华塑股份有限公司年产 20 万吨固碱及烧碱深加工项目环境影响报告书
- GB/T 22237-2008表面活性剂表面张力的测定
评论
0/150
提交评论