西邮linux兴趣小组2019补纳面试题

1.该代码输出为xiyoulinux

解释:

1.每两位16进制数字组成一个Ascil码,表示出一个字符。该计算机存储数据的模式为小端模式,数据的高位存放在高地址上。

2.((char*)&num+i)说明每次对相对与num首地址偏移量为i*1的地址进行间接访问读取。

等所有数据都被读取后,ch取到'\0',退出for循环。

2.方法1:给return 0;语句前加上这样一段代码

int *pb=&b;

*pb=5;

3. a[1][1]的值变为100

解释:

struct node大小为12,struct n大小为8,为node类型数组a的首地址加上2*8,便到了a[1][1]这个位置。

4.输出结果为:

hello world 

8

11

12

11

解释:

1,字符数组传到函数中后,编译器将a当作指针处理,所以a所占字节数变成了8,但字符长度仍可通过指针正确地读取到,即为11.

2.在主函数中字符串的字节数即为它的长度加1,即12.

5.输出结果为

12

f(1,2)

解释:

1.##表示间接两侧的符号,所以f(1,2)运行结果为12。,#的作用是将操作对象变为字符串,即将其原样输出,得到输出结果12.

2.宏函数本应该是先分析内部函数再分析外部函数,但是在外部函数的实现中存在’#‘运算符,那么就先执行外部函数,在此例中,将f(1,2)转化为了字符串直接输出。

6.废话不多说,直接上代码。

#include <stdio.h>
#include <stdlib.h>

int cmp(int* p1,int* p2)
{
    return *p1-*p2;
}
int main(void)
{
    int dg[100]={1,2,3,1,4,5,645,75,75,87,5678,785,76,76,4};
    int sum=0,i=0,p1,p2,p3,j,judge=0;
    while(dg[i])
    {
        sum+=dg[i];
        i++;
    }//i is sum_count 
    qsort(dg,i,4,cmp);
    if(sum%2==1)
    {
        printf("No");
        return 0;
    }
    sum=sum/2;
    for(p1=0;p1<i-2;p1++)
    {
        p2=p1;
        p3=i-1;
        while(p2<p3)
        {
            int sum1=0;
            for(j=p2;j<=p3;j++)
            sum1+=dg[j];
            if(sum==sum1)
            {
                judge=1;
                goto here;
            }
            else if(sum1<sum)
            p2++;
            else
            p3--;
        }
    }here:
        if(judge)
        printf("Yes");
        else
        printf("No");
    return 0;
 } 

7.

#include "stdio.h"

#include "string.h"

//字符串单词逆序并输出

void wordnixu(char *start,char *end);

char* setence(char *str);

int main()

{

char str[100];

printf("输入字符串:");

gets(str);

printf("%s\n",str);

char* p=setence(str);

int sign=0;

for(int i=0;i<strlen(str);i++)

{

if(*(p+i)!=' '||(*(p+i+1)!=' '&&sign==1))

{

sign=1;

printf("%c",*(p+i));

}

}

return 0;

}

void wordnixu(char *start,char *end)//一个单词字符逆序,不包括空格字符

{

char jiaohuan;

while(start<end)

{

jiaohuan=*start;

*start++=*end;

*end--=jiaohuan;

}

}

char* setence(char *str)//1、句子的单词先内部逆序/2、之后再把句子看做单词整体逆序即可得到逆序单词输出

{

char *start=str;//指向串内部单词首字符

char *p=str;//指向串的首地址,作为整体逆序的首地址

while(*str!='\0')

{

if(*str==' ')

{

wordnixu(start,str-1);//串内单词内部逆序

start=++str;//指向下一个单词的首地址,需要特别注意地址的操作++,与--

}

else

str++;

}

wordnixu(start,str-1);//把最后一个单词逆序逆序

wordnixu(p,str-1);//以整个串为单词逆序

return p;//返回首地址

}

8.func(s)应改为func(&s),给函数传递指针的地址,这样才能让指针重新指向其他的地方。

9.逆置单链表


void reverse(data*head)
{//传入的是指向头节点的指针
    data*temp=NULL,*q=NULL;
    temp=head->pnext;//temp指向第一个节点
    head->pnext=NULL;
    while(temp)
    {
        q=temp;
        temp=temp->pnext;
        q->pnext=head->pnext;
        //循环第一次中head->pnext为NULL
        //(表示逆置后的链表最后一个节点的下一个节点为空)
        head->pnext=q;//head一直做p的头指针
    }
}

10.输出为

ffffffff

ff

255

unsigned表明只能表示非负数,原本的负数首先转化为二进制补码形式,再将最高位(即符号位)变为0,这样,一个负数便在unsigned的加持下变成了非负数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倚风听雨.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值