SQL循环结构程序复习精品管理资料.docx

上传人:b****5 文档编号:6102848 上传时间:2023-01-03 格式:DOCX 页数:14 大小:20.15KB
下载 相关 举报
SQL循环结构程序复习精品管理资料.docx_第1页
第1页 / 共14页
SQL循环结构程序复习精品管理资料.docx_第2页
第2页 / 共14页
SQL循环结构程序复习精品管理资料.docx_第3页
第3页 / 共14页
SQL循环结构程序复习精品管理资料.docx_第4页
第4页 / 共14页
SQL循环结构程序复习精品管理资料.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

SQL循环结构程序复习精品管理资料.docx

《SQL循环结构程序复习精品管理资料.docx》由会员分享,可在线阅读,更多相关《SQL循环结构程序复习精品管理资料.docx(14页珍藏版)》请在冰豆网上搜索。

SQL循环结构程序复习精品管理资料.docx

SQL循环结构程序复习精品管理资料

循环结构程序

1.利用随机函数RAND和函数floor,产生30个1到20之间的随机整数,使用WHILE语句显示这30个随机数。

declare@iint,@xint

select@i=1

while@i〈=30

begin

set@x=FLOOR(RAND()*(20—1+1)+1)

set@i=@i+1

print@x

end

2。

设纸的厚度为0.5毫米,将纸对折,再对折…,求至少对折多少次,纸张的厚度能达到珠穆朗玛峰的高度8848米.

方法一:

Declare@hdecimal(10,1),@nint

select@h=0.5,@n=0

while@h〈8844000——运算部分

begin

set@h=@h*2

set@n=@n+1

end

select’对折’,@n,’次后可以超过珠峰的高度‘—输出部分

方法二:

Declare@hdecimal(10,1),@nint

select@h=0。

5,@n=0

while@h〈8844000—-运算部分

begin

set@n=@n+1

set@h=0。

5*power(2,@n)

end

--select’对折’,@n,’次后可以超过珠峰的高度’

print’对折'+ltrim(str(@n))+’次后可以超过珠峰的高度’

3。

求自然数1~100之间奇数之和

declare@iint,@sbigint

select@i=1,@s=0

while@i〈=100

begin

set@s=@s+@i

set@i=@i+2

end

select’@s=’,@s

4.编写程序,输出由1、2、3、4、5、6这六个数字组成的所有可能的两位数,并统计它们的个数.

declare@xint,@iint,@jint,@nint

set@x=123456

set@i=1

set@n=0

while@i〈=6

begin

set@j=1

while@j〈=6

begin

printstr(@i,1)+str(@j,1)

set@n=@n+1

set@j=@j+1

end

set@i=@i+1

end

print’@n=’+str(@n,3)

5.编写程序,输入一个数,判定该数是否为素数,如果是素数,则输出“该数是素数”的信息,否则输出“该数不是素数”的信息。

(输出50—100之间所有素数)

方法一:

用循环变量等于要判断的数减一的方法来确定。

declare@xint,@iint

set@i=2

set@x=6

while@i〈=@x—1

begin

if@x%@i=0

break

else

set@i=@i+1

end

if@i=@x

printstr(@x)+‘是素数'

else

printstr(@x)+‘不是素数’

方法二:

使用做记号的方法.

declare@xint,@iint,@jhbit

set@jh=0—-使用变量做记号

set@i=2

set@x=5

while@i<=@x-1

begin

if@x%@i=0

begin

set@jh=1

break

end

else

set@i=@i+1

end

if@jh=0

printstr(@x)+‘是素数’

else

printstr(@x)+‘不是素数’

6.编程计算从1到30之间的所有7的倍数之和

declare@iint,@sbigint

select@i=1,@s=0

while@i〈=30

begin

if@i%7=0

set@s=@s+@i

set@i=@i+1

end

select’@s=',@s

7.在国际象棋棋盘的64个格上依次放入小麦1粒、2粒、4粒、8粒…,求按此规律放满64个格需要多少粒小麦。

分析:

后一个数是前一个数的2倍,得出通式为:

@X=2*@X

declare@xfloat,@Sfloat,@nbigint

select@x=1,@s=0,@n=1

while@n〈=64

begin

set@s=@s+@x

set@x=2*@x

set@n=@n+1

print@x

end

print’@s='+cast(@sasvarchar(40))

8。

求自然数1~100之间偶数之和

declare@iint,@sbigint

select@i=0,@s=0

while@i<=100

begin

set@s=@s+@i

set@i=@i+2

end

select'@s=’,@s

9.计算s=1+1/2+1/4+1/7+1/11+1/16+1/22+1/29+…当第i项的值小于0。

0004时结束。

提示:

