1、 第一章 算法初步 测试一 算法与程序框图概念 Ⅰ 学习目标 1.了解算法思想及算法的意义. 2.了解框图的概念,明确框图符号的意义. Ⅱ 基础性训练 一、选择题 1.下列程序框通常用来表示赋值、计算功能的是( C ) (A) (B) (C) (D) 2.算法的有穷性指的是( B ) (A)算法是明确和有效的 (B)算法能够在有限步内完成 (C)算法的每个操作步骤是可执行的 (D)用数字进行四则运算的有限过程 3.对算法理解正确的是( B ) (A)一种解题方法 (B)基本运算及规定的运算顺序构成的完整的解题步骤 (C)计算的方法 (
2、D)一种语言程序 4.算法中,每一步的结果有( C ) (A)一个或两个 (B)任意多个 (C)确定的一个 (D)两个 *5.有一堆形状大小相同的珠子,其中只有一粒重量比其他的珠子重,其余所有珠子重量相同.一个同学利用科学的算法,仅两次利用天平就找出了这颗最重的珠子,则这堆珠子最多有( D ) (A)6粒 (B)7粒 (C)8粒 (D)9粒 二、填空题 6.完成不等式2x+3<3x+2的算法过程: (1)将含x的项移项至不等式的左边,将常数项移至不等式的右边,得____________; (2)在不等式两边同时除以x的系数,得____________. 7.阅读流程图
3、图1),试写出流程图所给出的算法含义:已知一个数的13%,求这个数 图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.若是,则是质数,结束算法;否则返回第三步. 现设给定的整数为3
4、5,则算法结束时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
5、. 现已知某顾客的应付货款是882元,求该顾客的购物款是多少元. 14.输入直角三角形两直角边长度,输出第三条边长度,画出此题的顺序框图. 测试二 程序框图(一) Ⅰ 学习目标 理解三种逻辑结构,会读逻辑框图,尝试写出程序框图. Ⅱ 基础性训练 一、选择题 1.程序框图中“处理框”的功能是( ) (A)赋值 (B)计算 (C)赋值或计算 (D)判断某一条件是否成立 2.尽管算法千差万别,但程序框图按其逻辑结构分类只有( ) (A)2类 (B)3类 (C)4类 (D)5类 3.程序框图如图1所示,输出的结果为( ) 图1
6、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.如图
7、5,框图的输出结果是______. 图5 10.如图6所示框图,设火车托运重量为p(kg)的行李时,每千克的费用标准为 则图中①②处分别填的内容为:①______;②________________. 图6 三、解答题 11.已知函数f(x)=|x-3|,程序框图(图7)表示的是给出x值,求相应函数值的算法.请将该框图补充完整.写出①②两处应填的内容. 图7 12.观察所给算法的流程框图(图8),说明它表示的函数.如果输入数字1,则输出的数字是什么? 图8 Ⅲ 拓展性训练 13.设计一个求任意实数的绝对值的算法,并画出流程图. 14.已
8、知三个实数a,b,c,试给出寻找这三个数中最大数的一个算法,并画出该算法的流程图. 测试三 程序框图(二) Ⅰ 学习目标 理解三种逻辑结构,会读逻辑框图,尝试写出程序框图. Ⅱ 基础性训练 一、选择题 1.下列关于框图的逻辑结构说法正确的是( ) (A)用顺序结构画出“求点到直线的距离”的程序框图是唯一的 (B)条件结构中不含顺序结构 (C)条件结构中一定含有循环结构 (D)循环结构中一定包含条件结构 2.已知函数在由给定的自变量x计算函数值f(x)的算法中,应该至少包含以下基本逻辑结构中的( ) (A)顺序结构、循环结构 (B)条件结构、循环结构
9、 (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.算法:S1 m=a; S2 若b<m,
10、则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个奇数倒数之和的算法的程序框图,其中判
11、断框内应填入的条件是___________. 图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万元,写出算法并画出相应的程序框图.
12、 测试四 算法语言 Ⅰ 学习目标 了解算法语言,尝试用算法语言实现一些算法. Ⅱ 基础性训练 1.编写一个输入底面边长和侧棱长,求正四棱锥体积的程序. 2.已知函数f(x)=2x-3,编写一段程序,用来求f[f(x)]的值.(其中,x值由用户输入) 3.给出三个正数a,b,c,问能否构成一个三角形,若能则求其面积.请设计一个程序解决该问题. (注:已知三角形三边分别为a,b,c,则其面积,其中p=) 4.已知等式“□3×6528=3□×8256”中,方框内是同一个数字,请设计程序,用尝试的方法求出满足等式的一个数字.
13、 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的两个相邻偶数,流程
14、图如图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,程序框图所进行的求和运算是
15、 ) 图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.分别写出
16、图9和图10的运行结果:图9______;图10______. 图9 图10 参考答案 第一章 算法初步 测试一 1.C 2.B 3.B 4.C 5.D 6.-x<-1,x>1 7.已知一个数的13%,求这个数 8. 9.10 10.5 11.S1 求出原点到直线ax+by+c=0的距离. S2 比较d与圆的半径r=1的大小, 若d>r,则直线与圆相离;若d=r,则直线与圆相切;若d<r,则直线与圆相交. 12.S1 判断a是否为0,若是,则执行S4,若不是,则执行S2. S2
17、 解出. 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.C 2.B 3.A 4.B 5.C 6.a>0,或a<0 7.当方程根的判别式D≥0时,方程有实根;当方程根的判别式D<0时,方程没有实根. 8.“是负数”
18、 9.12,21 10.①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 S2 x←a S3 如果b>x,则x←b;否则,执行S4 S4 如果c>x,则x←c;否则,执行S5 S5 输出x 测试三 1.D 2.C 3.C 4.C 5.A 6.赋值或计算 7.从小到大连续n个正整数乘积大于1000时,计算出
19、最小的自然数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 S5 N=2004+n S6 输出N. 测试四 算法语言 1.a=input("底面边长a=");
20、 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 function y=f(x) y=2*x-3; endfunction //下面可直接调用f(x) x
21、=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.for i=1∶9 if((10*i+3)*6528==(30+i)*8256)then
22、 disp(i,"这个数字是:"); break; end; end; 5.[法一]用for语句实现 S=0; an=1; for i=1∶100 an=an*i; S=S+an; end; disp(S,"1!+2!+3!+…+100!="); [法二]用while语句实现 S=0; an=1; i=1 while i<=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
23、 //如果只要求前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项在下一轮循环中将变成第(
24、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) function y=f(x) y=x^3+x^2-2*x-2; endfunction 新课标第一网 //用户输入初始区间的左右端点 disp("请输入实根所在初始区间[a,b]:"); a=input("a="); b=input("b="); ya=f
25、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)then break;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;
26、 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(
27、x1>=x2)then begin 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]的左半部
28、分,则 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=x
29、2处取得最小值 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;
30、 //在顶点处取得最大值 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;
31、 //在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
32、=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=
33、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.C 2.C 3.A 4.C 5.A 6.y=-1;x=0?;y=0 7.2 8.57,8 9.6,5






