一、单项选择题
(共15题,每题2分,共计30分;每题有且仅有一个正确选项)
2) 24 针打印机的分辨率约为180dpi. Dpi 数越大,打印精度越高。其中单位dpi是指()
查看答案
6) CPU中()机构相当于运算器中的一个存储单元,它的存取速度比存储器要快得多。
查看答案
8) 操作系统在第几代计算机开始应用()
查看答案
9) 计算机中的数有浮点与定点两种,其中用浮点表示的数,通常由( )这两部分组成()
查看答案
10) 如果用一个字节来表示整数,最高位用作符号位,其他位表示数值。例如: 0000001 表示+1,1000001 表示-1,试问这样表示法的整数A的范围应该是()
查看答案
12) 用某种排序方法对线性表25 , 84,21,47,15,27,68,35,20进行排序,结点变化如下: (1)25,84, 21,47,15, 27, 68,35,28; (2)20,15, 21,25,47, 27, 68,35,84; (3)15,20, 21,25,35, 27, 47,68,84; (4)15,20, 21,25,27, 35, 47,68,84.那么,排序方法是()
查看答案
13) 如果某二叉树的前序为STUWV, 中序为UWTVS,那么该二叉树的后序是()
查看答案
14) 下面关于数据结构的叙述中,正确的叙述是()
查看答案
15) 表达式(1+34)*5-56/7的后缀表达式为()
查看答案
二、阅读程序
(程序输入不超过数组或字符串定义的范围;除特殊说明外,判断题1.5分,选择题4分,共计40分)
#include <iostream>
using namespace std;
void hanoi(int n,char a, char b,char c) {
if(n==1)
cout<<n<<" "<<a<<" "<<c<<endl;
else {
hanoi(n-1,a,c,b);
cout<<n<<" "<<a<<" "<<c<<endl;
hanoi(n-1,b,a,c);
}
}
int main() {
int n;
cin>>n;
hanoi(n,'A','B','C');
return 0;
}
16) (1分)当n≥0时,程序不会出现死循环。
查看答案
18) 当n>0时,将第4行的“==” 改为“<=”,程序输出结果必定不变。
查看答案
19) 将第5行的“n”改为“1”,程序输出结果必定不变。
查看答案
20) (3分)此程序的时间复杂度是()。
查看答案
21) 若要求输出不超过15行,则下列哪个n的值是合法的() 。
查看答案
#include <cstdio>
#define N 1005
using namespace std;
int num[N];
int main() {
int a1=1,n,x;
scanf("%d", &n);
num[1] = 1;
for(int i=1; i<=n; ++i) {
x=0;
for(int j=1; j<=a1; ++j) {
num[j] = num[j] * 5 + x;
x = num[j] / 10;
num[j] %= 10;
}
if (x > 0) num[++a1] = x;
}
printf("0.");
for(int i=a1; i<n; ++i) {
putchar('0');
}
for(int i=a1; i>=1; i--) {
printf("%d", num[i]);
}
putchar('\n');
return 0;
}
22) (1分)程序输出的是5^n的值。
查看答案
23) (1分)程序执行到第27行时,i的值为1。
查看答案
24) 对于任意1≤i≤al,都有0≤num≤9。
查看答案
25) 程序输出的是一个小数,且小数末尾可能有多余的0。
查看答案
#include <iostream>
using namespace std;
int l,n,m,a[50005], ans;
bool check(int dis)
{
int count=0,last=0;
for(int i=1; i<=n; i++)
if(a[i]-last<dis)count++;
else last=a[i];
if(count>m)return 0;return 1;
}
int main()
{
ios::sync_with_stdio(0);
cin>>l>>n>>m;
for(int i=1; i<=n; i++)
cin>>a[i];
a[n+1]=l;
int fl=0,fr=l;
while(fl<=fr)
{
int mid=(fl+fr)/2;
if(check(mid))fl=mid+1, ans=mid;
else fr=mid-1;
}
cout<<ans ;
return 0;
}
28) (1分)将第19行的“fl=0”改为“f1=l”,程序输出结果必定不变。
查看答案
29) (2分)程序执行到第26行时,必有fl>fr。
查看答案
30) (2分)若第23行执行的check(mid)==l, 则最终的ans≤此时的mid。
查看答案
31) (2分)程序执行到第10行时,count 的值表示:如果最短跳跃距离恰好为dis,那么最少需要移走几块岩石。
查看答案
33) 若输入为:25 5 2 2 11 14 17 21 则输出为()。
查看答案
三、完善程序
(单选题,每题3分,共计30分)
迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
#include<iostream>
using namespace std;
int main()
{
int edgs;
int points ;
int dis[10];
int flag[10];
int infinity=999999;
cin>>points>>edgs ;
int edg[10][10];
for (int i=1; i<=points; i++) // 初始化
{
for (int j=1; j<=points; j++)
{
if (i==j)
{
edg[1][j]=___(1)___;
}
else
{
edg[i][j]=___(2)___;
}
}
}
int point1 , point2 , quanzhi ;
for (i=1; i<=edgs; i++)
{
cin>>point1>>point2>>quanzhi ;
edg[point1][point2]= ___(3)___ ;
}
for (i=1; i<=points; i++)
{
dis[i]=edg[1][i];
}
for (i=1; i<=points; 1++)
{
flag[i]=0;
}
flag[1]=1;
int min,u;
for (i=1; i<=points-1; i++)
{//源点到源点不用比较,因次总的次数少一次
min=infinity;
for (int j=1; j<points; j++)
{
if (f1ag[j]==0&&dis[j]<min)
{//核心思想:依次比较出离源点最近的点
min=___(4)___;
u=j;
}
}
flag[u]=1;
for (int v=1; v<=points; v++)
{//找出离源点最近的点后更新dis里面的源点到各个点的值是否最小
if (edg[u][v]<infinity)
{
if (dis[v]>dis[u]+edg[u][v])
{
dis[V]=___(5)___;
}
}
}
}
for (i=1; i<=points; i++)
{
cout<<dis[i]<" ";
}
cout<<endl;
}
完全背包问题
容量为10的背包,有5种物品,每种物品数量无限,其重量分别为5, 4, 3, 2,1,其价值分别为1,2,3,4,5。
设计算法,实现背包内物品价值最大。代码如下(输出50)
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int total_weight = 10;
int w[6] = { 0,5,4,3,2,1};
int v[6] = { 0,1,2,3,4,5};
int dp[11]= { ___(1)___ };
for(int i=1; i<=___(2)___; i++)
for(int j=w[i]; j<=___(3)___; j++)
dp[j] =___(4)___;
cout <<___(5)___<< endl;
return 0;
}