目录
对于一个程序来说,它的内在逻辑是非常重要的。只要肯静下心来仔细推敲,找到它的关键逻辑。整个程序就已经完成了一大半,剩下的都是一些格式与规定。
我最感兴趣的就是第四部分,习题部分找凶手的例题。看见题目的时候整个傻眼了,这个也能用代码编出来并找到凶手吗?事实证明是可以的。
下面附上例题代码,结果及一些总结。希望对同时在学习C语言的你能有一些帮助,如果你是程序大神,那就不用细看我这篇文章啦~
一.顺序结构
例1:
财务人员给员工发工资时经常遇到这样一个问题,即根据每个人的工资额(以元作为单位)计算出各种面值的钞票的张数,且要求总张数最少。例如,某职工工资为3436元,发放方案为:100元34张,20元1张,10元1张,5元1张,1元1张。
程序:
结果:
总结:
(1)因为要求总张数最少,所以最好先拿最大数额的钱来支付工资,则顺序为100元→50元→20元→10元→5元→1元。
(2)每次只要能除以相关的数额得到的整数就是它的张数(m100=money/100),相除之后余下的部分留给下一级数额再相除 (money%=100;m50=mone/50;),一直除到5,剩下的都是1元能解决的部分(...m5=money/5;money%=5;printf("m1=%d",money);)。
(3)m1只出现在了printf打印里,且值该等于money%=5,所以不用对它进行定义。
(4)要处理的变量是金钱,所以数据类型是整型int,scanf与printf时加%d。
(5)30行最后一个斜杠表示承接下一行。
例2:
从键盘输入一个大写字母,要求改用小写字母输出。
程序:
结果:
总结:
(1)涉及到的变量是大小写字母,所以数据类型是字符型char。scanf与printf时加%s。
(2)判断输入的字符是否为大写,是则进入小写转换,不是则提醒输入错误。A~Z的ASCII值为65~90,不知道也没关系,用字符型表示计算机自己知晓则有第9行的表示。&&间的两个Ch的判断加了括号是为了方便阅读,不加也可以,因为>= ,<=(关系运算符)的优先级比&&(与)的高。
(3)大写转换为小写:第11行。A与a的ASCII值相差了32,所以也可以写成ch = ch + 32 ;本程序中的11行为通用写法,用于不清楚大写之间的ASCII差值的时候。
二.选择结构
1.if语句
例1:
输入两个实数a,b,如果a比b大,则将两个数数值交换,按代数值由小到大次序输出这两个数。
程序:
结果:
总结:
(1)输出时(16行)先输出a再输出b,且要求由小到大一次输出,所以如果输入时a的值比b大时就要进行交换(10~15行)。
(2)temp是用来交换a,b的中间载体,先将a中的内容给a,现在a是空的,紧接着就可以把b中的内容给a;现在b是空的,然后再把a放在temp中的内容给b(谁空给谁赋值),就实现了a与b的交换。注意顺序不要写错,不可写成:temp=a;b=temp;a=b。
例2:
输入三个实数a,b,c,按代数值由小到大次序输出这三个数。
程序:
结果:
总结:
(1)与上个例题差不多,只是判断的数增加到了三个,再把不符合a<b<c的情况列出来进行值的交换即可。
(2)29行中%5.2f意思为:以宽度为5,显示两位小数的形式输出。
(3)与上一个例题一样都是涉及到实数,一个用的int,一个用了float。其实都可以,因为实数的定义如下:
有理数中整数部分是int型,分数(小数)部分是float型。
例3:
有一函数如下,编一程序,输入一个x值,输出y值。
-1 (x<0)
y= 0 (x=0)
1 (x>0)
程序:
结果:
总结:
(1)易错点:14行else if 里面不要写成x = 0。平时书写时是x=0,可在计算机中 = 是赋值运算符,==是关系运算符,与<,>一样。
例4:
写程序,判某一年是否闰年。
输入:年(year)
计算:判是否闰年
输出:闰年或非闰年(leap)
闰年条件:
能被4整除,但不能被100整除。
能被4整除,又能被400整除。