C/C++内存的笔试题

时间:2023-07-12 08:11:58 试题试卷 收藏本文 下载本文

C/C++内存的笔试题(整理12篇)由网友“世界和平大使”投稿提供,以下是小编为大家准备的C/C++内存的笔试题,供大家参考借鉴,希望可以帮助到有需要的朋友。

C/C++内存的笔试题

篇1:C笔试题

C笔试题

1) 读文件file1.txt的内容(例如):

12

34

56

输出到file2.txt:

56

34

12

(逆序)

2)输出和为一个给定整数的所有组合

例如n=5

5=1+4;5=2+3(相加的数不能重复)

则输出

1,4;2,3,

第一题,注意可增长数组的应用.

#include

#include

int main(void)

{ int MAX = 10;

int *a = (int *)malloc(MAX * sizeof(int));

int *b;

FILE *fp1;

FILE *fp2;

fp1 = fopen(“a.txt”,”r”);

if(fp1 == NULL)

{printf(“error1″);

exit(-1);

}

fp2 = fopen(“b.txt”,”w”);

if(fp2 == NULL)

{printf(“error2″);

exit(-1);

}

int i = 0;

int j = 0;

while(fscanf(fp1,”%d”,&a[i]) != EOF)

{i++;

j++;

if(i >= MAX)

{

MAX = 2 * MAX;

b = (int*)realloc(a,MAX * sizeof(int));

if(b == NULL)

{printf(“error3″);

exit(-1);

}a = b;

}}

for(;–j >= 0;)

fprintf(fp2,”%d\n”,a[j]);

fclose(fp1);

fclose(fp2);

return 0;

}

第二题.

#include

int main(void)

{unsigned long int i,j,k;

printf(“please input the number\n”);

scanf(“%d”,&i);

if( i % 2 == 0)

j = i / 2;

else

j = i / 2 + 1;

printf(“The result is \n”);

for(k = 0; k < j; k++)

printf(“%d = %d + %d\n”,i,k,i – k);

return 0;

}

#include

void main

