经典C语言程序设计100例 -- C 和 Python 版 (01 - 05)
2014-05-20 19:05
274 查看
写在开头的话
Python 重写C语言程序设计百例,每篇5题,每题分别用C语言和Python实现,方便对比。
C语言编译器:GCC 4.8.2
Python版本:Python 3.4
写这个系列是受这位博主(http://blog.csdn.net/berguiliu?viewmode=contents)的启发,自己想重写一遍,使用更加Python化的风格——简洁。如有问题或疏漏,非常欢迎在评论中指出。
【01】各位互异的三位数
题目:输出由数字{1, 2, 3, 4}组成的所有三位数,不能重复,每个数字最多只能出现一次。
思路:采用穷举法。从这4个数字中选择3个数字进行全排列,然后过滤掉不符合条件的。
【02】if-else 练习
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
思路:主要时考察分支判断结构的掌握。
【03】完全平方数
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
(如果一个数的平方根的平方等于该数,这说明此数是完全平方数)
思路:采用穷举法。
点评:Python中 “**” 表示求幂级数
【04】闰年判断
题目:输入年月日,判断这一天是这一年的第几天?
思路:每月的天数相加,再加上当前的号数。关键点:闰年的二月有29天,如果输入的月份大于两个月时,需要判断是否为闰年来决定二月的天数。
闰年定义:公元年数可被4整除为闰年,但是整百的年数必须是可以被400整除的才是闰年。(四年一闰,百年不闰,四百年再闰)
【05】比较三个数的大小
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
Python 重写C语言程序设计百例,每篇5题,每题分别用C语言和Python实现,方便对比。
C语言编译器:GCC 4.8.2
Python版本:Python 3.4
写这个系列是受这位博主(http://blog.csdn.net/berguiliu?viewmode=contents)的启发,自己想重写一遍,使用更加Python化的风格——简洁。如有问题或疏漏,非常欢迎在评论中指出。
【01】各位互异的三位数
题目:输出由数字{1, 2, 3, 4}组成的所有三位数,不能重复,每个数字最多只能出现一次。
思路:采用穷举法。从这4个数字中选择3个数字进行全排列,然后过滤掉不符合条件的。
C 语言代码 #include <stdio.h> int main() { for (int x = 1; x <= 4; ++x) for (int y = 1; y <= 4; ++y) for (int z = 1; z <= 4; ++z) { if (x != y && x != z && y != z) { printf("%d%d%d ", x, y, z); } } return 0; }
Python 代码 m = [1, 2, 3, 4] for x in m: for y in m: for z in m: if (x != y != z) and (x != z): print('{0}{1}{2}'.format(x, y, z), end=' ') 或 m = [1, 2, 3, 4] x = [str(x)+str(y)+str(z) for x in m for y in m for z in m if x != y != z and x != z] for k in x: print(int(k), end=' ')点评:Python中不等式可以连写,这样可简化代码。利用列表推导式也是简化代码的一个手段。
【02】if-else 练习
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
思路:主要时考察分支判断结构的掌握。
C 语言代码 #include <stdio.h> int main() { double i; double bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%lf",&i); bonus1=100000*0.1; bonus2=bonus1+100000*0.075; bonus4=bonus2+200000*0.05; bonus6=bonus4+200000*0.03; bonus10=bonus6+400000*0.015; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03; else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01; printf("bonus=%lf",bonus); return 0; }
Python 代码 def fun(profit = 0): # 奖金 bonus = 0 bonus10 = 100000 * 0.1 bonus20 = bonus10 + (200000 - 100000) * 0.075 bonus40 = bonus20 + (400000 - 200000) * 0.05 bonus60 = bonus40 + (600000 - 400000) * 0.03 bonus100 = bonus60 + (1000000 - 600000) * 0.015 if profit <= 100000: bonus = profit * 0.1 elif profit <= 200000: bonus = bonus10 + (profit - 100000) * 0.075 elif profit <= 400000: bonus = bonus20 + (profit - 200000) * 0.05 elif profit <= 600000: bonus = bonus40 + (profit - 400000) * 0.03 elif profit <= 1000000: bonus = bonus60 + (profit - 600000) * 0.015 else: bonus = bonus100 + (profit - 1000000) * 0.01 return bonus profit = input('profit = ') print('bonus = ', fun(profit))
【03】完全平方数
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
(如果一个数的平方根的平方等于该数,这说明此数是完全平方数)
思路:采用穷举法。
C语言代码 #include <stdio.h> #include <math.h> int main() { int a = 0, b = 0; for (int i = 0; i < 10000; ++i) { a = sqrt(i + 100); b = sqrt(i + 268); if ((a*a == i+100) && (b*b == i+268)) { printf("%d\n", i); } } return 0; }
Python 代码 for x in range(100000): if int(sqrt(x+100))**2 == x + 100 and int(sqrt(x+268))**2 == x + 268: print(x)
点评:Python中 “**” 表示求幂级数
【04】闰年判断
题目:输入年月日,判断这一天是这一年的第几天?
思路:每月的天数相加,再加上当前的号数。关键点:闰年的二月有29天,如果输入的月份大于两个月时,需要判断是否为闰年来决定二月的天数。
闰年定义:公元年数可被4整除为闰年,但是整百的年数必须是可以被400整除的才是闰年。(四年一闰,百年不闰,四百年再闰)
C 语言代码 // 输入: 年-月-日 // 返回:输入日期距离当年1月1日的天数 int whichDay(int year, int month, int day) { // 每月对应的天数 static int M[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // 存储当前日期距离当年年1月1日的天数 int count = 0; // 如果当年是闰年,设置二月为29天 if ((year % 4 == 0) || ((year % 100 == 0) && (year % 400 == 0))) M[1] = 29; // 检查日期是否合法, 如果不合法,返回-1 if (month < 1 || month > 12) return -1; if (day < 1 || day > M[month-1]) return -1; // 计算 for (int i = 0; i < month - 1; ++i) { count += M[i]; } count += day; return count; }
Python 代码 def whichDay(year, month, day): M = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] count = 0 # 判断闰年,如果时闰年,设置二月为29天 if (year % 4 == 0) or (year % 100 == 0 and year % 400 == 0): M[1] = 29 # 检查日期合法性 if not (year >= 1 and 1 <= month <= 12 and 1 <= day <= M[month-1]): return -1 # 计算 for m in M[:month-1]: count += m count += day return count
【05】比较三个数的大小
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
C语言代码 #define SWAP(px, py) (*px = *px + *py, \ *py = *px - *py, \ *px = *px - *py) void fun(int x, int y, int z) { if (x > y) SWAP(&x, &y); if (y > z) SWAP(&y, &z); if (x > y) SWAP(&x, &y); printf("%d < %d < %d\n", x, y, z); }
Python 代码 def fun(x, y, z): if x > y: x,y = y,x if y > z: y,z = z,y if x > y: x,y = y,x print('%d < %d < %d' % (x, y, z))
# 利用 Python 内置的排序函数 def fun2(*values): newValues = sorted(values) print(newValues)
# 利用 Python 内置的排序函数 def fun2(*values): newValues = sorted(values) print(newValues)点评: fun() 中交换 x 、y 的值很自然,这是Python语言的特点,要多加利用。fun2() 利用了 Python 的内置排序函数,实际开发时比较有用。
相关文章推荐
- 经典C语言程序设计100例 -- C 和 Python 版 (06 - 10)
- 经典C语言程序设计100例(循序渐进,由浅入深,不为应试,只为知识)
- 经典C语言程序设计100例
- 经典C语言程序设计100例
- 【python】编程语言入门经典100例--10
- 【python】编程语言入门经典100例--9
- 经典C语言程序设计100例(1)
- 【python】编程语言入门经典100例--14
- 【python】编程语言入门经典100例--4
- 【python】编程语言入门经典100例--3
- 【python】编程语言入门经典100例--12
- ZH奶酪:编程语言入门经典100例【Python版】
- ZH奶酪:编程语言入门经典100例【Python版】
- 编程语言入门经典100例【Python版】
- 【python】编程语言入门经典100例--5
- Python进阶01-05
- 05-访问超时设置 | 01.数据抓取 | Python
- 黑马程序员——经典C语言程序设计100例
- 经典C语言程序设计100例
- 【python】编程语言入门经典100例--7