第一课绪论
一、选择题
1.算法的计算量的大小称为计算的()。
A.效率B.复杂性C.现实性D.难度
2.算法的时间复杂度取决于()。
A.问题的规模B.待处理数据的初态C.A和B
3.计算机算法指的是(),它必须具备()这三个特性。
A.计算方法B.排序方法C.解决问题的步骤序列D.调度方法
4.计算机算法指的是(),它必须具备()这三个特性。
A.可执行性、可移植性、可扩充性B.可执行性、确定性、有穷性
C.确定性、有穷性、稳定性D.易读性、稳定性、安全性
5.下面关于算法说法错误的是()。
A.算法最终必须由计算机程序实现
B.为解决某问题的算法同为该问题编写的程序含义是相同的
C.算法的可行性是指指令不能有二义性
D.以上几个都是错误的
6.从逻辑上可以把数据结构分为()两大类。
A.动态结构、静态结构B.顺序结构、链式结构
C.线性结构、非线性结构D.初等结构、构造型结构
二、应用题
1.数据元素之间的关系在计算机中有几种表示方法?各有什么特点?
2.评价一个好的算法,可以从哪几方面来考虑的?
3.对于一个数据结构,一般包括哪三个方面的讨论?
4.当你为解决某一问题而选择数据结构时,应从哪些方面考虑?
5.在编制管理通讯录的程序时,什么样的数据结构合适?为什么?
6.试举一例,说明对相同的逻辑结构,同一种运算在不同的存储方式下实现,其运算效率不同。
7.有实现同一功能的两个算法A1和A2,其中A1的时间复杂度为Tl=O(2n),A2的时间复杂度为T2=O(n2),仅就时间复杂度而言,请具体分析这两个算法哪一个好。
8.分析下面程序段中循环语句的执行次数。
i=0;s=0;n=100;
do{
i=i+1;
s=s+10*i;
}while((i 9.调用下列C函数f(n),回答下列问题:(1)试指出f(n)值的大小,并写出f(n)值的推导过程;(2)假定n= 5,试指出f(5)值的大小和执行f(5)时的输出结果。 C函数: int f(int n) { int i,j,k,sum = 0; for(i=l; i { for(j=n;j>i-1; j--) for(k=1;k sum++; printf("sum=%d\n",sum); } return (sum); } 10.设n是偶数,试计算运行下列程序段后m的值并给出该程序段的时间复杂度。 m=0; for( i=1 ; i<= n ; i++ ) for( j=2*i ;j<= n ;j++ ) m=m+1; 11.有下列运行时间函数,分别写出相应的大O表示的运算时间。 ⑴T1 (n)=1000; ⑵T2(n)=n2+1000n; ⑶T3(n)=3n3+100n2+n+1; 12.设n为正整数,试确定下列程序段中语句“x++;”的频度。 ⑴for (i=1;i<=n;i++) for (j=1;j<=i;j++) x++; ⑵i=0; j=1; while (i+j<=n){ x++; if (i>j) j++; else i++; } ⑶for (i=1;i<=n;i++) for (j=1;j<=i;j++) for (k=1;k<=n;k++) x++; ⑷x=0;y=n; //n是不小于1的常数 while (y>=(x+1)*(x+1)){ x++; } ⑸设n为正整数,试确定如下程序段中if语句的频度。x=91; y=100; while(y>0){ if (x>100){x-=10;y--;} else x++; }