第一篇:VB编程题及答案
1定义一个下标上界为10整型数组,并用随机函数为其赋值(值处于[0,100]之间),计算数组中所有偶数的和。Private Sub Command1_Click()Randomize Dim a%(10)Dim i%, s% For i = 0 To 10 a(i)= 101 * Rnd()Next For i = 0 To 10 If a(i)Mod 2 = 0 Then s = s + a(i)End If Next Print “所有偶数的和为”, s 2 设 S=35,C=0.3,编写程序,计算并输出下面级数的部分和。结果取小数点后面7位。C/1!-C^3/3!+C^5/5!-„ +(-1)^(S-1)*C^(2*S-1)/(2*S-1)!+ „
参考答案如下:
Private Sub Command1_Click()
Dim n As Integer
Dim x As Double
x = 0.3
Dim item As Double
Dim sum As Double
Dim fac As Double
For n = 1 To 35
fac = 1
Dim i As Integer
For i = 1 To 2 * n1)* x ^(2 * n1
If n Mod i = 0 Then
isprime = False
Exit Function
End If
Next
isprime = True End Function Private Sub Command1_Click()
Dim i As Integer
Dim sum As Long
For i = 1000 To 2000
If isprime(i)= True Then
sum = sum + i
End If
Next
Text1.Text = “sum=” & sum End Sub 'sum= 419684 13.编写一个函数,求某个数的阶乘。
调用该函数计算22!。
Public Function fact(ByVal n As Integer)As
Long
Dim i As Integer, f As Long
f = 1
For i = 1 To n
f = f * i
Next i
fact = f End Function Private Sub Command1_Click()
Dim m As Integer, i As Integer, s As Long
m = InputBox(“输入一个正整数:
”)
s = fact(m)
MsgBox(s)End Sub ‘479001600 14.编写子过程,计算并输出3000-4000之间的素数之和C与其中最小的素数MIN。
Private Sub Command1_Click()
Dim sum, i, min As Integer
min=0
For i = 3000 To 4000
Dim isprime As Boolean = True
Dim j As Integer
For j = 2 To i1)* n *(n + 1)
sum = sum + item
n = n + 2
Loop While Abs(sum)<= 100
MsgBox(sum)End Sub 'sum=-68 编写一个函数,其功能为求两个数的最大公约数。
Public Function
gcd(ByVal m As Integer, ByVal n As Integer)As Integer
Dim i As Integer If m > n Then Dim t As Integer t = m: m = n: n = t End If For i = m To 1 Step-1 If m Mod i = 0 And n Mod i = 0 Then gcd = i Exit Function
End If
Next End Function
20.用InputBox输入一个年份,判断该年份是否是平年,若是则输出“Yes”,否则输出“No”。
Dim year As Integer year = Val(InputBox(“"))If(year Mod 400 = 0)Or(year Mod 4 = 0 And year Mod 100<>0)
Then MsgBox(”No“)Else
MsgBox(”Yes“)
End If 输入两个整数m、n,编写程序使得
m>=n,并输出m、n的值。
Dim m, n As Integer
m = Val(InputBox(”“))n = Val(InputBox(”“))
If m < n Then Dim t As Integer t = m : m = n : n = t End If
MsgBox(”m=“ & m & ”;“ & ”n=“ & n)
22求下面级数前n项的和S,在求和
过程中,当某项(注意,该项参与求和)的绝对值小于0.0001 时求和终止。结果取 5 位小数。
1-1/3+1/5-1/7+1/9-1/11+ „ +(-1)^(n-1)*1/(2n-1)+ „
Private Sub Command1_Click()
Dim n As Integer
Dim item As Double
Dim sum As Double
i = Do While True
item =(-1)^(i1)
整数:”)sum = sum + item If Abs(item)< 0.0001 Then Exit Do Else i = i + 1 End If Loop
MsgBox(Format(sum, “0.0000”))
End Sub '
sum=0.78545 编写一个函数,其功能为判断一个3位正整数是否是“水仙花数”。(“水仙花数”是指各位数字的立方和与该数相等,如153=1^3+5^3+3^3,153就是水仙花数。)
Public Function Panduan(ByVal x As Integer)As Boolean
Dim a As Integer, b As Integer, c As Integer
a = x 100
b =(x Mod 100)10
c = x Mod 10
If x = a ^ 3 + b ^ 3 + c ^ 3 Then
Panduan = True
Else
Panduan = False
End If
End Function Private Sub Command1_Click()
Dim i As Integer
i = InputBox(“输入一个3位正
MsgBox(Panduan(i))End Sub 定义一个下标上界为10整型数组,并为其赋值(值处于[0,100]之间),计算数组中所有不小于60的数据的和。
Dim a(10), i, sum As Integer
For i = 0 To 10
a(i)= Int(Rnd()* 101)
Next
For i = 0 To 10
If a(i)〉=60 Then
sum = sum + a(i)
End If
Next
print sum
25.编写程序,求下面级数前n项的和s=1/1!-1/2!+1/3!-1/4!+....+(-1)^(n-1)*1/n!+.....。
'求和过程当某一项的绝对值小于0.0001时结束(注意,该项参与求和),计算并输出所求的s,要求结果保留6位小数。Private Sub Command1_Click()
Dim m As Double, n As Long, s As Double, f As Integer
s = 0: n =-1: m = 1: f = 1 Do While 1 / m >= 0.0001 m = m * f f = f + 1 n =-n
s = s + n / m Loop
s = Format(s, ”0.000000“)Print s End Sub
26输入一个四位数,分别输出它的个位数字,是十位数字,百位数字,千位数字。Private Sub Command1_Click()Dim a%, j%, k%, i%, m% a = InputBox(”请输入一个四位整数“)j = a 1000 k = a 100 Mod 10 i = a 10 Mod 10 m = a Mod 10 Print ”个位数字;“;m Print ”十位数字;“;i Print ”百位数字;“;k Print ”千位数字;“;j End Sub 6.计算sum=2!+4!+6!+...+10!Private Sub Command1_Click()Dim a%, i% Sum = 0 i = 1: a = 1 Do a = 2 * i If i Mod 2 = 0 Then Sum = Sum + a End If i = i + 1 Loop While i <= 10 Print Sum End Sub
27编写程序,计算并输出下面级数前n项(n=20)中奇数项的和。1*2*3-2*3*4+3*4*5-4*5*6+....+(-1)^(n-1)*n*(n+1)*(n+2)+...Private Sub Command1_Click()Dim s!, i% For i = 1 To 20 Step 2 s = s + i *(i + 1)*(i + 2)Next MsgBox(s)End Sub
28随机输出一个小写字母。Private Sub Command1_Click()Dim a As String Randomize
a = Chr(Int(97 + 26 * Rnd))MsgBox(a)End Sub、29编写程序,计算并输出下面级数前n项(n=50)中偶数项的和。s=1*2+2*3+3*4+4*5+....+n*(n+1)+.....Private Sub Command1_Click()Dim s!, i%
For i = 2 To 50 Step 2 s = s + i *(i + 1)Next
MsgBox(s)End Sub
30斐波那契数列是由计算某类动物繁殖增长量而提出的。数列的前两项是1、1,以后的每一项都是其相邻前两项的和。编写程序求:数列前30项和。
Private Sub Command1_Click()Dim a&, b&, c&, i%
a = 1: b = 1: c = 2: Sum = 0 For i = 1 To 28 c = a + b a = b b = c
Sum = Sum + c Next
MsgBox(Sum)End Sub
31输入三个数a、b、c,编写程序使得a<=b<=c,并输出a、b、c的值。Private Sub Command1_Click()Dim a%, b%, c%, t%
a = Val(InputBox(”请输入a的值!“))b = Val(InputBox(”请输入b的值!“))c = Val(InputBox(”请输入c的值!“))If a > b Then t = b b = a a = t End If
If a > c Then t = a a = c c = t End If If b > c Then t = b b = c c = t End If
Print a, b, c End Sub 32编写程序,设n=20,x=3.4,计算并输出S(n)的值,要求结果保留5位小数。S(n)=Inx/x+In2x/x^2+In3x/x^3+.....+In(n*x)/x^n+.....Private Sub Command1_Click()Dim x#, i% Dim S(20)As Double n = 20 x = 3.4 For i = 1 To 20 S(20)= S(20)+ Log(i * x)/(x ^ i)Next Print Format(S(20), ”0.00000“)End Sub
33输入任意三个数 找出其中最大的数 Private Sub Command1_Click()Dim a!, b!, c!, Max!a = Text1.Text b = Text2.Text c = Text3.Text Max = a If b > Max Then Max = b If c > Max Then Max = c Text4.Text = Max End Sub
输出1到100之间的素数 Print 1;2;a = 3 While a <= 100 i = 2
While i < a
If a Mod i = 0 Then
i = a
End If
i = i + 1
Wend
If i = a Then
Print a;
End If a = a + 1 Wend、34打印斐波那契数列20项 Private sub form_click()A=0 B=1
Text1.text=text1.text&str(A)&str(B)&chr(13)& Chr(10)For i=1 to 9 A=A+B B=A+B
Text1.text=text1.text&str(A)&str(B)&chr(13)& Chr(10)Next i
35判定素数
A=val(inputbox(“input a”))For i=2 to a
If(a mod i=0)then Exit for End if Next i
If i 36求sum 1+(1+2)+(1+2+3)………….n = Val(Text1.Text)sum = 0 For i = 1 To n sum1 = 0 For j = 1 To i sum1 = sum1 + j Next j sum = sum + sum1 Next i Text2.Text = sum 37求50名学生的平均成绩并统计高于平均分的人 Dim c(1 to 50)as integer Dim p!,n%,i% P=0 For i=1 to 50 C(i)=inputbox(“请输入第”&i&”位学生的成绩” P=p+c(i)Next i P=p/50 N=0 For i= 1 to 50 If c(i)>p then n=n+1 Next i Print “平均分=”;”高于平均分的人数=”;n 设C=0.3,编写程序,计算并输出下面级数的部分和。结果取小数点后面7位。C/1!-C^3/3!+C^5/5!-„ +(-1)^(S-1)*C^(2*S-1)/(2*S-1)!+ „ Dim n as integer Dim x as integer X=0.3 Dim item as double Dim sum as double Dim fact as double For n=1 to 35 Fact=1 Dim I as integer For I =1 to 2*n-1 Fact=fact*i Next Item =(-1)^(n-1)*x^(2*n-1)/fact Sum=sum+item Next Sum=int(sum*10000000+0,.5)/100000000 Magbox 39已知A、B为整数A和B的立方和为1000求所有的A、B。 Dim x ,y as integer For x=0 to10 For y=0 to10 If x^3+y^3=1000 then Msgbox(x=;y=) 定义一个下标上界为30的单精度数组,设置好其初值(值处于[20,90]),计算数组中所有元素的均值。Dim array(30)as single For i=0 Array(i)=20+int(rnd()*71)Next i Dim sum% For i=0 to 30 Sum=sum+array(i)Next i Print sum 31 End sum 41求下面级数前S项中奇数项的和sum。在求和过程中,以第一个奇数项的数值大于 10000 的项为末项。1!-2!+3!-4!+ „ +(-1)^(S-1)*S!+ „ Dim n as integer Dim item double Dim I as integer Dim sum as double Dim abs as double Do while true Item =1 For I =1 to n Item = item*1 Next i Sum=sum +item N=n+2 If abs(item)>10000 then Exit do Else N=n+2 End if Loop Msgbox(sum) 42计算sum=1/1!+1/2!+1/3!+....+1/10!Private Sub Command1_Click()Dim m As Integer, n As Long, s As Double n = 1 s = 0 For m = 1 To 10 n = n * m s = s + 1 / n Next Print s 42求从[j,s]区间内的素数及素数和(这里需要用到三个文本框和2个按钮)'Private Sub Command1_Click()Dim n%, i%, j%, s% Sum = 0 j = Val(Text1.Text())s = Val(Text2.Text())For n = j To s For i = 2 To n1 Then Sum = Sum + n: Print n Next n Text3.Text = Sum End Sub Private Sub Command2_Click()Cls Text1.Text = ”“ Text2.Text = ”“ Text3.Text = ”“ Text1.SetFocus End Sub 43某分段函数描述如下:(1)当x为偶数时,y的值为x的二分之一。(2)当x为奇数时,y的值为x的二倍。Private Sub Command1_Click()Dim x!, y!x = Val(InputBox(”请输入X的值!“)) If x Mod 2 = 0 Then y = x / 2 Else y = 2 * x MsgBox(y)End If End Sub 44随机输出一个小写字母。Private Sub Command1_Click()Dim a As String Randomize a = Chr(Int(97 + 26 * Rnd))MsgBox(a)End Sub、45编写程序,计算并输出下面级数前n项(n=50)中偶数项的和。s=1*2+2*3+3*4+4*5+....+n*(n+1)+.....Private Sub Command1_Click()Dim s!, i% For i = 2 To 50 Step 2 s = s + i *(i + 1)Next MsgBox(s)End Sub 46编写程序,设n=20,x=3.4,计算并输出S(n)的值,要求结果保留5位小数。S(n)=Inx/x+In2x/x^2+In3x/x^3+.....+In(n*x)/x^n+.....Private Sub Command1_Click()Dim x#, i% Dim S(20)As Double n = 20 x = 3.4 For i = 1 To 20 S(20)= S(20)+ Log(i * x)/(x ^ i)Next Print Format(S(20), ”0.00000“)End Sub 47设 S=35,C=0.3,编写程序,计算并输出下面级数的部分和。结果取小数点后面7位。C/1!-C^3/3!+C^5/5!-„ +(-1)^(S-1)*C^(2*S-1)/(2*S-1)!+ „ 参考答案如下: Private Sub Command1_Click() Dim n As Integer Dim x As Double x = 0.3 Dim item As Double Dim sum As Double Dim fac As Double For n = 1 To 35 fac = 1 Dim i As Integer For i = 1 To 2 * n1)* x ^(2 * n1 fac = fac * i Next item =(-1)^(n1)/ fac sum = sum + item Next sum = Int(sum * 10000000 + 0.5)/ 10000000 MsgBox(sum)End Sub ' sum = 0.479426 49编写子过程,计算并输出3000-4000之间的素数之和C与其中最小的素数MIN。 Private Sub Command1_Click() Dim sum, i, min As Integer min=0 For i = 3000 To 4000 Dim isprime As Boolean = True Dim j As Integer For j = 2 To ia(1))*(pa(3)))MsgBox(s)Else MsgBox(”不能构成三角形")End If End Sub 循环部分 1.求自然数1~100之间奇数之和。 2.求自然数1~100之间偶数之和。 3.编程计算从200到1000之间的所有4的倍数之和。 4.编程计算从300到1000之间的所有7的倍数之和。 5.编写程序在窗体上显示出:5/6+4/5+3/4+2/3+1/2 6.编写程序,通过InputBox函数从键盘上输入4个数,计算并在窗体上显示这4个数的和及平均值。 7.在窗体的单击事件过程中,编写程序计算1!+2!+3!+ „ +20! 8.有一个窗体,窗体中有一个文本框,名称为Text1,有一个按钮,试编写按钮的单击事件,实现计算1!+2!+3!+„+10!,将结果显示在文本框Text1中。(或参照 7 用教材:P86 [例4-21] 方法) 9.编写程序计算:s=1+1/2!+1/3!+„+1/n!,说明:在窗体中有一个文本框控件:Text1,用来接收n的值,有一个标签控件:Label1,用来显示S的值,试编写窗体的单击事件,实现计算与显示功能,只要求写出事件的主要代码,事件过程的起始语句和结束语句可略去。(或 参照7 用教材:P87 [例4-22] 方法) 10.编写程序,在窗体上输出由1、2、3、4、5这五个数字组成的所有可能的两位数,并统计它们的个数。 说明: 程序中红色标示的部分 控制 每行输出5个数 11.求s=a+aa+aaa+„+aaa„aaa(n个a),其中a和n的值由用户自己输入。例如,当a=3,n=4时,S=3+33+333+3333。 12.在窗体上输出下三角的九九乘法表。 13.编写程序,将26个字母逆序输出。 14.编写程序,将字符串“山高人为峰”按逆序“峰为人高山”输出。 15.设纸的厚度为0.5毫米,将纸对折,再对折„,求至少对折多少次,纸张的厚度能达到珠穆朗玛峰的高度8848米。 16.编写程序,求s的值,s=1×2×3+2×3×4+„+n×(n+1)×(n+2)的值。n由程序输入。 17.编写一个程序,用户连续输入N个值,直到输入非数值数据为止。最后输出其中最大的一个数。 18.编写程序,输入一个数,判定该数是否为素数,如果是素数,则输出“该数是素数”的信息,否则输出“该数不是素数”的信息。 1.抓交通肇事犯 一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同; 丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。*问题分析与算法设计 按照题目的要求造出一个前两位数相同、后两位数相同且相互间又不同的整数,然后判断该整数是否是另一个整数的平方。*程序说明与注释 #include Lorry _No.is 7744 2.百钱百鸡问题 中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何? *问题分析与算法设计 设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的 值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程: 5x+3y+z/3=100 x+y+z=100 所以此问题可归结为求这个不定方程的整数解。由程序设计实现不定方程的求解与手工计算不同。在分析确定方程中未知数变化范围的前提下,可通过对 未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。*程序说明与注释 #include for(x=0;x<=20;x++)/*外层循环控制鸡翁数*/ for(y=0;y<=33;y++)/*内层循环控制鸡母数y在0~33变化*/ { z=100-x-y;/*内外层循环控制下,鸡雏数z的值受x,y的值的制约*/ if(z%3==0&&5*x+3*y+z/3==100)/*验证取z值的合理性及得到一组解的合理性*/ printf(“%2d:cock=%2d hen=%2d chicken=%2dn”,++j,x,y,z);} } 3.三色球问题 若一个口袋中放有12个球,其中有3个红的。3个白的和6个黒的,问从中任取8个共有多少种不同的颜色搭 配? *问题分析与算法设计 设任取的红球个数为i,白球个数为j,则黒球个数为8-i-j,根据题意红球和白球个数的取值范围是0~3,在红球和白球个数确定的条件下,黒球个数取值应为8-i-j<=6。*程序说明与注释 #include 马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩,在一家饭馆吃饭花了50先令;每个男人花3先令,每个女人花2先令,每个小孩花1先令;问男人、女人和小孩各有几人? *问题分析与算法设计 设x,y,z分别代表男人、女人和小孩。按题目的要求,可得到下面的方程: x+y+z=30(1)3x+2y+z=50(2)用方程程序求此不定方程的非负整数解,可先通过(2)-(1)式得: 2x+y=20(3)由(3)式可知,x变化范围是0~10 *程序说明与注释 #include int x,y,z,count=0;printf(“ Men Women Childrenn”);printf(“........................................n”);for(x=0;x<=10;x++){ y=20-2*x;/*x定值据(3)式求y*/ z=30-x-y;/*由(1)式求z*/ if(3*x+2*y+z==50)/*当前得到的一组解是否满足式(2)*/ printf(“ %2d: %d %d %dn”,++count,x,y,z);} } 5.新娘和新郞 三对情侣参加婚礼,三个新郞为A、B、C,三个新娘为X、Y、Z。有人不知道谁和谁结婚,于是询问了六位新人中的三位,但听到的回答是这样的:A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚。这人听后知道他们在开玩笑,全是假话。请编程找出谁将和谁结婚。 *问题分析与算法设计 将A、B、C三人用1,2,3表示,将X和A结婚表示为“X=1”,将Y不与A结婚表示为“Y!=1”。按照题目中的叙述可以写出表达式: x!=1 A不与X结婚 x!=3 X的未婚夫不是C z!=3 C不与Z结婚 题意还隐含着X、Y、Z三个新娘不能结为配偶,则有: x!=y且x!=z且y!=z 穷举以上所有可能的情况,代入上述表达式中进行推理运算,若假设的情况使上述表达式的结果均为真,则假设情况就是正确的结果。*程序说明与注释 #include X will marry to B.(X与B结婚)Y will marry to C.(Y与C结婚) Z will marry to A.(Z与A结婚)6.委派任务 某侦察队接到一项紧急任务,要求在A、B、C、D、E、F六个队员中尽可能多地挑若干人,但有以下限制条件: 1)A和B两人中至少去一人; 2)A和D不能一起去; 3)A、E和F三人中要派两人去; 4)B和C都去或都不去; 5)C和D两人中去一个; 6)若D不去,则E也不去。问应当让哪几个人去? *问题分析与算法设计 用A、B、C、D、E、F六个变量表示六个人是否去执行任务的状态,变量的值为1,则表示该人去;变量的值为0,则表示该人不参加执行任务,根据题意可写出表达式: a+b>1 A和B两人中至少去一人; a+d!=2 A和D不能一起去; a+e+f==2 A、E、F三人中要派两人去; b+c==0或b+c==2 B和C都去或都不去; c+d==1 C和D两人中去一个; d+e==0或d==1 若D不去,则E也不去(都不去;或D去E随便)。 上述各表达式之间的关系为“与”关系。穷举每个人去或不去的各种可能情况,代入上述表达式中进行推理运算,使上述表达式均为“真”的情况就是正确的结果。*程序说明与注释 #include } *运行结果 A will be assigned.(去)B will be assigned.(去)C will be assigned.(去)D will not be assigned.(不去)E will not be assigned.(不去)F will be assigned.(去)7.50.谁在说谎 张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎。现在问:这三人中到底谁说的是真话,谁说的是假话? *问题分析与算法设计 分析题目,每个人都有可能说的是真话,也有可能说的是假话,这样就需要对每个人所说的话进行分别判断。假设三个人所说的话的真假用变量A、B、C表示,等于1表示该人说的是真话; 表示这个人说的是假话。由题目可以得到: *张三说李四在说谎 张三说的是真话:a==1&&b==0 或 张三说的是假话:a==0&&b==1 *李四说王五在说谎 李四说的是真话:b==1&&c==0 或 李四说的是假话:b==0&&c==1 *王五说张三和李四都在说谎 王五说的是真话:c==1&&a+b==0 或 王五说的是假话:c==0&&a+b!=0 上述三个条件之间是“与”的关系。将表达式进行整理就可得到C语言的表达式:(a&&!b||!a&&b)&&(b&&!c||!b&&c)&&(c&&a+b==0||!c&&a+b!=0)穷举每个人说真话或说假话的各种可能情况,代入上述表达式中进行推理运算,使上述表达式均为“真”的情况就是正确的结果。*程序说明与注释 #include Zhangsan told a lie(张三说假话)Lisi told a truch.(李四说真话)Wangwu told a lie.(王五说假话) 8.黑与白 有A、B、C、D、E五人,每人额头上都帖了一张黑或白的纸。五人对坐,每人都可以看到其它人额头上的纸的颜色。五人相互观察后,A说:“我看见有三人额头上帖的是白纸,一人额头上帖的是黑纸。” B说:“我看见其它四人额头上帖的都是黑纸。” C说:“我看见一人额头上帖的是白纸,其它三人额头上帖的是黑纸。” D说:“我看见四人额头上帖的都是白纸。” E什么也没说。 现在已知额头上帖黑纸的人说的都是谎话,额头帖白纸的人说的都是实话。问这五人谁的额头是帖白纸,谁的额头是帖黑纸? *问题分析与算法设计 假如变量A、B、C、D、E表示每个人额头上所帖纸的颜色,0 代表是黑色,1 代表是白色。根据题目中A、B、C、D四人所说的话可以总结出下列关系: A说: a&&b+c+d+e==3||!a&&b+c+d+e!=3 B说: b&&a+c+d+e==0||!b&&a+c+d+e!=0 C说: c&&a+b+d+e==1||!c&&a+b+d+e!=1 D说: d&&a+b+c+e==4||!d&&a+b+c+e!=4 穷举每个人额头所帖纸的颜色的所有可能的情况,代入上述表达式中进行推理运算,使上述表达式为“真”的情况就是正确的结果。*程序说明与注释 #include } } *运行结果 A is pasted a paper of black paper on his forehead.(黑)B is pasted a paper of black paper on his forehead.(黑)C is pasted a paper of white paper on his forehead.(白)D is pasted a paper of black paper on his forehead.(黑)E is pasted a paper of white paper on his forehead.(白)9.诚实族和说谎族是来自两个荒岛的不同民族,诚实族的人永远说真话,而说谎族的人永远说假话。迷语博士是个聪明的人,他要来判断所遇到的人是来自哪个民族的。迷语博士遇到三个人,知道他们可能是来自诚实族或说谎族的。为了调查这三个人是什么族的,博士分别问了他们的问题,这是他们的对话: 问第一个人:“你们是什么族?”,答:“我们之中有两个来自诚实族。”第二个人说:“不要胡说,我们三个人中只有一个是诚实族的。”第三个人听了第二个人的话后说:“对,就是只有一个诚实族的。” 请根据他的回答判断他们分别是哪个族的。*问题分析与算法设计 假设这三个人分别为A、B、C,若说谎其值为0,若诚实,其值为1。根据题目中三个人的话可分别列出: 第一个人: a&&a+b+c==2||!a&&a+b+c!=2 第二个人: b&&a+b+c==1||!b&&a+b+c!=1 第三个人: c&&a+b+c==1||!c&&a+b+c!=1 利用穷举法,可以很容易地推出结果。*程序说明与注释 #include A is a lier(说谎族)B is a lier(说谎族)C is a lier(说谎族) 10. 角谷猜想 日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。请编程验证。*问题分析与算法设计 本题是一个沿未获得一般证明的猜想,但屡试不爽,可以用程序验证。 题目中给出的处理过程很清楚,算法不需特殊设计,可按照题目的叙述直接进行证。*程序说明与注释 #include 现有21根火柴,两人轮流取,每人每次可以取走1至4根,不可多取,也不能不取,谁取最后一楰火柴谁输。请编写一个程序进行人机对弈,要求人先取,计算机后取;计算机一方为“常胜将军”。*问题分析与算法设计 在计算机后走的情况下,要想使计算机成为“常胜将军”,必须找出取 关键。根据本题的要求枷以总结出,后走一方取子的数量与对方刚才一步取子的数量之和等于,就可以保证最后一个子是留给先取子的那个人的。 据此分析进行算法设计就是很简单的工作,编程实现也十分容易。*程序说明与注释 #include do{ printf(”How many stick do you wish to take(1~%d)?“,a>4?4:a);scanf(”%d“,&i);}while(i>4||i<1||i>a);/*接收正在确的输入*/ if(a-i>0)printf(” %d stick left in the pile.n“,a-i);if((a-i)<=0){ printf(” You have taken the last stick.n“);printf(” * * * You lose!nGame Over.n“);/*输出取胜标记*/ break;} else printf(” Compute take %d stick.n“,5-i);/*输出计算机取的子数*/ a-=5;printf(” %d stick left in the pile.n",a);} } 12. 课 题:vb语言编程概述 课 时:2课时 授课时间:2011.09.05 课堂类型:讲授 教学目的:1.熟悉VB界面和VB集成开发环境; 2.在实际操作中学会编简单的VB应用程序; 教学要求:1.掌握VB基础知识。 2.会编简单的VB应用程序。 教学重点:1.熟悉VB集成开发环境 2.编写简单VB应用程序。 教学难点:在熟悉VB界面的同时学习编写简单VB应用程序 教学方法:讲授 教学过程: 一、VB简介 BASIC是英文Beginner’s All-purpose Symbolic Instruction Code(初学者通用符号指令代码)的缩写,它是专门为初学者设计的高级语言。Visual Basic是Microsoft公司于1991年推出的基于窗口的可视化程序设计语言。 a.“Visual”是“可视化的”、“形象化的”的意思。b.因此Visual Basic也具有易学易用的特点 c.目前Visual Basic的最新版本是Visual Basic 6.0(简称VB 6.0) 二、启动VB 1、首先显示“新建工程”对话框 直接单击“打开”按钮,创建“标准EXE”类型应用程序,进入集成开发环境主界面。 2、集成开发环境中的各元素 1)标题栏:用来显示窗口的标题。2)菜单栏 3)工具栏 4)工具箱 5)窗体窗口 6)工程窗口 7)属性窗口 8)窗体布局窗口 三、通过一个简单的应用程序快速入门 【例1.1(实训1,p16)】制作一个的一个简单的应用程序的运行界面。它由一个窗体、一个文本框、一个标签和一个命令按钮组成。当用户单击命令按钮“显示”时,文本框中出现“教你学VB”。1.新建工程 2.添加文本框Text1 3.添加命令按钮Command1 4.添加标签Label1 5.设置属性 6.编写事件过程代码 前面的工作把应用程序的界面设计好了,属性也设置完毕。但现在应用程序并不能实现实际的功能。为了使它具有一定的功能,还必须为对象编写实现某一功能的事件过程代码。1)双击窗体上的“显示”按钮,屏幕上出现代码窗口,程序代码就在这里编写。编写如下事件过程: Private Sub Command1_Click()Text1.Text = “欢迎使用VB” End Sub 2)运行应用程序 3)保存应用程序 VB应用程序至少有两种文件需要保存: · 窗体文件(.frm)· 工程文件(.vbp)4)生成EXE文件 四、总结步骤 设计VB应用程序主要有以下4个步骤:(1)设计用户界面。(2)设置属性。(3)编写代码。(4)保存和运行调试程序,生成EXE文件。 五、知识延伸 1、只有一个文本框的实例 编写如下事件过程: Private Sub Command1_Click()Text1.Text = “教你学VB“ End Sub 2、多个文本框时 编写如下事件过程: Private Sub Command1_Click()Text1.Text = ”教你学VB“ Text2.Text = “欢迎使用VB“ End Sub 3、按照系统的元件特性分类(分别举例说明)课后实训1 第二个命令按钮:清除 第三个命令按钮:退出 步骤: 1.添加2个命令按钮 2.双击按钮,进入编程状态 3.和显示按钮命令编程相似 编写如下事件过程: Private Sub Command2_Click()Text1.Text = ” “ End Sub Private Sub Command3_Click()End End Sub 4、图片的加载方法 Private Sub Form_Load()Image1.Picture = LoadPicture(App.Path + “1.BMP”)End Sub 六、小结 1.熟悉界面。 2.掌握完整编程过程以及运行及调试程序的过程。 六、编程题参考答案 1.编程,统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。#include “stdio.h” #define N 50 void main(){ float x;unsigned int s1,s2,s3,i;s1=s2=s3=0;for(i=1;i<=N;i++){ scanf(“%f”,&x);if(x<0)s1++;else if(x==0)s2++;else s3++;} printf(“负数%u个,零%u个,正数%u个n”,s1,s2,s3);} 2.编程,计算并输出方程 X2+Y2=1989 的所有整数解。#include “stdio.h” void main(){ int x,y;for(x=-45;x<=45;x++){ y=-45;while(y<=45){ if(x*x+y*y==1989)printf(“%d*%d+%d*%d=%dn”,x,x,y,y,1989);y++;} } } 3.编程,输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。#include “stdio.h” void main(){ unsigned int x;printf(“请输入一个十进制正整数:”);scanf(“%u”,&x);printf(“%d=八进制数 %o=十六进制数%xn”,x,x,x);} 4.编程,找出1000以内的所有完数,并输出其因子。#include “stdio.h” void main(){ int i,j,s=1;for(i=1;i<=1000;i++,s=1){ for(j=2;j<=i/2;j++)if(i%j==0)s+=j;// 求 i的因子和 if(s==i){ printf(“%d=1”,i);// 如果i 是完数则输出其各因子 for(j=2;j<=i/2;j++)if(i%j==0)printf(“+%d”,j);printf(“n”);} } } 5.输入一个正整数,输出它的所有质数因子。#include “stdio.h” void main(){ int m,i=2;printf(“请输入一个整数:”);scanf(“%d”,&m);while(m!=1)if(m%i==0){ printf(“%d ”,i);m/=i;} else i++;printf(“n”);} 6.输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。#include “stdio.h” #define N 20 void main(){ int a[N],i,j;for(i=0;i 7.输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。#include “stdio.h” #define NA 6 #define NB 8 void main(){ float a[NA],b[NB];int i,j;for(i=0;i 8.输入两个数组(数组元素个数自定),输出在两个数组中都不出现的元素。#include “stdio.h” #define NA 6 #define NB 8 void main(){ float a[NA],b[NB];int i,j;for(i=0;i 9.编程,将字符数组S2中的全部字符拷贝到字符数组S1中。#include “stdio.h” void main(){ char s1[20],s2[]=“Good morning!”;int i=0;while((s1[i++]=s2[i])!=' ');printf(“%sn”,s1);} 10.给定年份year,判别该年份是否闰年(定义一个宏以判别该年份是否闰年)。#include 11.输入一行小写字母后,或输出原文,或将字母变成其下一字母(a变成b、b变成c、„、x变成y、y变成z、z变成a)输出,用条件编译方法实现以上选择。#include 12.编写函数,处理n行n列维数组:将每一行的元素同除以该行上绝对值最大的元素。 #include “stdio.h” #include “math.h” void div(float** a,int n){ int i,j;float x;for(i=0;i { float b[3][3]={{1,2,3},{4,5,6},{7,8,9}};int i,j;float* c[3];for(i=0;i<3;i++)c[i]=b[i];div(c,3);for(i=0;i<3;i++){ for(j=0;j<3;j++)printf(“%f ”,b[i][j]);printf(“n”);} } 13.编写函数,求任意阶多项式 a0+a1X+a2X2+...+anXn 的值并返回多项式的值。#include “stdio.h” float f1(float* a,float x,int n){ int i;float t=1,y=0;for(i=0;i 14.设计一个函数,使给出一个数的原码,能得到该数的补码。 #include unsigned int getbit(unsigned int value)//第1位为0表示数的原码,{ if(value>>15)return(value^0x7fff)+1;//其补码即其原码;若value else return value;//右移15位后为1,表示value是负数的原码,负数 } //的补码为原码按位取反(第1位不变)后加1。 void main(){ unsigned int y=0x800c,k;k=getbit(y);printf(“%xn”,k);} 15.编写函数,求m行、n列的二维数组全体元素中负数的个数。#include { float b[2][3]={{-1,2,-3},{4,-5,-6}};int i;float* c[2];for(i=0;i<2;i++)c[i]=b[i];printf(“%dn”,sum(c,2,3));} 16.编写函数,返回在一个整数组中出现次数最多的数及其出现次数。#include { float c[10]={0,4,2,4,3,2,4,-3,1.5,7.6},t;int m;fun(c,10,&m,&t);// 若说明float *t;int *m;printf(“元素%f出现次数为%dn”,t,m);// 引用为 fun(c,10,m,t)将 } // 产生悬挂指针的错误,即t、m不只指向确定的存储单元。 17.编一个程序,打入月份号,输出该月的英文月名,要求用指针数组处理。#include 18.编写递归函数,将输入的以“?”结束的字符串按与输入相反的顺序输出。#include 19.编写函数,在n个元素的一维数组中,统计比相邻元素大的数组元素个数并将统计数返回(不考虑a[0]和a[n-1]),要求以指针变量而不是数组名作参数。#include { float a[10]={1,3,4,2,6,7,12,5,9,8};printf(“%dn”,num(a,10));} 20.编写函数,在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。 #include { float a[10]={1,3,4,2,6,7,12,5,9,8},x,y;num(a,10,&x,&y);printf(“最大值为%f,最小值为%f。n”,x,y);} 21.编写一个函数,统计m行n列二维数组中有多少个正数、多少个负数,多少个零,并 返回统计结果。 #include { float b[5][3]={{-1,5,2},{3,0,-2},{0,-3,5}, {4,7,-8},{3,4,5}},*c[5];int i,k1,k2,k3;for(i=0;i<5;i++)c[i]=b[i];sub(c,5,3,&k1,&k2,&k3);printf(“负数%d个,零%d个,正数%d个。n”,k1,k2,k3);} 22.编写函数,在给定的一行以'.'结束的字符中,找出最长的单词并输出。#include p1=p2=p3=str;// p3指向最长串首字符,p1指向当前处理串首字符,while(*p2!='.')// p2为移动指针,*p2为空格表示查找到单词尾部。 if(*p2!=' '){ k2++;p2++;} else if(k2>k1){ p3=p1;p1=++p2;k1=k2;k2=0;} else { k2=0;p1=++p2;} for(k2=0;k2<=k1;k2++)printf(“%c”,*(p3+k2));printf(“n”);return;} void main()// 函数引用示例 { char a[40];int i=0;while((a[i++]=getchar())!='.');find(a);} 23.编写函数print,打印一个学生的成绩数组,该数组中有若干个学生的数据记录,每个记录包括num,name,score[3]。#include void print(struct student* s,int n){ int i;// 运算符'*'、'&'的优先级均低于运算符'.' for(i=0;i printf(“%s %s %4d%4d%4dn”,(*(s+i)).num,(*(s+i)).name,(*(s+i)).score[0],(*(s+i)).score[1],(*(s+i)).score[2]);return;} void main(){ struct student t[4];int i;for(i=0;i<4;i++) scanf(“%s%s%d%d%d”,&t[i].num,&t[i].name,&t[i].score[0], &t[i].score[1],&t[i].score[2]);print(t,4);} 24.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中的英文字符。 #include 25.编程,把文本文件d1.dat复制到d2.dat(其中空格字符不复制)。#include 26.编程,把文本文件d1.dat复制到d2.dat(其中大写英文字母要转换为小写字母)。 #include 27.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中除英文字符和数字以外的其它内容。#include if(!(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'||ch>='0'&&ch<='9'))fprintf(fpd2,“%c”,ch);fclose(fpd1);fclose(fpd2);} 28.求出1至100之间的素数(只能被1和自身整除的数)并顺序写入文件su.dat。 #include 29.磁盘文件a1和a2,各自存放一个已按字母顺序排好的字符串,编程合并二个文件到a3 文件中,合并后仍保持字母顺序。#include // 循环比较,直到读到文件尾标志为止。 fp3=fopen(“a3”,“w”);c1=fgetc(fp1);c2=fgetc(fp2);do { if(c1 30.顺序文件C.DAT每个记录包含学号(8位字符)和成绩(三位整数)两个数据项。从文件读入学生成绩,将大于或等于60分的学生成绩再形成一个新的文件SCORE60.DAT保存在A盘上,并显示出学生总人数、平均成绩和及格人数。#include typedef int datatype;typedef struct node {datatype data;struct node *next;}linklist;„„ INVERT(linklist *head){linklisk *p,*q;p=head->next;if(p!=NULL){head->next=NULL;do {q=p->next;p->next=head->next;head->next=p;p=q;} while(p!=NULL);} } 32.程序清单: PURGE(linklist *head){linklist *p,*q;q=head->next;if(q==NULL)return;p=q->next;while(p!=NULL)if(p->data==q->data){q=p->next;free(p);p=q->next;} else {q=p;p=p->next;} } 33、程序清单: #include 34、#include 第二篇:VB编程题(循环部分总结题目
第三篇:趣味编程题整理及答案
第四篇:vb语言编程教案
第五篇:c语言编程题答案