本站搜索:
          设为首页       加入收藏           全部考试查看
阅读文章

2007年下半年程序员考试模拟试题下午试卷(第三套)

[日期:2007-10-29] 来源:云南培训认证网  作者: [字体: ]

  ●试题一

  阅读下列算法说明和算法,将应填入(n)处的字句写在答题纸的对应栏内。

  【算法说明】

  为便于描述屏幕上每个像素的位置,在屏幕上建立平面直角坐标系。屏幕左上角的像素设为原点,水平向右方向设为X轴,垂直向下方向设为Y轴。

  设某种显示器的像素为128×128,即在每条水平线和每条垂直线上都有128个像素。这样,屏幕上的每个像素可用坐标(x,y)来描述其位置,其中x和y都是整数,0≤x≤127,0≤y≤127。

  现用一维数组MAP来存储整个一屏显示的位图信息。数组的每个元素有16位二进位,其中每位对应一个像素,"1"表示该像素"亮","0"表示该像素"暗"。数组MAP的各个元素与屏幕上的像素相对应后,其位置可排列如下:

  MAP(0),MAP (1) ,…,MAP (7)

  MAP (8) ,MAP (9) ,…,MAP (15)

  MAP(1016),MAP(1017),…,MAP(1023)

  下述算法可根据用户要求,将指定坐标(x,y)上的像素置为"亮"或"暗"。

  在该算法中,变量X,Y,V,S,K都是16位无符号的二进制整数。数组BIT中的每个元素BIT(K)(K=0,...,15)的值是左起第K位为1,其余位均为0的16位无符号二进制整数,即BIT(K)的值为215-k。

  【算法】

  第1步根据用户指定像素的位置坐标(x,y),算出该像素的位置所属的数组元素MAP(V)。这一步的具体实现过程如下:

  1.将x送变量X,将y送变量Y;

  2.将Y左移 (1) 位,仍存入变量Y;

  3.将X右移 (2) 位,并存入变量S;

  4.计算Y+S,存入变量V,得到像素的位置所属的数组元素MAP(V)。

  第2步算出指定像素在MAP(V)中所对应的位置K(K=0,…,15)。这一步的具体实现过程如下:将变量X与二进制数 (3) 进行逻辑乘运算,并存入变量K。

  第3步根据用户要求将数组元素MAP(V)左起第K位设置为"1"或"0"。这一步的具体实现过程如下:

  1.为把指定像素置"亮",应将MAP(V)与BIT(K)进行逻辑 (4) 运算,并存入MAP(V)。

  2.为把指定像素置"暗",应先将BIT(K)各位取反,再将MAP(V)与BIT(K)进行逻辑 (5) 运算,并存入MAP(V)。

  ●试题二

  阅读下列函数说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。

  【函数2.1说明】

  函数palindrome(char s[])的功能是,判断字符串s是否为回文字符串,若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样时,称该字符串是回文字符串,例如:"LEVEL"是回文字符串,而"LEVAL"不是。

  【函数2.1】

  int palindrome(char s[])

  {char*pi,*pj;

  pi=s;pj=s+strlen(s)-1;

  while(pi

  pi++;pj--;

  }

  if( (2) )return -1;

  else return 0;

  }

  【函数2.2说明】

  函数f(char*str,char del)的功能是:将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。

  例如若str的值为"33123333435",del的值为"3",调用此函数后,将输出3个子字符串,分别为"12"、"4"和"5"。

  【函数2.2】

  void f(char*str,char del)

  {int i ,j ,len;

  len=strlen(str);

  i=0;

  while(i

  while( (3) )i++;/*忽略连续的标志字符*/

  /*寻找从str[i]开始直到标志字符出现的一个子字符串*/

  j=i+1;

  while(str[j]!=del && str[j]!=′\0′)j++;

  (4) =′\0′;/*给找到的字符序列置字符串结束标志*/

  printf(″%s\t″,&str[i]);

  (5) ;

  }

  }

  ●试题三

  阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

  【说明】

  设有一个带表头结点的双向循环链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次L.Locate(x)操作时,令元素值x的结点的访问频度freq加1,并将该结点前移,链接到现它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。

  【函数】

  void Locate(int &x)

  {<结点类型说明>

  *p=first->next;

  while(p!=frist && (1) )P=P->next;

  if (p!=first)/*链表中存在x*/

  { (2) ;

  <结点类型说明>

  *current=p;/*从链表中摘下这个结点*/

  Current->prior->next=current->next;

  Current->next->prior=current->prior;

  P=current->prior;/*寻找重新插入的位置*/

  While(p!=first && (3) )p=p->prior;

  Current->next= (4) ;/*插入在P之后*?

  Current->prior=P;

  P->next->prior=current;

  P->next= (5) ;

  }

  else printf("Sorry.Not find!\n");/*没找到*/

  }

  ●试题四

  阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

  【说明】

  函数QuickSort是在一维数组A[n]上进行快速排序的递归算法。

  【函数】

  void QuickSort(int A[],int s,int t)

  {int i=s,j=t+1,temp;

  int x=A[s];

  do{

  do i++;while (1) ;

  do j--;while(A[j]>x);

  if(i

  }while(i

  A[a]=A[j];A[j]=x;

  if(s

  if(j+1

  }



[1] [2] 下一页   

阅读:

责任编辑:遥望

【在本站遇到阅读、观看、下载、发表文章等问题   请点此获得帮助 在本站发表文章或者留言    会员登录    会员注册

上一篇:2007年下半年网络工程师考试模拟试题上午试卷(第二套)
下一篇:2007年下半年程序员考试模拟试题上午题(第三套)
相关阅读       程序员考试模拟试题 
本文评论       全部评论
发表评论


点评: 字数
姓名:    会员登录    会员注册

  • 本站不会回复评论,咨询请到“在本站发表文章或者留言”处提问
  • 评论字数不要超过500字,请不要发广告
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款