{unsigned long int a,i=1;

scanf(“%d”,&a);

if(a%2==0)

{ for(i=1;i printf(“%d”,a,a-i);

}

else

for(i=1;i<=a/2;i++)

printf(” %d, %d”,i,a-i);

}

兄弟,这样的.题目若是做不出来实在是有些不应该, 给你一个递规反向输出字符串的例子,可谓是反序的经典例程.

void inverse(char *p)

{ if( *p = = ‘\0′ )

return;

inverse( p+1 );

printf( “%c”, *p );

}

int main(int argc, char *argv[])

{

inverse(“abc\0″);

return 0;

}

借签了楼上的“递规反向输出”

#include

void test(FILE *fread, FILE *fwrite)

{ char buf[1024] = {0};

if (!fgets(buf, sizeof(buf), fread))

return;

test( fread, fwrite );

fputs(buf, fwrite);

}

int main(int argc, char *argv[])

{ FILE *fr = NULL;

FILE *fw = NULL;

fr = fopen(“data”, “rb”);

fw = fopen(“dataout”, “wb”);

test(fr, fw);

fclose(fr);

fclose(fw);

return 0;

}

在对齐为4的情况下

struct BBB

{ long num;

char *name;

short int data;

char ha;

short ba[5];

}*p;

p=0×1000000;

p+0×200=____;

(Ulong)p+0×200=____;

(char*)p+0×200=____;

解答:假设在32位CPU上,

sizeof(long) = 4 bytes

sizeof(char *) = 4 bytes

sizeof(short int) = sizeof(short) = 2 bytes

sizeof(char) = 1 bytes

由于是4字节对齐,

sizeof(struct BBB) = sizeof(*p)

= 4 + 4 + 2 + 1 + 1/*补齐*/ + 2*5 + 2/*补齐*/ = 24 bytes (经Dev-C++验证)

p=0×1000000;

p+0×200=____;

= 0×1000000 + 0×200*24

(Ulong)p+0×200=____;

= 0×1000000 + 0×200

(char*)p+0×200=____;

= 0×1000000 + 0×200*4

你可以参考一下指针运算的细节

篇2:c经典笔试题

有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中.

#include

#include

int main(int argc,char* argv)

{

FILE* fp;

int i,j,k,num,NUM;

char c[50],t,ch;

if((fp=fopen(“A”,“r”))==NULL)

/*can be replaced by open

* int fd=open(“A”,O_RDONLY|O_CREAT);*/

{

printf(“fileA cannot be opened\n”);

exit(0);

}

printf(“\nA contents are:\n”);

for(i=0;(ch=fgetc(fp))!=EOF;i++)/*一个字符一个字符读*/

{

c[i]=ch;

putchar(c[i]);

}

num=i+1;

fclose(fp);

if((fp=fopen(“B”,“r”))==NULL)

{

printf(“fileB cannot be opened\n”);

exit(0);

}

printf(“\nB contents are :\n”);

for(i=0;(ch=fgetc(fp))!=EOF;i++)

{

c[num+i]=ch;

putchar(c[num+i]);

}

fclose(fp);

NUM=num+i+1;

for(k=0;k

{

for(j=0;j

{

if(c[j]>c[j+1])

{

t=c[j];

c[j]=c[j+1];

c[j+1]=t;

}

}

}

printf(“\nC fileis:\n”);

fp=fopen(“C”,“w”);

for(i=0;i

{

putc(c[i],fp);/*将字符一个个写入文件中*/

putchar(c[i]);/*一个个输出字符*/

}

fclose(fp);

return 1;

}

篇3:c经典笔试题

有一浮点型数组A,用C语言写一函数实现对浮点数组A进行降序排序,并输出结果,要求要以数组A作为函数的入口.(建议用冒泡排序法)

#include

#include

void BubbleSort(int arr, int n)

{

int i,j;

int exchange = 1;//交换标志,提高算法效率;

int temp;

for(i=0;i

{

exchange=0;//本趟排序开始前,交换标志应为假

for(j=0;j

{

if(arr[j+1] >arr[j])

{

temp=arr[j+1];

arr[j+1]=arr[j];

arr[j]=temp;

exchange=1; //发生了交换,故将交换标志置为真

}

}

if(!exchange) //本趟排序未发生交换,提前终止算法

return;

}

}

int main(int argc,char* argv)

{

int arr[5]={1,4,2,6,5};

int i;

BubbleSort(arr, 5);

printf(“after sort,arr is :\n”);

for(i=0;i<5;i++)

{

printf(“%3d”,arr[i]);

}

return 1;

}

篇4:c经典笔试题

写出二分查找的代码:

Int binary_search(int* arr,int key,int size)

{

Intmid;

Intlow=0;

Int high=size-1;

While(low<=high)

{

Mid=(low+high)/2;

If(arr[mid]>key)

High=mid-1;

ElseIf(arr[mid]

Low=mid+1;

Else

Return mid;

}

Return -1;

}

请编写一个C 函数,该函数在一个字符串中找到可能的最长的子字符串,该字符串是由同一字符组成的。

#include

#include

#include

int ChildString(char*p)

{

char* q=p;

int stringlen=0, i=0,j=1,len=0,maxlen=1;

//stringlen=strlen(p);

while(*q!='\0') //不能用strlen,求得长stringlen

{

stringlen++;

q++;

}

while( i< stringlen)

{

if(*(p+i)==*(p+j)&&j< stringlen)

{

len++; //统计子串长度

i++;

j++;

}

else

{

if(len>=maxlen) //统计最大子串长度

{

maxlen=len+1;

len=0;

}

else

len=0;

i++;

j++;

}

}

return maxlen;

}

int main(int argc,char* argv)

{

char arr[11];

int len;

printf(“please input chararr(10):\n”);

scanf(“%s”,arr);

len=ChildString(arr);

printf(“the len of childarr is:%d\n”,len);

return 1;

}

篇5:C/C++内存的笔试题

C/C++有关内存的笔试题

void GetMemory(char *p)

{

p = (char *)malloc(100);

}

void Test(void)

{

char *str = NULL;

GetMemory(str);

strcpy(str, “hello world”);

printf(str);

}

请问运行Test 函数会有什么样的结果?

答:程序崩溃,

因为GetMemory 并不能传递动态内存,Test 函数中的 str 一直都是 NULL。

strcpy(str, “hello world”);将使程序崩溃。

char *GetMemory(void)

{

char p[] = “hello world”;

return p;

}

void Test(void)

{

char *str = NULL;

str = GetMemory;

printf(str);

}

请问运行Test 函数会有什么样的'结果?

答:可能是乱码。

因为GetMemory 返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知,

void GetMemory2(char **p, int num)

{

*p = (char *)malloc(num);

}

void Test(void)

{

char *str = NULL;

GetMemory(&str, 100);

strcpy(str, “hello”);

printf(str);

}

请问运行Test 函数会有什么样的结果?

答:(1)能够输出hello;(2)内存泄漏

void Test(void)

{

char *str = (char *) malloc(100);

strcpy(str, “hello”);

free(str);

if(str != NULL)

{

strcpy(str, “world”);

printf(str);

}

}

请问运行Test 函数会有什么样的结果?

答:篡改动态内存区的内容,后果难以预料,非常危险。

因为free(str);之后,str 成为野指针,if(str != NULL)语句不起作用。

篇6:c指针笔试题

1. 变量的指针,其含义是指该变量的_________.

a)值 b)地址

c)名 d)一个标志

2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____. a)a,point,*&a b)&*a,&a,*point

c)*&point,*point,&a d)&a,&*point ,point

