Merlin's Blog
Just record something
Toggle navigation
Merlin's Blog
Home
Scratch基础教程
About Me
Archives
Tags
精品高考全真模拟卷(技术)
2021-04-05 09:54:13
165
0
0
merlin
###**信息技术模拟卷一** **选择题8** 可以逐步模拟,即手动模拟程序执行。 也可以找关键语句进行分析 (1)$i$每次递增1 (2)$s=1+2+...$。 (3)循环终止条件为$i\leq 10$ (4)循环内的判断条件为$s$是$10$的倍数 根据(2)和(4),可以得出$s=10$的时候跳出程序,输出$s$的值,并未输出$i$的值,只有从$i\leq 10$结束才会输出$i$的值,所以这题答案为$A$. **选择题11** 此题虽然是选择题,但还是可以看成阅读程序,对编程不熟练的,可以手动模拟程序运行,记录变量值的变化。 阅读程序,首先要明确变量的职责,即用来做什么。 第1句,$s$从文本框中获取文本信息 第2句,$n$从$s$中获取文本长度 接着循环把数组$y$的值初始化为$1$ 接着**双重循环**是在**两两组合**,属于**组合式**枚举。同理,编程经验不足的情况下,可以手动模拟,观察一下$i$和$j$的值变化,也能推断出程序在$s$中任选两个位置。 $Mid$是取子串操作,综上所述,我们可以分析出循环中这条语句的作用。 ``` if Mid(s,j,1)>Mid(s,i,1) Then y(j) = y(j) + 1 Else y(i) = y(i) + 1 End If ``` 形如$s = s + 1$的就是在统计次数,所以这条语句可以理解成对每个字符和其它字符比较,谁赢谁计$1$次。 再来看看给定的数据是:**1 6 4 4** - 位置1 :$1$后面一个都赢不了,所以$y(1)=1$ - 位置2 :$6$最大,所以$y(2)=4$ - 位置3 :$4$注意语句中的$Else$,当第$j=4$和$i=3$做比较的时候,并没有满足条件,则会转入$Else$执行,那样的话,**相等**也会计入,所以$y(3)=3$ - 位置4 :当$i=3$执行完后,循环结束,所以对第$4$个位置而言,之前只有$s(1)=1$的时候,令$y(4) = y(4) + 1$。所以$y(4)=2$.  只要有模拟程序运行的习惯,加上分析,这类题就是送分题。 **选择题12** 对有编程经验的人,一看便知是道**二分**题型,当然自己模拟一下也能轻松解决的。 首先还是要去分析变量的职责,变量都是用来保存数据的,只要知道用来做什么的,在阅读程序的时候,难度就会降低。 ``` Key = Val(Text.Text) ``` 结合上下文可以知道$key$是查询的数。 $L$和$R$,指向数组的头和尾位置,可以理解成指针。 ``` Do While L<=R m = Fix((L+R)/2) //二分,取中间位置 if Key > a(m) Then //Key比当前位置上的数大,说明右边都比Key小 R = m - 1 Else L = m + 1 //否则key小于或等于当前位置,排除左边区间 End If Loop ``` 画图分析。 **第一步**  **第二步**  **第三步**  **第四步**  所以,这题答案为$D$. **非选择题16** 此类题,在编程竞赛中叫**完善程序**,这类题的特点是,经常会把思路在题目描述中阐述,如果**反复阅读题意和分析程序代码**,总能找到一些线索。 ``` Priate Sub Command1_Click() ``` 此子程序(函数)的作用是从数据库文件中读取记录 而题目中说了成绩是存放在数组$a$中的,所以从 ``` a(n)=rs.Fields("cj") ``` 可以得知成绩存放于$cj$字段中。 **程序第1空** 对应的描述为第3段,实际上在求**后缀和**,从最后一项到当前这项的和。 ``` For i = 99 To 0 Step -1 ``` 从循环可以知,从$99$枚举到$0$,而成绩最高位$100$,所以自然会得出后缀和递推式:$b(i)=b(i)+b(i+1)$ 以后遇到**前缀和**,递推式形如$b(i)=b(i-1)+?$ $?$随题目情景而变化。 **程序第2空** 对应的是题目描述中的第4段。 通过数组$b$,从左往右依次将数组$a$中元素(即小组成绩)填入到数组$s1$中,<font color=red>**将数组元素$a(i)$存放在数组$s1$的$b(a(i))$项**</font>,如元素$a(1)=93$,应该放在数组$s1$的$b(93)$(即$c(9)$)。每放一个元素就将$b(a(i))$递减。 红色加粗部分即为程序第$2$空填法,只需翻译即可。 ``` s1(b(a(i)))=a(i) ``` **程序第3空** 把$sl$和$s2$再倒腾回去,根据最后生成的成绩表格(题目描述最后的表格),下标应该从小到大,所以填:**1 to n** *** ###**信息技术模拟卷二** **非选择题16** <font color=red>**01背包**</font>,即一件物品要么选择,要么不选择,所以叫01背包。 这段代码可以看成$2$部分: - (1) 数据提取 - (2) 二进制枚举 因为数据在控件**Text1**和**Text2**中,那么$s$表示商品相关数据(生产时间和商品价值),$n$表示总加工时间,直接转换为数据。 **第一空** 为了提取数据,自然是要**遍历**字符串$s$,所以第一空必然是填$s$字符串的长度,$s$和$Text1.Text$等价。 $Len(s)$或$Len(Text1.Text)$ **第二空** ``` If ch<>"," Then k = k + 1 Else c = c +1 temp = Val(Mid(s,i-k,k)) k = 0 __第2空___ If c Mod 2 = 1 Then t(p) = temp Else v(p) = temp End If ``` 分析这个判断语句,可以知道$k$在统计数字长度,$c$在统计逗号个数,即整数个数。 $temp$自然是取出一个整数。 ``` If c Mod 2 = 1 Then t(p) = temp Else v(p) = temp ``` 这句结合表格,程序根据$c$的奇偶性把数据放到指定数组中。 而变量$p$往上看并没有出现过赋值,所以第$2$空必然是$p$的赋值。列表格找规律: |变量 | | | | | |:---:|:---:|:---:|:---:|:---:| |c|1|2|3|4|...| |p|1|1|2|2|...| 通过列举,不难发现$p$的值,可以用$(c+1)\2$来计算或等价的算式。 **第三空** ``` c=c\2 For i = 1 To 2^c - 1 k = i:j = c Do While k > 0 if __第3空__ Then sum1 = sum1 + v(j):sum2 = sum2 + t(j) j = j - 1 k = k \ 2 Loop If [max<sum1 Or sum2 <= n] Then max = sum1: ans = i sum1 = 0: sum2 = 0 Next i ``` $While$循环的作用是二进制转换,外面的$For$作用是枚举所有可能的二进制情况(十进制数). 所以第$3$空自然是二进制$1$的时候,进行价值($sum1$)和时间($sum2$)的计算。第$3$空填$k\ mod\ 2 = 1$. 对**改错**语句,只有满足价值更优且时间没超出的前提下进行更新,把条件的or$改$and$就可以了。 ###**信息技术模拟卷三** **非选择题15** 代码共两个函数:(1)生成随机数 (2)排序 **第一空** 题中说明要生成$10$个$100$以内(不包括$100$)的正整数。 所以第一空用$rnd$生成:$a(i)=Int(Rnd*99)+1$
Pre:
小学复赛模拟试题1解题报告
Next:
priority_queue使用方法
0
likes
165
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Table of content