c语言程序设计包括python,经典C语言程序设计100例 -- C 和 Python 版 (01 - 05)

写在开头的话

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 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 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 #include 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语言程序设计包括python)