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 抵达目的地。
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)
相关问答
-
12008-09-05 20:19:46
-
02008-11-09 10:01:46
-
02008-08-08 14:38:05
-
22008-11-09 10:08:54
-
2008-08-08 14:40:02
-
2008-08-02 00:45:28
-
122008-09-05 20:15:43
-
342008-09-20 15:04:26
-
2008-09-20 15:03:27
-
2008-09-20 14:58:47
-
2012-12-24 10:57:36
-
2008-09-20 14:59:37
-
12008-08-02 00:51:41
-
22008-08-08 15:05:44
-
2008-08-02 00:56:25
-
2008-07-31 02:03:07
-
2013-11-16 10:36:59
-
2008-07-12 19:10:50
-
2008-09-20 15:00:55
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认