找出规律,第i项的分母是前一项的分母加i减1.

declare@iint,@sfloat,@fmfloat

-—@i是项数,@fm是分母,@s是所求的和值

set@i=1

set@s=0

set@fm=1

while1/@fm〉0。

0004

begin

set@s=@s+1/@fm

set@i=@i+1

set@fm=@fm+@i—1-—第i项的分母是前一项的分母加i减1

end

print’@s='+str(@s,7,4)

print’@i='+str(@i,7,4)——查看一下第多少项时1/fm为0。

0004

print'@fm='+str(@fm,7,4)-—查看一下1/fm为0。

0004时的fm是多少

注意:

分母(@fm)必须定义为float类型,不能定义为int,因两个整数相除商为整数而得不到小数。

10.编写程序,在100~999三位整数范围内,找出这样的数(水仙花数):

该数等于其各位数字的立方和。

如:

371=3^3+7^3+1^3,即371就是水仙花数。

注意:

3^3表示3的3次方,7^3表示7的3次方,1^3表示1的3次方.(找出所有的水仙花数)

分析:

首先要会将数进行分解,分解的方法我们讲过至少3种。

第一种,一般的分解方法:

Declare@xint,@aint,@bint,@cint,@sint

set@x=456

Set@a=floor(@x/100)-—取出百位上的数字

Set@b=floor((@x—@a*100)/10)—-取出十位上的数字

set@c=@x—@a*100-@b*10——取出个位上的数字

使用以上分解数的方法所编代码为:

Declare@xint,@aint,@bint,@cint

print'100-999之间的所有水仙花是:

set@x=100

while@x<=999

begin

Set@a=floor(@x/100)-—取出百位上的数字

Set@b=floor((@x—@a*100)/10)—-取出十位上的数字

set@c=@x-@a*100-@b*10—-取出个位上的数字

ifpower(@a,3)+power(@b,3)+power(@c,3)=@x

print@x

set@x=@x+1

end

第二种,找通式方法:

假设@x=1234

个位=(Floor(@x/1))%10

十位=(Floor(@x/10))%10

百位=(Floor(@x/100))%10

千位=(Floor(@x/1000))%10

通式:

X(i)=FLOOR(@X/10(i—1))%10i从个位数起.

使用以上分解数的方法所编代码为:

Declare@xint,@aint,@bint,@cint

print'100-999之间的所有水仙花是:

set@x=100

while@x〈=999

begin

Set@a=(Floor(@x/100))%10——取出百位上的数字

Set@b=(Floor(@x/10))%10——取出十位上的数字

set@c=(Floor(@x/1))%10—-取出个位上的数字

ifpower(@a,3)+power(@b,3)+power(@c,3)=@x

print@x

set@x=@x+1

end

第三种,取子串的方法

Declare@xint,@aint,@bint,@cint

print’100—999之间的所有水仙花是:

set@x=100

while@x<=999

begin

Set@a=str(substring(cast(@xaschar(3)),1,1),1)—-取出百位上的数字

Set@b=str(substring(cast(@xaschar(3)),2,1),1)-—取出十位上的数字

set@c=str(substring(cast(@xaschar(3)),3,1),1)—-取出个位上的数字

ifpower(@a,3)+power(@b,3)+power(@c,3)=@x

print@x

set@x=@x+1

end

提示:

代码中的cast(@xaschar(3))是将数值型的@X转换为字符型数据,之后用substring函数取子串,然后再将字符型数据用str函数转换为数值型数据。

11。

计算1!

+2!

+…+20!

方法一:

使用双循环即循环嵌套来实现。

declare@s1float,@S2float,@iint,@jint

set@i=1

set@s1=0

while@i<=4

begin

set@j=1

set@s2=1

while@j<=@i

begin

set@s2=@s2*@j

set@j=@j+1

end

printstr(@j—1,2)+’!

=’+ltrim(str(@s2))

set@s1=@s1+@s2

set@i=@i+1

end

print’1!

+2!

+3!

+。

.。

的和@s1=’+cast(@s1asvarchar(40))

方法二:

使用单循环也可实现。

declare@s1float,@S2float,@iint,@jint

set@i=1

set@s1=0——用来存放和值

set@s2=1—-用来存放阶乘值

while@i〈=4

begin

set@s2=@s2*@i

set@s1=@s1+@s2

set@i=@i+1

end

print'1!

+2!

+3!

+。

.。

的和@s1=’+cast(@s1asvarchar(40))

类似的题目还有:

