shell回顾
1、快速生成版权控制信息,具体的内容自己替换
[root@ scripts]# cat ~/.vimrc
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
func SetTitle()
if expand("%:e") == 'sh'
call setline(1,"#!/bin/bash")
call setline(2,
"##############################################################")
call setline(3, "# File Name: ".expand("%"))
call setline(4, "# Version: V1.0")
call setline(5, "# Author: kongd")
call setline(6, "# Email: kongd@163.com")
call setline(7, "# Organization: http://www.cnblogs.com/kongd/")
call setline(8, "# Created Time : ".strftime("%F %T"))
call setline(9, "# Description:")
call setline(10,
"##############################################################")
call setline(11, "")
endif
endfunc
2、题型复习
案例一:输入网卡的名字,来输出网卡的IP
-
问题:参数后判断要加“”名字为空时显示ip
-
分析:把本机的所有网卡名列出来,来引导用户输入。使用命令列出所有网卡信息:
ifconfig/ip a
设计一个函数,把网卡名作为参数,函数返回网卡的IP
在获取某个网卡IP时,考虑网卡有多个IP地址(或为空IP的网卡)
-
流程图:
-
实现:
-
实现解析:
-
) grep awk,反复运行和推敲命令,来分析执行结果
-
) 死循环。当输入错误或者为空,继续输入–>输入正确。
-
) while循环continue、break(逻辑性) 逻辑判断参数
-
) get_ip函数调用
-
-
结果验证
案例二:提示用户输入年份后判断该年是否为闰年
-
问题:判断闰年
-
分析
-
提示用户输入年份
-
判断用户输入年份
-
考虑用户输入年份是否为空(或是否为数字)
-
输入为数字时,进行计算
-
被四整除 但不能被 一百整除的是闰年,或者能被四百整除的是闰年
-
-
流程图:
-
实现:
-
实现解析:
-
用户输入为非数字时,提示输入不准确,退出
-
用户输入是数字时,判断是否是闰年
-
-
结果验证
案例三:求水仙花数
"水仙花数"是指一个三位数, 其各位数字立方和等于该数 本身。例如:153是一个"水仙花数", 因为153=1的三次方+5的三次方+3的三次方。
案例四:鸡兔同笼
一只笼子里有好多鸡和兔子,看头数有35只头,看腿有94只腿,问各有鸡和兔多少只?
案例五:一元钱
把一元钱换成一分,二分,五分硬币(每种至少用一枚),问有多少种换法?并且把每种换法输出
分析:
1、一分钱范围:x: 最小1,最大为100-2-5=93
2、二分钱范围:y: 最小1,最大(100-1-5)/2=47
3、五分钱范围z: 最新1,最大(100-1-2)/5=19
三层循环解决问题:
案例六:素数判断
判断 101-200 之间有多少个素数,并输出在此范围内的所有素数。
分析:素数(质数):只能被1和其本身整除的整数
判断素数的方法:用一个数分别去除以 2 到这个数的平方根(sqrt)。如果能被整除,则表明此数不是素数,反之是素数。
思路:本题目有两个所求的目标,一为 101-200 之内的素数个数,二为输出所有素数。
案例七:大小排序
题目输入三个整数 x、y、z,请把这三个数由小到大输出。
程序分析从三个数中分别比较某两个数,将大的数换到后面。
c语言函数交换数据
案例八:猴子吃桃
题目猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少个桃子?
程序分析采取逆向思维的方法,从后往前推断,列出通项公式。
思路通过题干我们可以得到基本信息是若有 n 个桃子,第一天则吃了 n/2 + 1 个桃子,即剩下 n/2 - 1 个桃子。若假设某一天剩下的桃子数为 x,前一天剩下的桃子数为 y,根据上面的关系我们可以得到:( x + 1 ) ∗ 2 = y
简单计算一下,我们已知最后一天剩 1 个,根据推算的公式可以得到倒数第二天剩下 4 个,同理根据递归算法即可求出第一天剩下多少个。在这里需要注意的是,猴子是到第十天想吃(还没吃)的时候发现只剩一个了,所以循环的次数要注意是 9 次。循环递归计算之后输出结果即可。若想查看每天的结果也可输出查看
c语言递归实现
案例九:打印菱形
题目打印出如下图案(菱形)
程序分析先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。我们要决定每一层循环的次数:外层不必多说是 4 次(i = 4)内层空格部分,空格数是随着行数的增加而减少的,规律为行数 + 1,空格数 - 1,所以循环次数是从 0到 (4 - i)次。内层星号部分,星号数是随着行数的增加而增加的,规律为行数 + 1,星号数 + 2,所以循环次数是从 0到 (i * 2)次。下三行同理,注意循环的次数和初始值即可。
案例十:冒泡排序
题目任意输入 10 个数,并对这 10 个数进行从小到大的排序。
程序分析对于这种数字排序问题,我们一般用冒泡排序的方法来进行排序。
思路首先我们应该知道什么是冒泡排序,冒泡排序是依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这里我们需要分别以每个数为基准和其他的数依次进行比较,所以要用双重 for 循环,外层控制被比较的数,内层循环控制轮换比较数。由于要从小到大排序,判断条件是第一层的数若大于第二层的数,则将两个数交换。