3.若有说明;int *p,m=5,n;以下正确的程序段的是________.

a)p=&n; b)p=&n;

scanf(“%d”,&p); scanf(“%d”,*p);

c)scanf(“%d”,&n); d)p=&n;

*p=n; *p=m;

4. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是________.

main

{

int *p,*q,a,b;

p=&a;

printf(“input a:”);

scanf(“%d”,*p);

……

}

a)*p表示的是指针变量p的地址

b)*p表示的是变量a的值,而不是变量a的地址

c)*p表示的是指针变量p的值

d)*p只能用来说明p是一个指针变量

5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是________.

void print_value(int )

{ printf(“%d\n”,++);}

a)23 b)24 c)25 d)26

6.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是

A) *p=&a; scanf(“%ld”,p);

B) p=(long *)malloc(8); scanf(“%ld”,p);

C) scanf(“%ld”,p=&a);

D) scanf(“%ld”,&a);

7.有以下程序

#include

main

{ int m=1,n=2,*p=&m,*q=&n,*r;

r=p;p=q;q=r;

printf(“%d,%d,%d,%d\n”,m,n,*p,*q); }

程序运行后的输出结果是

A)1,2,1,2

C)2,1,2,1

篇7:C编程笔试题

一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)

提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为:

if ( n == 0 )

if ( n != 0 )

以此类推。

请写出 BOOL flag 与“零值”比较的 if 语句:

请写出 float x 与“零值”比较的 if 语句:

请写出 char *p 与“零值”比较的 if 语句:

二、以下为Windows NT下的32位C 程序,请计算sizeof的值(10分)

char str = “Hello” ;

char *p = str ;

int n = 10;

请计算

sizeof (str ) =

sizeof ( p ) =

sizeof ( n ) =

void Func ( char str[100])

{

请计算

sizeof( str ) =

}

void *p = malloc( 100 );

请计算

sizeof ( p ) =

篇8:c指针笔试题

1. 有以下程序

main { int a=1, b=3, c=5; int *p1=&a, *p2=&b, *p=&c; *p =*p1*(*p2); printf(“%d\n”,c); }

执行后的输出结果是

A)1

2. 有以下程序

main

{ int a,k=4,m=4,*p1=&k,*p2=&m;

a=p1==&m;

printf(“%d\n”,a);

}

程序运行后的输出结果是

A)4

B)1 C)0 D)运行时出错,无定值 B)2 C)3 D)4 B)1,2,2,1 D)2,1,1,2

3. 在16位编译系统上,若有定义int a={10,20,30}, *p=a;,当执行p++;后,下列说法错误的是

A)p向高地址移了一个字节

C)p向高地址移了两个字节

4.有以下程序段

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;

b=p[5];

b中的值是

A)5 B)6 C)8 D)9

5.若有以下定义,则对a数组元素的正确引用是_________.

int a[5],*p=a;

a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)

6.若有以下定义,则p+5表示_______.

int a[10],*p=a;

a)元素a[5]的地址 b)元素a[5]的值

c)元素a[6]的地址 d)元素a[6]的值

7.设已有定义: int a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是

A) for(p=a;a<(p+10);a++);

B) for(p=a;p<(a+10);p++);

C) for(p=a,a=a+10;p

D) for(p=a;a

篇9:c指针笔试题

1.有以下程序段

#include

int main

{ int x = {10, 20, 30};

int *px = x;

printf(“%d,”, ++*px); printf(“%d,”, *px);

px = x;

printf(“%d,”, (*px)++); printf(“%d,”, *px);

px = x;

printf(“%d,”, *px++); printf(“%d,”, *px);

px = x;

printf(“%d,”, *++px); printf(“%d\n”, *px);

return 0; B)p向高地址移了一个存储单元 D)p与a+1等价

}

程序运行后的输出结果是( )

A)11,11,11,12,12,20,20,20 B)20,10,11,10,11,10,11,10

C)11,11,11,12,12,13,20,20 D)20,10,11,20,11,12,20,20

2.设有如下定义:

int arr={6,7,8,9,10};

int *ptr;

ptr=arr;

*(ptr+2)+=2;

printf (“%d,%d\n”,*ptr,*(ptr+2));

则程序段的输出结果为

A)8,10 B)6,8 C)7,9 D)6,10

3.若有定义:int a={2,4,6,8,10,12},*p=a;则*(p+1)的值是______. *(a+5)的值是_________.

4.若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是______.