s=1+(1+2)+(1+2+3)+(1+2+3+4)+….+(1+2+#+…+n),模仿上例自己编程实现.

12.利用循环结构求s的值,S=1*2*3+2*3*4+…+i*(i+1)*(i+2)+…+15*16*17的值。

declare@s1float,@S2float,@iint,@jint

set@i=1

set@s1=0——用来存放和值

set@s2=1——用来存放乘积

while@i〈=3

begin

set@s2=@i*(@i+1)*(@i+2)

set@s1=@s1+@s2

set@i=@i+1

end

print’1*2*3+2*3*4+…+i*(i+1)*(i+2)+…+15*16*17的和@s1='+cast(@s1asvarchar(40))

13。

有一个分数序列,求出这个序列的前20项之和.2/1,3/2,5/3,8/5,13/8,21/13,….提示:

后一项是前一项的倒数加1。

declare@sfloat,@xfloat,@iint

set@i=1

set@s=0——用来存放和值

set@x=2/1

while@i〈=20

begin

set@s=@s+@x

set@i=@i+1

set@x=1/@x+1-—后一项是前一项的倒数加1

end

print’2/1,3/2,5/3,8/5,13/8,21/13的前20项的和@s=’+cast(@sasvarchar(40))

14.计算1^3+2^3+3^3+…+100^3。

注意:

1^3表示1的3次方,2^3表示2的3次方,…,100^3表示100的3次方.

declare@sbigint,@iint

set@i=1

set@s=0——用来存放和值

while@i<=100

begin

set@s=@s+power(@i,3)

set@i=@i+1

end

print’1^3+2^3+3^3+…+100^3的和@s=’+cast(@sasvarchar(40))

15。

编写程序,用Print语句显示1~50之间的奇数

declare@iint

print’显示1~50之间的奇数'

set@i=1

while@i〈=50

begin

print@i

set@i=@i+2

end

16。

求s=a+aa+aaa+…+aaa…aaa(n个a),其中a和n的值由用户使用Set或Select语句自己输入。

例如,当a=3,n=4时,S=3+33+333+3333。

方法一:

用重复产生字符函数REPLICATE编程:

declare@achar

(1),@tvarchar(50),@sint,@nint

set@a=’3'

set@s=0

set@n=1

while@n<=5

begin

set@t=REPLICATE(@a,@n)

print@t

set@s=@s+@t

set@n=@n+1

end

print@s

declare@iint,@avarchar(10),@sbigint

print'求a+aa+aaa+…+aaa…aaa(n个a)的和’

set@s=0

set@i=1

set@a=’5’

while@i<=4

begin

set@a=’5’

set@a=replicate(@a,@i)

print@a

set@s=@s+cast(@aasint)

set@i=@i+1

end

print’求a+aa+aaa+…+aaa…aaa(n个a)的和@s=’+ltrim(str(@s,15))

法二下面方法更简单

Declare@aint,@nint,@sint,@tint

Set@a=3——某一项中的数字

Set@n=1-——项数

set@t=3——某一项变量

Set@s=0——累加变量

While@n〈=4

Begin

Set@s=@s+@t

set@t=@t*10+@a

Set@n=@n+1

End

Print@s

其他方法:

Declare@aint,@nint,@sint

Set@a=3

Set@n=1

Set@s=0

While@n〈=4

Begin

Set@s=@s+@a*(power(10,@n)—1)/9

Set@n=@n+1

End

Print@s

其他方法:

按位权展开法

如X=123按位权展开法得到结果为:

X=1*102+2*101+3*100,可得通式为

X=X+Floor(((a/10^(i-1)))%10)*10^(i-1)

说明:

公式中的Floor(((a/10^(i—1)))%10),是把每一个数分离出来的通式。

由于该题每一个数位都相同,因此通式可写为

X=X+a*10(i—1)

declare@iint,@xbigint,@aint,@sbigint

print’求s=a+aa+aaa+…+aaa…aaa(n个a)的和’

set@s=0

set@i=1

set@a='5'

set@x=0

while@i<=4

begin

set@x=@x+@a*power(10,@i—1)

print@x

set@s=@s+@x

set@i=@i+1

end

print'求a+aa+aaa+…+aaa…aaa(n个a)的和@s=’+ltrim(str(@s,15))

17.统计未来100年中闰年的年份个数

Declare@yint,@nint

set@y=2013

set@n=0

while@y〈=2113

begin

IF(@y%4)=0AND(@y%100)!

=0or(@y%400)=0

begin

printstr(@y,4)+'是闰年'

set@n=@n+1

end

set@y=@y+1

end

print'未来100年中闰年的年份个数@n=’+str(@n,3)

18.求s=1+2+3+……+n〉9999的最小n

Declare@sint,@nint

set@s=0

set@n=0

while@s<9999

begin

set@n=@n+1

set@s=@s+@n

end

print’1+2+3+……+n〉9999的最小@n='+str(@n,3)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1