51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

楼主: walker1020
打印 上一主题 下一主题

[原创] 编程练习题

[复制链接]
  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    21#
     楼主| 发表于 2009-8-19 18:10:52 | 只看该作者
    敢于亮出自己的代码也是一种智慧。只要能力有提高,总有一天你会让程序员对你是刮目相看。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22#
    发表于 2009-8-19 22:44:10 | 只看该作者
    怎么感觉成了51testing老师和同学跟这示范教学了-。-!前两题貌似有人做了?那我来拜上第三题吧。。。版主老师也给指点指点呗~辛苦老师啦~

    Option Explicit

    '转换数据类型为用户自定义类型,如1234567890123456789,转换成1,234,567,890,123,456,789.00
    '传入:待转换的数字
    '传出:转换后的格式字符-。-!
    Function FormatNum(varNum)
            Dim varFormatNum, arrNum, varInt, varDecimal, varCount
            On Error Resume Next
           
            varFormatNum = varNum
           
            '转换出错提示
            If Err <> 0 Then
                    MsgBox "此字符串含有非数字的字符,请重新输入"
                    Err.Clear
            End If
           
            '将小数部分和整数部分分隔,分别处理
            arrNum = Split(varFormatNum, ".")
           
            '转换整数部分
            varInt = arrNum(0)
            varInt = ChangeFromLast(varInt)
           
            '转换小数部分
            varDecimal = arrNum(1)
            varDecimal = ChangeFromFirst(varDecimal)
           
            '合并处理结果
            varFormatNum = varInt & "." & varDecimal
            FormatNum = varFormatNum
    End Function

    '从最后一位开始,按三位逗号分割数字
    Function ChangeFromLast(varNum)
            Dim varInt, varResult
            varInt = CStr(varNum)
            If Len(varInt) < 3 Then
                    ChangeFromLast = varInt
                    Exit function
            End If
            Do
                    If varInt < 1000 Then
                            varResult = varInt & "," & varResult
                            Exit Do
                    ElseIf IsEmpty(varResult) Then
                            varResult = Right(varInt,3)
                    Else
                            varResult = Right(varInt,3) & "," & varResult
                                   
                    End If
                    varInt = Left(varInt, Len(varInt)-3)
            Loop
            ChangeFromLast = varResult
    End Function

    '从第一位开始,按三位逗号分隔数字
    Function ChangeFromFirst(varNum)
            Dim varInt, varResult, varCount
            varInt = CStr(varNum)
            If Len(varInt) <= 2 Then
                    For varCount = 0 To 2-Len(varInt)-1
                            varInt = varInt & "0"
                    Next
                    ChangeFromFirst = varInt
                    Exit function
            End If
            Do
                    If IsEmpty(varResult) Then
                            varResult = Left(varInt, 3)
                    ElseIf varInt < 1000 Then
                            varResult = varResult & "," & Left(varInt, 3)
                            Exit do
                    Else
                            varResult = varResult & "," & Left(varInt, 3)
                    End If
                    varInt = Mid(varInt, 4, Len(varInt))
            Loop
            ChangeFromFirst = varResult
    End Function

    MsgBox FormatNum("12345.1234")

    [ 本帖最后由 dabeixiong 于 2009-8-19 22:50 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    23#
    发表于 2009-8-19 23:14:19 | 只看该作者
    貌似第一题没人做也-。-!不过题目看不太懂,也没有举例,不太确定具体意思。老师指教指教呗~

    Option Explicit

    '将模式字符串中所有的特殊字符转义
    '传入:模式字符串
    '传出:转义后的模式字符串
    Function TransParten(varParten)
            Dim varResult, arrMetacharacters, varReplaceStr, varFind, varCount
            varResult = CStr(varParten)
            Const vbTextCompare = 1
           
            '特殊字符列表,"\"必须放在数组中最前面
            arrMetacharacters = Array("\","$", "(", ")", "*", "+", ".", "[", "?", "^", "{", "|")
           
            '如果匹配特殊列表中的字符则转义
            For varCount = 0 To UBound(arrMetacharacters)
                    If InStr(varResult, arrMetacharacters(varCount)) <> 0 Then
                            varReplaceStr = "\" & arrMetacharacters(varCount)
                            varFind = arrMetacharacters(varCount)
                            varResult = Replace(varResult, varFind, varReplaceStr)
                    End If
            Next
           
            TransParten = varResult
    End Function

    Dim varTest
    varTest = "abc\|+.?[]"
    varTest = TransParten(varTest)
    MsgBox varTest
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    24#
     楼主| 发表于 2009-8-20 00:05:52 | 只看该作者

    回复22#

    优点:
    格式比较规则,有必要的说明。

    缺点:
    如果varNum = 123,那么QTP 运行到 varDecimal = arrNum(1) 这行代码的时候,可能会出现错误提示:数组超界。

    [ 本帖最后由 walker1020 于 2009-8-20 00:24 编辑 ]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    25#
     楼主| 发表于 2009-8-20 00:09:19 | 只看该作者

    回复23#

    第一题的意思,简单的说,就是在正则表达式里用到的的所有特殊字符进行转义,也就是在其前面增加一个反斜杠
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    26#
     楼主| 发表于 2009-8-20 00:13:18 | 只看该作者
    如: 输入abc\|+.?[]  那么经转义后,它变成了 abc\\\|\+\.\?\[]
    如果输入abc\[?^de$f  那么经转义后,它变成了abc\\\[\?\^de\$f

    [ 本帖最后由 walker1020 于 2009-8-20 00:31 编辑 ]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    27#
     楼主| 发表于 2009-8-20 00:19:35 | 只看该作者

    回复23#

    What if varParten is Null?
    如果 varParten 是 Null,那么 函数TransParten 还会得到正确的结果吗? 这尚需验证

    [ 本帖最后由 walker1020 于 2009-8-20 00:33 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    28#
    发表于 2009-8-20 10:27:07 | 只看该作者
    呵呵,题目没看仔细,写的有点赶,继续学习
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    29#
    发表于 2009-8-20 11:17:33 | 只看该作者

    这个模块满有意思,适合我们
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    30#
    发表于 2009-8-20 11:50:38 | 只看该作者

    回复 22# 的帖子

    不符合要求1吧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    31#
    发表于 2009-8-20 21:17:45 | 只看该作者
    受教了~佩服...建议这种帖子隔段时间就来一下...老不写代码还真是手生
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    32#
    发表于 2009-8-21 10:18:33 | 只看该作者
    建议:写点有实际意义的代码,比如VBS处理XML,处理EXCEL,VBS调用WMI获取指定进程PID,虽然字符串处理比较重要,但也没必要处理来处理去。

    关于VBS实际应用,建议可以去看看这个博客,他貌似比较喜欢用VBS: http://huaidan.org/
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    33#
    发表于 2009-8-21 11:22:03 | 只看该作者

    回复 32# 的帖子

    处理XML,EXCEL,调用WMI什么的其实也就是翻来覆去那么几句,照着资料熟悉了接口之后往往复制粘贴下自己需要用到的语句就完了,达不到练习编程的目的。 练习编程还是要多锻炼逻辑思维能力。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    34#
    发表于 2009-8-21 11:30:50 | 只看该作者

    回复 33# 的帖子


    有道理
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    35#
    发表于 2009-8-21 11:37:43 | 只看该作者

    回复 33# 的帖子

    好吧,那我来出些题吧,也是网络上比较通用的,用这些来锻炼逻辑吧
    【程序1】
    题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    36#
    发表于 2009-8-21 11:38:35 | 只看该作者
    【程序2】
    题目:企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    37#
    发表于 2009-8-21 11:38:55 | 只看该作者
    题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    38#
    发表于 2009-8-21 11:39:06 | 只看该作者
    【程序4】
    题目:输入某年某月某日,判断这一天是这一年的第几天?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    39#
    发表于 2009-8-21 11:39:24 | 只看该作者
    【程序5】
    题目:输入三个整数x,y,z,请把这三个数由小到大输出。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    40#
    发表于 2009-8-21 12:28:10 | 只看该作者
    都是C的练习题目
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-2 10:17 , Processed in 0.089577 second(s), 21 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表