转载某处笔试题目

时间:2019-10-24 12:08:37 笔试题目 我要投稿

【转载】某处笔试题目

题目来自互联网:/view/1b71537201f69e314332947f.html

【转载】某处笔试题目

答案:自己做的,可能有错误,请多指正。 QQ:447872587

C语言部分:语言部分

一、简单编程,请用一句语句完成下列操作

1.位操作:将变量unsigned long register的0,4,6位清0

32位下:register&=0xffffffffffffae

分析:0,4,6清0;10101110对应着:1010对应a; 1110对应e

2.字符串操作:判断字符串char* str1是否起始位置包含char* str2的内容

if(strstr(str1,str2)==str1)

3.内存操作:将指针unsigned char* ptr的内容向后移动4个字节

*(ptr+4)=*ptr;

4.将无符号变量unsigned int val进行字节序颠倒

(val&0x000000ff<<24)|( val&0x0000ff00<<8) |( val&0x00ff0000>>8)| ( val&0xff000000>>24)

二、写出下列程序的运行结果 32位

1、指针变量:

Unsignedchar*p1;

Unsignedchar*p2;

p1=(Unsigned char*)0x801000;

p2=(Unsigned char*)0x810000;

请问:p1+5=? p2+5=?

p1+5=0x801000+5*4=0x801000+0x14=0x801014

p2+5=0x810005+5*4=0x810000+0x14=0x810014

//经本人VC下实际运行,两者的答案分别为:

p1+5=0x801005;

p2+5=0x810005;

而非原作者提供的答案,此处可能就是单纯的一个地址向后移动5个地址单元而已,而不是所谓的5个指针地址的大小,个人理解而已,并非十分正确。

2.算数运算

Main()

{

Unsignedchar a,b,c,d;

a=30;

b=a++;

c=++a;

d=10*(a++);

}

请问:b=?c=?d=?

b=30,c=32,d=3200 //d=320

3、逻辑运算

unsigned int regval = 0x451AD,evenMask= 0x306,bitConvert = 0xFF;

int event = 0,convert = 0; //若要得到原作者的答案,程序需改为:

event = regval& bitConvert; //event = regval& evenMask;
convert = regval^ convert; // convert = regval^bitConvert;

请问:event=? Convert=?

event= 260 Convert=282962//单单运行黑体部分,结果为:173,283053

分析:event=0x451AD&0x306

0x 4 5 1 A D

& 0x 3 0 6

= 0x 0 0 1 0 4 即:16*16+4=260

convert = 0x451AD ^ convert;

三、请指出下列程序存在的问题,如何修正:

1、说明:以下代码是把一个字符串倒序,如”abcd”倒序后变为”dcba”

int _tmain(int argc, _TCHAR *argv[])
{
char*src = \"hello,world\";
char *dest = NULL;
intlen = strlen(src);
char*dest = (char*)malloc(len);
char*d = dest;
char*s = src[len];
while(len-- != 0)
{
d++= s--;
}

printf(\"%s\",dest);
return 0;
}

正确应该为:

[cpp] view plaincopy #include \"string\"
#include <iostream>
using namespace std;

int _main(int argc, char *argv[])
{

char*src = \"hello,world\";
char*dest = NULL;
int len = strlen(src);
dest= (char*)malloc(len+1); //要为\\0分配一个空间
char* d = dest;
char* s = &src[len-1]; //指向最后一个字符
while(len-- != 0)
{
*d++= *s--;
*d=0; //尾部要加上\\0 //个人觉得这里的*d=0应该放在括号外面
}
cout<<dest<<endl;
// system(\"pause\"); //此句完全不需要,作用:输出一行类似于“press any key to exit”的字
free(dest); //使用完,应当释放空间,以免造成内存泄露
return 0;
}

方法二:

[cpp] view plaincopy
int main(int argc, char *argv[])

{
char str[]=\"hello,world\";
int len = strlen(str);
char t = 0;
int i;
for(i=0;i<(len+1)/2;i++)
{
t=str[i];
str[i]=str[len-i-1];//不要忘怀多减一个,重视数组的下标
str[len-i-1]=t;
}
cout<<str<<endl;
// system(\"pause\");
return 0;
}
四、简答题:

1、头文件的ifndef/define/endif干什么用的?

防止头文件被重复引用

2、定义函数局部变量的时候:

Char array1[100];

Char *array2;

array1和array2都可以当做指针引用,这两个指针在使用的时候有什么区别?

当做函数参数传递的时候,数组可以当指针用,本质就是取数组第一个元素的内存地址传过去,当数组作为函数参数传递的`时,该数组自动退化为同类型的指针。

指针也可以当数组用,但是两者的本质不一样;

数组名对应着一块内存,而不是指向一块内存,其地址和容量在生命周期不变,但数组内容可以改变;

指针可以随时指向任意的内存块,其特征是可变,常用指针来操作动态内存。

五、内存问题:

写出下列四种情况下程序运行会产生什么样的结果

1.

void GetMemory(char *p)
{
p = (char*)malloc(100);
}

void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, “hello world”);
printf(str);
}

2.
char* GetMemory(void)
{
char p[] = “hello world”;
return p;
}

void Test(void)

{
char *str = NULL;
str = GetMemory();
printf(str);
}

3.
void GetMemory2(char **p, int num)
{
*p = (char*)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, “hello”);
printf(str);
}

4. void Test(void)
{
char *str = (char*)malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf(str);
}
}

六、程序编写:

编写一个函数,输入参数为一个字符串指针,将其中的大写变为小写

[cpp] view plaincopy

    char* Atoa(char str[])
    {
    for(int i=0;str[i]!=\\\0\;i++)
    {
    if(str[i]>=\A\ && str[i]<=\Z\)
    str[i] += 32;
    }
    return str;
    }

    int _tmain(intargc, _TCHAR*argv[])
    {
    char str[100]=\"Hello,World\";
    Atoa(str);
    cout<< str;
    return 0;
    }

    Linux 部分

    一、shell命令

    1、查看某个进程打开了哪些文件?

    2、删除文件系统大小为0的文件

    3、找出系统中所有的*.c和*.h文件

    4、设定 eht0的Ip地址为192.168.100.2,掩码为255.255.255.0.mtu为1024

    二、简答题

    1、简述对core文件的认识,以及如何利用core 文件调试?

    2、Linux下进程间通信方式有哪几种?简单加以说明。

    3、如何实现Liunx下多线程之间的互斥与同步。

    4、、Big endian和Little endian是什么含义?对Linux网络编程会有什么影响?


    【【转载】某处笔试题目】相关文章:

    1.笔试题目

    2.金立笔试题目

    3.KPMG笔试题目

    4.笔试题目4

    5.笔试题目1

    6.笔试题目5

    7.Sony笔试题目

    8.部分笔试题目