- 7
- 0
- 约9千字
- 约 17页
- 2021-08-24 发布于北京
- 举报
2017上半年程序员考试真题及答案-下午卷
试题一(共 20 分)
阅读下列说明和图,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。
【说明】
设有二维整数数组(矩阵)A[1:m,1:n],其每行元素从左至右是递增的,每列元素从上到下是递增的。以下流程图旨在该矩阵中需找与给定整数 X 相等的数。如果找不到则输出“false”;只要找到一个(可能有多个)就输出“True”以及钙元素的下标 i 和 j(注意数组元素的下标从 1 开始)。
例如,在如下矩阵中查找整数 8,则输出伟:True,4,1
2 4 6 9
4 5 9 10
6 7 10 12
8 9 11 13
流程图中采用的算法如下:从矩阵的右上角元素开始,按照一定的路线逐个取元素与给定整数 X 进行比较(必要时向左走一步或向下走一步取下一个元素),直到找到相等的数或超出矩阵范围(找不到)。
【流程图】
【问题】该算法的时间复杂数是()
供选择答案:A.O(1) B.O(m+n) C.(m*n) D,O(m2+n2)
(1)n
(2)j-1→j
(3)i+1→I
(4)j
(5)B
读题,可以看出元素查找的过程为从右上角开始,往右或者往下进行查找。因此,初始值i=1,j=n。
如果查找值小于右上角值,则往右移动一位再进行比较。所以,第二空填j-1→j 。
接下来是判断什么时候跳出循环。此时,终止循环的条件是:j=0,也就是其从最右端移到了最左端。
再看XA[i,j]不成立时,执行流程的右枝。此时,也就是说第一行的最大值都小于查找值,因此需往下移动一行。所以第三空填i+1→I 。
试题二(共 15 分)
阅读下列说明和 C 函数,填补函数中的空缺,将解答填入答案纸的对应栏目内。
【说明】
函数 isLegal(char*ipaddr)的功能是判断以点分十进制数表示的 iPV4 地址是否合法。参数 ipadddr 给出表示 iPV4 地址的字符串的首地址,串中仅含数字字符和“.”。若 iPV4 地址合法则返回1,否则反馈 0.判定伟合法的条件是:每个十进制数的值位于整数区间[0,25],两个相邻的树之间用“.”分隔,共 4 个数、3 个“.”。;例如,5、 是合法的,56、1.1..1是不合法的。
【函数】
int isLegal (char*ipaddr)
﹛
int flag;
int cur Val; //curVal 表示分析出的一个十进制数
int decNum=0,dotNum=0; //decNum 用于记录十进制数的个数
//dotNum 用户记录点的个数
Char*p=()
for(;*p;p++) ﹛
curVal=0;flag=0
While (isdigit(*p))﹛ //判断是否伟数字字符
CurVal=()+*p-′0′;
()
flag=1;
﹜
if(curVal255)﹛
return 0;
﹜
if (flag)﹛
()
﹜if(*p=′.′﹛
dotNum++;
﹜
﹜
if ()﹛
return 1;
﹜
return 0;
﹜
(1)ipaddr
(2)curval*10
(3)p++
(4)decNum++
(5)decNum==4 dotNum==3
此题判断IPV4地址是否合法,主要是判断其每个十进制数的大小和总个数以及“.”个数来进行判别。
首先用isdigital函数判断是否为十进制数,是则保留值。指针移到地址的下一个字符。
每找到一个十进制数都需要和前一次找到的值进行组合,即前一次的结果要乘以10。
每找完一个完整数字和“.”都需要记录,所以要有decNum++和dotNum++。
最后,如果IP地址正确,则返回1。即:decNum=4和dotNum=3时成立。
【试题三】
阅读下列说明和 C 函数,填补 C 函数中的空缺,将解答填入答案纸的对应栏目内。
【说明】
字符串是程序中常见的一种处理对象,在字符串中进行子串的定位、插入和删除是常见的运算。
设存储字符串时不设置结束标志,而是另行说明串的长度,因此串类型定义如下:
Typedef struct ﹛
Char*str //字符串存储空间的起始地址
int lehgth //字符串长
int capacity //存储空间的容量
﹜SString;
【函数 1 说明】
函数 indexStr(S,T,pos)的功能是:在 S 所表示的字符串中,从下标 pos 开始查找 T 所表示字符串首次出现的位置。方法是:第一趟从 S 中下标为 pos、T 中下标伟 0 的字符开始,从左往右逐个对于来比较 S 和 T 的字符,直到遇到不同的字符或者到达 T 的末尾。若到达 T 的末尾,则本趟匹配的起始下标 pos 为
原创力文档

文档评论(0)