浙江省嘉兴市2023年9月高三信息技术模拟检测卷
共 13 题 ; 60人浏览 ; 高考阶段
2023-10-31
一、选择题 (共10题,共24分)
二、非选择题 (共3题,共19分)
11. 小李设计了一个会员管理系统,用户通过浏览器在相应页面可进行会员注册、在线充值、线上查询消费记录等操作。该系统服务器端程序采用FlaskWeb框架编写,框架结构如图a所示。

其中会员注册子页面如图b所示。存储会员信息的users表中共3个字段,依次保存序号、用户名和密码,如图c所示。会员注册时需满足以下条件:①用户名不重复;②密码长度大于5。服务器端部分代码如下。

from flask import Flask , render_template , request

import sqlite3

def check(name ,pwd):

    conn= sqlite3 .connect( " account .db ")

    cur=conn .cursor()

    cur . execute( " select * from users where name= ’%s ’"%name)

    val=cur .fetchall()

    flag=True

    if len(val)==0 and            :

        sql= "insert into users(name , password) values(' %s' , '%s ') "%(name , pwd)

        cur .execute(sql)

        conn .commit()

    else:

        flag=False

    cur .close()

    conn .close()

    return flag

app=Flask(name_)

@app .route( "/reg ")

def reg() :

    name=request . args .get( "xm ")

    pwd=request .args .get( "psd ")

    if                         :

        return "注册成功! "

    else:

        return "请重新注册! "

#其它代码略

if _name_== "_main_ " :

app .run (host= " 192 . 168 . 1 . 10 " , port= 80 , debug=True)

(1) 在搭建“会员管理系统 ”的前期准备过程中,选定系统物理配置的过程属于(单选,填字母: A .需求分析 /    B .概要设计 / C .详细设计)。
(2) 该系统网络应用软件的实现架构是 (单选,填字母:A .B/S 架构 /    B .C/S 架构)。
(3) 分析程序可知,该系统中存储会员用户名和密码数据的数据库文件名为
(4) 分析程序,①处应填写的代码为  ,②处应填写的代码为
(5) 下列关于该信息系统的描述正确的是       (多选,填字母)。 A. 服务器采用 GET 方式接收用户名和密码数据 B. 程序代码中 debug=True 语句的作用是打开调试功能,在实际的网站应用环境中,也可以打开该 功能,方便调试程序。 C. 注册新会员时,用户名为 admin03 ,密码为 123abc ,提交数据到 Web 服务器的 URL 为 http://192.168.1.10/check?xm=admin03&psd=123abc D. 对 users 表中的密码进行加密,可以提高该信息系统的安全性
综合题 普通
12. 某地高中的技术选考数据,保存在“jsxk.xls”文件中,如图a所示。

图 a

图 b

请回答下列问题:

(1) 统计各学校技术选考人数占本校总人数的比例,找出占比最高的前 5 所学校并绘制柱形图,如图 b 所示。部分 Python程序如下,请在划线处填写合适的代码。

import pandas as pd

import matplotlib.pyplot as plt

#图表支持中文字体显示,代码略

df= pd.read_excel("jsxk.xls",dtype={'学校代码':'string'})           #学校代码列为字符串

df1 = df.groupby("  ", as_index=False).count()        #按学校统计人数

df1 = df1.rename(columns={'姓名':'学生总数'})#重命名列

df1['技术比例'] = round(/df1['学生总数']* 100,2)

df1 = df1.sort_values('技术比例',ascending=False).head(5)

plt.title('技术选考比例前 5 的学校')

plt.bar( )

plt.show()

(2) 在本问题的解决中,为了探究函数 groupby() ,某同学编写了自定义函数zdygroupby() ,其功能为统 计各校技术选考总人数,并以字典的形式返回。函数代码如下,请在划线处填写合适的代码。(注:代码中 lst 为二维列表,列表中每个元素包含3个数据项,格式如[['201901','顾筱扬',NaN],['201901','  俞凯睿', 1.0],['201901',' 陈丹祺', 1.0] … …])

def zdygroupby(1st):

    dic = {}

    for row in lst:

        if row[2] == 1:

            if  :

                dic[row[0]]=1

            else:

                dic[row[0]]+= 1

   

综合题 困难
13. 最短路径问题。以 m*n 个边长为 1 的正方形组成的矩形,各顶点按行优先从 0 开始编号,如图 a 所示为 3*2 的矩形及顶点编号。从顶点 x(起点)经由各正方形的边移动到顶点 y(终点)有多种移动 路径,编程求解所有的最短路径。

图 a

图 b

(1) 分析问题,将矩形转换为计算机可处理的数据。可采用列表存储矩形中各顶点的相邻关系,如图 b所示。

编写函数init,根据横向和纵向的正方形数量,返回所有顶点及其所有的相邻顶点数据。完善程序,在划线处填入合适的代码。

def init(m,n):

    tot=(m+1)*(n+1)    #顶点总数

    lst=[[] for i in range(tot)]

    for i in range(tot):

        if i>m:

            lst[i].append(i-m- 1)

        if i<(m+1)*n:

            lst[i].append(i+m+1)

        if i%(m+1) != 0:

            lst[i].append(i- 1)

        if i%(m+1) != m:

           

    return lst

(2) 分析问题,查找所有从起点到终点的最短路径。例如:查找从起点1到终点10的所有最短路径,可先查找终点10的所有相邻顶点(6,9,11),然后再逐个查找顶点6、9、11的相邻顶点,直到查找到起点1,获得所有最短路径,如图c所示,共有3条长度为3的最短路径,分别为1→2→6→10,1→5→6→10,1→5→9→10。若从起点4到终点11,共有 (填数字)条最短路径。

图 c

(3) 分析问题,存储查询到的路径。可采用链表结构保存路径数据,例如:查找从起点1到终点10的所有最短路径,首先将终点10的数据[10,0,-1]保存在path[0]中,然后将其相邻顶点6、9、11的数据保存到path中,path[i][0]保存顶点的编号,path[i][1]保存当前顶点到终点的距离,path[i][2]保存下一顶点在path中的位置,其值为-1表示当前顶点为终点。

编写函数print_path,输出所有的最短路径。完善程序,在划线处填入合适的代码。

def print_path(x,path,length):    #为起点编号,length为Path中有效元素个数。

    cnt=0

    for i in range(length):

        if path[i][0] == x:

            cnt+= 1

        s="最短路径"+str(cnt)+":"

        v=path[i]

        while  :

            s=s+str(v[0])+","

            v=path[v[2]]

        s=s+str(v[0])+" 。"

        print(s)

(4) 实现上述功能的 Python程序如下,运行结果如图 d 所示。请在划线处填入合适的代码。

m=3           #横向正方形数量

n=2              #纵向正方形数量

mtx=init(m,n)

x=int(input("请输入起点:"))

y=int(input("请输入终点:"))

path=[[] for i in range(30)]

passed=[False]*len(mtx)    #保存顶点是否已途经

dis=0

head=0

tail=0

path[tail]=[y,0,- 1]

tail+= 1

passed[y]=True

while not found:

    dis+= 1

    pass_dis=[False]*len(mtx)

    tmp=tail

    for i in range(head,tail):

        v=path[i]

        for d in mtx[v[0]]:

            if not passed[d]:

                path[tail]=

                tail+= 1

                pass_dis[d]=True

            if d == x:

                found=True

        head=tmp

    for i in range(len(mtx)):    #标记已途经的顶点

        if  :

            passed[i]=True

#输出结果

print_path(x,path,tail)

综合题 困难