A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p[0]+2)

5.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为______. a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j

6.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____. *(*(a+1)+0)的值是________.

7.有以下定义

char a[10],*b=a;

不能给数组a输入字符串的语句是

A)gets(a) B)gets(a[0]) C)gets(&a[0]); D)gets(b);

8.下面程序段的运行结果是_________.

char *s=“abcde”;

s+=2;printf(“%d”,s);

a)cde b)字符'c' c)字符'c'的地址 d)无确定的输出结果

9.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是

A) char s[10]=“abcdefg”; B) char t=“abcdefg”,*s=t;

C) char s[10];s=“abcdefg”; D) char s[10];strcpy(s,“abcdefg”);

10.设已有定义: char *st=“how are you”; 下列程序段中正确的是

A) char a[11], *p; strcpy(p=a+1,&st[4]);

B) char a[11]; strcpy(++a, st);

C) char a[11]; strcpy(a, st);

D) char a, *p; strcpy(p=&a[1],st+2);

篇10:C编程笔试题

简答题(25分)

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

2、#include 和 #include “filename.h” 有什么区别?

3、const 有什么用途?(请至少说明两种)

4、在C 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?

5、请简述以下两个for循环的优缺点

// 第一个

for (i=0; i

{

if (condition)

DoSomething;

else

DoOtherthing;

}

// 第二个

if (condition)

{

for (i=0; i

DoSomething;

}

else

{

for (i=0; i

DoOtherthing;

}

优点:

缺点:

优点:

缺点:

篇11:C编程笔试题

有关内存的思考题(20分)

void GetMemory(char *p)

{

p = (char *)malloc(100);

}

void Test(void)

{

char *str = NULL;

GetMemory(str);

strcpy(str, “hello world”);

printf(str);

}

请问运行Test函数会有什么样的结果?

答:

char *GetMemory(void)

{

char p = “hello world”;

return p;

}

void Test(void)

{

char *str = NULL;

str = GetMemory;

printf(str);

}

请问运行Test函数会有什么样的结果?

答:

Void GetMemory2(char p, int num)

{

*p = (char *)malloc(num);

}

void Test(void)

{

char *str = NULL;

GetMemory(&str, 100);

strcpy(str, “hello”);

printf(str);

}

请问运行Test函数会有什么样的结果?

答:

void Test(void)

{

char *str = (char *) malloc(100);

strcpy(str, “hello”);

free(str);

if(str != NULL)

{

strcpy(str, “world”);

printf(str);

}

}

请问运行Test函数会有什么样的结果?

篇12:C字符串笔试题

一、void * memcpy( void* dest, const void* src, size_t count )

表头文件: #include

定义函数: void *memcpy(void *dest, const void *src, size_t n)

函数说明:

memcpy用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy不同的是,memcpy会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束。

返回值: 返回指向dest的指针

附加说明: 指针src和dest所指的内存区域不可重叠

void * memcpy( void* dest, const void* src, size_t count )

{

assert((strDest!=NULL) && (strSrc !=NULL));

char* d = (char*)dest;

const char* s = (const char*)src;

while( count-->0 )

*d++ = *s++

return dest ;

}

注解:

1、size_t 就是unsigned int

2、

函数名: assert(断言)

功 能: 测试一个条件并可能使程序终止

用 法: void assert(int expression);

assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:

#include

void assert( int expression );

assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。

二、char *strcpy(char *strDest, const char *strSrc)

字符串复制函数

char *strcpy(char *strDest, const char *strSrc);

{

assert((strDest!=NULL) && (strSrc !=NULL)); // 2分

char *address = strDest; // 2分

while( (*strDest++ = * strSrc++) != ‘\0’ ); // 2分

return address ; // 2分

}

const char *strSrc中的const是指字符串内容为const,而不是说strSrc是const的,如果要指定strSrc是const,应该写成 char * const strSrc 。

爱立信的笔试题

intel笔试题(技术类)

复旦的笔试题

上海万国商业网笔试题

联想面试笔试题

java基础测试题带答案

Google笔试题

腾讯实习生笔试经验谈

笔试题

阿里 社招 面试

C/C++内存的笔试题
《C/C++内存的笔试题.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【C/C++内存的笔试题(整理12篇)】相关文章:

腾讯暑期实习笔试面试经验2024-02-27

华为财经笔试经验2023-03-20

趋势科技笔试经历2022-04-30

百度校园招聘笔试经验(产品运营师)2022-05-06

腾讯实习生求职笔试面试经历2022-07-26

阿里实习转正面试总结2022-06-16

文秘面试的笔试试题2023-11-01

高级Java笔试题2023-11-05

计算机基础试题及答案2023-09-04

计算机基础试题2023-05-11