第一章 算法初步课时练习题及答案.docx
《第一章 算法初步课时练习题及答案.docx》由会员分享,可在线阅读,更多相关《第一章 算法初步课时练习题及答案.docx(25页珍藏版)》请在冰豆网上搜索。
第一章算法初步课时练习题及答案
第一章算法初步
Ⅰ学习目标
1.了解算法思想及算法的意义.
2.了解框图的概念,明确框图符号的意义.
Ⅱ基础性训练
一、选择题
1.下列程序框通常用来表示赋值、计算功能的是()
(A)(B)(C)(D)
2.算法的有穷性指的是()
(A)算法是明确和有效的(B)算法能够在有限步内完成
(C)算法的每个操作步骤是可执行的(D)用数字进行四则运算的有限过程
3.对算法理解正确的是()
(A)一种解题方法(B)基本运算及规定的运算顺序构成的完整的解题步骤
(C)计算的方法(D)一种语言程序
4.算法中,每一步的结果有()
(A)一个或两个(B)任意多个(C)确定的一个(D)两个
*5.有一堆形状大小相同的珠子,其中只有一粒重量比其他的珠子重,其余所有珠子重量相同.一个同学利用科学的算法,仅两次利用天平就找出了这颗最重的珠子,则这堆珠子最多有()
(A)6粒(B)7粒(C)8粒(D)9粒
二、填空题
6.完成不等式2x+3<3x+2的算法过程:
(1)将含x的项移项至不等式的左边,将常数项移至不等式的右边,得____________;
(2)在不等式两边同时除以x的系数,得____________.
7.阅读流程图(图1),试写出流程图所给出的算法含义:
__________________.
图1
8.写出图2中顺序框图的运算结果____________.
图2
9.写出图3中顺序框图的运算结果____________.
图3
10.“判断整数n(n>2)是否为质数”的算法可以按如下步骤进行:
S1给定大于2的整数n.
S2令i=2.
S3用i除n,得到余数r.
S4判断余数r是否为0.若为0,则不是质数,结束算法;否则将i的值增加1仍用i
表示.
S5判断i是否大于n-1.若是,则是质数,结束算法;否则返回第三步.
现设给定的整数为35,则算法结束时i的值是______.
三、解答题
11.写出判断直线ax+by+c=0与圆x2+y2=1的位置关系的算法.
12.写出求解二元一次方程组
的算法步骤.
13.在某商场购物时,商场会按顾客购物款的数额的大小分别给予不同的优惠折扣.计算顾客应付货款的算法步骤如下:
S1输入购物款x.(购物款以元为单位)
S2若x<250,则折扣率d=0;
若250≤x<500,则折扣率d=0.05;
若500≤x<1000,则折扣率d=0.10;
若x≥1000,则折扣率d=0.15;
S3计算应付货款T=x(1-d);
S4输出应付货款T.
现已知某顾客的应付货款是882元,求该顾客的购物款是多少元.
14.输入直角三角形两直角边长度,输出第三条边长度,画出此题的顺序框图.
测试二程序框图
(一)
Ⅰ学习目标
理解三种逻辑结构,会读逻辑框图,尝试写出程序框图.
Ⅱ基础性训练
一、选择题
1.程序框图中“处理框”的功能是()
(A)赋值(B)计算
(C)赋值或计算(D)判断某一条件是否成立
2.尽管算法千差万别,但程序框图按其逻辑结构分类只有()
(A)2类(B)3类(C)4类(D)5类
3.程序框图如图1所示,输出的结果为()
图1
(A)2,5(B)4,7(C)2,4(D)1,2
4.程序框图如图2所示,输出的结果为()
图2
(A)2(B)9(C)3(D)1
5.程序框图如图3所示,当a=1,b=-3时输出的结果为()
(A)0,-1(B)2,-4(C)
,
(D)-2,4
图3
二、填空题
6.用流程图表示求解不等式ax>b(a≠0)的算法时,判断框内的内容可以是_________.
7.在表示求解一元二次方程的算法中,需要使用选择结构,因为__________________.
8.如图4,当a=-1时,框图的输出结果是______.
图4
9.如图5,框图的输出结果是______.
图5
10.如图6所示框图,设火车托运重量为p(kg)的行李时,每千克的费用标准为
则图中①②处分别填的内容为:
①______;②________________.
图6
三、解答题
11.已知函数f(x)=|x-3|,程序框图(图7)表示的是给出x值,求相应函数值的算法.请将该框图补充完整.写出①②两处应填的内容.
图7
12.观察所给算法的流程框图(图8),说明它表示的函数.如果输入数字1,则输出的数字是什么?
图8
Ⅲ拓展性训练
13.设计一个求任意实数的绝对值的算法,并画出流程图.
14.已知三个实数a,b,c,试给出寻找这三个数中最大数的一个算法,并画出该算法的流程图.
测试三程序框图
(二)
Ⅰ学习目标
理解三种逻辑结构,会读逻辑框图,尝试写出程序框图.
Ⅱ基础性训练
一、选择题
1.下列关于框图的逻辑结构说法正确的是()
(A)用顺序结构画出“求点到直线的距离”的程序框图是唯一的
(B)条件结构中不含顺序结构
(C)条件结构中一定含有循环结构
(D)循环结构中一定包含条件结构
2.已知函数
在由给定的自变量x计算函数值f(x)的算法中,应该至少包含以下基本逻辑结构中的()
(A)顺序结构、循环结构(B)条件结构、循环结构
(C)顺序结构、条件结构(D)顺序结构、循环结构
3.下列四个说法中正确的有()
①任意一个算法都离不开顺序结构
②算法程序框图中,根据条件是否成立有不同的流向
③循环体是指按照一定条件,反复执行某一处理步骤
④循环结构中一定有条件结构,条件结构中一定有循环结构
(A)1个(B)2个(C)3个(D)4个
4.要解决下面四个问题,只用顺序结构画不出其流程图的是()
(A)计算1+2+…+10的值(B)当圆的面积已知时,求圆的周长
(C)给定一个数x,求其绝对值(D)求函数f(x)=x3-3x的值
5.算法:
S1m=a;
S2若b<m,则m=b;
S3若c<m,则m=c;
S4若d<m,则m=d;
S5输出m.
则输出的m为()
(A)a,b,c,d中的最小值(B)a,b,c,d中的最大值
(C)d(D)a
二、填空题
6.程序框图中的“处理框”的功能是____________.
7.有如图1所示的程序框图,该程序框图表示的算法功能是____________.
图1
8.如图2所示是求小于等于1000所有正偶数的和的程序框图,则空白处①应为_________;②应为___________.
图2
9.如图3所示表示的是计算前10个奇数倒数之和的算法的程序框图,其中判断框内应填入的条件是___________.
图3
三、解答题
10.给出如图4所示的程序框图.在执行上述框图表达的算法后,输出的S,i的值分别是多少?
图4
11.写出表示解方程ax+b=0(a,b为常数)的一个程序框图.
Ⅲ拓展性训练
12.设计求S=1+3+5+…+2007和T=1×3×5×…×2007的一个算法,并画出相应的流程图.
13.某工厂2004年的生产总值为200万元,技术革新后,预计以后每年的生产总值比上一年增加5%,问最早需要到哪一年年生产总值超过300万元,写出算法并画出相应的程序框图.
测试四算法语言
Ⅰ学习目标
了解算法语言,尝试用算法语言实现一些算法.
Ⅱ基础性训练
1.编写一个输入底面边长和侧棱长,求正四棱锥体积的程序.
2.已知函数f(x)=2x-3,编写一段程序,用来求f[f(x)]的值.(其中,x值由用户输入)
3.给出三个正数a,b,c,问能否构成一个三角形,若能则求其面积.请设计一个程序解决该问题.
(注:
已知三角形三边分别为a,b,c,则其面积
,其中p=
)
4.已知等式“□3×6528=3□×8256”中,方框内是同一个数字,请设计程序,用尝试的方法求出满足等式的一个数字.
5.请编写一个程序,计算1!
+2!
+3!
+4!
+…+100!
(注:
其中4!
=1×2×3×4,5!
=1×2×3×4×5,…,100!
=1×2×3×…×100)
Ⅲ拓展性训练
6.已知数列{an}满足:
a1=1,a2=3,对于任意的n≥3,有an=3an-1-2an-2.求该数列的前n项和.
7.写出一个用二分法求方程x3+x2-2x-2=0在某个区间上的近似解的程序.要求:
初始区间和计算精度都能在运行中指定.
8.求二次函数在给定区间上的最值.
测试五逻辑框图综合测试
一、选择题
1.找出乘积为528的两个相邻偶数,流程图如图1,其中填充①②处语句正确的选择是()
图1
(A)S=i*(i+2),输出i,i-2
(B)S=i*i+2,输出i,i-2
(C)S=i*(i+2),输出i,i+2
(D)S=i*(i-2),输出i+2,i
2.如图2所示的算法流程图中,第三个输出的数是()
图2
(A)1(B)
(C)2(D)
3.阅读流程图3,若输入的a,b,c分别为21,32,75,则输出的a,b,c分别是()
图3
(A)75,21,32(B)21,32,75(C)32,21,75(D)75,32,21
4.如图4,程序框图所进行的求和运算是()
图4
(A)
(B)
(C)
(D)
5.如果如图5程序框图的输出结果为-18,那么在判断框①中表示的“条件”应该是()
图5
(A)i≥9
(B)i>9
(C)i≥8
(D)i>11
6.函数
求值的程序框图如图6所示,则空白处需要填的语句为:
①_________;②_________;③_________.
图6
7.如图7是一个算法的程序框图,当输入的值为5时,则其输出的结果是______.
图7
8.阅读流程图8填空:
①最后一次输出的i=______;②一共输出i的个数为______个.
图8
9.分别写出图9和图10的运行结果:
图9______;图10______.
图9图10
参考答案
第一章算法初步
测试一
1.C2.B3.B4.C5.D
6.-x<-1,x>17.已知一个数的13%,求这个数8.
9.1010.5
11.S1求出原点到直线ax+by+c=0的距离
.
S2比较d与圆的半径r=1的大小,
若d>r,则直线与圆相离;若d=r,则直线与圆相切;若d<r,则直线与圆相交.
12.S1判断a是否为0,若是,则执行S4,若不是,则执行S2.
S2解出
.
S3将
代入x+y=2,解出
.
S4输出方程组的解.
若a=0,则输出“方程组无解”;否则,输出方程组的解
13.解:
设该顾客的购物款为x元.
根据题意,x>882.
如果x<1000,则0.9x=882,解得x=980;
如果x≥1000,则0.85x=882,解得x≈1037.65;
所以,该顾客的购物款是980元或1037.65元.
14.
测试二
1.C2.B3.A4.B5.C
6.a>0,或a<0
7.当方程根的判别式∆≥0时,方程有实根;当方程根的判别式∆<0时,方程没有实根.
8.“是负数”9.12,2110.①0.3*p②0.3*30+0.5*(p—30).
11.x<3,y=x-3.或x≤3,y=x-3.
12.流程框图表示的是下面的函数:
输出的数字是3.
13.S1输入x
S2如果x≥0,则y←x;否则y←-x
S3输出y.
14.S1输入a,b,c
S2x←a
S3如果b>x,则x←b;否则,执行S4
S4如果c>x,则x←c;否则,执行S5
S5输出x
测试三
1.D2.C3.C4.C5.A
6.赋值或计算
7.从小到大连续n个正整数乘积大于1000时,计算出最小的自然数n.或其他等价的回答.
8.S=S+i,i=i+2
9.n≤10?
10.3205,51
11.
12.S1赋值S=1,T=1
S2赋值i=3
S3赋值S=S+i,赋值T=T×i
S4赋值i=i+2
S5若i≤2007,则执行S3
S6输出S,T.
13.S1赋值n=0,a=200,r=0.05
S2年增量T=ar
S3年产量a=a+T
S4若a≤300,那么n=n+2,重复执行S2
S5N=2004+n
S6输出N.
测试四算法语言
1.a=input("底面边长a=");
1=input("侧棱长l=");
//注:
这里应该对输入数据的合理性作出判别.
h=sqrt(1^2-(sqrt
(2)/2*a)^2);//计算棱锥的高
V=a^2*h/3;//计算棱锥的体积
disp(V,"正四棱锥的体积为");
2.[法一]
x=input("x=");
y=2*x-3;//计算y=f(x)
y=2*y-3;//计算y=f(f(x))
disp(y);
[法二]
//定义函数f(x)=2*x-3
functiony=f(x)
y=2*x-3;
endfunction
//下面可直接调用f(x)
x=input("x=");
y=f(f(x));//与代数中的表达方式一样
disp(y);
3.disp("请输入三角形的三条边长:
");
a=input("a=");
b=input("b=");
c=input("c=");
if(a+b>c)&(a+c>b)&(b+c>a)then
p=(a+b+c)/2;
S=sqrt(p*(p-a)*(p-b)*(p-c));
disp(S,"三角形面积为");
else
disp("不能构成三角形!
");
end;
4.fori=1∶9
if((10*i+3)*6528==(30+i)*8256)then
disp(i,"这个数字是:
");
break;
end;
end;
5.[法一]用for语句实现
S=0;
an=1;
fori=1∶100
an=an*i;
S=S+an;
end;
disp(S,"1!
+2!
+3!
+…+100!
=");
[法二]用while语句实现
S=0;
an=1;
i=1
whilei<=100
an=an*i;
S=S+an;
i=i+1;
end;
disp(S,"1!
+2!
+3!
+…+100!
=");
6.a_n_2=1;
a_n_1=3;
n=input("要求前多少项的和呢?
请输入n=");
S=0;
//如果只要求前1项或2项的和,则不需要用到递推关系
if(n==1)then
S=a_n_2;
elseif(n==2)then
S=a_n_2+a_n_1;
end;
//如果n大于2,则要用递推关系
i=3;
while(i<=n)
a_n=3*a_n_1-2*a_n_2;//先由递推关系求出下一项
S=S+a_n;//然后累加到和S中
a_n_2=a_n_1;//原来的第(n-1)项在下一轮循环中将变成第(n-2)项
a_n_1=a_n;//原来的第n项在下一轮循环中将变成第(n-1)项
i=i+1;//项的脚标增1(表示下一轮循环要计算下一项了)
end;
printf("前%d项和为:
%d",int(n),int(S));
7.//定义函数f(x)=x^3+x^2-2x-2
//方程f(x)=0有三个实数解:
-sqrt
(2),-1,sqrt
(2)
functiony=f(x)
y=x^3+x^2-2*x-2;
endfunction
//用户输入初始区间的左右端点
disp("请输入实根所在初始区间[a,b]:
");
a=input("a=");
b=input("b=");
ya=f(a);
yb=f(b);
//用户输入计算精度
d=abs(input("请输入计算精度(输入的越小精度越高,但计算花费的时间就越多):
"));
//下面通过二分法求符合精度的近似解
x=0;
err=%f;
while(abs(b-a)>=d)
x=(a+b)/2;
y=f(x);
if(y==0)thenbreak;end;//若此时x的值正好是方程的解,则退出循环
if(y*ya<0)then
b=x;
yb=f(b);
elseif(y*yb<0)then
a=x;
ya=f(a);
else
err=%t;
break;
end;
end;
if(err==%t)then
disp("计算中出现问题,可能是在您输入的初始区间中没有实根.");
else
printf("方程的近似解为:
x=%f.",x);
end;
8.[法一]
disp("请依次输入f(x)=ax^2+bx+c的系数");
a=input("a=");
if(a==0)then
disp("系数a不能为0!
");
abort;
end;
b=input("b=");
c=input("c=");
disp("请输入区间的左右端点:
");
x1=input("x1=");
x2=input("x2=");
if(x1>=x2)thenbegin
disp("区间端点输入错误!
");
abort;
end;
x0=-b/(2*a);//对称轴
if(a>0)then//如果开口朝上
if(x0<x1)then//如果对称轴在给定区间的左侧,则
min_v=a*x1^2+b*x1+c;//在x=x1处取得最小值
max_v=a*x2^2+b*x2+c;//在x=x2处取得最大值
elseif(x0<(x1+x2)/2)then//如果对称轴在区间[x1,x2]的左半部分,则
min_v=a*x0^2+b*x0+c;//在顶点处取得最小值
max_v=a*x2^2+b*x2+c;//在x=x2处取得最大值
elseif(x0<x2)then//如果对称轴在区间[x1,x2]的右半部分,则
min_v=a*x0^2+b*x0+c;//在顶点处取得最小值
max_v=a*x1^2+b*x1+c;//在x=x1处取得最大值
else//如果对称轴在区间[x1,x2]右侧,则
min_v=a*x2^2+b*x2+c;//在x=x2处取得最小值
min_v=a*x1^2+b*x1+c;//在x=x1处取得最大值
end;
else//如果开口朝下
if(x0<x1)then//如果对称轴在给定区间的左侧,则
max_v=a*x1^2+b*x1+c;//在x=x1处取得最大值
min_v=a*x2^2+b*x2+c;//在x=x2处取得最小值
elseif(x0<(x1+x2)/2)then//如果对称轴在区间[x1,x2]的左半部分,则
max_v=a*x0^2+b*x0+c;//在顶点处取得最大值
min_v=a*x2^2+b*x2+c;//在x=x2处取得最小值
elseif(x0<x2)then//如果对称轴在区间[x1,x2]的右半部分,则
max_v=a*x0^2+b*x0+c;//在顶点处取得最大值
min_v=a*x1^2+b*x1+c;//在x=x1处取得最小值
else//如果对称轴在区间[x1,x2]右侧,则
max_v=a*x2^2+b*x2+c;//在x=x2处取得最大值
min_v=a*x1^2+b*x1+c;//在x=x1处取得最小值
end;
end;
printf("最小值=%f,\n最大值=%f",min_v,max_v);
[法二]
(为[法一]的简化版)
a=input("a=");
b=input("b=");
c=input("c=");
x1=input("x1=");
x2=input("x2=");
x0=-b/(2*a);//对称轴
if(x0<x1)then//如果对称轴在给定区间的左侧,则
v1=a*x1^2+b*x1+c;//在x=x1处取得最小值
v2=a*x2^2+b*x2+c;//在x=x2处取得最大值
elseif(x0<(x1+x2)/2)then//如果对称轴在区间[x1,x2]的左半部分,则
v1=a*x0^2+b*x0+c;//在顶点处取得最小值
v2=a*x2^2+b*x2+c;//在x=x2处取得最大值
elseif(x0<x2)then//如果对称轴在区间[x1,x2]的右半部分,则
v1=a*x0^2+b*x0+c;//在顶点处取得最小值
v2=a*x1^2+b*x1+c;//在x=x1处取得最大值
else//如果对称轴在区间[x1,x2]右侧,则
v1=a*x2^2+b*x2+c;//在x=x2处取得最小值
v2=a*x1^2+b*x1+c;//在x=x1处取得最大值
end;
if(a>0)then
printf("最小值=%f,\n最大值=%f",v1,v2);
else
printf("最小值=%f,\n最大值=%f",v2,v1);
end;
测试五
1.C2.C3.A4.C5.A
6.y=-1;x=0?
;y=07.28.57,89.6,5