努力挣钱

努力挣钱

0个粉丝

7

问答

0

专栏

4

资料

努力挣钱  发布于  2008-09-05 20:23:06
采纳率 0%
7个问答
4532

中磊笔试题

1、请用标准C语言实现一个双向循环链表的查找与删除。
typedef struct doublecyclelink{
int key;
struct doublecyclelink *prev;
struct doublecyclelink *next;
}DoubleCycleLinkT;
DoubleCycleLinkT *findKey(DoubleCycleLinkT *link,int key);
遍历整个双向循环链表,将第一个与key值相同的结点移出链表,并返回。
若没有找到则返回NULL。

答:
函数为
DoubleCycleLinkT *findKey(DoubleCycleLinkT *link,int key)
{
  DoubleCycleLinkT *p;
  p=link->next;
  while (p->next!=link) // 链表结尾
  {
    if (p->key==key)  // 查找到key值相同,删除该节点,并返回
    {
      p->prev->next=p->next;
      p->next->prev=p->prev;
      free(p);
      return link;
    }
    else   
      p=p->next;  // 否则查找下一节点
  }
  if (p->next == link)  return NULL; //没找到,返回NULL  
  
}

2、请用程序打印下列图型
     *
    * *
   * * *
  * * * *
* * * * *
void printTriangle(const unsigned char line);
输入行数,打印三角形。
答:
函数为
void printTriangle(const unsigned char line)
{
  for(int i=1;i<=line;i++)
  {
    for(int j=0;j<(line*2-1);j++)  // 5行每行需打印9个字符
    {
      if (i%2==1)      // 奇数行
      {
        if (j%2==(line-1)%2 &&  j>=(line-1-i/2*2) && j<=(line-1+i/2*2))      

          printf("*");// 列从0计数
        else
          printf(" ");
      }
      else
        if (j%2==(line)%2 && j>=(line-2-(i/2-1)*2) && j<=(line+(i/2-1)*2))
                printf("*");
        else
          printf(" ");
   
    }
    printf("\n");
  }
}

3、请用标准C语言实现下列标准库函数,设计中不得使用其他库函数。
char *strstr(char *str1,char *str2);
在字符串str1中,寻找字串str2,若找到返回找到的位置,否则返回NULL。
答:
函数为
char * strstr ( const char * str1, const char * str2 )
{
        char *cp = (char *) str1;
        char *s1, *s2;
        if ( !*str2 )
            return((char *)str1);
        while (*cp)
        {
                s1 = cp;
                s2 = (char *) str2;
                while ( *s1 && *s2 && !(*s1-*s2) )
                        s1++, s2++;
                if (!*s2)
                        return(cp);
                cp++;
        }
        return(NULL);
}

4、请问这段代码循环多少次?
main()
{
char i=0;
  while(i<10)
   {
     if(i<1)continue;
        if(i==5)break;
          i++;
  }
   ......
}
答:是个死循环,无限次啊,无限次。


5、用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
答: #define MIN (365*24*60*60)

6、请问运行main函数会有什么样的结果?
main()
{
int x=10,y=3;
printf("%d\n",y=x/y);
}
答:结果为3,考察强制类型转换

7、有以下程序
#define P 3
void F(int x)
{
return(P*x*x);
}
main()
{
printf("%d\n",F(3+5));
}
程序运行结果为:?
答:程序运行后的输出结果是129,此题为故意混淆概念,直接用F(8)计算得答案,而非计
算3*3+5*3+5;

8、若int占2个字节,char占1个字节,float占4个字节,则定义如下:
struct stu
{
union{
  char bj[5];
  int bh[2];
}class;
char xm[8];
float cj;
}xc;
则sizeof(xc)的值为?
答:20,一道边界对齐的题目,很多地方有讲,此处注意下联合的内存大小取决于其中字
节数最多的成员就可。

9、请问traceroute的工作原理
答:
主机先发出一个TTL(Time To Live,生存时间)为1的ICMP数据包。这个数据包到达一个
路由器后,路由器将TTL减1到0,并将并送回一个「ICMP time exceeded」消息,以说明这
个数据包不能继续向前传送,因为其TTL已经过期了。traceroute 收到这个消息后,便知
道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的数据包,发现
第2 个路由器......这个重复的动作一直持续到某个datagram 抵达目的地。
我来回答
回答0个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区